在技​​术面试中使用模板问题


14

我最近在一次采访中与一位同事就技术问题进行了辩论。作为一名毕业生,我到很多公司走访,发现它们使用了相同的问题。一个例子是“您可以编写一个确定数字是否为质数的函数吗?”,四年后,我发现即使对于初级开发人员,特定问题也很普遍。我可能没有以正确的方式看待,但是软件公司不应该足够聪明地思考自己的面试问题吗?我去过大约16次面试,当时大约有75%提出了同样的问题。这使我相信许多公司都是懒惰的,只是Google:“采访软件开发人员的模板问题”,我觉得采用这种方法对自己不利。

问题:最好是在模板上使用一组问题,还是应该让软件公司力求更具原创性并提出自己的采访材料?

从我的角度来看,如果我在一次面试中失败了,然后去寻找对我所困扰的问题的好的答案,那么如果这些问题相同,我就可以进行下一次面试。


1
出于好奇,FizzBu​​zz风格的问题源自何处?
荒凉星球

1
软件公司必须小心,不要过多地参与这样的问题:他们成为花费数千小时完善解决方案的人,除非他们去过公司并且看到了这个问题,否则大多数人将需要几天的时间才能获得解决方案。已经。
JB King

2
如果可以接受模板答案,请使用模板问题。
back2dos

Answers:


18

正是由于很难提出明确的问题,要求尽可能少的领域知识,要求具备提出算法的能力而不会成为一个棘手的问题,有人会“要么”要么“获得”或“未获得”,并且人们具有将候选人与之比较的答案的历史背景。最佳问题具有正确答案的多个级别,这使面试官能够评估候选人的问题解决能力。例如,如果有人建议使用一种简单的素数查找算法,那么我们可以讨论您如何优化实现方式或面试官如何将候选人引导至更复杂的算法之一。

我曾在小组中,许多不同的开发人员评估了一组受访者面临的特定问题的难易程度,估计值遍及整个地图。最初,很多人看FizzBu​​zz并认为它太容易了而将其驳回。如果您在没有很好地理解问题的难度的情况下参加面试,那么面试的第五人比第一人称有很大优势,因为您了解到人们对FizzBu​​zz感到困惑,而您对第一人称的印象却很差您接受采访是因为他们有相同的挣扎。

如果开发人员提出新的问题,他们也往往会嵌入意想不到的文化或领域知识。例如,他们会提出有关某项运动的问题,这往往会使知道该运动规则的人受益匪浅,他们可以迅速发现歧义或做出“显而易见的”假设。完全不熟悉这项运动的人必须弄清楚飞行中的游戏规则,并且更有可能犯错误或提出不太复杂的答案。否则,他们会问一个无意中假设候选人会知道/记住一些相对较小的花絮的问题。例如,多年来从事会计系统工作的人,可以假设每个人都知道什么是双重记账系统,或者假设一个简单的双重记账系统模式定义对有能力的开发人员来说是清楚的。但是,这很容易使优秀的开发人员陷入困境,即必须借记现金增加现金余额,而借贷减少现金余额。但是,已经掌握了会计101的人会很快追上。如果您打算测试候选人对会计的熟悉程度,那么这可能是一个完全合理的问题。但是,如果您不寻找主题专家,那将是有问题的。但是,这很容易使优秀的开发人员陷入困境,因为他们不得不借记借现以增加现金余额,而借贷减少现金余额。但是,已经掌握了会计101的人会很快追上。如果您打算测试候选人对会计的熟悉程度,那么这可能是一个完全合理的问题。但是,如果您不寻找主题专家,那将是有问题的。但是,这很容易使优秀的开发人员陷入困境,因为他们不得不借记借现以增加现金余额,而借贷减少现金余额。但是,已经掌握了会计101的人会很快追上。如果您打算测试候选人对会计的熟悉程度,那么这可能是一个完全合理的问题。但是,如果您不寻找主题专家,那将是有问题的。

虽然我认为有人可能会记住人们使用的数百个“常见”模板问题的答案,但作为面试官,这并不会给我带来太大的麻烦。首先,如果他们这样做会给人留下深刻的印象,并且会反映出相当勤奋和解决问题的能力。其次,这通常是相当不错的培训-如果开发人员知道如何反转字符串,知道一些查找素数的算法,知道如何为FizzBu​​zz编写循环和实现控制构造,知道各种图形算法,定期进行更新等)-他们可能是一个非常全面的开发人员。如果开发人员在没有学到任何东西的情况下设法记住了答案,那么当面试官想深入研究或


7

我认为存在一些简单的问题,例如嗡嗡声,倒转字符串等,然后是某些问题,而如果您之前没有看过,那么很难获得预期的最佳解决方案,而且还要增加面试的压力和较短的时间约束。最糟糕的是,有时没有技术知识的招聘人员会问其中一些问题,他们正在寻找非常具体的答案。...如果您没有给出最佳答案,他们会认为您是绝对的白痴。即使您的答案有效,也可以解决问题,尽管它可能不是最佳选择,但它的效率也不会太低。

