在过去的几年里,我不仅参加了很多程序员面试,而且自己主持了很多。我很清楚有很多因素会搞砸面试。最坏的情况是面试官用一些晦涩的技术知识来炫耀自己的聪明才智。“错了!因为它被类型强制转换为十六进制!”[“呵呵”,笑着指指点点]这件事确实发生在我身上。至今记忆犹新。虽然最后他们愿意录用我,但我婉言谢绝了。这种互动对双方来说都是一种折磨:它不仅封闭了应聘者的技术思维,也让面试官无法获取到他们真正需要的信息。最好的编码测试能让求职者和面试官立即了解未来的合作会是什么样子以及会是什么样子。因此,专业的编码面试应该具备以下三个特点:1.开放式对话好的编码面试中提出的问题应该是开放式的,不受限制的。为什么?我们需要从对话中了解开发人员的偏好、风格和知识。目标不是要了解琐碎的事情,而是要全面掌握候选人如何解决问题。具体的技术问题不应该放在编码面试中,它们应该属于之后的技术面试。编码测试的真正价值在于找到真正的爱好者。但没有必要过度。例如,我对美国职业棒球大联盟一无所知。然而,我也可以谈论犯规、罚球和罚球线。如果你没有公开对话,你可能会给我贴上“对棒球了解很多”的标签。但是一旦你开始像一个真正的球迷一样和我谈论棒球,或者引入一个内部人士,我不会花20秒就把它泄露出去:你会发现我所知道的只是规则,皮肤。编程面试也应如此。你的知识是否只是表面的,就像一面魔镜,会立即显露出来:不是因为我在问尖锐的问题,而是因为一旦我们讨论创造性的解决方案,金子就会发光。当然,候选人偶尔说一句“我不知道”是完全可以接受的(这总比发誓给出错误答案好!)。但是,如果候选人不能诚实地讲述他们的解决方案,那么他或她就不是真正的热心者。这就是为什么对话的目的不仅限于知识的测量。2.模拟现实允许考生选择技术和方法。他们的选择说明了很多。如果您正在寻找一位恰好通过创建服务器来提供解决方案的JavaScript开发人员,那么值得好好聊一聊。允许候选人选择他们最喜欢的IDE。允许他们用谷歌搜索他们不知道的事情,就像他们在现实生活中所做的那样。尽量模拟真实情况。用铅笔在白板上写代码是不切实际的。它为优秀人才创造了压力,并增加了错失良机的风险。那让我把我的IDE弄乱一个小时?哦,这不现实。相反,考虑到结对编程对实际问题的重要性,您不必让候选人感到困难。将对方视为帮助您解决问题的同事。在这个过程中,你还可以看到他是如何使用IDE的,他搜索的是什么,他攻击的重点是什么。如果您正在创建标准化测试,请确保它与工作相关。例如,如果您正在为医疗行业构建一个Web应用程序,那么编码测试应该是使用该Web应用程序来解决医疗相关问题。一个好的编码测试可以预示未来的日常工作。作为同事,应聘者和面试官都应该对彼此抱有良好的期望。3.不要假设正确答案创建一个简单的编码测试很容易,比如反转字符串、计算斐波那契数或打印fizzbuzz。但是从这些链接中,我们可以发现这些问题没有任何价值。因为他们不鼓励对话,不代表我们工作中需要解决的实际问题,谷歌或者百度,答案就在那里。当然,您也可以在测试时禁用在线搜索,但是请记住,一个好的编码测试应该尽量模拟真实的工作场景。在编码时阻止谷歌就像不允许厨师翻阅食谱一样。事实上,一个好的编码面试应该是开放式的,没有限制,没有所谓的“正确答案”。这样,不仅解决方案不容易在线获得,而且还可以讨论候选人所选方法的优缺点。就是这样。这也不难,对吧?
