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