一、美团
对基础知识考察较多。
熟悉属性、类、属性的修饰符的含义,等等。
Learn More,See:https://item.m.jd.com/product/10273460812.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774
看完该书,对于基础知识的面试基本没啥难题。如果英文水平过硬,建议看英文版的,浅显易懂,能让你逐句阅读,细较每一句话每一个单词的含义。
美团的氛围很好,环境高大上,面试官和蔼可亲,善于分享。
二、京东
在多线程、内存管理方面考察较多。
三、今日头条
对基础知识考察较多。
熟悉OC常见基础知识。
头条面试官是最先启蒙我看哪本书的。感谢!
四、百度
对简历上所写知识要求掌握,考基础算法,发散思维。
五、人人
对基础控件的使用考察较多,如分享控件等。
六、58同城
更看重做的项目吧,还有对算法的了解。
简单附一下,遇到的面试题。
1.property各个修饰符的作用?
2.可变数组和不可变数组的区别?
https://juejin.cn/post/6844903735651647502
NSArray是一个静态数组,不能修改该数组中的元素,也不能添加元素。
NSMutableArray则对应的可修改、可添加元素。
NSArray是线程安全的;
NSMutableArray多线程的时候自己加锁,一般NSMutableArray内部用,然后copy出一个NSArray做为接口暴露给别人。
3.ARC的对象在什么时候释放?
dealloc的时候
4.UIView的block为什么不需要处理循环引用?
所以UIView的动画block不会造成循环引用的原因就是,这是个类方法,当前控制器不可能强引用一个类,所以循环无法形成。
https://www.zhihu.com/question/36358590
美团
5.引用计数器的实现原理
6.深拷贝和浅拷贝的区别及实现
https://juejin.cn/post/6844903735651647502
7.OC的方法调用是消息机制
http://www.cocoachina.com/ios/20141018/9960.html
首先,编译器将代码[obj makeText];转化为objc_msgSend(obj, @selector (makeText));,在objc_msgSend函数中。首先通过obj的isa指针找到obj对应的class。在Class中先去cache中通过SEL查找对应函数method(猜测cache中method列表是以SEL为key通过hash表来存储的,这样能提高函数查找速度),若cache中未找到。再去methodList中查找,若methodlist中未找到,则取superClass中查找。若能找到,则将method加入到cache中,以方便下次查找,并通过method中的函数指针跳转到对应的函数中去执行。
8.KVO实现原理
原类Person生成一个派生类NSKVONotifying_Person,在派生类里边重写setter方法,改变原来的属性值,将原类的isa指针指向派生类,观察者监听派生类里边值的改变。
http://www.jianshu.com/p/829864680648
9.翻转单链表
public ListNode reverseList(ListNode head) {
ListNode p = null;
ListNode q = head;
while (q != null) {
ListNode t = q.next;
q.next = p;
p = q;
q = t;
}
return p;
}
https://developer.51cto.com/art/202002/610190.htm
10.为什么xib或storyboard中定义的label属性是weak,而纯代码定义需要用strong
这是因为interface Builder实现时label等视图是故事板或xib文件中定义的,当应用程序启动时会根据故事板或xib文件描述创建label等视图对象,对象所有权在故事板或xib,它们对label等视图是强引用。由于对象所有权不是视图控制器,因此在视图控制器中使用它时不能定义为strong,只能定义为weak,但是对于纯代码,label的所有权属于视图控制器,所以要用strong
11.dispatch_get_current_queue()被废弃的原因
http://blog.csdn.net/yiyaaixuexi/article/details/17752925
但当target queue恰好是current queue时,同步阻塞会导致死锁。
12.给类别添加属性
http://www.cnblogs.com/cleven/p/5255419.html
美团
13.怎么将nil添加到数组中?
(1)@“nil”
(2)结构体,将结构体作为一个类的属性,添加进去
(3)添加 [NSNull null]
14.isKindOfClass 和 isMemberOfClass的区别
京东
15.怎么拷贝一个数组中的数组
16.JavaScriptCore是干什么的?
17.单例是否总是只会创建一个实例?
NO!多线程时可能会发生创建多个单例的情况。
18.有几种锁
(1)@synchronize{}
(2) NSLock
19.http://www.jianshu.com/p/841f60876180
20.类和结构体的区别
结构体不能添加方法,当然swift除外。