一些示例:
您将如何洗牌?他们正在寻找Fisher-Yates方法http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle其他答案是“错误的” ...除非您想先洗牌并专门查一下,否则您可能不会知道。在做答案的过程中,您可能会偶然发现它,但是据我所见,他们希望您知道这种寒冷,因此怀疑是否会有大量时间允许找到解决方案。另一种效率较低(但可能更明显)的方法是创建一个新数组,该数组具有指向原始数组的指针和一个为随机数的数字,然后按随机数对数组进行排序。然后使用排序后的数组构造新的纸牌数组。无论如何,我将其介绍给招聘人员都会得到0分。

另一个示例是关于如何在从1到n-1的n个数字的列表中检测重复数字的问题。显而易见的答案(从时间角度来看这是相对有效的)是使用哈希表插入每个元素,如果发现已经插入的元素,则找到重复的元素。最佳答案是因为如果没有重复数,则数字在1到n之间,则可以得到期望的总和为n(n + 1)/ n。然后,如果对数组求和,则得到的实际和要小于期望的和。所以基本上n-(预期总和-实际总和)=重复的数字...这是一个非常特殊的情况...我还好...

另一种方法是,反转字符串中的所有单词,而无需使用任何其他空格。我不得不考虑一下,招聘人员在我认为的5分钟内非常不耐烦(以相反的方式拆分并重新加入字符串,或者将单词逐字排列成一个新数组都非常容易)。我想出了最后一个单词的边界,找到了第一个单词的结尾,然后将整个列表不断下移1,然后插入适当的字母。然后重复直到您到达列表的末尾。这种方法行之有效,并且访调员同意(他有点技术),但是效率很低。当我回到家时,我搜索了最佳答案,那就是反转列表,然后反转每个单词。有些人可能会想到这一点,

现在,一旦您看到其中一些问题,您就可以轻松解决它们,这是事实。因为有些相似的问题也有一些相同的技巧。我特别知道n(n-1)/ 2公式和数字列表有几个变体。但是我仍然不知道这些问题在考什么。FizzBu​​zz是每个人都应该能够做的事情(尽管我看到的变化并不是那么简单,在这种情况下,我开始质疑,即使在没有键入/调试代码的情况下,这对于面试情况来说是否也是现实的)。这些问题中的一些一旦您看到就显而易见,但是如果您没有看到它们,那么它们就不那么明显了。所有人都说过,二进制搜索的第一个正确实现要花好几年的时间...现在二进制搜索是如此明显,因为每个人都可以读懂它。

尽管如此,我认为最糟糕的是非技术人员因为无法欣赏您的解决方案而提出的问题是正确的,尽管不是最优的。他们只知道您的解决方案不是所提出的,因此这是完全错误的,您对此尝试一无所获。甚至非最佳解决方案也常常显示出编程构造方面的知识。除非我正在编写扑克游戏,否则我不在乎有人能洗牌多好。即使是我,在向他们展示了高效的算法之后,我敢肯定,半途而废的人都可以遵循它。

模板问题似乎只会给面试时间更长的候选人带来好处,因为他们更有可能看到更多的模板问题。即使是FizzBu​​zz,第一次看到它时,您可能也会感到恐惧,但是随着您一遍又一遍地看到它,您会变得越来越习惯。您可能要做的最好的事情是提出一些需要自定义业务逻辑的编码挑战。例如,创建一些数据集(对象/记录的数组),然后创建一些业务规则以应用于每个对象并返回答案。例如:某种类型的评分等,但是非常自定义的规则)。尽管他们可能已经遍历记录并应用了无数次逻辑,但是您的规则将是唯一的,因此至少他们必须理解并成功实现您创建的规则。

假设预计的薪水,候选人名单以及他们最喜欢的3个视频游戏,也许还有起薪。喜欢Zelda的候选人将受到300点罚款,喜欢小美人鱼的候选人将获得200点奖金。喜欢大金刚和超级马里奥兄弟但不喜欢马里奥博士的候选人可获得300奖金。喜欢Metroid或Kid Icarus的候选人可以获得200奖金,等等。。。似乎有些疯狂,但是它向您展示了他们将业务规则转换为逻辑程序构造并测试其对布尔逻辑的理解的能力。总体上与fizzbuzz的区别不大,只是不使用模数和循环。您当然可以给他们列表,让他们循环浏览,并使用特定的输出条件将结果打印到屏幕上。


4

在上一次求职时,我的处境非常相似。我想我在所有公司都有相同的链表问题,但有一个(我目前在职)。

我注意到的一件事是,这些问题是在第一次面试中给出的。

从面试官的角度来看,如果一个人不能正确回答这些问题,那么他们就没有为面试做准备,那么为什么还要花更多的时间在面试上呢?我认为这不是正确的主意。该公司将吸引一大堆人,他们可以背诵Google的答案,直到下一轮,但不一定是一群有能力的开发人员。

