为什么说算法工程师的面试是一门玄学?
原文链接:https://zhuanlan.zhihu.com/p/54497063
这里是 王喆的机器学习笔记 的第六篇文章,上篇文章里我们说到了算法工程师的面试技能雷达图,为了提高你的面试通过率,注重日常积累,不断扩大你各方面技能的深度和广度是必要的。
但经常参加面试的同学肯定有过这种感觉,即使面试过程非常顺畅,即使你本身是一个面霸,甚至god like,也经常有失手的时候。所以很多同学把面试归结为一门“玄学”。那么算法工程师的面试真的是一门玄学吗?有什么方法能让你在玄之又玄的面试中逆天改命吗?我来尝试给大家一个解答。
一个前提
首先这里有一个前提,敢称面试为玄学的人必然是一个技能面积广阔的人。你室友面了五家公司,有一家没有给offer,那可能是玄学导致的,你面了五家公司,一家都没给offer,那是你的实力太弱,请回家继续苦练本事,扩大你的技能雷达图。
三个原因
在你实力足够的前提下,通常是三个方面的原因导致你无法得到offer,这里面有主观的原因,也有客观的原因,甚至有不可抵抗力的因素,看看大家能不能找到属于你的那一条。
玄学之一:你可能不是面试官想一起工作的人。
站在面试官的角度,我经常把面试官给candidate通过的根本原因归结为一句话“找到了一个技术合格且愿意一起工作的人”。
所以面试通过要满足两个基本要求,一是“技术合格”,二是“愿意一起工作”二者缺一不可。所以在你技能合格的前提下,面试官愿不愿意与你一起工作就成了一个关键且略主观的问题。
但这看似草菅人命的标准其实是有背后的深刻逻辑的。往俗了说叫做看看candidate投不投缘,往大了说叫做符不符合公司文化,往实在了说,是要check你是不是能够顺利的与同事交流协作,得出合理的技术解决方案。
再进一步说,从工作和学习的区别的角度看,工作中知识的重要性其实是逐渐在降低的,软素质的要求逐渐在升高,你很有实力,但你传播实力的能力同样重要,就像Facebook总在强调的impact,Hulu在晋升senior时要考察的跨组合作,其实都在考察你的沟通能力。如果你在面试中连你未来的同事都聊不来,那你如何去跟别的组的同事协调呢?你甚至会跨office跟别的城市甚至别的国家的团队沟通,你又怎么能在复杂情况下一起解决问题?所以跟你的面试官聊得来是第一步。
为了验证你未来会不会是一个合适的同事,面试官通常会用抛出一些开放性的问题与你讨论,这个问题可能来自一些业界通用的问题,比如请你设计一个“千人千面”的电商主页商品类别排序模型;也许会来自一些生活中的算法,比如请你设计一个微信随机抢红包时生成红包金额的算法或机制;还有可能就来自面试官的工作实践,比如我在构建CTR模型的时候,遇到了严重的数据bias的问题,有没有什么办法解决。
这类题的特点很明显,非常开放和发散,开放到题目本身并不清楚。正是因为不清楚,所以面试官想要的效果是请你去主动提问题,我们一起去设计一个模型或系统来解决这个问题。在这样的前提下,有下面两类candidate可能会被我无情的拒掉:
- 面试过于被动,被面试官生硬的推着走。比如针对“微信抢红包”这个问题,有的面试者就一句话,“每次用一个随机数生成器生成一个红包金额不就行了”。如果是这样的话,你作为工程师的严谨性就荡然无存了。面试官为了让你继续下去,还要向你提问,比如你考虑过没有红包金额的总体分布问题?等等。而面试官期待的是这个问题被你推动着走下去。比如在问题不太清楚的前提下你应该反问面试官,每个红包的金额有没有上限和下限?需不需要考虑计算效率问题?我能否在红包产生时就预算好所有红包的金额等等。
- 思路受限,没有严谨性、开放性和创新性。在实际的工程问题中,解决一个问题不可能只有一个solution,解决一个问题的solution也不可能是一句话能说清楚的。比如我想跟你讨论一下如何设计一个电商主页商品类别排序模型。看到这个问题,很多人会直接说我想用DNN建一个CTR prediction模型来排序。这当然可以,但最好请你抛出这个解决方案的时候严谨地系统地想一想这个问题,顺着工程实现的思路去跟面试官讨论下去,比如1、都能得到哪些数据和feature;2、数据量有多大,数据延迟有多大;3、objective如何制定;4、结合具体业务,我能不能把商品类别当作一个item来对待,或者把类别内部的商品当作一个item来对待;5、我能否使用learning to rank /ctr prediction/多分类模型来解决这个问题;6、采用什么模型架构更适合这个问题。等等。。。在实际面试中,你可能无法想的这么细,但请体会这个意思,作为算法工程师,你应该足够严谨、开放、活跃、创新。
玄学之二:你的技能树无法精确满足当前position的要求
这个问题在社招的情况下尤为突出。很多资深的工程师说感觉面试表现不错,算法题最优解,设计题聊半天,面试官全程微笑,就是不发offer。。这样的情况绝大可能就是你的经验不能精确符合职位要求。
大家要注意“精确”二字。在有些情况下公司对面试者的工作经验的要求是精确到系统模块级别的。同样是计算广告算法工程师,我们团队可能就想招一个做yield optimization或者“预算控制”算法的,你说你搞CTR搞得风生水起,发了无数篇顶会,但你没搞过这个方向,不能即插即用,那只能对不起,作为同行为你点个赞,但offer没有。
前段时间还跟facebook一位前同事聊天,说他们就想招一个搞大规模并行机器学习平台的人。那你说你是做ranking的,你用tensorflow或者mxnet用的飞起,但没实现或者修改过源码,没自己搭建过parameter server,那也只能对不起,点赞奉上,offer没有。
针对这类问题有没有解决之道?其实是有几点大家可以注意的,在找工作之前还是要尽可能的多读几遍JD,找到那些跟一般JD有区别的,或者JD上明确写的“最好有XXX经验”,看与自己的经验是否匹配;有条件的candidate可以多跟猎头或者对方hr沟通一下,甚至能够找到内推渠道的同学可以找团队的成员了解一下内幕消息,都是很有必要的。
玄学之三:不可抵抗力
上篇文章作者说到参加过十几场面试,但还是有两个公司没有给offer,一个是eBay美国总部,一个是百度某算法部门。eBay挂掉的原因是当时英语实在太差了,设计题和开放题答得很差,没有跟面试官更有效的互动;百度的原因就是不可抵抗力,大约记得是15年底的时候,已经拿到口头offer了,但突然因为某事件全baidu的校招和社招offer都暂时停止了,这就属于不可抵抗力因素了。虽然后来跟baidu又有联系,但错过了那个时间节点,也就不考虑了。
可能不可抵抗力的因素在北京这个“寒冷”的冬天会更多一些,有没有解决之法?也是有的,大家没事多去北京西郊卧佛寺拜一拜可能会逆天改命。
好了,关于算法工程师面试的两篇文章就全讲完了,我想看过这篇文章之后,我们可以把算法工程师面试的技能框图全部补全了。
这里是 王喆的机器学习笔记 的第六篇文章,水平有限,特别是关于面试的内容仁者见仁,欢迎有建议的同学批评、吐槽、指正,也欢迎觉得内容有帮助的同学点赞鼓励。
最后祝看过这篇文章的同学都能认真准备,拿到满意的offer。