Welcome to Xcodexcode
无论对于招聘和应聘来讲,面试都是很重要的一个环节,特别对于开发者来讲,面试中的技术问题环节不只是企业对应聘者技能和积累的考察,也是一个开发者自我检验的好机会。对于iOS和Mac开发来讲,由于本事还算比较新,企业对于这方面的开发者需求也比较大,因此面试时的要求可能并非很高,通常能知道一些Cocoa和OC的基本知识也就认为能够了。可是对于一个但愿拥有技术力基础的企业的iOS或者Mac开发来讲,两到三个顶尖的熟练技术人员,带领一些还较为初级的开发者,共同完成项目应该是比较常见的构成。网络
Cocoa特别是CocoaTouch的开发,上手能够说十分容易,可是背后隐藏的细节和原理却很丰富。一方面对于基础不够熟练和清晰(好比从一个AppDelegate开始用代码构建ViewController,或者清晰地说明栈和堆之类的概念),另外一方面对于更进阶的开发知之甚少(好比多线程、网络异步处理或者Core开头的各类框架等等)。这些内容十分重要,可是可能如今通常的iOS开发者或多或少都在这些问题上存在薄弱。在这里我整理了一份面向于较高层级的iOS开发者的面试题目的问题清单,列出了十个应聘Leader级别的高级Cocoa/CocoaTouch开发工程师所应该掌握和理解的技术。这份列表没有提供标准答案,由于这些问题自己就没有标准答案。随每一个人对这些内容的认识的不一样和理解的差别,能够有不同的答案。可是最基本地,若是面对的是一名资深的Cocoa开发者,至少指望能获得的答案都是“接触过”,而且能结合本身的经验说个七七八八,达到互相能明白意图和方法的地步。可以在其中两三个领域有不错的看法和具体的阐述的话,那是更好。这种对于知识覆盖面和深度的考察很能真实反映出开发者的技术水平。若是清单里的很大部份内容都是彻底没接触过和没听过的话,那可能距离资深Cocoa开发这样一个阶段还尚有距离了。多线程
那么,面试开始。框架
- 你使用过Objective-C的运行时编程(Runtime Programming)么?若是使用过,你用它作了什么?你还能记得你所使用的相关的头文件或者某些方法的名称吗?
- 你实现过多线程的Core Data么?NSPersistentStoreCoordinator,NSManagedObjectContext和NSManagedObject中的哪些须要在线程中建立或者传递?你是用什么样的策略来实现的?
- Core开头的系列的内容。是否使用过CoreAnimation和CoreGraphics。UI框架和CA,CG框架的联系是什么?分别用CA和CG作过些什么动画或者图像上的内容。(有须要的话还能够涉及Quartz的一些内容)
- 是否使用过CoreText或者CoreImage等?若是使用过,请谈谈你使用CoreText或者CoreImage的体验。
- NSNotification和KVO的区别和用法是什么?何时应该使用通知,何时应该使用KVO,它们的实现上有什么区别吗?若是用protocol和delegate(或者delegate的Array)来实现相似的功能可能吗?若是可能,会有什么潜在的问题?若是不能,为何?(虽然protocol和delegate这种东西面试已经面烂了…)
- 你用过NSOperationQueue么?若是用过或者了解的话,你为何要使用NSOperationQueue,实现了什么?请描述它和GCD的区别和相似的地方(提示:能够从二者的实现机制和适用范围来描述)。
- 既然提到GCD,那么问一下在使用GCD以及block时要注意些什么?它们两是一回事儿么?block在ARC中和传统的MRC中的行为和用法有没有什么区别,须要注意些什么?
- 您是否作过异步的网络处理和通信方面的工做?若是有,能具体介绍一些实现策略么?
- 对于Objective-C,你认为它最大的优势和最大的不足是什么?对于不足之处,如今有没有可用的方法绕过这些不足来实现需求。若是能够的话,你有没有考虑或者实践太重新实现OC的一些功能,若是有,具体会如何作?
- 你实现过一个框架或者库以供别人使用么?若是有,请谈一谈构建框架或者库时候的经验;若是没有,请设想和设计框架的public的API,并指出大概须要如何作、须要注意一些什么方面,来使别人容易地使用你的框架。
以上10个问题对于初级或者刚接触iOS的开发者来讲,确定是过于难了。想要答出所有问题,可能须要至少两到三年的Cocoa/CocoaTouch开发经验。而若是想要有所见地的回答,可能须要更长的时间和经验。这些问题对于技术的积累会是一个很好的考察,由于若是没有对这些问题中涉及的内容有过实际使用和体会的话,是很难较完整和全面回答这些问题的。同时,由于这些问题并不像ABCD的客观题有标准答案,表现的是应聘者的理解,因此提问者也必须具有必要的材料或者知识,以应对可能的讨论。异步
在为团队寻求高级别的开发工程师或者Leader类的职位时,这些问题的回答会是对应聘者技术深度和广度的一个有效的考察。一样地,若是你的团队在Cocoa/CocoaTouch上比较偏重,可是技术团队的No.1的工程师却不能很好地回答这些问题的话,可能也会是须要反省技术层的一个信号。动画