面试是一次双向的沟通过程,对求职者而言是找到心仪的东家,对公司而言是招揽合适的人才。面试官的目的是考察求职者能力,评估和岗位的匹配程度,绝非用稀奇古怪的题目面倒求职者。

本人近两年面试大几十位求职者,深感作为一个面试者不易,做好一个面试官更难,如何在极其有限的时间内准确的考察出求职的技术能力,对面试官的考验很大。本文关注服务端技术能力的考察,包括考察的范围、方式和注意事项。性格、合作能力、抗压能力等的考察不在本文讨论范围内。


态度指南

古有周公吐哺、三顾茅庐的佳话,优秀的人才从来不乏东家,所以请尊重求职者,纵然无缘招揽优秀的人才,也要赢得面试者的好评和名声:

  • 求职者慕名而来至少出门迎接、给瓶解渴水吧
  • 营造宽松良好的面试氛围,让求职者正常发挥
  • 控制好时间,不予太长,亦不宜太短
  • 面试的过程请保持耐心,认真听取,切勿打断求职者,切勿过分争论和反驳
  • 面试结束后尽快给予求职者反馈

技术考察

技术考察主要覆盖基础知识、专业知识和逻辑思维三方面。首先了解求职者经历的项目以及在该项目中承担的角色和工作内容,再以项目为切入点,由浅入深的提出和基础知识以及专业知识相关的问题,要特别注意这些问题的连贯性,从而考察面试者的功底、逻辑性和解决问题的思路。为了缓和氛围,还可以提一些开放的问题,那些钟情于技术的 geek 们,在这类问题往往能回答的深入和透彻。

  • 基础知识
    • 熟练掌握一门语言
    • 熟悉基本的数据结构和算法
    • 熟练使用 Linux(Windows),对操作系统原理的理解
    • Optional: 数据库、Web Server 和 TCP/IP 等
  • 专业 & 经验
    • 专业知识的考察因业务而异,求职者应该需要了解整个项目的功能,明白自己模块承担的角色,熟悉模块的业务流程以及针对该业务使用到的技术框架,某些特殊的业务可能会用到算法。
  • 开放问题
    • 你使用过哪些语言,对比它们的异同,谈谈你的感受?
    • 你喜欢哪些技术书籍(博客)?
    • 哪些软件你觉得很棒,为什么?
    • 你通过什么渠道学习新技术知识?
    • 你解决过哪些令你难忘的 bug,并说说解决的过程?
    • 谈谈个人计算机(互联网网络)的发展历史?
    • 谈谈你敬佩的工程师?
    • 谈谈测试的重要性?

一点感受

  • 不推荐纯粹的数学题、智力题等考察题目
  • 不推荐压力面试,群面等面试方式
  • 不推荐做题、现场写代码(时间成本太高,伪代码除外),不推荐询问杂而无连贯的问题
  • 能给出 github 的求职者往往具有更强的竞争力

面试的方式和考察重点因人而异,本人认为这种方式的面试效率较高,既适合现场面试、又适合电话面试,非常注重基础功底,基础功底扎实的工程师编程能力、学习能力和调试能力都比较强悍,因为外部各异的技术归根结底总是有诸多相通之处。