面南京试听科技笔试题:
解释性语言和编译型语言, 各举两个例子
答:
解释型语言: 源代码不能直接翻译成机器语言, 而是先翻译成中间代码, 再由解释器对中间代码进行解释运行; 运行效率一般相对比较低, 依赖解释器, 跨平台性好. 举例: 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 能防止同一个文件被多次包含, 则不需要处理重复引用;
来源: http://www.jianshu.com/p/cfbf4d35efb0