如何面试 iOS 工程师

 

推荐序

私下和很多朋友交流过这个话题,大部分求职者认为,我能做基本的 iOS 开发工作,就达到公司的要求了,殊不知公司招聘员工,更希望的是这个人能够在关键时候能够发挥一般人做不到的能力。

这篇文章是来自微信读书的 bang ,我完全同意他的观点。除了他的这些面试方法外,我还认为做比说更重要,所以我更喜欢在面试的时候,拿出一张白纸,让求职者写一段富有逻辑性的代码,看看他的思维是否严谨,对于一些常见的数据结构和算法基础有了解。

作者介绍:bang,iOS 开发者,推特中文圈 / JSPatch作者,博客 http://cnbang.net , 目前就职于广州腾讯。

正文

参加了内部面委会的一个分享,结合我自己的方式,说说怎样面试一个普通的 iOS 工程师。

一般我倾向的考察分两个主要的部分,第一是在简历里提到的项目经历中找挖掘点,第二是基础知识考察。另外也会看情况做一些软实力的考察和性格特征的判断。

项目经历

如果顺利的话这第一步占的比例会很大,因为每个程序员都不会方方面面知识都熟悉,但至少他写在简历上的做过的项目是熟悉的,讲自己熟悉的东西容易让他进入状态,展示好的一面。这里主要考察两方面,一是有没有在某些点上有过深入研究。二是对项目整体了解如何。

深入研究

在中大型的公司里比较注重工程师有深入研究的能力,如果能把一个功能讲得很清晰是比较好的加分项,这里会问实现的思路,通过追问去了解候选人在这块深入的程度,从思路到方法,从上层 API 调用到框架流程再到底层实现。如果候选人在讲述时有一条逻辑主线,例如讲述业界普遍是怎么做的,自己在业界方案基础上做了什么改进,怎样做到更好,进一步改进的思路是怎样,这是最好的。如果还能把解决问题的方法归纳起来运用在其他地方,能举一反三,包装成通用解决方案,或者做开源贡献,就更好了。

一般会问候选人哪一个项目技术点最能体现自己的技术,然后不停追问技术细节,例如做了一个相册项目,觉得列表优化是最能体现技术点的,会问这里优化的思路是什么,怎样评估,遇到过什么困难,怎么解决的,如果用到图片缓存开源项目,说说它具体做了什么事,缓存策略是什么,从下载到显示的整个流程是怎样的,还有没有更好的方案,追问到一定程度后也会发散去问跟这个话题相关联的问题,例如如果有部分用户反馈图片显示不了,你会怎样排查问题,排查修复后怎样监控,就会过度到一些网络和运营监控方面的内容,也会顺便问到一些基础知识。

整体了解

问完自己职责范围内的功能技术点后,还会看看对项目里其他的实现有没有了解,特别是项目的大致架构和核心功能,最好能画出项目大致结构,看情况问问网络层和数据层是怎样实现的,为什么这样实现,项目最核心功能是怎样实现的,例如做读书的至少要知道项目里的排版引擎的大致实现方式,做 QQ 的要知道消息收发的机制,如果不知道,也可以说说如果自己实现会怎么做。这里主要看看有没有技术好奇心,会不会积极主动了解项目里已有的非职责范围内的技术点,主动和好学这两点是很重要的。

基础知识

如果项目经历里能问出大部分东西,这部分比例就会比较少了,这是比较好的情况,否则就按套路去多考察一些基础知识,包括 iOS 开发的基础和计算机基础,像内存 / 网络 / 存储 / 线程等,例如 ARC 是怎样做到自动管理内存的,跟 java/js 的垃圾回收的区别,网络 http 协议是怎样的,用过什么数据库框架,db 索引是什么,多线程开发要注意什么,跟 runloop 的关系是什么等等,这类问题在网上都有很多,就不多说了。数据结构和算法在笔试时会涉及,面试会比较少,如果问算法的话只会问问思路,一般我觉得如果项目经历方面不太好,才会考虑考考算法作为辅助判断。

软实力

一些通用能力像逻辑思维能力,沟通能力,自我驱动能力等都可以在上面那些问题的交流中表现出来,另外像团队协作能力、抗压能力和性格特征这些也会看情况考察一下,例如问问如果产品让你做个需求,你觉得不靠谱,会怎样做,设计让你做个很难实现的效果,你会怎样评估?或者问个低级问题,故意说个错误的答案,看看他的反应是怎样,是表现出嘲笑和攻击性,还是怀疑自己,还是细心求证。抗压能力的考察有些人比较喜欢,我是觉得面试还是轻松一点好。软实力方面的考察在一面会比较少,或者不会涉及,实际上这方面我也没太多经验,也在摸索中。

其他

作为程序员,如果有 GitHub 开源项目是最好的,直接可以看到代码风格,代码质量,处理 issue 和 PR 的方式,如果有技术博客也是很好的,可以提前看到平时的一些技术积累,省了很多事。但如果 GitHub 内容是培训班的那种仿写 APP,博客内容是摘抄文章什么的就是负分了。

以上是正常套路,若候选人有特殊经历或技能,例如牛 X 大学毕业,ACM 冠军,通读 linux 源码,php 源码贡献者之类,会另当别论,针对性进行面试,这不是唯一的标准。另外针对不同的工作年限也有不同的问法和要求,工作年限越高要求越高。

最后

