面试官如何提问程序员
面试官如何提问程序员
面试是个技术活,其本质上是一次沟通的过程。那么面试官如何提问程序员呢?下面是学习啦小编给大家整理的面试官如何提问程序员,供大家参阅!
面试官如何提问程序员
第一:德行
对于一个程序员候选人来说的话,如何评判一个候选人的德行呢?我觉得有以下几点:
眼神
注意观察候选人眼神是否飘忽不定,是否总是不敢直视你的眼睛,或者回答问题的时候总是往左右两边瞟。一般来说,眼神是一个人性格的直观表现之一,如果眼神不够沉稳坚定,说明此人不踏实,心境飘忽,很有可能不诚信(比如爱撒谎,不诚实,不讲信用等等)。
身体语言
如果一个候选人在跟你聊的过程中,整个人吊儿郎当,身体左摇右晃,一会二郎腿,一会把脚放到大腿上(别怀疑,我真遇到过),那么说明此人一定不沉稳,性格轻佻浮躁,最好谨慎考虑。相反,如果候选人坐姿规矩,谈话间体态得体,自然,不紧张,不做作,那么该候选人应该比较有家教,个人习惯很好,性格比较稳定。
沟通
在跟候选人对话时,注意对方的语气语调。如果候选人语速平缓,吐字铿锵,说明此人准备比较充分,不急躁。当遇到一些一时回答不上的问题时,能够保持冷静,集中精神思考,如果实在不会,没有打算糊弄过关或者顾左右而言他,而是直接答复不知道,那么就说明该面试人性格比较沉稳,而且比较诚实,不滑头。甚至你可以故意说错一些细节,看看对方以何种方法给予纠正或者不纠正。你也可以直接故意用错误去质疑对方正确的表述,看看对方的反映,如果对方一下就被点燃了一样蹦起来,或者总打断你说话,说明对方性格比较急躁,这是程序员的大忌。当然此招能少用尽量少用,而且一次足矣,如果老这样,会让候选人觉得面试官不行,而心生鄙视。
细节
最常见的就是对方电话来了,看对方的反应,一般来说候选人会选择直接挂掉,或者任由电话震动。如果对方当着你的面,直接接起了电话,说明对方在为人处事方面肯能有些欠缺,起码不是很懂礼貌,或者根本不大重视这场面试。另外,一般来说前台会给面试者打一杯水,等到面试结束,或者有需要中途更换面试场所(例如换会议室等等),如果对方随手拿起水杯而不是留在原地,说明该候选人素质比较高的,而且心应该比较细。
第二:技术
技术排第二不是说技术不重要,作为一个程序员岗位,技术当然是非常重要的。很多企业喜欢让程序员做卷子作为首面的内容。我认为这是不妥当的,是面试官在偷懒的表现。不是说做卷子不能反映问题,只是这种方式太死板,并不能真正过滤掉不合格的面试者。比如,我其实没有什么技术能力,但是我面试前背了很多书,那么做卷子这一关我有可能可以过,到真正面试的时候才会被拒。所以,做卷子只能过滤那些真正没有技术,而且没有背书的面试者。但是,即便是直接面试,面试官真的碰到这样的面试者,又花的了几分钟就可以判断出来再拒绝呢?所以,我建议,不要做卷子,直接面试,并且分成以下几个内容来考察面试者。
过往经验
可以让候选人介绍最近一个项目,并且描述自己的工作内容。首先看看候选人是否能够说得清楚这个项目,比如有哪些模块,每个模块有哪些功能,实现了一个什么业务逻辑,自己负责的这一块的详细业务逻辑又是怎样的,等等,如果连这些都说不清楚,那么基本上可以判断候选人在撒谎。了解了项目之后,可以通过候选人负责的内容进行深入技术提问,比如候选人说使用了MVC4,那么就可以就MVC4的相关知识进行提问;候选人说使用了多线程,那么就多线程相关的知识进行提问,但是注意要由浅入深,不要一上来就问一些很难很深的问题。一般来说如果候选人没有撒谎,那么应该来说还是可以回答一些不太难的问题的。
基础知识
一定要考察候选人的基础知识。很多候选人在说起自己做过的项目的时候眉飞色舞,一套一套的,甚至满嘴都挂着一些热门的词汇,比如大数据,高并发,云计算,等等。但是一问基础知识就傻眼,最简单的值类型引用类型都不知道有什么本质区别。很多候选人都会辩称,自己会编程,能够实现业务逻辑,为什么还要去背那些概念性的东西,殊不知,那些他们认为没有的概念性的东西,正是我们构筑大厦的根基所在。举个例子,我造一所房子,地基打了10米,你造一所同样的房子,没有地基。我们都造好以后,在风和日丽的时候,看上去一模一样,你会笑话我,“看,我们一样,但是我比你不知道省了多少工序“,但是你要知道,并不是每天都会风和日丽,总会遇到狂风暴雨,等到考验真正来临的时候,谁的房子更不容易倾塌呢?
分类考察
在面试候选人的时候,最好是分类进行考察,每个类别准备5个问题左右,并且由浅入深。比如基础知识5道题,我一般会问:值类型引用类型什么区别?构造函数什么特点,合适被调用?string和StringBuilder什么区别?子类被实例化的时候会调用父类的构造函数吗?接口和类有什么使用场景上的区别?问完了基础知识,一般会问C#的相关知识,然后是数据库相关知识,然后是框架的知识,例如MVC的知识,最后问一些Web前端相关的,例如ajax,Jquery,JS等等。一般来说我不会考察算法,数据结构相关的内容,更不会让候选人写一个“二分查找法”,或者“单例模式”的代码,什么道理呢?因为我招程序员还是以实际应用为主,而且.net里面已经封装了很多算法,知道如何使用即可,对于原理性(注意,是原理,不是基础)的东西,如果自己能花时间去了解去掌握更好,如果不太了解,但是能够熟练应用封装好的东西就行。毕竟顶尖的互联网公司就那么几个,一般的公司招聘真的没必要搞那么高大上,两个字,务实!。
第三:身体状况及其他原因
为什么把身体状况单独拎出来说呢?因为之前招过一个不错的程序员,但是其身体极其瘦弱,脸色也比较苍白,但是我还是把他招进来了,并且分配了相对重要的工作,但是该苍白弟来了之后没几天,就旧疾复发(我也不知道入职体检是怎么做的),需要住院了,好在他也比较nice,也没算工资,就直接离职了。所以面试官在招聘时,一定要注意候选人身体状态,如果有明显的身体状态问题或者不正常,千万要慎重考虑。另外,需要考虑的还有下面的因素:
候选人是否准备创业
有些候选人因为首次创业失败,需要找个地方打工解决一下生活问题,一旦缓过劲来,就会离职重新创业。说实话,我是不太愿意招此类程序员的,太不稳定。
之前换工作太频繁
一般我认为,正常情况下,IT行业换工作频率在2年一次以上是比较正常的,当然后写不正常情况另当别论,例如公司倒闭老板跑路,例如被收购后辞退,等等。但是,如果正常情况下,连续3分以上工作的更换频率在1年以下,那么这种候选人需要谨慎对待。
其他
比如提一些无理要求的,期望薪水过高的,完全不尊重人的,等等,这些候选人都要谨慎考虑。
总结
洋洋洒洒又写了这么多,希望对各位面试官有些帮助。在考查候选人时,一定要查看候选人的德行,如果候选人德行不好,最后会让负责人非常头疼(亲身经历)。目前我的团队中开发17人,16人是我亲自招的,不说有多优秀多顶尖,但是绝对是一支战斗力极强的队伍,高效,专业,稳定(从去年6月建团队到现在只走了4人,其中老团队成员2人,一人回家,一人被以前同事挖走。新团队成员2人,一人上文提到的苍白弟身体抱恙离职,一人因为对公司有意见主动离职)。所以,千万不要光盯着候选人技术能力,要从各方面综合去考察一个候选人,这样才能找到你真正需要的人才。