开章
一天下午轩老板突然钉钉联系我,告诉我我们事业部要招一个iOS,要我准备一些笔试题和面试题。当时我的第一反应是:啥?iOS竟然还能有HC,不是iOS没人要了么?虽然我的心中有各色疑惑,但是我还是非常镇静的回复:好的。
不过其实这也不是我第一次当面试官了,遥想实习当年,由于公司只有我一个iOS,所以当公司需要招聘一个iOS的时候,就只能带上我来面试了,不过由于我当时还只是一个实习生,对自己的技术也极度的不自信,在那时候的面试完全属于打酱油的角色,我的作用大概就只有坐在jason和加成旁边,装出一副看起来很靠谱的样子,然后实际上心里慌得一批。
不过现在快两年过去了,虽然心里还是有点忐忑但是我还是比较有信心能做好这件事情。这次我们的招聘目的是事业部内新起一个项目,要求候选人可以从0开始hold住一个项目,所以我在笔试题中所出的也都是日常开发中用到的基础题,并没有偏门的理论知识。
经过一轮的面试之后,最终我们一致选择了一位很有灵性且适合的同学,同时我也想借这个机会站在面试官的角度上总结一下面试中的雷区以及后续的想法。
笔试
首先第一步是筛选简历,粗略算了一下简历的通过率是17.6%,再一次印证了大环境之差,不过相比较于隔壁的Java似乎又好过一些,要知道,Java只有8个HC但是在短短的两三天里收到了500多封的简历,“百里挑一”此言不虚啊。
但是即便是通过了这简历的这些“人中龙凤”,在笔试的过程中还是出现了一些让人意想不到的状况。有一位候选人拿到面试题之后只做了前几道选择题就跑了,我对天发誓,笔试都是一些诸如创建分支然后推远程之类的基础题目,难不成这位大佬还是“天之骄子”?头铁就是不愿做笔试题?不过还好,总共来了八九个人,只有这一个悄无声息的跑路。
不过笔试部分实在是寥寥可言,普通的公司也不会拿出太难的笔试题来为难候选者,只要打好自己平时的基础,面试之前大致复习一下诸如计算机网络,Git等基础知识就好。
总之,只要过来做完笔试题的同学,无论笔试题做的如何,我们也都会进行面试,进一步了解面试者。
面试
(一)交流
要表现的自信
大多数的面试都是自我介绍开始,从双方交流的初始就能感受到对方的紧张到极点的心态。有的同学刚张口说话就感觉汗如雨下,双手不自觉的放在嘴边(这是一种典型的不自信的表现),说话的时候磕磕巴巴战战兢兢。面试完成之后我去卫生间看了一下自己的脸庞,除了24岁长得像34岁之外也没什么凶神恶煞的地方啊,兄弟啊,不至于。反之,面试表现不错的同学,即使是略带紧张也是全程目视着面试官,抬头挺胸,器宇轩昂,啊....还略带一些小可爱。印象自然是不错。
要善于抓重点
有些人的自我介绍总是让我觉得很奇怪,我只是要招个iOS,上来自我介绍噼里啪啦说一堆家里几亩地,屋里几头猪,拜托大哥,我又不是想找个好人家嫁了。从面试官的角度来说,自我介绍其实是把主动权先交给面试者,让面试者可以先将自己的闪光点抛出一二,然后再之后的面试中可以深入的了解面试者。个人介绍的过程中比较不错的点我能想到的大概有:之前在哪家公司,工作的亮点内容(除了日常业务CRUD画画UI之类的工作),如何自学,喜欢看哪些书,最近在研究哪个方向(比如说FP,跨平台开发,OpenGL等等)。其实自我介绍的时候抓不住重点也不是什么致命的问题,要命的是在之后QA的时候还是抓不住重点,问他SDWebImage
是如何实现内存缓存的,他回答你他在上家公司的时候经常使用SDWebImage
,这个东西非常好用巴拉巴拉。听到这样的回答之后,emmmm.....好吧,打扰了。
(二)实用技术扎实
一般来说,面试过程中也会问一些通用工具问题,比如说,本地的改动还未形成一个commit
的颗粒度,这个时候我需要切换到其他的分支,要怎么处理?其他的都是废话,我只想听到git stash
,然而现实是残酷的,大多数人告诉我的是诸如新建一个分支然后commit
之类的奇技淫巧,对于工作了两三年的开发来说,git stash
都没有听说过,那就必然是减分的了。倘若变态一些的面试官,说不定动不动问你Git Hook
?cherry pick
?Git的设计哲学是什么?Git的原理?不过我觉得对于这个岗位来说,如果能说出后面的问题就已经是疯狂加分了。当然除了Git以外,诸如CI/CD也属于实用技术,但是最实用的肯定还是Git,一个每天都在打交道的工具,一个任何语言都需要的工具,一个学了之后稳赚不赔的技能,所以我们还在等什么?
其实也不光是对Git命令的熟悉,还有科学使用Git的姿势,比如什么时候建feature分支,什么时候合develop,曾有一个面试者告诉我只要开发完成一个功能就合入develop。emmm........那bugfix在develop上岂不是很容易冲突?如果遭遇功能砍掉或者暂缓那该怎么办?总之,科学的使用
Git Flow
也是我们开发人员必备的技能,网上有很多相关的教程不再赘述。
(三)做一个有灵性的人
好的面试者就会给人一种灵性的感觉,起码他能知道现在有哪些新的技术,有哪些趋势,什么Flutter
,RN
,组件化,热更新方案之类的。没有灵性的面试者的表现就是:啊?哦....好像看到过,不知道。“乃不知有汉,无论魏晋”!
有灵性的面试者就截然相反了,他总能抓住谈论问题的重点,即便是对于他不知道的问题,他也能根据已有的知识进行合理的推测,在交谈的过程中总能似有似无的体现出他对新技术的热诚以及高效的自学能力。
我们最后入职的那位同学就是我们觉得很有灵性的同学,从笔试开始就展现出了灵性,飞速做完题目交卷之后还顺手指出了考卷上的出题错误点,自我介绍的内容全部和岗位相关,且隐隐透露出了对这个行业的喜爱。
(四)不要对面试题死记硬背
面试到一个女生,面对经典的面试题的时候滔滔不绝,什么Runloop
,什么事件循环,什么派发机制,然而一旦细细追问或者切入实际场景的时候就缄口不言漏洞百出。这样面试官就会想,你是不是背题的,一旦觉得你是背题的,印象就很差很差了。我不太了解其他的面试官,但对我而言,我觉得面试者说“不知道”这是很正常的一件事,每个人都有自己知识面的短板,但是如果想要依靠背题来蒙骗面试官,除非是外行,否则一旦认为你是背题,基本就和offer
无缘了。
(五)归纳和总结能力
如果在面试中能发现面试者有很强的的归纳和总结能力,那么一定是疯狂加分的。比如面试中常常会问到MVC
和MVVM
的区别,能说出为ViewController
瘦身,将数据获取处理的逻辑放到ViewModel
,还有什么双向绑定之类的都是基本要求了。但是在这些架构的演进过程中,我们可以看到其实这些都是职责划分
、单一职责
和项目规模演进过程中的必然产物,这些都是在软件工程书籍中静静躺了几十年的知识,只是突然它站在我们面前,我们的神情却稍稍显得恍惚了。
(六)细节
说起来,面试真的跟找对象差不多,我们肯定都想跟帅哥美女做同事,颜值有加分作用是一件很正常的事情(我的领导会因为这个人简历上的照片看着不属于而毙掉这个人)。不过对于技术人员来说,核心的技术能力才是征服面试官的杀手锏,现在的面试几乎都会问源码,我也会问一些,但是我不会抛出一个我指定的框架,而是让面试者自己说阅读过哪些源码进而提问,这样一来不会出现问一些可能跟他业务无关的框架源码,二来面试难度,三来提问最熟悉的框架的实现细节也更能体现面试者对于学习的态度。
比如,八个面试者,几乎所有的面试者都告诉我阅读过最熟悉的框架是SDWebImage
,然后就开始讲框架的组成部分,但是有的面试者,一旦追问它是如何实现内存缓存的时候就哑了火,支支吾吾说不出个NSCache
,更不用说常见的LRU
算法以及这个算法的主要理念和实现思路。
细节,打败面试官。
(七)主动权
大家都知道,在感情生活中,一直主动的那一方会比较累。其实面试也是一样,面试官巴拉巴拉一直提问也是很累,大多数情况之下他都是主动的一方,但是他主动不是因为他想主动,是因为他是面试官他必须要主动。其实面试官丝毫不介意你来主动的展示自己,面试官看起来毫无表情,但实际上心理再说:
来啊,自己动
主动什么呢?你什么牛逼动什么啊,你要是精通动画,那就时不时扯点CoreAnimation
啊渲染优化什么的;你如果懂编译,那就找机会跟他扯什么编译优化,什么SIR
,什么递归下降
手撕Parser;你如果熟悉函数编程,就跟他扯什么Monad transformers
、引用透明、纯函数。勇于亮出自己的闪光点,这跟相亲的时候抛出几十本房产证没什么区别。
(八)更加宽广的路
大环境的使然,使得应用人才的招聘越来越严苛,很多初中级都发出了“iOS没人要”的呐喊,当然也有人说“高级人才”永远都缺,这两种声音不绝于耳,何处是归途?在我看来,所谓的“高级人才”其实也不是特指的“iOS”领域的高级,而是这些“高级人才”的CS素养和学习能力。随着未来中美对抗的加剧,必然会有CS领域的竞争,但同时也会有很多机遇,我们会希望永远只有iOS和安卓么?高贵的iOSer就只能在iOS的象牙塔下报团取暖期盼着iOS永远武运昌盛?当时代的浪潮来临的时候,iOS和安卓到底是热土还是囹圄?
不得而知。
只有持续的“刻意练习”,持续的理论学习,持续的高CS素养和行业前瞻才能让人有一丝心安吧。
最后
以上仅代表我作为面试官的思考,仅供参考和娱乐。
网友评论