请选择行业
请选择职位
请选择省份
请选择城市

面试了近百人,如何招到靠谱的程序员?(二)

时间: 2018-12-19 10:37   作者: 张砷镓   点击次数: 
 
什么才是最有效的面试题?
  大公司很喜欢用算法题来面试,然而一来算法在工作中的实用性并不高,二来很容易被求职者提前刷题应试,所以一直被人诟病。
  而直接问一些知识类的问题,感觉又很 low,容易被求职者 diss。那到底什么面试题才能有效地考察求职者的能力与知识面呢?
  我特别喜欢下面这个从前任领导王磊那里得来的面试题:
  ·假设你所负责的一个 api 接口正常的请求响应时间在 50ms 以内,某一天突然监控报警,发现很多线上请求的响应时间都超过了 500ms,该如何定位并解决问题?
  要迅速定位一个未知的问题出在哪里,这需要扎实的经验基础和清晰的思维能力,以及问题分解和隔离调试的意识。
  通过这个问题,能够全面考察求职者的知识面及分析和解决问题的能力:
  ·是否清楚一次 http 请求的全过程?
  ·如何确定问题的影响面,并初步判断问题出在哪些环节?
  ·如何不断缩小问题范围,并最终定位问题?
  ·如何在不影响线上服务的情况下进行调试?
  ·如何在分布式部署的环境下进行调试?
  ·如何在问题正式解决前,先做一点事情来快速止损、优化用户体验?
  ·解决问题时,应该先做什么,后做什么?
  ·解决方案会不会产生不良副作用?是否可控?
  ·……
  在招聘的后期简历大增,一一面试根本安排不过来,只能先进行 15 分钟的电话面试。
  我就只问这一个问题,然后追问下去,很快就能判断出这个人到底是行还是不行。
  只要节奏明快,层层递进追问,也很容易辨别出求职者是真有经验还是提前准备过。能通过电面的,当面面试的结果也都是很满意的。
  大家可能都玩过通过问“是与不是”来猜词的游戏,有一种比较无耻的合理策略是:记住对方问过的所有问题,在符合条件的所有答案集合中不断地切换答案。其实这个思路也是完全可以用在面试中的。
  一开始,我会先假设一个导致问题发生的原因,比如网卡故障、DB 连接被打满、某个同步调用的服务异常……
  如果求职者没有对整个流程的主要环节进行分析判断,那就算他凭直觉(或运气)找到了我预设的问题原因,我也会合理地切换答案,让他继续进行思考和探索,直到他表示“没办法了”为止。
  大多数人只知道按自己曾操作过的模式,去解决自己曾解决过的问题。最典型的是一上来就去翻 SQL 慢查询,我说没有慢查询,他们就一筹莫展了。
  要知道,现实工作中我们遇到的问题,大多都是以前没有经历过的新问题,如果只会靠百度找答案的话那就完蛋了。
  而优秀的求职者知道如何通过设计针对性的测试,来迅速缩小问题的范围。他们会有条不紊地提出一系列问题,排除最有可能的原因:上线事故、遭受攻击、流量变化、服务异常……
这些都是多年处理问题的经验沉淀,可以说是处理问题的“缓存”。然而优秀者并不依赖缓存,当缓存没有命中时,优秀者也具备按索引查找的能力,必要时还可以启动全表扫描。

该不该提前结束面试?
  不管面试进展如何,我每次都会用足一个小时,对此领导颇有微词,认为我在浪费时间,有些人聊上 15 分钟就可以打发走了。
  而我觉得面试是双方共同选择的结果,双方的时间是等价的(实际上由于路途往返的原因,求职者时间成本会更高一些),所以我应该给求职者足够的时间和展示机会。
  我总会把事情往好的方向考虑:
  ·会不会我正好问到的是他不熟悉的领域?
  ·他是不是有点紧张,没有发挥好?
  ·……
  退一万步讲,尽管这个人明显不能满足招聘的要求,但由于每天下午的日程安排都很紧凑,就算提前结束了面试,多出来的一点点碎片化时间也无法拿来做高产出的工作,只能被无谓地消耗掉。
  与其这样,我更愿意在接下来的时间里,让他多积累一点面试经验,帮助他发现自己的问题出在哪里,给他一些可行性的建议,对他产生一些好的影响,让自己这一个小时变得更有价值一些。
  哪怕就算是帮求职者做下职业规划,顺便给公司做下正面宣传也是好的。
  没有达到预期的目的,并不一定就在浪费时间。一次理想的面试下来,无论结果是否通过,面试双方都应该得到了成长。
  在面试过程中,求职者和我的知识体系发生直接碰撞,双方都有可能得到思路上的启发,并认识到自己在某个领域的认识上不够完整和严谨。
  通过向求职者追问和解说,我不仅锻炼了自己的表达和总结能力,也巩固并强化了自己的知识体系。
  不过,我回过头来也需要反思:
  ·为什么这名求职者能够通过我的初筛?
  ·我在哪些环节还可以改进,以避免类似的情况再次发生?
  ·……
  
后话
  面的人多了,我就不禁想在为数不多的通过面试者身上找到一些共同的特质,借此提升以后面试的效率和准确率。
  结果发现,应聘者大致可以分为以下两类:
  ·有的人想让自己变得更优秀。他们会把面试看作一次学习和成长的机会,当遇到不会的问题时坦诚自己不知道并谦虚求教。
  他们在说“不知道、没用过、没听过”时,不会觉得不好意思。因为他们明白“全知全能”是绝无可能的,也是毫无意义的。
  ·有的人只是想让自己看起来很优秀。他们会把面试当作一次表演,为了维护自己的形象,即便不懂也要装懂,演着演着连自己都相信自己真的已经懂了。
  当面试者指出他们的问题时,他们便进入防御战斗姿态,千方百计要证明自己是强者。
  孰不知只有弱者,才会想用语言来证明自己很强。而真正的强者,只是默默地站在自己“做到”的结果旁边。
     下面这张图引自刘传的「认知学习法」课程:

  不同的思维模式,决定了人是持续成长还是固步自封。然而只要你能意识到自己的思维模式,就可以改变它。就像给大脑刷一个新版本的操作系统一样。你,是哪一种?

打印本页 | 加入收藏

上一篇:【精品课程】Python测试开发全栈核心    

关闭  
主要城市: 北京 上海 杭州 广州 南京 武汉 长沙
全部城市: