原则

其实主要就两点。

  1. 分辨率足够。
  2. 简单。

第一点很容易理解。你的题目必须能准确区分傻逼,普通人,和牛逼,因此最理想的状况是,傻逼考零分,牛逼满分,普通人在中间。所以你的题目应该简单。如果题目难到普通人和傻逼一起做不出,那就没有区分能力了。如果不是正好碰到一个牛人,你的考试只能让你啥都招不到。这会把你自己变成傻逼。

所以,你的题目应该有一半是普通人能够做出来的,而不是道道都是神一样的面试题。之所以你在网上经常看到神一样的面试题,那是因为。

  1. 大公司不缺应聘的人,所以他们的“牛人线”比较高。
  2. 你能看到的题目,都是最牛逼的。

当然,题目中确实应当有一些有难度的题目,用来区分真正的牛人。这部分人我们要特别料理他们。

复用题库

混合一个题库,每次面试抽取不同题目形成试卷,这是常识了。

主要是防止试题外泄,还有重复出题造成的疲劳。

当然,每个题目需要加不同的属性,用于后面的一些分析。在抽题的时候也需要参考属性,例如上面提到的难度。

经验题还是能力题

我把试题分为两个类型。一类是测试你是否用过某项技术,用多深。另一类则是你的智力如何,学习,沟通,理解能力如何。

可以预期的是,刚毕业的人,经验题得分会低一些。不过在实际生产中,这些人出活的能力一向不差。所以对于刚毕业的学生,可以在经验题得分上宽容一些。

区分领域

在试题设计中,经常需要测试多个领域。例如网络,系统底层,等等。

将多个领域的题目分开标注,有利于你最终评定这个人的技术范畴。例如系统底层出色,但是网络很糟糕,这显然就不适合扔去一个重网络开发的组。

限制总量

这点才是整个试题设计的核心难点。

长时间的笔试是很高成本的。对于被考试者不是什么很好的体验,对于考试者来说,要出题,要判卷。考试期间还要招待人家,进行计时。如同马拉松一样的考试没有任何好处——除非非常必要。

但是正常来说,技术面试应该要问系统原理,算法,网络,编程语言,智力题等等,至少这么五个方面。每个方面一道题区分普通人,一道题区分牛人。这就是10道题。再复合上经验和能力的区分,还有为了对抗偶然而要每个组合多几个题。综合起来可能多达20-30道。这样1小时的笔试时间,每道题上只有区区2-3分钟。这点时间根本不够考核一些深入的问题。

所以如何减少问题的数量,而非增加数量,才是核心难点。

我的想法是增加过程叙述题,让被试人对一些经典过程做描述,并规范他一定要描述到哪些方面。以此来分析他对一些领域的基础。但是这方法有个明显弱点——不好执行不好打分。

关于这方面大家有啥意见?