专栏名称: 待字闺中
深度分析大数据、深度学习、人工智能等技术,切中实际应用场景,为大家授业解惑。间或,也会介绍国内外相关领域有趣的面试题。
目录
相关文章推荐
程序猿  ·  Python正式发布年度大更新3.13.0: ... ·  2 天前  
程序员的那些事  ·  趣图:“AI 会取代你们的岗位啊!” ·  6 天前  
程序员的那些事  ·  裁掉数千人、把工作外包给 ... ·  6 天前  
程序员的那些事  ·  趣图:机器人也挺不容易的 ·  1 周前  
程序员小灰  ·  漫画:什么是智能体(Agent)? ·  6 天前  
51好读  ›  专栏  ›  待字闺中

工程师面试,需要考算法,写代码,为什么?

待字闺中  · 公众号  · 程序员  · 2017-03-29 11:37

正文

很多面试工程师职位的抱怨,为什么面试的时候老是要考什么算法呀,还要现场写代码?弄得大家天天去刷面试题,这些有什么用?


那么,今天就来聊聊这么面试后面这么做的原委。


一个公司招聘一个人,需要考察什么?通常,这也是像Google,Facebook,Microsoft,和很多新锐的高科技创业公司所提倡的和实践的几个考察点。


是否聪明?

是否出活?

是否主动?


有这些需要考察的点,那该如何考察?这时,就需要借助于考算法,写代码,和其他的一些手段。


考算法,就像很多人说的,知道了一个算法又能怎么样,可能工作中一辈子都用不上,就算能用上,很多的算法都有库和包实现了,拿来用就是了。确实是这样,所以考算法,并不是为了考,为了会,而是为了在探讨算法的过程中,考察和验证一个人是否聪明,是否基本功扎实,是否能够顺畅沟通,是否能够快速反应和学习。在讨论和交流的过程中,发现闪光点。能不能想出来,或是说出来,并不是考算法的要点。


比如,面试官可能会问一个候选人,是否知道一些排序算法,作为一个计算机背景的人,不管是在学校,还是在工作中,还是在平时的阅读中,还是平时的同事沟通中,都应该可能触及到。如果真的一点都不知道,聪明人都比较爱学习,这句话可就大打折扣了。然后,面试官可能会说到某个具体的排序算法,比如,快排,这个可能有些人真的不清楚,或是不记得了。其实,没有关系,好的面试官,会给你简单的解释,实际上,他可能在验证聪明人学得快理解力强。如果,在几分钟之内,能大致理解和讲清楚,感觉会是大大的好。再下来,面试官可能会问问时间复杂度的问题,不要说不记得,因为,聪明的候选人,可能马上快速的推理,如果真的理解了。平时,大家都会和不同的人交流,谁比较聪明,从沟通的过程中,是能够看出来一些的。


所以,考算法,真正的含义,是讨论算法,是找一个比较智慧的话题,让面试官和候选人能够互动起来,能够达到考察和验证聪明,当然,不排出其他考察点的目的。比如,是不是候选人会喜欢挑战,知难而上,而不是不会就退缩。比如,是不是喜欢学习新东西,是不是学习能力强,是不是主动性比较好,等等。


再看写代码,则是更多的为了考察和验证出活的能力。在很多的情况下,用什么语言写是没有要求的。这样,一是可以考察基本功,没有基本功,是不可能能快速出活的。二是可以考察平时的训练积累和经验,包括工作方式,编程风格,思考方法,等等。三是接受任务和完成任务的主动性,是不是愿意接受任何团队需要完成的任务。四是完成任务的速度和质量,也就是出活的速度和质量。这种写代码的测试,会是之后工作情景的一个小小的缩影。既然今后很多的工作是写代码,那么,面试时排练一下不是挺好吗。


再者,写代码,不一定要求很复杂,有难度的代码,也许,是一个简单的,几行就能实现的问题,比如,将一个英文句子中的所有的首字母变成大写。也许,是一个熟悉的算法的再实现,比如,实现一个二分查找。也许,是实现刚刚讨论过的算法。也许,是一个现实中遇到的实际问题中的一个子问题的代码实现。总之,写代码,除了看最后的结果,还要观察写代码的过程,和写完之后大家进行的有意思的讨论和沟通。


从写代码的过程和最后写出的代码,可以深入的考察一个人的基本素质,工作方式,和出活的条件,和出活的效率和质量。


至于主动性,或是责任心,有多方面和多种方式可以考察和验证,比如,聊过去的项目,在项目中的角色,完成的任务,完成的质量。在聊算法,写代码的过程中,也能够窥见一些,因为,一个不主动负责的人,是很难在完成具体任务时佯装出来的。


到此,基本明白了,考算法,写代码,其实,都只是面试中使用的考察手段,为了考察一个人是否聪明,是否出活,是否主动。聪明是高质量出活的关键因素之一,主动是出活的速度和质量的有力保障。