技术面试别扯智力题!
发布时间:2019-06-25 17:19来源: 网络整理出品 | 程序人生(ID:coder_life)
所谓“面试造火箭,入职拧螺丝”。
对于一名开发者而言,我相信很多开发者在求职面试过程中并不会有机会现场进行代码编写。甚至在一些公司里,技术面试已变成“测试智商”,比如谷歌微软等知名外企曾出过一些脑筋急转弯类的题目,还有是考查程序员一些很难的、但是在实际工作中用不上的算法题。
说实话,这样的“高逼格”“高标准”的技术面试真的能选择出优秀人才吗?
回答这个问题之前,我们先来看企业为什么要出这些复杂的智力题?因为仅仅用不到一小时是很难考察出面试者的水平,毕竟求职者的经历是可以美化和造假的。
通常来说,开发类技术面试中的问题大致可以分为 5 类,算法和数据结构只是其中一小类:
很多年前一些书籍和电影会把谷歌微软等外企的技术面试说得很“高大上”,比如问“井盖为什么是圆的”之类的问题,还有:
一辆校车能装下多少个高尔夫球?
如果让你清洗西雅图市所有的窗户,你会对此索价多少?
在一个重男轻女的国家里,每家每户都想生男孩。若一户人家生了一个女孩,便会再生一个,直到生下的是男孩为止。请问这个国家的男女比例是多少?
后来谷歌也承认这些臭名昭著的智力题对其招聘毫无用处,因为它无法判定面试者的真实能力。
虽然很少有求职者会被问脑筋急转弯类题目,但是在技术面试环节里,算法题目是绝对逃不掉的,例如谷歌、腾讯、百度、微软等都会问一些算法题目,例如:
一个长度为n的数组,其中只有一个数字出现了奇数次,其他均出现偶数次,问如何使用优秀的时空复杂度快速找到这个数字。
两棵二叉搜索树如何使用线性的时间复杂度,将它们合并成一棵二叉搜索树。
还有一些算法题目倾向于考察基础数据结构与算法:排序算法、搜索算法、图论、动态规划、基础技巧、数组与链表、树与图、堆、字符串等等。
面试官考察这些题目的优点是显而易见的:首先,考察面试者的基本功是否扎实,科班学生肯定学过这些知识点。如果你是一个半路转行的求职者或者刚刚参加完编程培训班,这些题目可能对你来说有一些难度。因此这批人很容易就被过滤掉。
不过现在很多求职者都会在面试前刷 LeetCode,这个网站上的题都是一些经典的公司用来面试应聘者的面试题,很多人通过刷这些题来应聘一些喜欢面试算法的大公司。
其实,最令面试者头痛是编码类问题,因为几乎所有的当面技术面试均要求面试者在白板上写出代码,而不是在面试者熟悉的 IDE 或是编辑器中写出。
很多面试者肯定抱怨过:“如果能在计算机上编程,我早就把它搞定了!”这是因为大家平常太依赖开发工作了,导致白板编程时脑里一片空白。
面试官考察白板编程,并不是让面试者一下子写出 0 Bug的代码,而是想看下求职者的思考过程和编码习惯是否清晰。
不仅是现场写代码,在视频面试时,有面试官也会让候选人在视频的那边进行编程。其实不管是白板编程还是 IDE 写代码知识考察求职者的一种方式。事实上,很多程序员不善于言谈,如果要求其在白板写下代码会令其很紧张。然后无法完成题目,难道这就说明其不能胜任工作吗?
在求职过程中,面试官通常会问求职者此前的一些项目经历和在项目过程中所担任的角色,使用的一些技术,以及为什么采用这类技术,它的优势是什么?遇到了哪些问题,是如何解决的。
通过这一系列问题,可以有效的判断求职者的项目经历是否有水分,以及在项目过程中遇到问题解决问题的思路。
面试官应该避免什么
1、避免人口调查式收集求职者信息
这个主要是针对国内一些公司,在求职者还未进行面试之前就做人口调查式的收集求职者相关信息,例如家庭成员、职业、电话。这让很多求职者非常反感,事实上一些基本的信息求职者的简历都已经提供了,根本无需再次现场重复填写一遍。
2、避免“机器人面试”与自动评估
很多公司会简单电话面试,然后就扔一个在线的评估系统来要求求职者去实现类似“家庭作业”似的任务,然后系统根据标准答案自动评估。因为这样可以节省成本,但我觉得有些高级工程师会拒绝做这种面试。
3、避免白板面试
4、避免全天采访
许多公司一面试就一整天,面试甚至多达 5 到 8 次,这让请假来面试的求职者很难参加。而通过远程面试,可以很好地解决这个问题。
5、避免大规模的“家庭作业”
技术面试应该如何做
首先,要尊重面试者的时间,合理与面试者沟通面试时间、地点、注意事项、避免迟到。
其次,要确认自己需要找什么样的人才,需要他完成什么样的工作。