杭州网易行 周三接到网易电话,说上次电话面试通过了,让我周末过去杭州总部面试,于是周末就去了趟杭州。这篇文章是关于网易这次面试的相关内容和自己面试后的感想,写出来和大家分享一下。 面试过程 电话面试 lz大致还原一下当时的情景,下面直接进入正题。 HR(以下以Q代替):你学习iOS多长时间了? lz(下面以A代替):十个月的样子。 Q:你了解MRC和ARC吗? A:对他们都有一定的了解,但用的更多的是ARC,当然也知道MRC的规则及用法,也有做过相关Demo,由于开始学习iOS的时候ARC已经成为一种趋势,所以用的更多的是ARC。 Q:好的。你熟悉autorelease吗?谈谈它和ARC的区别是什么? A:autorelease是将对象添加到NSAutoReleasePool里面,然后在调用[pool drain]方法后,所有在释放池里面的对象均被release。而ARC看起来的效果是一样的,但是实质是不一样的,ARC是系统在适当时候来释放一个对象的。 Q:嗯。你了解NSObject和NSObject Protocol吗?他们有什么区别,为什么要有NSobject Protocol? A:NSObject几乎是iOS开发过程中所有类的根类,NSObject协议是为了方便一些并没有继承自NSObject的自定义类,来实现NSObject的一些方法,因为二者的方法大部分是一样的。 Q:那你知道哪些类是不继承自NSObject的?以及这样做的原因是什么? A:据我目前见到的情况来看,貌似没有,但肯定有这种类。至于这样做的原因我不太清楚。(面试完后google了一下,大概了解了相关情况) Q:你了解运行时吗? A:了解一点点。 Q:嗯,没事,那你说说你了解的。 A:运行时就是在运行时来进行判断,比如内省。像respondeToXXX这些方法应该都是运行时才执行的。我知道的大概也就这么多了。 Q:你用过哪些开源库? A:暑假做一个游戏客户端的时候用过CocoaAsyncSocket。 Q:你有仔细看过它的源码吗?你认为它的哪些方面可以优化呢? A:当时项目比较紧,所以直接拿过来就用了,就看了一些自己需要用到的方法的实现。优化的话,暂时还没有想过。 Q:那如果你现在再去看这个开源库的时候你觉得你会学到哪些东西? A:这个库是分TCP和UDP的,当时我们用的是TCP,这次如果再去看的话,应该对UDP也会有一定的了解和学习,同时也可以考虑一些可以优化的地方。 Q:对于其他的比较经典的关于网络方面的开源库还用过哪些? A:AFNetwork,ASIHttp。 Q:嗯,其他的开源库呢? A:用过那个在ios5,6下实现ios7扁平风格的控件的库,其他的都不记得名字了。 Q:你了解越狱吗?该怎么判断设备是否越狱? A:了解一点点。您说的是只用代码判断吗?代码的话我不太清楚。(面试后google了一下,大致思想是检测是否多出越狱的文件目录,网上现成的代码也有,随便一搜就能搞定) Q:了解copy和mutableCopy吗?谈谈二者的区别 A:了解。copy只是指针的复制,属于浅拷贝,mutableCopy是深拷贝。(之后他举了个例子,忘记了,反正就是NSString和NSMutableString的一些东西。如果你有疑问,可以看看我之前的文章—>OC内存管理学习) Q:怎么判断一个类是否遵循某个协议? A:可以用respondTo协议里的某个方法来实现。 Q:还有没有其他的方法呢? A:其他的应该有但是我不知道。因为我最常用的就是上面的这个方法。 Q:假如我有一个对象不想实现系统默认的方法,我能够做到吗? A:可以用分类(categrey)吧,(迟疑片刻后想想不对),应该不行。(面试之后,自己再想了下应该可以复写其父类方法就行,不知道对不对) Q:你用过GCD和NSOperation吗?它们常用的场景是什么?谈谈你的看法。 A:都用过。NSOperation是对GCD的封装,属于类级别的,GCD是底层的属于C级别的。GCD的效率可能会更高,因为基本上全是执行block。 Q:你平时用哪种方式呢? A:一般图片加载用的是GCD,而其他下载任务用的是NSOperation。 Q:GCD能够随时停止吗?NSOperation呢?如果能的话又是调用什么方法呢? A:GCD由于调用的是block,所以它一旦开始在执行完之前是不能停止或取消的。而Operation是可以的,通过KVO即可。当然如果要取消的话,我记得有个方法,名字貌似是close?(面完后查了下是cancel) (未完待续)