闲着无聊投了网易,鬼使神差的过了笔试,性格测试,面试直接被虐,话不多说直接上题目: 文章结尾有总结。
C++(虚类),Java(接口),OC,Swift的继承机制区别?(较为简单)
答: 自己手写了一个类实现了多个继承,不同语言用不同的实现方法,然后比较了语言差别,C++可以多继承,java只支持单继承,不能多继承,只能多重继承,但是可以通过接口和内部类(抽象类,抽象方法,protect关键字)实现多继承(extends)。 面试官深入的问了一下顶级父类,C++与Swift都没有顶级父类,Java是Object、OC是NSObject。
Java实现的原理 多态性: 这样用父类的变量去引用不同的子类,在调用这个相同的方法print的时候得到的结果和表现形式就不一样了,这就是多态,相同的消息(也就是调用相同的方法)会有不同的结果。 Father father; father = new Son1(); father = new Son2(); father = new Son3; 多继承: public interface PetInterFace{};public class Son11 extends Son1 implements PetInterFace{}
是否了解iOS多线程?详细介绍? 回答: NSThread,NSOperation(重点,问的多),GCD,结合案例以及代码问。问的很有深度, ,B queue中依赖A queue, 结合闭包打印输出结果。以及三种多线程中获取主线程的方法,延时操作,死锁,并发,串行等问题,这里回答了,然后越来越深,后面就不会了问了,各种代码结合案例问,听都听不懂。
OC中的retain assign copy 的区别用法,问的超级详细,还有各种线程安全,其造成的野指针,循环引用,Crash问题等,问的超多,估计就是要把你问倒
Protocol delegate等的用法?较为简单
Category,Extension区别?(category可以添加属性,重写,但不能删除),较为简单。
runtime runloop问题,问的很多,很详细,例如,一个App中是否只有一个Runloop,App运行时RunLoop变换,AutoReleasePool等。这题准备较好,勉强达上来。
kvo kvc 概念问题以及详解?糊弄过去了。
设计模式有几种?
答:(MVC,MVVC,MVVM,ReactiveCocoa,KVO),说完后简单介绍了各种模式,本来想详细说ReactiveCocoa,但是面试官直接打断问了KVO,问的很细,只会基本概念,深入不会。然后完全不会了。
消息传输机制(不是是NSNotifictionCenter),完全不会,随便说了进程中的消息传输,(有名,无名,高级)管道,信号,信号量,共享内存,socket等方式,应付地答了一下,面试官估计对我失去信心了,开始对我笑。。。。然后我又s b的说了3次握手,4次挥手,又被鄙视一遍。
在UIView中的中心绘制帧,方法等,
答: 用CGRect绘制,较为简单。
绘制方法中的 self.bounds.size和self.frame.size比较,这是经常用的东西,但是突然想不起来了,胡乱说了 BEZIER曲线绘图。
聊到了AFN,和其他开源库(其他都没用过,自然而然不会),只会AFN,然后说SDWebImage,SwiftyJson,的原理,感觉被鄙视了,面试官觉得太简单,根本不需要用这些第三方库,自己直接写就可以了。无奈啊。。
问我有什么问的,说了自己开源的第三方库,以及库的维护等,Cocoapods等
循环引用问题,有了 retain 为什么还要引入 copy 两者区别。
答: 弱引用,根据业务逻辑判断obj2和obj1哪个会在代码中先释放,把先释放的p改为week。还有非week解决方案:例如,如果 “` @interface user:xxx @property(strong)id obj1; @property(strong)id obj2; end //然后逻辑总如果有:
self.obj1.p = self.obj2;
self.obj2.p = self.obj1;
//那么可以在user的dealloc方法里这么写
– (void)dealloc {
self.obj1.p=nil;
self.obj2.p=nil;
}
//那么其实不用week也是能解决的
“`
总共合起来面了1个多小时,然后就直接这样了。。。太难了。 大体就这么多,想到再补充,虽然很多问题都猜到并且复习过了,例如GCD,NSOperation等,自己也写过博客总结过,但是问的超级细,很多还是不会。
给后面兄弟的建议
基础知识超级重要! 基础知识超级重要! 基础知识超级重要!
同时感觉学校也很重要,面试的人里面 问了10+个人都是 南京大学+某某+计算机科学与技术 的,而且很多硕士,本科的一般都报测试岗位,硕士才报Java,android,算法岗位。 所以挂的自然而然。