【iOS】面试题
面试题这种东西,你看或者不看,它就在那里,不增不减。
面试官这种生物,你喜或者不喜,他就在那里,静候佳音。
【第一部分】 通用面试题
1、即时聊天App不会采用的网络传输方式是 D
1 | A UDP B TCP C HTTP D FTP |
2、下列技术不属于多线程的是 A
1 | A Block B NSThread C NSOperation D GCD |
3、线程和进程的区别不正确的是 B
1 | A 进程和线程都是由操作系统所体会的程序运行的基本单元 |
4、堆和栈的区别正确的是 D
1 | A 对于栈来讲,我们需要手工控制,容易产生memory leak |
5、下列回调机制的理解不正确的是 B
1 | A 目标动作对:当两个对象之间有⽐比较紧密的关系时,如视图控制器与其下的某个视图。 |
6、对于runloop的理解不正确的是 C
1 | A 每一个线程都有其对应的RunLoop |
7、UITableView中cell的复用是由几个数组实现的 B
1 | A 1 B 2 C 3 D 3或4 |
8、在线播放视频一般访问服务器中的( )类型文件 A
1 | A M3U8 B flv C MP4 D data |
9、点击Button响应链中最终得到响应的是 B
1 | A Window B Application C AppDelegate D UIViewController |
10、内存管理理解不正确的是 B
1 | A 程序A里有一段内存被成功申请完成之后,内存计数器就从0变为1 (这个过程是alloc); |
11、断点续传需要在请求头中添加的控制续传最重要的关键字是 A
1 | A range B length C type D size |
12、post传输的最大文件限制为 C
1 | A 1G B 2G C 4G D 8G |
13、MVC优点不正确的是 D
1 | A 低耦合性 |
【第二部分】 推荐面试题
1-10 C语言 & 计算机基础
1、请看下面一段代码
1 | static int a = 1; |
请问访问a,b,c 3种类型变量的效率从高到低依次是
1 | A. cba |
B
2、下面四种内部排序算法中哪一种在最差情况下时间复杂度最高?
1 | A. 快速排序 |
B
3、Shell中,将command1的输出作为command2的输入应该使用的命令是
1 | A. command1 && command2 |
D
4、下面的数据结构中不属于线性结构的是
1 | A. 栈 |
C
5、在一个二叉树上,第5层最多可以有的节点数是
1 | A. 2 |
C
6、在长度为n的线性表上进行顺序查找,在最糟糕的情况下需要的比较次数是
1 | A. n |
A
7、下面那项不是动态语言的特性
1 | A. 在运行时替换一个类 |
B
8、已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是
1 | A. cedba |
A
9、以下多线程对int型变量x的操作,哪个不需要进行同步:
1 | A. x=y |
D
10、多线程中栈与堆是公有的还是私有的
1 | A. 栈公有, 堆私有 |
C
11-20 Objective-C & Xcode
11、在Xcode中,需要编译混合Objective-C和C++的源码文件,需要将文件格式的后缀改为
1 | A. .c |
C
12、Objective-C声明一个类所要用到的编译指令是
1 | A. @interface SomeClass |
A
13、使用Xcode创建工程时,支持同时创建的版本管理库是
1 | A. Subversion |
C
14、下面那个方法不属于NSObject的内省(Introspection)方法
1 | A. init |
A
15、使用protocol时,声明一组可选择实现与否的函数,需要在声明的前一行加上:
1 | A. @required |
B
@required 是必须实现,它的代理必须实现协议中的 @required 方法。
如果不声明 @optional,默认 @required。
16、需要在手动管理内存分配和释放的Xcode项目中引入和编译用ARC风格编写的文件,需要在文件的Compiler Flags上添加参数:
1 | A. -shared |
C
MRC中引入ARC文件:
-fobjc-arc
ARC中引入MRC文件:
-fno-objc-arc
17、下面关于Objective-C内存管理的描述错误的是
1 | A. 当使用ARC来管理内存时,代码中不可以出现autorelease |
A
18、下面关于#import和#include的描述正确的是
1 | A. #import 是 #include 的替代指令,防止重复引用 |
A
19、下面的代码问题在哪?
1 | @implementation xxx |
答案是:
1 | A. 应该将var synthesize |
B
20、下面那个方法可以比较两个 NSString *str1, *str2 的异同
1 | A. if(str1 = str2) xxx ; |
B
21-30 iOS
21、下面哪个不属于对象数据序列化方法
1 | A. JSON |
D
22、在UIKit中,frame与bounds的区别是
1 | A. frame 是 bounds 的别名 |
C
23、Objective-C有私有方法吗?有私有变量吗?
1 | A. 有私有方法和私有变量 |
C
这里选 C 是有疑点的。
私有变量不用说了,在.m里面匿名声明的就是私有变量了。
私有方法则是值得推敲的。其实在.m里面不声明直接实现的方法,从效果上来讲,应该也能算是私有方法了,因为包括它的子类在内的其他类,都是无法访问该方法的。当然,称之为“隐藏方法”或许更好。
24、下面关于线程管理错误的是
1 | A. GCD所用的开销要比NSThread大 |
B
25、下面代码的作用是让doSomeThing函数每隔1秒被调用1次。
1 | NSTimer *myTimer = [NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(doSomething:) userInfo:nil repeats:YES]; |
请问哪里有问题?
1 | A. 没有将timer加入runloop |
A
26、UIViewController在显示过程中,各个方法的调用顺序是
1 | A. init -> viewDidLoad -> viewDidAppear -> viewDidUnload |
A
viewDidUnload 在iOS 5.0之后不再生效,类似的方法:
didReceiveMemoryWarning
// 接收到内存警告时调用官方文档:
- viewDidUnload
(iOS 6.0)
Called when the controller’s view is released from memory.Deprecation Statement
Views are no longer purged under low-memory conditions and so this method is never called.Declaration
OBJECTIVE-C- (void)viewDidUnload
Discussion
In iOS 5 and earlier, when a low-memory condition occurred and the current view controller’s views were not needed, the system could opt to call this method after the view controller’s view had been released. This method was your chance to perform any final cleanup. If your view controller stored separate references to the view or its subviews, you could use this method to release those references. You could also use this method to remove references to any objects that you created to support the view but that are no longer needed now that the view is gone. You would not use this method to release user data or any other information that cannot be easily recreated.
In iOS 6 and later, clearing references to views and other objects in your view controller is unnecessary.
At the time this method is called, the view property is nil.Availability
Available in iOS 3.0 and later.
Deprecated in iOS 6.0.
27、使用imageNamed方法创建UIImage对象时,与普通的init方法有什么区别?
1 | A. 没有区别,只是为了方便 |
C
28、一个类的delegate(代理)的作用不正确的是
1 | A. delegate中的函数在其他类中实现 |
D
29、在没有navigationController的情况下,要从一个ViewController切换到另一个ViewController应该
1 | A. [self.navigationController pushViewController:nextViewController animated:YES]; |
D
从iOS5.0开始,D项应该更新为
[self presentViewController:nextViewController animated:YES completion:nil];
presentModalViewController:animated: iOS 6.0已过期
官方文档:
- presentModalViewController:animated:
(iOS 6.0)
Presents a modal view managed by the given view controller to the user.Deprecation Statement
UsepresentViewController:animated:completion:
instead.
30、什么是key window?
1 | A. App中唯一的那个UIWindow对象 |
C
官方文档:
“The key window is the one that is designated to receive keyboard and other non-touch related events. Only one window at a time may be the key window.”
翻译过来就是说,keyWindow是指定的用来接收键盘以及非触摸类的消息,而且程序中每一个时刻只能有一个window是keyWindow。
参考:UIWindow的一点儿思考–一片枫叶
31-39 代码
31、求以下程序段的输出
1 | int test(int x, int y) { |
答案是 A
1 | A 331 B 330 C 431 D 430 |
32、求以下程序段的输出
1 | int func(int x) { |
答案是 D
1 | A 1 B 5 C 8 D 9 |
33、下面说法不正确的是 C
1 | A readwrite 是可读可写特性;需要生成getter方法和setter方法时 |
34、对于语句 NSString *obj = [[NSData alloc] init]; obj在编译时和运行时分别时什么类型的对象? A
1 | A 编译时是NSString的类型;运行时是NSData类型的对象 |
35、Objective-C中的线程下面描述不正确的是 B
1 | A 使用NSThread创建,使用GCD的dispatch |
36、下列不属于iOS存储方式的是 A
1 | A NSFileManager B 归档 C SQLite D CoreData |
37、IP Phone的原理是什么? C
1 | A IPV4 B DHCP C IPV6 D DNS |
38、类别的作用不正确的是 D
1 | A 将类的实现分散到多个不同文件或多个不同框架中。 |
39、对NSOperationQueue理解不正确的是 D
1 | A 存放NSOperation的集合类 |
声明
- 本文面试题收集自网络,解答依个人看法,如有偏颇,欢迎留言指正!
联系与捐赠
Mail:
echo bGVvZGF4aWFAZ21haWwuY29tCg== | base64 -D
GitHub: iTofu
如果你想对我的开发或是开源项目进行支持捐助,请扫描下方二维码,谢谢!👇