知识点比较

iOS面试经验

2017-09-08  本文已影响0人  慭慭流觞

一、美团

对基础知识考察较多。

熟悉属性、类、属性的修饰符的含义,等等。

Learn More,See:https://item.m.jd.com/product/10273460812.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774

or https://item.m.jd.com/product/1107907589.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774

看完该书,对于基础知识的面试基本没啥难题。如果英文水平过硬,建议看英文版的,浅显易懂,能让你逐句阅读,细较每一句话每一个单词的含义。

美团的氛围很好,环境高大上,面试官和蔼可亲,善于分享。

二、京东

在多线程、内存管理方面考察较多。

See:https://item.m.jd.com/product/11290076347.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除外。

上一篇下一篇

猜你喜欢

热点阅读