技术面试和程序员能力


14

我要说的本质上可能有点争议,但是今天我很沮丧-所以我会问这个。

我刚刚接受了一家大型技术公司的实习职位面试,并被问到了很多典型的面向算法的面试问题。现在,考虑到我的背景,我认为自己在算法方面很强(我在研究生级别的算法上也取得了不错的成绩-涉及NP完全性和超越(近似和随机算法)的东西,但是不幸的是,我未能通过面试。想想一种在大约10分钟内解决字符串问题的非常有效的方法,面试结束后,我喝了一杯水,吃了一根香蕉,放松了一会儿,然后再次尝试该问题。我可以在5分钟内到达,最糟糕的是-我确实在那条路上,面试官确实暗示了这一点,但是压力太大让我无法接受。我的整个经历使我开始思考技术面试。我有一些问题,我想在这个论坛上提出他们-

  1. 真的可以在半小时内判断某人的技术能力吗?老实说 还是只是掷骰子?

  2. 技术面试问题是否衡量解决问题的能力?这点很值得商??作为一名博士生,我知道数学问题解决涉及解决以前从未听说过的问题。另一方面,一旦有人事先知道解决方案或解决了问题,诸如-按排序顺序合并两个链表,或在第k级打印二叉树的所有元素之类的问题就变成了“纯粹的练习”?

  3. 在这些面试中脱颖而出的人会继续成为优秀的程序员吗?他们是否继续设计时尚的游戏引擎,图形库,编写快速的fork-join框架?有没有证据表明在技术面试中表现出色与实际编程能力之间存在正相关关系?还是这些采访更适合于寻找“完成工作”类型的人(Spolsky)?

我敢打赌,许多发表创新思想的学者-ICML,VLDB,Mobicom-都会使这些采访失败。但我可以向您保证,他们是您将在这个星球上找到的最聪明的人。

我主要在学术界(研究生)学习-因此,我将不胜感激栅栏另一侧的人提供的感知能力。实际进行这些采访的人是谁?

[大家好。感谢您的所有体贴和体贴的回答。由于我不想再问其他问题,因此请您为我回答这个问题。

假设候选人X拥有良好的公开作品集,并且他在某个已知的开源项目中做出了贡献-您实际上可以去验证他的补丁,验证他已经关闭的错误并查看他创建的设计。在那种情况下,问题是您愿意给他的公开/可验证的工作以多大的权重,以及他在不到15分钟的时间内回答一些非常人为的二叉树面试问题的能力如何?]


11
当我面试工作时,我并不是在寻找优秀的程序员。我正在寻找优秀的工程师。程序员研究问题并编写解决方案代码。一位优秀的工程师着眼于一个问题,并问“这是我需要解决的真正问题吗?” 如果不是,那么找出正确的问题是什么,设计一个解决方案,平衡游戏中的所有因素(进度,金钱,能力),然后交给程序员进行编程。
PlayDeezGames'2

2
嗯,有道理。任何人都可以在6到12个月内掌握C ++ / Java / python的原始编码技能。但是,实际设计需要非常仔细地了解性能,线程,内存问题和折衷方案的东西是关键。我同意。抱歉! 但是我不能投票赞成你,没有足够的代表。
2012年

Answers:


11

请记住...

  1. 面试过程的主要目标不是得出有关每个被访者个人能力的绝对真理,而是从众多候选人中选择少数候选人。
  2. 雇用一个糟糕的开发商要比传授一个好的开发商昂贵得多。

因此,在很多时候进行采访时,会采用不完善的快捷方式(例如技术测验),因为正如您提到的,在30分钟内判断一个人的过程并不完美。但是由于大多数人没有与您并肩工作的奢侈之处,因此您应该只接受事实就是如此,这是每个人都可以玩的赔率游戏。


“聘请不良开发人员要比传授好的开发人员昂贵得多”-是的,我理解这里的论点似乎纯粹是出于功利主义的观点,即使聘用一名开发人员的可能性也是如此。不良的开发人员接近于零,与此相关的负成本可能将期望的总效用值从正值下拉至负值。
2012年

5
@ user396089,在学术界,人们至少会口口相传,为您提供服务:培训,指导,个人成长等。至少从名义上讲,这是他们使命的一部分。在私营部门,这种关系 97%的功利主义。只要对他们有利,公司只会为您提供机会。
查尔斯E.格兰特

加上查尔斯所说的话,当您走进大门时,就像其他50位候选人一样,您对公司和招聘经理完全陌生。因此,在专业和个人层面上,您可能是最好的人,但是在这种情况下,公司当时的目标实际上是最大程度地提高其未来价值,同时最大程度地降低搜索成本,同时寻求最大的价值。
DXM 2012年

您知道我正在思考一个简单的字符串问题,这很有趣,我今天在面试中无法解决,但后来又解决了;但是,在尝试了将近3个星期之后,我仍未解决与自己的一项兴趣项目相关的问题。其中的细节可以在这里找到- stackoverflow.com/questions/9056108/...
user396089

1
@ Antonio2011a:“如何有效”是一个有趣的术语,而不是黑白的。不同的人使用不同的策略来判断潜在员工的素质。这些策略中的每一个都是某种捷径,因为唯一真正的考验是让人们与您一起工作并留出准备时间。那么这个问题如何有效?或询问大O的有效性如何,或询问他的工作如何有效。这些都是灰色区域,没有一个是完美的。
DXM 2012年

9

真的可以在一个半小时内判断某人的技术能力吗?

不完全是。可以淘汰根本无法编程的人和无法在简历中解释这些内容的人。除此之外,我通常只是试图评估该领域的一般情报和兴趣。在不知道您要解决的问题的情况下,很难进一步评论您的情况。

技术面试问题是否衡量解决问题的能力?

那不是我的技术问题的目的。相反,我试图发现候选人是否掌握了计算机科学的基础知识。为了衡量解决问题的能力,我请应聘者介绍他们研究的一个有趣问题。

在这些面试中脱颖而出的人会继续成为优秀的程序员吗?还是这些采访更适合于寻找“完成工作”类型的人(Spolsky)?

就是这样 伟大是罕见的。我很高兴找到一个能干的人。


问题是KMP的变体(当您对字符串进行一次遍历时,您会存储以前看到的某些字符的出现次数)。最后,取决于字符串的长度和您拥有的计数-您可以回答实际的问题。全部通过-O(n)时间并使用恒定空间O(1)
user396089 2012年

2
“我很高兴找到一个能干的人。”
AProgrammer

2
通过面试的原因是(至少!)与伟大一样多的运气。一旦您掌握了一定的知识水平,机会所发挥的作用就比几乎所有人都意识到的要大得多!阅读建议:Mlodinow的《醉汉小径》
Konrad Rudolph

是的,我读过那本书,还读过纳西姆·尼古拉斯·塔勒布(Nassim Nicholas Taleb)更为有趣和讽刺的“随机性愚弄”。不用说,读完这些书后,我就经历了一段时间的沮丧-如果您了解这两本书的基本前提,那就是-“是的,这真是好运!世界是随机的,我们必须处理它。
user396089 '02

5
  1. 是。是的,老实说。这并不是说30分钟就足以了解一个人的能力。访调员的工作是尽力做到最好,以了解被访者是谁以及他们可以做什么。找人在简历上放一些他们不真正知道的东西,这很简单。确切地了解受访者可以做什么,包括他们的所有技能和优势。

  2. 是。他们让您看到受访者的想法。获得正确答案并非总是必要的。看到某人正在解决他们所苦恼的问题,就像看到某人正确地解决问题而没有太多麻烦一样有益。我总是问一个问题,我认为受访者可能无法回答。

  3. 我不知道有任何经验证据表明技术面试可以找到最佳人选,但这是我尝试过的最好的方法。不同的人擅长于不同的事情,获得​​正确的技术答案并不是决定是否雇用某人的唯一原因。成为公司的合适人选也很重要。

根据您的问题,我认为您需要了解的最大事情是,明确定义的反馈(如字母等级)的日子已经过去。获得正确答案只是结果的一部分。编写良好的代码,交流您的想法并听取他人的意见同样重要。但是,这些领域比较主观,因此需要这样对待。

就像您解决问题的方式一样,退后一步,抬起头来。面试很多,面试官知道这不是一个完美的系统。他们正努力为公司尽力而为,就像您正努力为您做到最好一样。


2
@unholysampler是一个好点-“获得正确答案只是结果的一部分”。圣诞节过后一天,如果您提供一个完善的在线销售门户网站,那也没关系。太晚了。时间和正确答案一样重要。
jasonk'2

+1“他们正在努力为公司做到最好,就像您正在努力为您做到最好一样。”
Burhan Ali

5

在半小时内,您可以判断一个人的技术能力至少与x一样好。也就是说,他们的能力可能比他们展示的要高,但是您可以肯定的是,它并不差。如果x高于您的要求,请雇用他们。是的,如果您展示自己的能力不足,那是不公平的。我只能说在演示方面会变得更好。

如果有人不满意实际的答案,我会给他们一个更棘手的问题。在学术界记忆是一项重要技能。在工作中,当您在附近拥有Google时,这几乎是多余的。

看到大多数优秀程序员的就业后,可以肯定地认为他们在某个时候通过了面试。不,从一个半小时的面试中就无法确定某人是否会成为一名出色的程序员。幸运的是,大多数公司不需要优秀的程序员。他们与稳固,可靠的程序员融洽相处,他们不怕在自己舒适的区域之外完成任务。

开创性的思想家可能不愿接受工作面试的原因是,解决浮躁,开创性问题的机会非常罕见,只有在证明您可以解决平凡而又困难的问题之后,您才会被信任去解决它们不能,例如为什么软件负载超过16%时崩溃。


2
+1“ ...同事们无法解决的平凡而又困难的问题,例如为什么软件在超过16%的负载时崩溃。”
贾德

3

很少有人知道他们的面试技巧是否真的有效,因为他们从不了解失败者的更多信息。但是,如果没有什么可以反驳他们的假设,那么他们就可以证明它们是正确的。因此,掷骰子有一定的意义。

如果说市场是合理和有效的经济理论是正确的,那么公司将寻求雇用面试不好的人,而这不会使他们的工作变得糟糕。因此,一个穿着不合身的西装,满头大汗,看上去很紧张,在面试压力下难以解决技术问题的人-如果有外部证据证明他们可以解决技术问题,而工作压力不像那些人那样面试(通常不是这样)-代表公司获得候选人的最佳机会胜过其他方式所能吸引到的,并且会相应地采取行动。(为企业界提供金钱球)。最终,采访偏见将消失。

实际上,这违背了人性。面试官都喜欢自信的外向型人士,无论其职位是什么,即使技术面试提供的信息比履历表和参考资料差(您的情况也可能如此),他们也会考虑在内。

关于您的问题:

  1. 有些。这些测试的信噪比很差,但是可以调整以淘汰完全不合格的测试,但要付出合格但技术差的面试的代价。

  2. 参见#1。部分噪音来自人们是否曾经看过问题的变化。

  3. 参见#1。这些测试与成为优秀的程序员之间可能存在很小的正相关。

我的建议-学习一些示例技术问题以基本了解。请记住,这有点掷骰子,所以在面试时要自信。如果您可以解释自己的想法而又不会分散自己的实际想法,请这样做。如果情况真的很糟,请承认您在面试时会感到紧张,让他们知道您似乎通常不会遇到麻烦-可能会举一个您确实解决过的类似但更困难的问题的例子。


1
“访问者喜欢自信的性格外向者” ...这对我来说有点不安,我的Myers Briggs类型是INTJ(假设MB有点代表实际的人格类型)。
user396089

2
许多软件开发人员像我一样性格内向。因此,许多面试官也是如此。当然,信心会有所帮助。但是明智的答案会带来更多帮助。
凯文·克莱恩
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.