许多面试官掉进了坑里,对于候选人主要关注研究新进展、模型优化方法等等基础知识的考核,也关注了对于调参技巧等等技能考核。
但实际上公司最关注的是三个问题:
- 一是候选人是否能够解决当前的问题,这里面对于实际问题的理解和抽象能力尤其关键;
- 二是团队合作,候选人是否可以与其他同学形成合力,共同实现目标;
- 最后一个是候选人入职后会有绩效、晋升的需求,候选人成长潜力如何,是否能和团队一起共同成长。
这3个问题都是需要关注的,在某些方面会比机器学习的基础知识更重要。
下面我会回答这样几个问题:1、面试如何设计?2、问题解决能力如何考察?3、团队合作能力如何考察?4、成长潜力如何考察?5、候选人如何准备面试。
面试的设计
面试需要的是尽快完成对候选人的考察,从而判断是否录用候选人,对于面试官来说,需要考虑的是是否接纳候选人成为未来的伙伴。
需要注意的是,面试题不宜经常变动,用相同/相似的题目面试不同候选人,会看到不同候选人的差异,有助于快速做出正确的判断,也就是大家常说的结构化面试。
面试的环节一般分为几步,自我介绍、算法/项目问答、编程题/逻辑题、最后总结。
面试首先是看到候选人的优点,而不是寻找缺点,首先的自我介绍环节,对候选人进行全面的了解,同时让候选人放松下来,以便正常的发挥自己的水平。
算法/项目问答,一个投递岗位是算法工程师的同学,如果没有合理的理由,算法的基本理解是需要过关的,对于低级别候选人,要现有深度再有广度,许多面试官刨根问底,也是为了考察候选人的思考深度。
编程题/逻辑题,为什么算法工程师也会这么重视编程题和逻辑题呢?目前的许多候选人算法背景差距很大,隔行如隔山,面试官与候选人钻研领域有时候并非匹配,考察的复杂度就会大大增加,而编程题和逻辑题考察每个候选人都可以使用,面试官非常喜欢这种题目。
最后的环节建立在前面环节的基础上进行考察,如果在知识和技能上失分太多,这个环节可以忽略,如果前面的环节表现比较好,可以和候选人深入交流。交流对未来的想法,对自己的优缺点的认识,从而建立更完整的对候选人的认知,看看是否匹配公司需求,避免做出错误判断。
问题解决能力如何考察
对于问题解决能力的考察,关注的不是问题是否被候选人完整解决,而是得到答案的思考路径和方法如何。
具体关注三个能力:一是读题能力,是否能够正确定义问题;二是分析能力,识别问题中的关键点和难点,确定解题思路;三是应用能力,是否能将已有方法在具体情境中应用,真正掌握了先进技术。
一种方法是逻辑题或者编程题,首先关注候选人是否能够通过沟通和互动,对问题建立正确的理解。其次是看候选人面对问题的时候,是能够进入问题情境,就事论事的分析问题,一步步建立对问题理解,还是说急于把未知问题套到一个已知问题的框架内解决,或者是在思考不完整的情况下轻易下判断。考察的时候一定不要用题面清晰,解答复杂的成题,这样的题目候选人即使能解决也是背下来解题思路。
我曾经用过这样一道面试题,12个球,其中有一个坏球,坏球和好球重量不同,用一个电子秤把坏球找出来,至少需要多少次。
这是一道很老的IOI题目,有的同学学过天平称球,就想套用天平称球,发现不适用,还是跳不出来思考框架,这样的同学在面对实际问题的时候,也缺乏灵活的解决办法。
还有的同学着急去探索最优解法,而实际问题中大部分情况,我们只需要可行解,然后在可行解基础上不断优化即可。
这道题如果是忘记脑中的各种套路,从题目本身思考,得到可行解甚至次优解并不难,也可以排除一些不可能的情况,逼近最优解。如果能够对于问题的本质进行思考,从而给出解题的完整思路,因为考试时间问题无法做出最优解,也是可以获得高分的。
另一种方法是把同学拉到一个具体的算法情境中来看,就像是有个高赞回答提到的现场调试算法,但现场调试需要时间比较长,题目的设计也需要下功夫,还需要有个题库,避免漏题,公司里有专门的同学负责此事的话可以考虑。更通用的方法是对于同学应该比较熟悉的领域,构造一个实际场景,观察同学的思考角度和方法。
比如同学对图像识别比较熟悉,可以问问同学,一个每个类目目前只有10条数据,大约100个类目的家具分类问题如何解决比较好?回答的时候既包括模型选型,也包括标注任务设计,迁移学习理解,实际问题中样本不均衡、噪声样本等问题的解决。
学术界对于这些单一问题都有相关的解决方案,但是在具体情境下的决策能力,还是非常考验候选人这些方法融会贯通、灵活运用的能力。
合作能力如何考察
团队合作能力在面试中很难考察的很深入,最好是候选人实习一段时间,才能完整判断合作能力。面试过程中,主要关注候选人沟通中的一些特质体现。
第一,候选人在面试环节中是很自我的在思考、表达,还是尊重面试官、尊重题目。第二,候选人的沟通能力如何,是否能够快速理解面试官问题,有疑问的时候是否能用沟通解决疑问。第三,候选人表达能力如何,能够简明扼要的说清楚自己的观点,还是说表达缺乏重点,效率很低。
成长潜力如何
成长潜力体现在自控力、主动性、学习能力几个方面。
自控力和主动性的考察,主要是体现在简历考核中,候选人是能够主动探索自己希望学习的方向,还是被动的接受学校的培养计划。当自己确定了努力的方向,是否能够按照自己的期望进行努力,还是说很容易放弃。
学习能力体现在题目考察中,读题的时候理解题目速度如何,分析题目时是否有很强的逻辑性,能够快速找到问题的关键。
成长潜力的考核是贯穿面试整个过程的,面试后需要尽快进行总结,从各个细节中形成完整的判断,候选人是否成长潜力合格。
候选人如何准备面试
准备面试分为2个阶段,一个是长期积累,另一个是短期冲刺。
学习能力、学术能力、解题能力都不是短期能够突击的。
希望大家建立正确的学习观念,面试的目的是双方相互了解,进行匹配,通过一些短期手段,即时通过了面试,后续的工作也是很痛苦的。
长期能力培养
leetcode是很好的工具,大家不要简单的去满足题目通过了,而是是否能够独立分析题面,理解题意,解题的时候都有哪些方法解决,优缺点如何,解题方法选型依据如何。坚持这样的思考过程,做了几百道题,编程和解决问题的能力自然提升了。
读论文、实验复现也是如此,首先关注论文的核心贡献,思考论文面对的问题背景如何,你有什么想法,论文中设计了什么样的解决方案,为什么这么设计。主动性的培养可以尝试主动去参加比赛,以及各种活动,并不断改进方法提升成绩。
短期冲刺
冲刺的目的是完整的展示自己,避免面试的短时间无法利用好,展示自己的优点。首先是整理好简历以及相关内容的了解,说清楚自己的核心优点,简历内容中相关的支撑点都有哪些。
其次是对于自己的项目,看看相关资料,说清楚难点和自己的价值,也对于领域内其他人的相关工作可以简要说明。
最后是多演练,找同学模拟练习,表达熟练了,情境熟悉了,自然面试表现会好不少。