面南京试听科技笔试题:
解释性语言和编译型语言,各举两个例子
答:
解释型语言:源代码不能直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行;运行效率一般相对比较低,依赖解释器,跨平台性好。举例:Python、JavaScript、Shell、Ruby、MATLAB
编译型语言:只须编译一次就可以把源代码编译成机器语言,后面的执行无须重新编译,直接使用之前的编译结果就可以;因此其执行的效率比较高;但比较依赖编译器,因此跨平台性差一些。举例:OC,C++,C
一个32位系统的机器,其指针是多少字节的。
答:指针是多少位只要看地址总线的位数就行了。80386以后的机子都是32的数据总线。所以指针的位数就是4个字节了。
“N+1<N”在N是什么类型下成立
答:这个确实不知道。
软件测试有哪些类型,分别对应哪些项目。
答:软件测试可以分为黑盒测试和白盒测试,也可分为性能测试和功能测试。
单元测试:
集成测试:
系统测试:
验收测试:
回归测试:
程序在内存中运行时分为几个区,各自用途:
答:
全局区(静态区):存放全局变量和静态变量,与其他变量的生命周期不同,程序结束时会自动释放这块内容
文字常量区:常量字符串存放在这个位置,也就是常量池。程序结束时,系统自动释放这块区域
代码区:存放代码,app程序会拷贝到这里。
栈区:存放函数的参数值,局部变量的值。他的生命周期较短,进入作用域的时候分配占用内存,离开作用域的时候释放占用的内存。
堆区:一般是由人为控制这块区域的内存分配和释放。在C和C++中,堆内存如果忘记释放,可能导致可用内存越来越少,这就是内存泄漏。
引用和指针的区别:
答:引用是别名,指针是地址。
指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变。
从内存分配上看,程序为指针变量分配内存区域,而不为引用分配内存区域,因为引用声明时必须初始化,从而指向一个已经存在的对象。引用不能指向空值。
int retVal = UIApplicationMain(argc, argv, nil, nil);是什么意思
答:初始化UIApplication对象并为它设置代理,UIApplication对象是应用程序的象征,一个UIApplication对象就代表一个应用程序。 argc: 系统或者用户传入的参数个数;argv: 系统或者用户传入的实际参数
ios 保存一个变量到本地的两种方法:
答:iOS本地缓存数据的方式有五种:1.直接写文件方式,可以存储的对象有NSString、NSArray、NSDictionary、NSData、NSNumber,数据全部存放在一个属性列表文件(*.plist文件)中;2.NSUserDefaults(偏好设置),用来存储应用设置信息,文件放在perference目录下;3.归档操作(NSkeyedArchiver),不同于前面两种,它可以把自定义对象存放在文件中;4.coreData;5.FMDB(FMDB是iOS平台的SQLite数据库框架,FMDB以OC的方式封装了SQLite的C语言API)
实现一个委托的interface:
答:
import <Foundation/Foundation.h>
// 协议定义
@protocol SampleProtocolDelegate <NSObject>
@required
- (void) processCompleted;
@end
// 协议定义结束
@interface SampleProtocol : NSObject
{
// Delegate to respond back
id <SampleProtocolDelegate> _delegate;
}
@property (nonatomic,strong) id delegate;
-(void)startSampleProcess; // Instance method
@end
当A类中的某个方法执行到某处时,想在B类中执行某方法,需要如何做?
答:使用通知,在B类中注册通知,并绑定需要执行的方法,在A类的方法执行到特定地方时,发送通知。这时,B中的方法会被执行。
类方法创造的对象要不要release释放?
答:不需要 这个对象被放到自动释放池中
类方创建对象:好处:不用我们去管理内存,坏处:在类方法中创建的对象是autorelease的,我们并不知它什么时候回被释放掉,有可能会造成提前释放,提前释放如果再访问这个对象,就会野指针操作;
#import和#include的区别:
答:#import是导入Objective-C头文件的关键词,#include是导入C/C++头文件的关键词;
使用#include需要处理重复引用,#import能防止同一个文件被多次包含,则不需要处理重复引用;