招聘程序设计人员,尤其是提到代码,最流行的将鱼目混珠的程序员剔除的问题是 "Fizz-Buzz" 测试。如果一个程序员无法在10-15分钟之间写出一个 Fizz-buzz,那他可能需要更多的锻炼,或许根本没有准备好。另外一个方法就是让他们写 Fibonacci series(斐波纳契数列),并请他们优化一下。大家都知道 Fibonacci 是非常常见的,但是你可能会很惊讶的看到这些程序员很难在之上写出这些数列,即使是在 IDE 上也写不出来。 在 XML 方面,我的问题是请他们说出 DTD 和 XML Schema 之间有什么不同?有些人可能会说只用一个问题来判定某人的 XML 技能是不是有点太苛刻了,可我要说,这只是一个基础问题。有很多程序员之前是从事 XML 工作的,现在也是可以从事 XML 工作的,但他们对这一基础的了解完全不够,所以说他们有责任区学习更多的基础知识,光会工作是不够的,你还要不断地填充大脑里面的空白。 在 Java 方面,我会让他们说说 JDK、JRE 和 JVM 之间有哪些差异?这也是一个基础性问题,我希望所有有 Java 工作经验的,或者是学习过 Java 的人都应该知道这三者之间的差异。还有就是我希望他们都能自主的提到有哪些 JDK 工具,至少可以说出 Javac(Java 编译器) 和所有Java程序里都会用到的 JVM。另外一个问题就是 PATH 和 CLASSPATH 之间有什么不同之处?如果你不知道这两者之间的区别,那我真的很难有把握把你们调教成优秀员工,因为你在创建项目过程中将会遇到很多噩梦般困难:特别是调试和修复 ClassNotFoundException 和 NoClassDefFoundError 的时候。 在招聘 Java 或其他语言方面的多线程开发人员方面,筛选问题是要求候选人编写代码来避免“僵局”的出现。问这个问题的时候可以提供一个特别的场景,或者问如何编写代码这样“僵局”就不会出现了。如果你有足够的面试经验的话,你会很吃惊,因为那些有着2-4年编程经验的程序员通常没办法正确的回答这个问题。 在数据结构和算法方面,我问的第一个问题就是如何从链接表里添加和删除组件?因为我相信作为一个程序员就一定知道数组、链接表、集合、映射和文字列算法。 我知道,和应聘者拉家常谈琐事并不是发现程序员的好方法,但是你问出来的问题和应聘者的工作经历是息息相关的,这可以帮助你区分谁有真才实学,谁只是虚张声势。最好的方法就是坐下来和他们面对面的交流,讨论他们之前做过的项目,或者是和你结对编程来证明自己的实力。 询问他们之前的工作中做值得他骄傲的是什么,他们最想改变的是什么,为什么要改变,怎么改变。一旦问了这些问题,除了人格方面的,在编程方面的能力已经完全展示出来了。如果你有机会面试超过100个人的话,其实你不是在浪费时间和金钱,而是在组织时间和金钱。尤其是在通知他们去参加面对面面试的时候,一定要确保这个人值得你花时间去和他交流。 所以,我很迫切的想要知道你们是问什么样的筛选问题来面试这些程序员的,尤其是在招聘 C、C++、Ruby、Python 或者是 JavaScript 开发者的时候。(编译:薛梁) |