招聘
评估体系
技术层面:
- 抽象、拆分、解决问题的能力
- 代码设计与实现能力
- 软件系统分析和设计能力
- 综合工程能力
- 计算机基础
非技术层面:
- 沟通、学习、管理能力
- 潜力:
- 视野、技术深度、职业素养
面试计划
在面试候选人之前做好整个面试流程的设计:
- 几轮面试
- 谁来面试
- 如何面试
- 考察哪些问题
把控好计划流程完整性,在一轮完整的面试中,要合理分配时间,把要考察的点都点到,优先让面试者主导,但为了避免被带偏或者遇到困难,可以主动介入结束阻塞
问题设计
反面案例:
- 记忆型问题:nginx如何配
- 过于常见的问题:先序遍历二叉树
- 规则复杂的问题:十进制转罗马数字
设计原则
- 想好要考察的角度与重点,出题
- 由浅入深,由模糊到清晰,由具象到抽象
- 不止一个角度,不止一个解
设计技巧
- 从双方熟悉的角度出题
- 题目最高难度的设定可以自适应因人而异,问题的深入要有层次,逐步细化问题、抽丝剥茧,能力不够的可以在中途点到为止,既不会过度简单,又不会难不可达
- 持续收集数据,调整问题
- 注意广度,给问题设置多角度延伸
- 广度深度相结合
算法与数据结构考察
反面案例:
- 对于一个算法题,啥也不问,吭哧吭哧就写代码
- 只写伪代码,真实的编码相比伪码,可以看出思维的严谨程度
- 纠结编码细节,api的命名、变量名
技巧:
- 白板编码
- 跟随候选人思路,逐步引导其前往更高的难度
系统设计考察
反面案例:
- 排斥不一样的思路,摒弃最佳设计的想法
- 无意义深挖:发现面试者弱点一昧深挖没好处
技巧:
- 面试者熟悉的领域,但这种方式对面试官不利,面试者是可以准备的
- 全新的问题:可以考察面试对于未知问题的分析、解决能力
其他工程能力
代码设计
通过面向对象范式为切入点,考察面试者的代码设计能力,不论有没有设计模式,只要代码具备良好的可读性、可复用性、可扩展性,就够了
API设计
能够从相当程度上,看出面试者是否在代码接口和客户端与 service 的交互方面有一个平衡的理解,并也能从此看出面试者的网络协议功底与相关经验
测试
测试能力是工程师必备的重要素质,可以从单元测试入手、到白盒、黑盒甚至到自动化
项目与任务管理
项目是怎样管理的,产品是怎样上线的,任务是怎样管理的,优先级又是怎样排
行为型问题
一类用来观察候选人过去在特定的工作情境下,是怎样解决困难并取得成功的问题,候选人在过去遇到困难的时候,遵循的逻辑和采取的行为,这相当程度上反映了未来候选人将怎样应对类似的困难,见微知著
- 问题都是在特定场景下
- 特定场景下的冲突
面试反馈
- 情况速记:重要的信息,用几个单独的词记录下来,这些信息,自己能看懂就好,目的只有一个,就是能够帮助自己回忆
- 所有面试官及时碰一下,越早大家脑海中的印象也越新鲜
反馈模板:
考察重点:主要考察内容:优势:不足 / 担忧:结论:其它重要信息:
简历识别
- 确认简历与职位匹配,最简单的当然是要开发,那就要过滤掉很明显是运维的简历,另一方面,级别也要匹配,别一个十年的老兵给他一个初级工程师的职位
- 收集技术背景等重要信息,同时需要过一遍简历上的疑问,无论是空窗期,还是原来从运维转开发之类的
- 深挖事实数据,而非主观模糊描述
- 对于简历列出的技术点,留意掌握程度的表述,如果一项声称精通的技术可以被问得很深,那么基本上精通这种描述就不会有太大水分,可以类推到其他其声称精通的技术点