面试过程中如何回答错误/未回答的问题?[关闭]


31

今天,我对潜在的实习生进行了首次面试。尽管这大部分是开放性问题,但我为他们做了一些琐碎的编程任务:

  • 如果写三角形边(所有整数)的a,b和c可以代表一个返回true的功能直角三角形
  • FizzBu​​zz。
  • 使用递归计算斐波那契的第N个元素(如果他们不知道斐波那契是什么,我什至可以将它们定义为F(n)= F(n-1)+ F(n-2); F(1)= 1; F(0)= 1)。
  • 实现整数的结构列表并编写函数以将其反转。

这些显然是非常简单的任务,我还没有准备好不解决这些问题。

当他们遇到这些问题时,我应该怎么做?我应该放弃答案吗?给个小费(我这样做了,最终自己解决了这个问题)?还是只是继续(或也许只是停止)面试?

ps。遇到问题时,我的意思不是说有错误,而是如果他们甚至无法入门。Fibonacci和List问题就是这种情况。


6
有关此类问题的另一种观点,请参见本文
Matthieu 2012年

2
他们的最后一年。但即使在我上大学之前,我也已经解决了这些问题,所以对我来说,这真是令人震惊。
Mykolas Simutis 2012年

2
我要在这里变硬。如果某人无法实现列表结构,则他们没有理由进行编程,或者至少没有理由雇用他们。然后我读到这是他们大学的最后一年?这意味着多年的教育,在这一点上,他们应该肯定知道一些基本为。话虽如此,我认为礼貌待人并继续接受采访是公平的。可能只是偶然,他们确实是才华横溢的程序员。
2012年

2
反对这类问题的全部回推使我挠头。我觉得这些很有趣,而且我认为没有找到这种测验有趣的人可能没有成为工程师的心态。我已经看到了这类针对测验的抱怨文章,我对整个事情感到很困惑。
Bill K

3
等等,如果您“不准备让某人不解决这些问题”,您为什么要问这些问题?总的来说,我会以为您问这个问题的原因是要区分“好”和“不太好”的程序员!另外,作为该网站的读者,我很惊讶您认为每个人都可以解决它们!无论如何,请记住,学生可能会变得非常紧张,并且背景可能会有所不同。他们还要做什么工作?我对这些问题有不同的看法。
Antonio2011a

Answers:


36

您说过您正在面试这个问题的实习职位,所以从这个角度来看,对于全职开发人员来说,门槛会更高。

在面试实习生时,您必须记住,他们可能尚未完成学业,并且他们可能没有编程和计算机科学的任何先前背景也已进入大学。因此,您需要将期望调整为可以合理期望某人知道的信息,并达到该职位的声望程度(即Google可以摆脱人们从未听说过的公司的期望)。

浏览您提出的问题时,我很可能会在访谈中对它们的看法如下:

1)编写一个函数,如果三角形的边(所有整数)a,b和c可以代表直角三角形,则返回true。

几何的基本应用程序具有简单的编码,大多数学生应该可以轻松完成此操作。如果由于参加面试而有些压力,至多可能需要提醒勾股定理。这几乎可以看作是一个“自我提升”问题,因为如果他们在面试中非常紧张,可以帮助解决一些人的问题。

2)FizzBu​​zz

再次,一些基本控制语句的另一个应用程序。尚未接触过模数运算符或使用不多的学生可能需要提醒它,但不应遇到解决问题的任何实际问题。

3)使用递归计算斐波那契的第N个元素(如果他们不知道斐波那契是什么,我什至可以将它们定义为F(n)= F(n-1)+ F(n-2); F(1 )= 1; F(0)= 1)。

这往往是一个相当普遍的问题,因此大多数(如果不是全部)学生会在毕业前的某个时候看到它。要注意的是,当递归很适合自己时,它通常会显示出来,因为它适合于递归或基于递归或基于循环的解决方案,然后可以将其进行比较,以便来自不同学校的学生可能会在不同时间根据课程的顺序看到它。在实践中,如果某人不能提出递归,我会要求使用循环来替代,如果他们不能提出,我会更担心他们的潜在能力。

4)实现整数的结构列表,并编写函数以将其反转。

这个问题在编写时实际上可能有点开放性,所以看候选人如何寻求其他信息(例如应包括删除功能,转换为数组等)也是一个很好的问题,但是给出了很好的答案定义的问题陈述(“为整数实现基本的列表结构,该结构允许将数字添加到末尾或任意索引处,删除并包括返回列表的反向副本的功能”)学生应该能够解决只要列表是在早期数据结构课程或早期基础计算机科学课程中介绍的常见结构,便会出现问题。

