Answers:
我向那些不愿冗长回答的人表示歉意,但我确实认为,在聘用候选人之前,对候选人进行资格评定非常重要。在该行业中进行了大量面试的任何人都知道,大多数候选人不会持续到面试的前15至30分钟,因此该列表中的大部分都没有必要。请记住,在您将我的清单视为过分否决之前,开除某人(无论是在财务上还是情感上)是多么昂贵。我试图按重要性顺序列出我的采访主题。
一般情报(脑筋急转弯/逻辑难题)
计算机科学知识
编程练习
面向对象的编程技术和通用设计模式的知识
工具和方法的使用
常见安全漏洞和攻击的知识
基础数学
您可能还想看一看《暴露的编程面试》一书。这是该主题的很好参考。
啊,永恒的问题。
我今年进行了很多采访(明天安排了两名候选人),根据我的经验,招聘更多是关于直觉和人际交往,而不是技术知识。
花些时间来简历吧。有些简历可能在几秒钟内被拒绝,有些则需要半个小时。有时候,我考虑基于简历的候选人要比采访他更长。尽管我通常没有准备问题,但有几次我专门为该候选人准备了面试问题。
技术知识-我需要最低要求,这通常很容易分辨。如有疑问,请在面试中谈论他在简历中提到的项目,并深入了解您需要的内容。通常,这足以告诉您他所知道的以及使他打勾的原因。教育并不重要,以前的工作很重要,可能的个人项目得分很高。
问一下他想做什么以及他想在职业生涯中去哪里-您是否需要他拥有的东西,能否提供他想要的东西?另外,在面试快要结束时,我通常会询问优先薪水。如果他不在我的范围内,或者如果我不为他所知道的付出那么高的价钱,那就是我们结束采访的地方。
最重要的是,候选人必须加入团队,我必须对我们能够一起工作充满信心。我不需要喜欢他,但我必须能够应付他,而他也需要能够应付我。如果不是这种情况,我会通过,因为我将无法使用他的技术知识。另一方面,如果是这种情况,并且如果他是一个快速学习者,那么他缺乏技术知识将不会阻止我雇用他。
我已经培训过来自人力资源部门的女孩,让他们在获得简历后立即通过我。我会尽快安排自己的面试时间(最好是在获得良好简历的简历后的第二天)。然后,他与我和至少一个同事(通常是我的老板或团队成员)进行了半小时或一个小时的面试,在那里我认识了他并回答了任何问题。即使我当场拒绝了他的申请,他也有20-30分钟的公司参观时间,我在谈论我们的工作以及我们的工作方式。然后,我将他送至HR进行心理测试,并提供一些非常基础的纸张编码/ SQL。两项测试几乎都不会对我的决定起重要作用,更多的是我在面试中正确判断的一种验证。在取得结果之后,我给他提供了15分钟的谈话,如果我们就双方都满意的条款进行谈判,他就被录用了。
在错过了几个优秀的候选人之后,我必须通过公司官僚机构为这个过程而努力。这个过程之所以有效,是因为我是决定招聘的人(尽管我确实听取了人力资源部和同事的建议,字是最终的)。更多的决策者,更长的过程。过程越长,您必须成为Google的领导才能越多。
我确定这是一场无与伦比的比赛,我结束了采访,他开始了公司之旅,并且结束了。安排面试时,这可能只需要短短两分钟的电话时间。即使您拒绝候选人,也要出售公司。如果您做得不错,那么优秀的录用可以通过被拒绝候选人的口碑传来。
另外,一个技巧。请为收到的每个应用程序发送拒绝信(或电子邮件)。在我目前的公司中,我通常将其留给人力资源部(除了在面试中告诉我的那些人),但有时候,被拒绝的候选人以“谢谢你!做出回应,而不是让我想知道他们是否会在一天之内回复!”
这个答案有点开箱即用,但是我认为这很有价值。
最好的程序员很少面试。他们不必。如果您的公司特别是在改变世界的世界中,或者在保密方面令人兴奋地笼罩着,或者他们尊重几个程序员,那么他们可能会应聘,但是通常情况下,优秀的程序员是通过其员工网络来获得工作的,而不是通过发送简历来获得的。
因此:在工作面试中告诉优秀的程序员的最佳方法是,他不在那儿。
任何答案都必须包含代码示例。雇用程序员而没有看到他或她的代码,就像是在不尝试烹饪的情况下聘请厨师。
从“我只想要一份工作”中告诉热情的程序员的一种方法是问他们这周正在读什么书。然后询问他们过去几周读过的书。
我发现充满激情的程序员总是在阅读,通常列表中会包括一些编程/ Comp。科学 最近列表中的书籍。
这不只是要跟上“专业”的步伐-热情的程序员对编程有一种渴望和热爱,并且倾向于在各种主题上投入大量的材料-不仅是他们现在使用的任何一种语言,而且还包括方法论,其他语言(尤其是IT的其他方面(可能是机器人技术,AI或游戏,或...)
如果他们根本没有最新的书目,那么根据我的经验,他们可能不是程序员。
干杯,
-R
有人可以“快速”到达不同的时间范围:一些聪明的人可以在几秒钟内解决难题,但是有些聪明的人可以在一个月内产生很多好的代码,即使他们在面试问题上可能不那么快。
询问候选人在任何开源项目中是否活跃,您可以在其中查看一些代码,并花一些时间阅读这些项目的邮件列表档案和提交日志。这将比候选人在面试中能证明的要多得多。(当然,这不能代替面试,因为并非所有优秀的编码人员都从事开源工作。)
本书“ 聪明而有效”:乔尔·斯波斯基(Joel Spolsky)的《寻找最佳技术人才的简明指南》可能有助于找到答案。
表中的内容:
乔尔的文章《游击面试指南(第3版)》也可能会有所帮助。
而文章“完成,并能解决问题的智能”的主题由史蒂夫·耶格。
向他们提出一系列问题,要求他们进行编码,并且使问题变得更难。如果他们似乎喜欢挑战,那么您可能会遇到一个挑战。
如果他们无法回答第一个简单的问题,例如“编写for循环”或愚蠢的简单问题,那么您知道此人无法编写代码。
让他们在白板上编码。只有这样,您才能知道他们是否知道如何编写代码。
您应该主要判断他们已经完成的工作。某人在焦虑不安的面试中产生的任何代码或想法都不能很好地代表他们实际上可以在团队中产生的东西。
要进行编码挑战,可以将IM与codepad.com等一起使用,并让他们在家中舒适地进行。您是否在老板面前的白板上写了很多代码,最后期限为30分钟,并且在线上获得了奖金?我不。
那么,面试毫无意义吗?不,但是重点应该放在他们身上,说明他们所做的工作以及所做的贡献。
一旦遇到某人面对面,您还将遭受各种心理偏见。不要偶然雇用程序员,因为他们之间的眼神交流更好,或者比其他人更高。为了解决这些问题,在您面对面见面之前,我会通过IM /电子邮件进行尽可能多的采访。
我认为您不应该在面试中谈论激情。坦白说,听起来像一家公司在寻找“激情”,实际上意味着“为这个想法不花钱”。
激情甚至不能保证卓越。我的意思是,我几乎一生都花时间编程,阅读编程,学习诸如Erlang或Clojure之类的疯狂语言,而我却没有得到任何报酬。但是我很喜欢编程。
我认为优秀的程序员应该跟踪他们一直积极参与的成功项目。因此,在访谈中,不需要程序员编写超出基本FizzBuzz的任何内容。谈论他们过去的项目以及他们做了什么。您是在雇用程序员来解决Rubik的多维数据集并计算弹珠数量,还是从事大型和大型且精疲力尽的 50多个coe的软件项目?
http://www.inter-sections.net/2007/11/13/how-to-recognise-a-good-programmer/
从文章:
因此,总而言之,这里有一些指标和反指标可以帮助您认识一个好的程序员。
积极指标:
负面指标:
编程是一项日常工作
即使鼓励,也不要真的想“谈论商店”
在公司赞助的课程中学习新技术
很高兴与您选择的任何技术一起工作,“所有技术都是好的”
看起来不太聪明
在大学开始编程
所有编程经验都在简历上
主要专注于一两个技术堆栈(例如,与开发Java应用程序有关的一切),没有其他经验
一个优秀的程序员也将能够与那些低频谱的同行一起工作。只要他们能够进行测试并且不沉迷于自我,那么您就有一个不错的候选人,不是吗?
那个fizzbuzz测试虽然很有趣。我能想到的解决方案使用模运算符。我只能通过计算字符表映射坐标来知道(在学校或大学中从未提及)。普通程序员甚至会知道吗?或者我接受过废话教育?
我使用的一个标准是看到他在学术或专业项目中使用的“种类”的语言和工具,以及他究竟取得了什么成就。他是否一直在使用标准库(总是C#或VB6的家伙)在应用程序级别上工作?还是他在Linux中使用C进行了一个项目,处理诸如指针,内存管理,递归,进程同步,互斥,事件等硬核问题。如果他一直在某些抽象层下使用这些核心和基本概念,我将感到怀疑。
这显然是在让他编写代码之外。没有什么可以替代。但是,我确实要满足以下事实:有些人可以比其他人更快地编写代码,并且在面试时,人们的响应时间有所不同。