面试中如何剔除“鱼目混珠”程序员?
对于一个公司来说,执行招聘面试事宜是一个耗时耗钱的项目,从顾问公司和人才中介挑选出合适的简历之后,还要花更多的时间找出合适的候选人。有的时候这些机构会向你保证这些人都是 Java 天才、SQL 专家、全栈开发者等等,但实际上如果你盲目的信任他们并邀请应聘人员参加面对面的面试的时候,你会很失望的。所以我觉得最快的甄别方法就是先电话面试,之后再根据他们的表现采取面对面的交流。
为了获得更多的反馈信息,提高自己的方法,在这里先和大家分享一些自己工作以来使用的筛选出来的编程问题,从这些常见的编程技巧里面选出两个左右的问题,例如Java、SQL、XML、编程、编码、OOPS、多线程和UNIX。和期待你说出对于同一技能的考察有什么好的方法。
下面是我列出的如何过滤和筛选出不同编程技能的问题,这主要有两个目的,一是为了给面试者热身,另外就是帮助主考官剔除不会编程的“程序员”,那些SQL 专家尽然不会编写 JOIN 查询。
在 SQL 方面,我的第一个筛选问题就是请他们描述一个 Left Outer Join。不需要说得多么精准,我只是想看看他们有没有做过除了 two table inner join 之外更多的东西。根据他们的回答我会问他们古典SQL查询,以核实他们是否知道这样的原理以及如何应用这些知识。如果他们使用 Inner join 而不是 left outer join 的话,估计就会错过成为正式员工的机会了。
在 Web 开发方面,首先提的问题是解释一些一个 GET 和一个 POST之间的区别。这里我至多就是想知道他在 URL 里面通常看到的 GET 是什么,以及在 HTML Forms 里 POST 是什么形式的。根据他们的回答,还可以继续问一些关于 GET vs POST 使用限制、安全性等问题。这些问题完全足够让你明白眼前这个人对互联网是否有真正的了解。
在 UNIX 方面,其中一个比较流行的筛选方法是相当简单的:你是如何找到一个特定的程序并解决问题的?我期望他们能告诉我关于 ps、grep 和 kill 之类的命令。同时也想测试一下他们对ps options 的理解程度。第二个筛选问题就是在 UNIX 系统里找出大量的文件。千万别误会,如果应聘者不能回答这些问题的话,那么他很难在这个有大量程序和服务器连接的项目中完成任务。
在招聘 OOPS(Object Oriented Programming)方面,请他们讲述一下 Class 和 Object 之间的区别。这样的安排主要是想他能够在描述定义的基础上讲一讲构建项目的蓝图,关键是想测试回答问题的人如何理解概念,并且不会被概念所困扰。接下来就是请他举个例子,根据他的例子来问他,在什么地方创建这个对象,由谁来创建等等。
招聘程序设计人员,尤其是提到代码,最流行的将鱼目混珠的程序员剔除的问题是 “Fizz-Buzz” 测试。如果一个程序员无法在10-15分钟之间写出一个 Fizz-buzz,那他可能需要更多的锻炼,或许根本没有准备好。另外一个方法就是让他们写 Fibonacci series(斐波纳契数列),并请他们优化一下。大家都知道 Fibonacci 是非常常见的,但是你可能会很惊讶的看到这些程序员很难在之上写出这些数列,即使是在 IDE 上也写不出来。