iOS面试经验

作者: 慭慭流觞 | 来源:发表于2017-09-08 16:20 被阅读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除外。

    相关文章

      网友评论

        本文标题:iOS面试经验

        本文链接:https://www.haomeiwen.com/subject/qqxnjxtx.html