所谓“面经”,就是面试经验了,求职者把自己的面试经验和教训写下来,供后来人参考。
说起“面经”, 我不由得想起新东方刚刚起步的时候出现的所谓“机经”,经过几千年考试的中国人在考试这一块儿非常有天赋,即使是上机考试,那些聪明的同学也能把题目背下来,考完以后整理成题库, 中国人的雅思和GRE成绩经常是高得令人咂舌。
电影《中国合伙人》
我记得我找工作的那时候,“面经”并不多,市面上流传的都是微软面试的那些经典题目,比如为什么下水道井盖是圆的? 估计一下一个城市有多少加油站? 等等。
拜互联网/移动互联网所赐,现在针对程序员的面经实在是太多了,不仅仅是面试经验,还有很多面试题,尤其是BAT的面试题。
聪明的程序员们会把这些面试题分门别类地整理,写成文章,或者放到著名的同性交友网站GitHub去,做得好的还能获得不少小星星。
更进一步,还有人建立专门的网站,出专门的书,教程序员们怎么面试,怎么应付HR。
存在即合理, “面经”的出现充分说明这是个火热的市场,有很多程序员在进入软件开发这个领域,仅仅是求职这个细分领域就可以热闹非凡。
我也看了一些面经,从中也查漏补缺学了不少知识,不过我更大的感受就是,这些面试官问的问题怎么都差不多啊!
比如对于Java有这么几个著名的问题:
Spring AOP是怎么实现的?
类加载机制,双亲委派模型是怎么回事?
HashMap的原理?
Java内存模型
volatile关键字的作用?
Java 的垃圾回收机制?
......
再比如基础知识的著名问题:
从浏览器输入URL到服务器返回结果,中间经历了什么?
TCP三次握手,滑动窗口
TCP和UDP的比较
实现个LRU算法。
......
我甚至想,能考察的技术点都被聪明的程序员们给挖掘完了,都端到了桌子上,悲催的面试官也想不到别的招数,只能从中选取了。
我也做过很多次面试官,其实也有这样的苦恼,到底问什么样的技术问题呢?如何才能区分出哪些是更好的程序员呢?
有这么几种招数:
1. 对于每个知识点往深处挖掘,看看面试者是不是“知其然而知其所以然”,如果只是背会了面经的题目,不了解本质,最终还是会露馅的。
2. 我记得原来IBM Db2部门经理在招聘时采用过这样的办法: “我们就找一个Db2相关的问题,对Db2,面试者接触的不多,更不用说底层的技术了。 我们请他和我们一起讨论解决方案,如果他在思路上能一直跟着我们,不掉队,那就说明这人技术和思维就不错。”
这招其实挺厉害的,能够很好地考察一个人的整体能力。
3. 现场编程,在规定的时间内完成一个小题目,这对于大多数人来说压力很大,但是这种考察方法时间太短,只能考察一小块能力,况且这个小题目也很有可能在面经题库中。
4. 给一个相对大一点的题目,让面试者线下完成,时间可以拉长到几天,然后看看面试者的设计能力,代码能力。不用太担心作弊, 面试者作弊的话,在复盘的时候还是容易被发现的。
这些都是技术层面的东西,还有一大块难于在面经中出现的就是软技能。比如很多公司都看重的沟通和团队协作。
拿沟通来说,如果面试者在回答问题的时候,不能把握提问者的意图,不能够答到“点子”上,而是在外围打转,甚至跑偏,那肯定要失分了。
所以,理解面试官的问题,自信而准确地表达非常重要,其实面试官最终要形成一个印象:这个人到底行不行。
也许你的技术能力差点,但是从你对问题的分析和清晰的表达,让面试官觉得是个可塑之才,招了吧。
总结一下,“道高一尺,魔高一丈”,在技术层面,面试官群体和面试者群体是个互相博弈的过程,双方的层次都在不断提升。 有时候,软技能反而能成为决定性因素。