其实面试就是想低成本找到合适在团队里一起工作的人,因为如果通过一起工作一段时间去判断是否合适成本太高。这种低成本的代价就是会误判,有些工程师是理论型,有些是实践型,面试的方式会对实践型的人不利,尽管他们如果招进来会是适合的人,而且人会在不同环境下会有不同的表现,只根据过去的经历去判断有时是不准确的。只能尽量采取一些措施去减少误判的概率,例如提高面试官的判断能力,或多几轮面试。一般如果不是急招,策略都会是宁杀错不放过,所以其实就算面试被否了,也不一定代表能力不行。

另外每个面试官可能都有自己摸索出来的一种判断方式,并随着面试经验的丰富不断改进,达到更准的判断概率,这只是我个人在目前有限的经验里的一点小总结,仅供参考。

李洪强经典面试案例33-如何面试 iOS 工程师的更多相关文章

  1. 李洪强经典面试题52-Block

    李洪强经典面试题52-Block   Block Block底层原理实现 首先我们来看四个函数 void test1() { int a = 10; void (^block)() = ^{ NSLo ...

  2. 李洪强经典面试题49-Objective-C

    李洪强经典面试题49-Objective-C 面试笔试都是必考语法知识的.请认真复习和深入研究OC. Objective-C 方法和选择器有何不同?(Difference between method ...

  3. 李洪强经典面试题152-Runtime

    李洪强经典面试题152-Runtime   Runtime Runtime是什么 Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码, ...

  4. 李洪强经典面试题145-Runloop

    李洪强经典面试题145-Runloop   Runloop 什么是 Runloop? 从字面上讲就是运行循环. 它内部就是do-while循环,在这个循环内部不断地处理各种任务. 一个线程对应一个Ru ...

  5. 李洪强经典面试题136-KVO-KVC

    李洪强经典面试题136-KVO-KVC   KVC-KVO KVC的底层实现? 当一个对象调用setValue方法时,方法内部会做以下操作: ①检查是否存在相应key的set方法,如果存在,就调用se ...

  6. 李洪强经典面试题53-Swift

    李洪强经典面试题53-Swift Swift 网上有很多Swift的语法题,但是Swift现在语法还未稳定,所以在这里暂时不贴出语法题,可以自行搜索. Swift和Objective-C的联系 Swi ...

  7. 李洪强经典面试题51-KVO-KVC

    李洪强经典面试题51-KVO-KVC   KVC-KVO KVC的底层实现? 当一个对象调用setValue方法时,方法内部会做以下操作: ①检查是否存在相应key的set方法,如果存在,就调用set ...

  8. 李洪强经典面试题31- FMDB

    n什么是FMDB pFMDB是iOS平台的SQLite数据库框架 pFMDB以OC的方式封装了SQLite的C语言API p nFMDB的优点 p使用起来更加面向对象,省去了很多麻烦.冗余的C语言代码 ...

  9. 李洪强经典面试题41-iOS选择题

    1.及时聊天app不会采用的网络传输方式是 DA UDP B TCP C Http D FTP 2.下列技术不属于多线程的是 AA Block B NSThread C NSOperation D G ...

随机推荐

  1. 汇编CMOS

    汇编 端口 端口 前面讲过,各种存储器都和CPU的地址线.数据线.控制线相连.CPU在操控它们的时候,把它们都当作内存来对待,把它们总的看做一个由若干存储单元组成的逻辑存储器,这个逻辑器我们称其为内存 ...

  2. 九度oj 题目1026:又一版 A+B

    题目描述: 输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m <10)进制数. 输入: 输入格式:测试输入包含若干测试用例.每个测试用例 ...

  3. python ConfigParser 学习

    [安装] ConfigParser 是解析配置文件的第三方库,需要安装 pip install ConfigParser   [介绍] ConfigParser 是用来读取配置文件(可以是.conf, ...

  4. [luoguP3317] [SDOI2014]重建(矩阵树定理)

    传送门 为了搞这个题又是学行列式,又是学基尔霍夫矩阵. 矩阵树定理 本题题解 无耻地直接发链接,反正我也是抄的题解.. #include <cstdio> #include <cma ...

  5. 将list分成等数量

    import java.util.ArrayList; import java.util.List; public class CollectionGroupUtil { public static ...

  6. 在windows下使用Cygwin模拟unix环境,并安装apt-cyg,svn等工具

    在windows下使用Cygwin模拟unix环境,并安装apt-cyg,svn等工具 一.Cygwin的安装 1. 下载Cygwin,这个可以到这里下载 ,至于使用32位的还是64位的版本可以根据自 ...

  7. 小机房的树(codevs 2370)

    题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上.有一天,他们想爬到一个节点上去搞基,但是作为两只虫子, ...

  8. mac 获得进程信息的方法

    NSProcessInfo可以获得当前进程的信息.获得所有活动进程信息可以尝试使用下面的方法. 进程的信息可以通过ps命令得到也可以通过sysctl方法得到. 但是我总是不能获取进程的流量信息,关于这 ...

  9. (2)Swing窗体基本设置

    import javax.swing.*; import javax.swing.plaf.FontUIResource; import java.awt.*; import java.util.En ...

  10. luogu P1260 工程规划

    题目描述 造一幢大楼是一项艰巨的工程,它是由n个子任务构成的,给它们分别编号1,2,…,n(5≤n≤1000).由于对一些任务的起始条件有着严格的限制,所以每个任务的起始时间T1,T2,…,Tn并不是 ...