iOS面试经验
一、美团
对基础知识考察较多。
熟悉属性、类、属性的修饰符的含义,等等。
Learn More,See:https://item.m.jd.com/product/10273460812.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774
看完该书,对于基础知识的面试基本没啥难题。如果英文水平过硬,建议看英文版的,浅显易懂,能让你逐句阅读,细较每一句话每一个单词的含义。
美团的氛围很好,环境高大上,面试官和蔼可亲,善于分享。
二、京东
在多线程、内存管理方面考察较多。
三、今日头条
对基础知识考察较多。
熟悉OC常见基础知识。
头条面试官是最先启蒙我看哪本书的。感谢!
四、百度
对简历上所写知识要求掌握,考基础算法,发散思维。
五、人人
对基础控件的使用考察较多,如分享控件等。
六、58同城
更看重做的项目吧,还有对算法的了解。
58和比太公司问我:郑州是不是过着很安逸?👎我说就是很安逸👎。
比太公司老板问我你为什么能在郑州这样的城市呆三年都不换工作?他的意思是我没有斗志,安于现状,像计算机行业一年换一个工作是正常的,长期不换工作是缺乏积极进取精神的。
想想也是,所以,该跳就适当跳跳。😆。
总结:
Important
基础知识、对开源库的研究、出身(上家公司及工作地点)、上一份薪水
上一份薪水决定了您目前的最高涨幅。
做的项目多少其实关系不大,重点是从项目中掌握的知识点(关键技术点)的多少。
简单附一下,遇到的面试题。
1.property各个修饰符的作用?
2.可变数组和不可变数组的区别?
NSArray是一个静态数组,不能修改该数组中的元素,也不能添加元素。
NSMutableArray则对应的可修改、可添加元素。
NSArray是线程安全的;
NSMutableArray多线程的时候自己加锁,一般NSMutableArray内部用,然后copy出一个NSArray做为接口暴露给别人。
3.ARC的对象在什么时候释放?
dealloc的时候
4.UIView的block为什么不需要处理循环引用?
所以UIView的动画block不会造成循环引用的原因就是,这是个类方法,当前控制器不可能强引用一个类,所以循环无法形成。
https://www.zhihu.com/question/36358590
美团
5.引用计数器的实现原理
6.深拷贝和浅拷贝的区别及实现
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.翻转单链表
Node* ReverseList(Node* head)
{
Node *p,*q;
p=head->next;
while(p->next!=NULL)//在这个循环过程中p所指的元素一直是不变的
{
q=p->next;
p->next=q->next;
q->next=head->next;
head->next=q;
}
p->next=head;//相当于成环
head=p->next->next;//新head变为原head的next
p->next->next=NULL;//断掉环
return head;
}
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除外。