终于完成了新一波的招聘工作。可以把这个事情做一个小结,这是我自己的思考,欢迎小伙伴们一起来交流。
关于招聘
面试的核心就是互相了解。招聘方了解面试者,面试者也了解用人单位。然后互相评判合适不合适。是个双向选择的过程。因此无论是招人还是应聘,应该是个互相平等的状态。面试了很多应聘者,大都是个求职的状态。所谓求职,就是我想要这个工作。到了“求”的状态,就显得没有自信,作为面试官也会想,这人到底行不行?有时候会刻意讨好面试官,其实完全没有必要。面试的最好策略,也是展示真实的自己,突出特长即可。 作为招聘方,正确的思路也应该是了解应聘者。因此问的问题,应该是怎样能更好的了解对方,而不是出难题考倒对方。对于一些表达不是很顺畅的面试者,也应该从旁边加以引导,让面试者能发挥真实的水平。而不是冷笑和鄙视。
考察的方向
所谓合适与否,对于用人单位来说,有很多方面的考量。每家的考量方式和方向都不太一样,作为一个中小型互联网团队,以中小公司招聘一个iOS中高级工程师为例,我觉得应该考察以下方面的内容:
- 技术水平(能不能干活?)
- 交流能力(能不能和大家一起愉快的干活?)
- 行业背景(以前是哪个行业,工作模式是怎么样?)
面试的技术考察
网络上流传着好多iOS的面试题。好多人来应聘的估计也看过这些题。这些题确实能考察一个iOS工程师的技术能力,题中包含了很多OC的理论知识点,已经很细节了。我一般不会问的这么细节,但是一些核心的问题还是会问到,我个人理解iOS的中高级的技术能力包括:
- Objective-C语言和iOS开发常见问题。
- 内存管理。ARC,循环引用等。
- 多线程。GCD,NSOperation,RunLoop。
- Runtime。
- AutoLayout,各种组件的使用。
- 设计/架构问题。
- 各种常见的设计模式。单例,通知等实际应用场景。
- MVC,MVVM,MVP 等架构和理解。
- 工程能力
- 性能优化。
- bug排查以及解决问题思路。
广度考察
上面的那个算是iOS技术面试的一个超级精简版的知识框架。上面的这些问题我基本都会问到。一般情况下,每个小项里面都会提一个问题。属于必问的问题。全部能回答流畅则表明这位小伙伴技术功底比较扎实。除了上面的核心问题,还会问各个方向的问题,诸如:
- 计算机基础
- 数据结构和算法
- 计算机网络,tcp/http/https等。
- 新技术。swift,响应式,iphonex适配等。
- Android以及跨平台一些技术,H5交互等。
- 模块化
- 热更新
这些问题一般结合应聘者做过什么来问。熟悉什么问什么。当然时间有限,都是挑着问。基本上这样下来,广度考察得到一定的保证。
深度考察
仅仅是面试广度,很多人可能狂刷面试题,看各种博文临时抱佛脚一下,也许能忽悠过去。实际的开发过程中,对中高级的要求,还是要对某方面的问题有比较深入的了解。上面精简版的知识框架中,一般会在聊的时候,挑一些方面深入的往下问。
我一般是这样的。比如聊设计模式中的单例。一般会问单例怎么写,大部分人都写的出来。比如 dispatch_once
的方式。然后继续问 dispatch_once
有什么好处。如果回答只执行一次,就问为什么不用 静态变量加判断的方式。如果回答可以保证线程安全,就问为何不用 @synchronized
来保证线程安全。然后继续问如果使用者用alloc
init
造对象怎么办? 然后继续深入提问,是否遇到过单例内存释放问题,是否遇到过单例初始化依赖问题等等。诸如 MVC,MVVM,MVP的问题,很多人在看了网络上的一些文章之后,大体能说出其中的区别,解决的问题,诸如瘦身ViewController。可以继续往下问,诸如MVVM的双向绑定机制,什么原理,一般如何实现,什么情况下不适合使用MVVM等。多线程的也有很多内容可以问的,可以从GCD的使用问到GCD的实现,可以问GCD和NSOperation的比较,可以问各种锁的使用,在往下问线程同步机制,生产者消费者模型等待。
找一两个自己比较熟悉应聘人员也许做过的点,往深度问。我个人的评测是,对中高级来说,总是要有一两个点是自己做的比较深入的。
人文考察
招聘技术人员,除了技术要达到一定水平外,还需要能够和团队小伙伴配合,沟通交流能够正常。可能需要看以下几个方面:
- 理解能力。
- 表达能力。
这方面的考察,一般不需要特别的提问题,在技术面试的过程中,基本上就可以评判交流水平如何,能否理解提出的问题,能否表达清楚自己的思路。
一般情况下,来面试中高级的都是有三五年工作经验了。因此在实际开发中可能会遇到什么问题,大体也是很清楚的。但依然不排除一些特例。比如总是在小公司开发混的,就要另外聊一下协作开发的各种事情。也要评估一下和组内小伙伴的气质符不符合。
这些考察比较主观。不过我遇到的大部分面试者都很表现不错。很多在开始的时候表现比较紧张,但是聊着聊着就能表现正常了。
面试官容易犯的错误
- 考察不够系统全面。和面试者聊天的时候,有时候会被带偏节奏。比如聊到一个点,然后互相发表观点,聊high了。导致最后只聊到这一个点。如果面试者正好对此问题有研究,可能给的评价是优,但未必能保证其他一些必要方面的掌握程度达到要求。因此为了降低招聘风险,上面的精简版框架的内容还是需要聊全。
- 仅问自己了解的。前面说了面试是为了互相了解。因此需要全面+深入相结合的方式才能更准确的评价。因为是要正确评估,问的点就应该是这个职位应该了解什么。和自己了解什么没有关系。虽然面试官没有答案,依然有概率知道应聘者是否对这个问题有了解。当然最好的情况是自己加强学习。
- 非重点内容的影响。我面试的时候,除了面试iOS开发的知识之外,还会问一些数据结构的内容。诸如排序,哈希,动态数据结构等。这些内容对于正常的iOS开发工作并没有太大的影响(对于更加优秀的设计肯定是用得上的)但是如果熟悉,那是个加分项。面试者如果回答不好,不应该成为否决应聘者的理由。一般是备选人员中作比较时可以做参考。
一些个人比较反感的应聘者
-
装逼。对于应聘技术岗位,一般装逼都不好使。因为一个技术点通常你会就是会,不会就是不会,并没有太大的可变幅度。专业性比较强,一往深入的说,就会知道大概是什么水平。技术上装逼很容易打自己的脸。曾经有个面试者,一直强调自己是团队里的技术leader,整个APP都是自己主导开发的,用了最流行的响应式开发框架。然后说如何如何好用,把响应式的优点说了一遍。我以为他做过响应式并且是高手。结果问了下,并没有实践过RAC或RxSwift。
-
强答。大部分情况下,面试官提问题自己心里是有一定答案的。所以自己不是很了解的内容,就不要强制回答。虽然说自己不了解不好,答错了也不好。但是通过语言忽悠强制回答就属于态度问题,基本上就会被pass掉。比如和一个面试者聊https,问到https如何保证安全性的?为啥就比http安全?结果这位哥们说通过MD5加密从而保证传输安全。然后一直在说MD5如何如何无法破解,并强调https就是这样保证安全的。并给了我一个确定的眼神。。。。
-
被反问。我提了一个问题,然后面试者带着嘲讽的语气反问我:你知道么?让人觉得好像在说,你自己都不知道还来考我?面试这个事情聊技术点是为了考察技术水平,并不是技术交流。我知道我也不能说呀。
中小公司招聘“内幕”
那我们今天就聊到这?
=你九成被pass了
。对于大公司批量招聘,可能要走各种流程,一波一波的来。但是对于中小公司招中高端的,如果过了,基本上会有下一个面试环节。至少会回去和上级商讨一下是否有下一步面试。大家人都在公司,不是特别忙的话不会让人再跑一趟来二面。大家都追求效率,招人干活也是有dead line的。你简单介绍一下吧
=给点时间我先看一下简历
。大部分情况下,面试者的简历只是在众多简历中初步筛选出来就让HR去约了。然后自己在干着活就突然说有来面试的。因此请给我半分钟时间让我再看一遍简历。简单介绍就不要从高中时代说起了,说最近的项目和大概经历,你说完我们的话题就开始了。