在与候选人打交道时,如果他们很挣扎,请确保他们放松并允许他们宽大处理,因为他们可能只是表现上的焦虑,这可能是他们第一次真正的面试。解决问题的技巧可能是必需的,与第三个问题相比,在第三个和第四个问题的情况下更是如此。

另外,构建整个采访过程的结构,以便内置“优雅的退出”点。例如,您可能具有以下议程:

  • 见面,问候,面试程序。
  • 短期采访程序员,有关背景的基本问题。
  • 演示编程测验。
  • 打破
  • 休息回来,解雇一些不合适的人选。
  • 与员工程序员进行了扩展面试。
  • 人力资源面试(如果需要)。
  • 包起来。

如果您希望能够及早解雇候选人,因为他们从一开始就知道他们可能会在休息后被解雇,那么这种面试流程往往效果很好。测验前的简短面试还意味着他们不仅要参加考试,还可以让他们进行一些面试练习,也可能使他们认为自己不适合参加考试。如果还有其他程序员在进行测验或协助考生,那么他们也有机会在短暂休息时通过/不及格考生。

在您面试实习生并且候选人都是学生的任何时候,您都必须记住,他们仍然是学生,可能没有太多的面试练习(可能导致表现焦虑),并且可能还没有达到学习目的。甚至能够回答这些问题,这意味着将它们连同给出的问题的“理想解决方案”一起发送给他们,可能是一个好主意。


3
+1非常好的答案。我认为,这类测验的表现结果仅是决定是否雇用的“因素”。如果将其用作严格的合格/不合格筛选器,则可能会错过一些优秀的实习生候选人。从定义上讲,实习生正在尝试一些新事物。它们不仅对您的职业来说是新手,而且在处理“当场”方面可能也没有经验。这是情感因素,人们以不同的方式处理它。
Angelo 2012年

@Angelo-这就是为什么我一直喜欢进行简短的采访并观察/辅助测验,因为它可以给人们足够的时间来查看他们是否希望继续进行采访。对于那些知道自己不想向前推进的候选人而言,休息和提前解雇更多,而不是那些在测验中表现不佳的候选人。
rjzii 2012年

简短而甜美。罐装问题获得罐装答案。为什么不问一个确定一些更重要特征的问题,例如团队/协作的动态性,即兴能力,个人动机……
Evan Plaice 2012年

82

无论我站在哪个方面,我进行任何工作面试的目标都是最终感觉就像我在与同事交谈。遇到问题时,同事总是会来我办公室。当我陷入困境时,我会向同事寻求帮助。因此,在一次采访中,我尝试重新创建这种动态。

换句话说,如果同事需要实施斐波那契数列而又不知道那是什么,您会怎么说?您会向他们解释,直到他们掌握足够的知识以继续自己动手为止。只要它不是永久性的,就不会在无知中感到羞耻。

如果您进行了这项练习,但仍然无法想象自己与那个人一起工作,那么他们就不太适合这个工作。


32
+1:您想在面试时重新创建工作动态,而不是课堂动态。
Matthieu 2012年

3
+1:完全正确。聘请团队合作伙伴,支付经验和技能。
pdr 2012年

1
好点子。在我最成功的访谈中,人们提出了涉及他们所面临问题的问题,而我实际上能够帮助他们找到解决方案。如果您可以将面试视为几天的咨询,那将是很好的。
Bill K

11
+1表示“只要不是永久性的,就不会无知。”
mskfisher 2012年

9

在面试中提出类似问题的目的是确定某人是否可以弄清楚如何解决问题。成为一名程序员的工作通常包括两件事:“接受这些要求并用代码实现它们”和“弄清楚为什么实现不符合要求并加以解决”。因此,您真正要寻找的不是这些特定问题的解决方案,而是解决问题的能力。

了解这一点后,我会给一个或两个提示以帮助某人开始工作,如果很明显他们正在取得真正的进步,但在某处缺少细节,则可能会提供一些提示。但是,如果很明显他们只是无法弄清楚如何解决问题,那么您已经有了答案,就无需继续练习。

举个例子,当我在我目前的工作中接受采访时,我遇到一个问题,即关于在图中找到从一个节点到另一个节点的最短路径的问题。我回答说,我可能会使用类似Dijkstra的算法,我曾隐约记得自己上大学时曾学习过一天,此后从未使用过。题。面试官指出,如果对图形进行一些修改,我的解决方案将陷入无限循环,这会拖慢我的记忆力,因此我解释了避免此问题的正确方法。我最终得到了这份工作。


6

对于实习职位,您可能要问很多。

我不知道你对第四个问题的意思。至于问一个递归问题,这有点不切实际,请检查您自己的代码库并确定使用递归的区域数,我敢打赌,它很少。面试的压力很大,并且期望应聘者实施很少使用的策略,而这些策略与您将要编写的大多数事情相比都是落后的,这对他们来说是不公平的,尤其是在面试开始之初。我个人会问一些问题,这些问题必须在哪里解释重要概念的含义/如何使用,并提供罐头示例。我对那些可以告诉您X书或Google Y搜索将提供实现代码库所需的一切的候选人更感兴趣。


