从事软件开发工作以来,经历过很多次面试与被面试。总结了一下,会发现好的面试官和差的面试官差在哪里,当然作为应聘者而言,好的面试官能够给你很多指导意见,差的面试官可能会让你疯掉!。
很多程序员都看过李开复老师的面试视频,这基本上是好的面试官的典范。 但是大部分时候我们被面试的时候,都会觉得很无奈,甚至窝火,有一巴掌扇过去的冲动。
在我看来面试官或者说整套面试流程除了面试官自身的业务水平之外,经常出现的问题有如下几种:
1. 面试官太多
有些公司面试安排有很多轮,很多轮也就罢了,如果是不同侧重点的,确实情有可原,比如技术上的,人力资源部门的,可能还会有老板直接面试。 但是如果几个面试官问你很多相同的问题,那只能说明面试安排上根本就没有什么安排,说白了,就是随着性子来,这是很受应聘者反感的。
2. 提问方式和问题是否恰当
比如公司要招聘一位高级c++研发工程师, 你问别人内存泄露的问题,或者丢给面试者一堆c++基础笔试题目。 遇到这种情况,如果我是应聘者,大部分时候是直接起身走人的。 当然可能可能会忍一下,想想既然来了,做就做一下吧。 由于自己有这种经历,我在面试别人的时候从来不会丢一堆笔试题目给别人,大概有多少经验,你和他谈几分钟获得的绝对会比让他做题目获得的信息更多。 更重要的是---这是尊重别人的表现。
有些时候提问难免会受面试官的水平影响,技术面试官业务水平不如应聘者,或者某些方面不如应聘者绝对是很正常的事情。 不要因为应聘者某一点的回答不如你所愿,就定论别人水平一般,甚至言谈间表示“我看你水平一般嘛”。
举个例子,有一次我面试一位电子专业出身的工程师,虽然我是个电子爱好者,但是不敢称懂行,我对他表示我不了解电子,但是可以讲一个大致给我听,听得过程自己既可以学点东西,也可以判断对方的逻辑、表达能力等。 对方也乐于去表达,这样沟通起来会比较顺畅。
另外一个例子,是我作为应聘者回答别人的问题,问题很简单: vector 和 list的区别?
这个问题好像太弱了, 我反问他指哪方面的(我当时都没去想常规的区别---list插入高效/随机访问低效嘛,这个应该是考初级程序员的吧)。 他说就是哪些区别吧。 我就给了一个高标准的性能方面的比较, 对于容器内元素个数、对象大小、是否指针等,我的回答基本上按照Efficient C++: Performance Programming Techniques 里面来回答的,当然那些结论也是我自己测试验证并无数次实践过的。 结果可想而知,我可以断定他对性能方面并没什么研究,除了知道大家都知道的东西外。 这个也就罢了,不能要求面试官是个很高水平的人。 但是末了他来了一句”我觉得你的c++一般嘛“----还好,我总算没晕倒! 呵呵
3. 问题应该偏重能力,而不是偏重知识
我接到过一个面试官(现在的老板,加州大学伯克利分校的博士)最好的问题是:
有上亿个多边形,如何高效求交集或者并集, 多边形都不会太大。就是说基本排除一个多边形和上千甚至上万个相交的情况。 我给了几种思路。 有一个思路我想能打90分吧(基本上就是正解)。
这样的问题我喜欢,毕竟工作的大部分时候是需要我们来解决问题,而不是堆砌知识。 现在的年代,很多知识都不能算作知识,比如,编译器的选项, 这个需要记住么? llinux下man 一下你就知道啊, 况且不是每个人都用原始的编写makefile的方式来编译代码。 考别人编译器选项,太脑残了。
4. 太过纠缠细枝末节
有些面试官摆出一副不问倒不罢休的状态。 比如有一次面试官问继承关系中的多态实现原理,我停了1、2秒(吃不准确切名字),我就回答”好像是虚函数什么表“,我迅速画了个简图, 面试官追问”是什么?“, 我有点火了,”名字很重要么?“, 面试官说,”当然了,你要和别人沟通的“。 我就回答啦”我这么说你不明白吗“ 。 呵呵,火药味起来了。
面试是一门学问,你今天面试别人,可能明天就会作为应聘者被别人面试,所以要经常站在对方的角度考虑问题, 尊重并充分了解对方的有效信息是最好的态度。