程序员面试:没有工作中用不到的算法
温馨提示:本文仅适用于不缺人才的大公司,中小型公司还是招聘到自己合适的、能干活的程序员为主。
最近面试了一个候选人,让他实现一个二叉树的题目,想了三五分钟没有思路。丢下一句“平常工作也用不上吧。”
看他工作经历不错,而且工作内容也比较match,于是决定再给他一次机会。让他实现一个相对简单的链表题目。然而,依然不能给出最优解法,而相对“较笨”的方法也无法实现。最终算法题目一个字母都没有敲出来。
程序员面试为什么会被问到一些工作中几乎不怎么用到的算法呢?
第一,算法考察的是一个人的抽象思维,即使考察的算法在工作中没有直接用到,但是算法的思想必然用到了,比如分治的思想,我比较喜欢考察候选人对于分治算法的实现以及时间复杂度的考察。无论是是工作还是生活中,分而治之的思想可谓是无处不在,而面试的时候连分治的思想都没有,怎么能够很好的完成日常工作呢?
第二,考察候选人逻辑思维的严密性,各种边界条件的检查,代码质量是否过关,这算是作为程序员基本功了,对于那些思维不严谨,经常写bug的程序员,一不小心写了一个bug带来的损失就是他几年甚至几十年的工资。
第三,考察不常见且有通用解法的题目,看候选人举一反三的能力。工作中不可能总是遇到一模一样的算法情况,但是其背后的解决思路都是一样的,只有掌握了背后的规律,才能顺利完成那些具有挑战性的项目。
第四,考察工作中不怎么用到的问题,但是候选人能够答出来,有两种情况,要么是准备得充分,要么是候选人比较聪明。当我们面对人生中一个重要的事件(面试)时,能够很好的花时间准备也是一种很好的品质,所以面试官一般并不排斥那些靠刷题的候选人。算法工程师这个岗位其实也挺依赖于工程师的创造性解决问题的能力,所以对于那种即使没准备也能解决问题的人可能会更偏爱一些,所以经常看到一些面试官在面试评价里面写到关于候选人聪明程度的评价。
第五,复杂的算法题目是一个筛选器,毕竟好公司的好岗位有限,怎么能够证明你比其他人更优秀呢?每天大量的人过来面试,每个人教育背景、工作经历都没有足够的区分度时,总得找一个具有区分度的指标来筛选候选人吧,那只能是提高算法面试的门槛,从而达到过滤候选人的目的。
第六,复杂一点的算法题目更能考察候选人的沟通能力,一个好的候选人在遇到不会做的题目时,能够通过与面试官沟通,逐渐明确并找到问题的答案,那些一上来就说“平常工作中不会用到这个算法”的人,显然存在沟通问题,甚至存在一些做事态度的问题。
第七,会做复杂的、工作中不用的算法题目,至少说明候选人对自己职业还有热情,还会花精力去研究复杂的、工作中不会使用到的算法。这种没有功利性的爱好已经非常难得,能够帮助他在以后的工作中走得更远。
请相信我,除了这句话,我所说的每一句话都是错的。
文章题图:Pixabay License