谢谢,但是让我添加一些内容。我和他们一直在同一系上工作,我们在第一学期就已经完成了这些任务,而在最后一年,虽然我仍然认为这是一个很好的评估,看看他们如何思考和解决问题(来吧,斐波那契实际上是送给他们的)。关于列表问题,是的,我在这里并没有很好地解释它,但是对于他们来说,我花了不止一行。我们也就其他软件开发问题,动机等进行了公开讨论!
Mykolas Simutis 2012年

4

恕我直言,您的前两个问题应该可以解决,无论是初中还是大四,自学成才或自学成才的人。

如果我发现面试官正为这两种方法而苦苦挣扎,我将尝试改述该问题,并检查他是否完全理解该问题。然后鼓励她使用纸和笔,白板,绘制图形或她喜欢解决问题的任何方法。我还请她大声思考,以了解她的思考过程,并在需要时给她一点提示,说明她是否走上了正轨,只是不敢前进或遇到障碍。但是,即使有几个提示也无济于事,或者-就像您上面提到的-我最终为她解决了问题,我很可能会结束采访,以免浪费更多时间。在面试中,我一直在努力寻找和专注于候选人所知道的,而不是她所不知道的,但是如果我似乎找不到任何重要的知识,我会在一段时间后放弃。

第三和第四部分比较困难,所以如果大三学生无法获得它们,我可以接受,如果他在其他方面表现出了很好的解决问题的方法和热情。但是对于长者来说,他们仍然是必须的。


4

我必须查一下“ FizzBu​​zz”的意思;原来,我听说过这款游戏及其规则,但是没有听过这个名字,也没有过一段时间。因此,不要以为您不必向受访者提供任何信息。

就是说,这些都是基本的编码问题,如果他们无法通过检查编码答案,我希望即使是入门级编码职位的人也能够思考他们的解决方案。所以我们在同一页面上。您问题的答案取决于他们如何弄错了:

  • 次要语法问题:如果您期望使用某种语言编写代码,那么如果它们错过了分号或对某种标识符的误用,就不要过多地考虑。大多数IDE会立即发现该错误,每个人都会不时输入错误。在几乎所有我期望编写某些代码的采访中,只要将算法正确传达给采访者并且逻辑是合理的,“伪C-ish”都是可以接受的。

  • 较小的逻辑缺陷:如果该算法在大多数(而不是全部)预期情况下都能达到预期的效果(例如,在对FizzBu​​zz进行编码时,15只会导致“ Fizz”或“ Buzz”,但不会同时导致两者),那么成为“单元测试员”,并指出该算法在该情况下将失败,并查看他们是否可以解决该问题。他们可能忽略了该特定情况,或者他们可能还没有完全理解需求。两者都是完全可以理解的日常编码事件,只需提供额外的信息或反馈即可轻松解决。

  • 逻辑上的主要缺陷:如果算法不能通过大多数或任何给定的测试方案,则也要指出这一点,并查看它们是否可以解决。这更是一个问题。他们要么误解了系统的一些非常基本的要求,要么忽略了一些巨大的逻辑漏洞。但是,如果他们能够在给出更多问题详细信息的情况下进行修复,而又没有确切告知他们的代码出故障的地方,则将其归纳为不清楚的要求,然后继续前进。

  • 不知道从哪里开始/针对特定情况的硬编码答案/不了解其伪代码:这是危险信号。如果您要求某人编写遵循FizzBu​​zz规则的算法,并向他们解释这些规则,而您却茫然无措,则采访结束了。同样,如果他们可以在板上放一些东西,但在大部分问题空间中失败,并且在说明故障及其解决方法时您必须握住他们的手,我将不进行第二次面试。


使用实际应用程序对访问者在学校收到的固定问题进行测试吗?多么新颖的主意。+1
Evan Plaice 2012年

3

如果您真的有一个潜在的实习生,因为从未接受过采访,焦虑问题,从未经历过这样的现实生活(您通常会从他们的肢体语言中注意到),像鹿一样扮演大人物。问他们最后的工作。

那将是他的领土,因此他可能不会疯狂。当您找到合适的位置时,问“嘿,您是如何实现的?”。如果他可以解释,则可能使您对他的思维方式有所了解。

之后,将您自己的测试放在议程上。


2

Fizzbuzz是绝对必要的。如果他们不能为Fizzbuzz编写代码,则不应雇用他们。

我通常会要求应聘者参加面试前的代码会议,在那儿我们使用Google Docs解决编程问题(通常是Fizzbuzz +如果他们能轻松完成Fizzbuzz,则是更高层次的问题)。