我发现样板化的FizzBu​​zz问题让人讨厌,但这使采访变得很轻松。我喜欢具有挑战性的面试。当我采访潜在员工时,我想确保我知道他们可以思考和解决问题。我希望他们可以使用Google。

公司应该有问题模板吗?是。它有助于评估前几轮的候选人。模板是否应该包含可以通过Google轻松找到的一般性问题?不,那只是短暂的改变,涉及到的每个人。


4

“软件公司应该努力做到更具原创性,并提出自己的采访材料吗?”

是的,他们应该这样做,但是实际上发生的是您上班了,您从人力资源部收到一封电子邮件,说您明天要面试两名候选人。您已经对鳄鱼有足够的把握,您的经理也不会感谢您花半天时间提出一些新的,好的面试问题。被按压的时候,你依傍问题,被要求,或者你可以快速找到对谷歌。


2
是的,然后您真的很高兴自己的文件充满了很好的面试问题,否则您可能会盯着那个正在努力寻找有意义的问题的家伙
Doug T.

3

您提到的问题通常是fizzbuzz问题,而不是用于招聘的问题;他们是一个拒绝回答的问题(即正确的答案不会以任何方式使您工作,但是错误的答案将使您陷入困境)。因此它们不是很有价值。

后来出现的问题需要加以考虑,并且通常会与公司所做的工作类型以及团队的动态状况有很强的关系。

答案是:两者都有。


4
我同意Fizzbuzz风格的问题是否认问题……但是不要敲打让错误的人下车!
彼得·K

2

如果他们的大部分或全部问题都相同,那确实是一件坏事(对他们而言)。这可能表明面试官没有为这项任务做好充分的准备。

请注意,可以使用FizzBu​​zz测试之类的“模板”入门级问题来快速淘汰完全无能的人,而无需花费太多时间和精力。虽然如此,但主题上的变化对于避免直接从Google听到答案很有用。再者,很容易问应聘者刚才编写的代码实际上是做什么的,以及为什么它起作用(或不起作用)。我相信,技术娴熟的面试官可以迅速发现某人是否只是假装知道答案。

更重要的是,如果某人通过了入门级考试,那么应该提出更难的问题,那就是再也没有足够的理由背诵罐头答案了。我个人通常对受访者的思维过程和解决问题的能力感兴趣,而不是针对谜题的具体解决方案。另一个重要主题将是开发过程和方法-我发起一个开放式讨论,而不是对这些主题的具体问题。在这些问题上,没有正确或错误的答案,因此不可能事先准备。但是通过讨论,我学到了很多关于我和团队是否愿意与该候选人合作的知识。

因此,数量有限的“模板”问题是可以的,但是好的面试是一个流程,面试官应适应这种情况,包括应试者的(广告和实际的)技能水平,精神状态(神经质/疲倦)等。


是的,但是说您要进行FizzBu​​zz测试,以便某个不适合的人失败。他们可以去寻找好的答案,并在另一家公司中通过该问题,这有点让我感到困扰,我认为公司应该有义务不使用模板问题。任何优秀的高级软件开发人员都应该能够想到从简单到困难的好问题。
荒凉星球

2
@Desolate Planet:但是,我怀疑失败的人不是那种查找答案的人……他们只是希望他们不会在下次面试时提出问题。
史蒂文·埃弗斯

嗯..但是即使他们搞砸了3-4次面试,他们仍然足够聪明,可以发现所提出的问题中的模式。再说一次,这只是我对技术面试的一般想法,这让我感到不愉快。
荒凉星球

1
@Desolate,那么他们可能会设法在一家公司工作,而该公司显然根本不在乎如何筛选求职者……因此他们俩都能得到应有的报酬。
彼得Török

@Peter,我同意您的意思,但是对于其他可能适合该职位并拥有可以为公司做出贡献的申请人来说,这是不公平的。他们可能没有机会,因为有人仔细研究了好答案,并在整个过程中犹豫不决。我并不是说所有公司都是这样,但是通常当我加入一家公司时,它们在网络驱动器上都有一个Word文档,其中包含一系列面试问题,而且看起来几乎一样。这让我感到非常懒惰。
荒凉星球

2

我的采访模板为伪代码:

如果问题(FizzBu​​zz_type_question)==正确,则

对于每个(array_of_more_interesting_questions中的问题q)其他问题(q)

结束面试。


1

我认为面试应分为:

  • 社会方面(除了人力资源方面)-此人是否适合我们的组织?他是否有正确的态度-他愿意遵循我们的管理风格吗?由于公司和团队不同,因此这必须是原始的。

  • 角色的总体适用性-同样,该位置应有所不同

  • 核心:侧重于工作主要领域的主题问题-这是科学的,因为它是科学的,所以不必是原创的。

  • 日常工作适合性:这些是关于您希望应聘者每天要做的主题的问题。这可能是科学的,但最好是从他期望的实际工作中得出。这部分会因地方而异。

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.