TOC

如何面试程序员

之前写的关于面试的文章都是站在求职者的角度,今天这一篇是站在招聘者的角度。工作一些年之后,总是会偶尔参与到公司的招聘流程中。在做面试官之后,应该如何来考察一个开发者的工作能力呢?

作为程序员,我个人非常讨厌那种面试造火箭,工作拧螺丝的考察,说起来好像都有道理,但对实际的工作完全没有帮助。

更别提网上流传的那些大厂题,不明所以,好像是考验智商和临场反应的,还有一些是考察个人三观和做事态度的那种。大多数公司,都是小企业,应该直截了当,上来就谈我们车间需要的技能,能干就干,不能干拉倒。

整体思路和流程

重中之重:了解招聘岗位。

  1. 工作内容是什么,在团队中扮演什么角色。
  2. 怎样的人能符合这些要求。

如果可以参与简历的筛选就更好了,很多时候人事转过来的简历一看就发现匹配度非常低,然后这时再被迫按照 HR 和面试者定好的时间来组织面试,其实对双方都是时间和经历的浪费。

  1. 事先仔细阅读简历,对有疑问的点画个圈,大概准备 5 分钟即可
  2. 面试过程尽量控制在 30 分钟内
    毕竟忙完之后,我自己还要去搬砖呢
  3. 上来可以先闲聊两句,缓解一下气氛,然后介绍一下公司和岗位,两三分钟
  4. 先就简历上提到的过往工作经历进行沟通,大概 10 分钟以内
    可以让面试者先自我介绍一下,主要是看看表达能力,
    如果已经感觉比较能说会道的,就跳过这一步
  5. 准备几道面试题,每一题都可以拓展深入
  6. 绝对不要问点头和摇头就可以回答的问题
  7. 要限定在工作相关技能
  8. 不要耽搁太久,如果发现面试者没有明显思路,提示一下
    还是不行就跳过

其他:

  1. 如果是电话面试,就谈简历内容算了。
  2. 简历上可能写了 30 项精通,或者熟练掌握,一般来说,其中大部分都只是简单了解了一下(比如精通 git,结果只会 clone,pull,push)。
    首先应该划出和岗位工作有关联的部分,然后看看这些掌握程度。
    如果不是那么重要的项,发现其实没有掌握,后面就不用聊这个方向浪费时间。
  3. 事先看一些常见面试题,做个聊天时展开的参考
    今后自己找工作的时候也能用上嘛

方向

主要是两个方向,编码能力,设计能力(解决问题的能力)。编码能力好了解一些,设计能力需要结合之前的项目来谈。
具体到细节的话,在面试过程中主要留意的方向:

  1. 基础技能:Linux + Git
  2. 基础知识:网络,数据库
  3. 常用服务:MySQL,Redis,RabbitMQ
  4. 【Redis】
    1. 为什么之前的项目用到(或没有用) Redis, 关于应用场景
    2. 项目中 Redis 数据如何组织 (类型相关)
    3. Redis 淘汰策略 (过期策略)
    4. Redis 的单线程与多线程
    5. 常用的 Redis 命令是什么
  5. 【MySQL】
    1. 数据类型,引擎,Join,索引
    2. varchar 和 text 的区别
    3. 时间相关类型
    4. 怎么存储 IP
    5. limit 分页的优化思路
  6. 【RabbitMQ】
    1. 为什么用到消息队列
    2. 为什么选 RabbitMQ / Kafka
    3. Exchange,Queue,BindingKey 的概念
    4. Exchange 类型:广播(fanout),点对点(direct),通配符(topic),头字段(header)
    5. 不指定 Exchange 怎么把消息投递到 Queue (Default Exchange)
  7. 架构能力:就这之前的项目经历来展开,看他对过往项目的了解程度
  8. 编码规范
  9. 编程语言
  10. 开发常识:比如:
  11. 怎么部署服务
  12. 怎么打日志,日志如何管理的
  13. 有没有遇到过字符编码问题
  14. OOM
  15. 比较难忘的 BUG
  16. 沟通能力

参考问题列表

  1. 擅长的技能
  2. 项目的收获
  3. 看技术资讯吗?怎么获得信息
  4. 个人博客 & 个人项目
  5. 之前的公司如何管理(OA、考核、项目流程:需求,设计,实现,测试)
  6. 喜欢有什么编程,优缺点,如果可以参与设计,怎么改进体验(增减功能)
  7. 平时会编程解决生活中常见的问题吗?举例。

参考资料与拓展阅读