在此期间,我通常会和他们通电话或与Skype通话,并且由于我正在看着他们解决问题(并与他们谈论他们在某些时候的想法),因此我可以确信他们没有只是谷歌的答案。

只要正确地指定了其他问题(即为每个问题指定公式),问题就可以了。

面试候选人时,我会尽量坚持他们可能会遇到的编程问题。我喜欢字符串操作问题,因为当您在网络上时,用户所面临的几乎所有事情都与某种形式的字符串操作有关。他们如何处理这一点很重要。


1

这取决于您要填补的职位的能力。

如果您要寻找高级开发人员,那么我希望他们知道所有这些。如果他们弄错了,我感到恶心,我就停止采访,谢谢,再见。如果我有一个更客气的心情,我只想感谢他们,赶紧完成其余的采访。

如果我要去初级开发人员,那么这些问题可能被认为很难。我将更感兴趣探索他们的学习能力和学习意愿。因此,我将尝试给他们一些提示,并指导他们前进,看看他们如何回应。


这些都是在大学的最后一年实习,所以我对他们的软,但是我没想到会有问题,现在我觉得我已经太软...
米科拉斯Simutis

如果他们没有机会得到工作,那么尽早停止面试并为他们找借口没什么错,只要确保您对此有礼貌,职位的水平就不重要了。
rjzii 2012年

1

实习生面试是另一种面试。我通常要做的是使用我的标准开发人员问题(例如您提供的问题)来衡量他们在教育中所处的位置。从大二到大四,解决这些问题的能力会有很大的不同。

获得这些信息后,我将面试的重点放在其他技能上,例如,他们能够在团队中工作,他们是否可以教书,是否可以从我们公司实习中受益,是否对开发/学习充满热情等。

对我来说,是非技术性的事情真正使实习生与其他候选人脱颖而出。我宁愿花几个月的时间来辅导/指导那些渴望学习和成长的人,而不是只希望在本学期工作的人。


也许是的,但是没有解决这些问题,真的让我觉得我只是从最基本的角度出发!
Mykolas Simutis 2012年

没错,雇用没有或几乎没有经验的二年级学生可能并不适合每个组织。
Brian Dishaw 2012年

1

问问自己,受访者可能为您的公司增加什么价值。考虑聘请导师的成本,尤其是当导师无法解决问题时。如果答案与预期的工资不相称,那么您有很好的经济理由不雇用他们。

不要害怕回到您的经理那里说:“没有任何候选人可以为我们公司增加足够的价值,使他们值得雇用。” 这比与最终具有负面价值的人做生意要好,因为要有人不断地帮助他们。


0

我的回答似乎有些客气或不屑一顾,但我认为它很好。首先,我给候选人一个非常简单的问题,这是一个热身问题,有助于建立他们的信心。无论他们是否成功,我都会提出一个不那么琐碎的问题,它直接关系到工作需要什么。

在这一点上,它全有还是全无。如果他们航行通过,那很好,没问题。如果他们有些挣扎,没有问题,我会帮助他们前进,然后转移到其他问题上,以评估其他能力。

但是,如果他们完全没有解决问题的能力,我会继续进行,并花掉剩余的面试时间来帮助他们。候选人仍然觉得自己参与了面试,但我不必将面试引导到不同的,无关的方向。对候选人也有好处,因为它可能是有教育意义的。


0
  1. 尝试对他们友善。通过您的问题可以看出,即使在这里,您也不想变得很好。您认为每个人都应该知道这个“ fizzbuzz”术语吗?还是我们应该搜索网络,因为您懒得自己编写网络?相反,我认为,这里的每个人都知道什么是直角三角形。
  2. 什么是“结构清单”?我不知道。我知道“列表结构”。这是什么意思:整数列表?您是指整数列表?我也是,不知道如何开始。而且,请不要说您不是英语。我也是。甚至我从未去过一个讲英语的国家。您肯定知道整数中的整数将是s。如果您不想在这里被别人理解,我可以想象您在这里的表现如何。
  3. 任何有识字的程序员都知道斐波那契行是不应该通过递归完成的书示例。您是否正在测试他们的反对能力或编码能力?做好您的工作,并找到一个更好的示例来测试使用递归的技能。
  4. 对于程序员来说,“在压力下工作的能力”意味着他可以在必要时晚上工作。但是,如果您想拥有优秀的程序员,他们将等待他们的主管是一个非常友好,理解和乐于助人的家伙。如果不是的话,就永远不会有好的程序员。他们不是alpha-rat-m​​ales。如果他们感到有攻击性,他们只会将其封闭在外壳中,什么也不会做。

所以,我的答案是:做好更好的准备。

PS:您已经是经理,因此,确实应该承受压力。

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.