面试中如何剔除“鱼目混珠”程序员?

公司招聘面试事宜是一个耗时耗钱的项目,从挑选简历开始,还要花更多的时间面试候选人。有的时候这些人才机构会向你保证这些人都是Java天才、SQL专家、堆栈开发者等等,但实际上真实情况远不及你想想的。

对于一个公司来说,执行招聘面试事宜是一个耗时耗钱的项目,从顾问公司和人才中介挑选出合适的简历之后,还要花更多的时间找出合适的候选人。有的时候这些机构会向你保证这些人都是 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 上也写不出来。


在 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 开发者的时候。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/447317.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java容器相关问题

同步类容器 1,这些复合操作在多线程并发地修改容器时,可能会表现出意外的行为,最经典的便是ConcurrentModificationException,原因是当容器迭代的过程中,被并发的修改了内容,这是由于早期迭代器设计的时候…

趣文:如果编程语言是车

C语言是全能手,小巧,强大,所向披靡,可靠,任何事情都能对付。 C是新的C,双倍的能力,双倍的尺寸,适应险恶的环境,但是你如果没练好就去驾驶,很可能会撞车。 C#是…

开发者应该了解的API技术清单!

摘要:有人说,有API的地方就有App,借助这些API开发者轻松构建出一款应用,极大地提高开发效率和开发质量。文中整理了一份API服务清单,内容涵盖:监控/调试、 CDN 、数据库、仪表盘、支付、通信等方面&#xf…

提高程序员职场价值的10大技巧

如果你已经是个很牛叉的程序员,但是依然觉得觉得还不够的话,欢迎阅读此文。本文旨在帮助各位更上一层楼。 你是不是觉得自己已经掌握了所有的编程技巧?别太自以为是了! 会写代码的确很重要,但是要拿到更好薪水&#…

google python的风格规范

点击链接,查看内容

IT人应当知道的10个行业小内幕

如果你打算从事IT行业或刚进入这个行业,也许本文下面的小内幕会吓到你,因为这些事平常都不会公开讨论的。如果你是IT资深人士,或许你已经遇到其中的大部分了。如果你愿意,请一起来参与讨论吧。 这些内幕大多数是针对网络管理员、…

Volatile原子性一致性JVM指令重排

概念 Volatile概念:Volatile关键字的主要作用是使变量在多个线程间可见。作用: 在多线程间可以进行变量的变更,使得线程间进行数据的共享可见 阻止指令重排序,happens-before package com.example.core.cas;import com.example.c…

Java JUC工具类--CyclicBarrier

CyclicBarrier:栅栏的概念,多线程的进行阻塞,等待某一个临界值条件满足后,同时执行 类比:每个线程代表一个跑步运动员,当运动员都准备好后,才一起出发,只要有一个人没有准备好&#…

Java JUC工具类--Future

Future模式,也是非常经典的设计模式,这种模式主要就利用空间换时间的概念,也就是说异步执行(需要开启一个新的线程)在互联网高并发的应用服务中,我们随处可见这种理念和代码,主要就是使用了这种…

Java JUC工具类--ForkJoin

ForkJoin Fork/Join框架是JAVA7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架Fork/Join中两个重要的类 ForkJoinTask:使用该框架,需要创建一个ForkJoin任务…

修复bug的12个关键步骤

要多少时间才能修复bug,事先是很难知道的,特别是如果你和这些代码还素不相识的话,情况就更加扑朔迷离了。James Shore在《The Art of Agile 》一书中,明确指出要想修复问题得先知道问题的所在。而我们之所以无法准确估计时间是因为…

Java JUC工具类--Master-Worker

Master-Worker Master-Worker模式是常用的并行计算模式。它的核心思想是系统由两类进程协作工作:Master进程和Worker进程Master负责接收和分配任务,Worker负责处理子任务当各个Worker子进程处理完成后,会将结果返回给Master,由Ma…

python 基础知识点整理 和具体应用

Python教程 Python是一种简单易学,功能强大的编程语言。它包括了高效的高级数据结构和简单而有效的方法,面向对象编程。Python优雅的语法,动态类型,以及它天然的解释能力,使其成为理想的语言,脚本和应用程序…

使用postman模拟百度通用文字识别

1,登录百度AI开放平台 百度AI网站新手指南链接在顶部导航栏中,找到控制台选项,输入账号和密码,进入管理中心页面在管理中心页面中,找到文字识别的选项找到创建应用的选项,进行ocr项目的创建需要输入应用的…

Java调用百度OCR文字识别的接口

调用百度OCR文字识别的接口,来自于百度官网,亲测可以使用 跳转链接FileUtil的下载链接Base64Util下载链接HttpUtil下载链接GsonUtils下载链接Accurate.java文件 package com.baidu.ai.aip;import com.baidu.ai.aip.utils.Base64Util; import com.baidu.…

Redis Cluster集群模式

Redis Cluster 它是Redis的分布式解决方案,在Redis 3.0版本正式推出的,有效解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构达到负载均衡的目的。数据分布理论: 分布式数据库首要解决把整个数据集按照…

Redis整合Springboot实现数据共享

代码的整体结构 RedisSessionConfig.java package com.cc.springbootredissession.config;import org.springframework.context.annotation.Configuration; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;Configuration E…

Redis整合Springboot实现单机配置

整体结构 配置文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/…

Redis整合springboot实现哨兵模式

整体结构 RedisConfig package com.cc.springredis.config;import com.cc.springredis.RedisUtil; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.R…