只是我还是这令人困惑的技术面试问题?[关闭]


153

背景

我只是在一次技术采访中被要求写一个遍历“对象”(注意引号)的算法,其中A等于B且B等于C且A等于C。

而已。那就是我得到的所有信息。

我问面试官的目标是什么,但显然没有目标,只是“遍历”“目标”。

我对其他人一无所知,但这对我来说似乎是一个愚蠢的问题。我再次问,“我在寻找价值吗?”。不。只是“遍历”它。

为什么我要无休止地遍历这个“对象”?可能融化我的处理器?

面试官的回答是我应该写一个递归函数。

好的,为什么不简单地要求我编写一个递归函数呢?谁会写一个永无止境的递归函数?

我的问题:

这对其他人是否是一个有效的问题,如果可以,那么您是否可以暗示我可能会缺少的东西?也许我在解决现实世界问题上考虑得太辛苦了。我已经成功编码了很长时间了,但是这个技术面试过程让我感到自己一无所知。


197
唯一正确的答案是“我不明白这个问题”。
user16764

16
好吧,如果他们真的不说A,B和C是什么(例如-它们是对象),而是将对象放在引号中,那么它们似乎拥有自己独特的术语。如果他们问如何遍历对象,其中对象A 引用对象B,对象B 引用对象C,对象C 引用对象A,则它是可理解的,但是为什么它必须是递归的,我不知道。顺便说一句,如果您维护一个已经访问过的对象的列表,则不必是无限的。但是,是的,我会担心使用该测试为一家公司工作-他们似乎很困惑。
psr 2012年

77
所描述的问题是荒谬的,答案也是如此。您可能是忘记了他们的要求,或者进行询问的人是个白痴,所以最好不要与他一起工作。
梅森惠勒

26
为什么开发人员面试必须痛苦?我们难道不能都坐下来看看彼此的代码并进行讨论吗?开发人员通过执行此操作将知道其他开发人员的位置,并且不需要6个小时。代码测试是最糟糕的。我不介意承认我在提供最佳解决方案方面很烂,而我从未见过的3个开发人员在输入时会看着我。
Erik Reppen

19
我必须检查您的个人资料,以查看您是否和我住在同一地区,因为我在一份工作中工作了一段时间,一位面试我的人问道:“您是否注重细节?” 我回答说:“您能具体一点吗?” 他的回答是:“我无法解释,但是当我看到他们的工作时,我认识一个注重细节的人。” 爱模棱两可。
Jesse C. Slicer 2012年

Answers:


305

这是一个令人困惑,无效的面试问题。面试官无法清楚地表达出他/她正在寻找什么,并希望您能读懂他/她的想法,而不是对您为澄清问题所作的适当尝试做出有意义的回应。认为自己很幸运,您没有得到这份工作。

我认为动词“遍历”对通用“对象”的含义不明确。开始用各种不同的名词代替“对象”一词,很快就会发现,遍历一个对象仅对属于对象的事物的一小部分有意义。

“遍历”“二叉树”的节点是有意义的。“遍历”“小丑”没有任何意义。但是,一个对象可以像表示“二叉树”一样容易地表示“小丑”。


9
我最近开始用“小丑” +1先生代替愚蠢的问题中的名词!
rupjones 2012年

108
“小丑遍历”-对于“愚蠢的技术问题”真是个伟大的模因。传下去!
Radarbob 2012年

8
嗯,我可以遍历var小丑= {帽子:“有花”,头发:“亮红色”,鼻子:“红球”,嘴:“红嘴装成白色”,...};)
mplungjan

37
我在CS理论研究的整个领域都涉及迭代遍历小丑,您不敏感!

6
@JackManey:每个人都知道小丑必须递归遍历。
亚当·罗宾逊

39

我在这里看到三种可能性。

  1. 她完全没有能力。关于这一点没有更多要说的。
  2. 她故意使它变得模棱两可,以了解您在提问时做得如何,以弄清楚您应该做的事情以及她的真正追求。
  3. 无论出于何种原因,她都决定不希望您被录用,因此她提出了一个无法回答的问题。当她被问及技能,她会跳过这一部分,并这样说:“我问他如何穿越三节点图,他完全难倒-没有的怎么连一个线索启动。很明显,他是非常不称职的!我们甚至不应该考虑聘请他。”

7
“我问他如何遍历一个三节点图,...。”如果我正确地写了《 OP》,则没有提及图形或节点。只是“对象”。这是“虚假证词”的一种形式。如果她写这样的话,可能会受到起诉!
Emilio Garavaglia

9
当没有提及人的性别时,您通常使用女性代词吗?
Chan-Ho Suh 2012年

8
@EmilioGaravaglia:首先,它可能永远不会被编写。其次,即使假设它已被写下,您无疑也永远不会获得它,只是一封“我们很遗憾地通知您...”信。第三,除非您有采访记录,否则如何证明采访者没有说实话?底线:理论上您应该是对的-但实际上,几乎没有机会。
杰里·科芬

11
@ Chan-HoSuh:OP在他的评论之一中提到了性别。
杰里·科芬

4
@JerryCoffin那我很抱歉。
Chan-Ho Suh 2012年

32

这只是一个疯狂的猜测,但是假设访问者正在谈论指针引用(这是一个技巧),答案是:没有要遍历的东西,因为所有引用都指向同一个对象。

递归函数?那是为了遍历一棵树。我在原始问题中没有发现任何暗示他在说树的东西。


28
继续。有更好的公司可以工作。
shufler

7
没事 这是一个失败的原因。如果面试官认为他错了,那么他根本不会问这个问题。曾经有人要求我用我想用的任何语言写一个样本。采访我的人认为伪代码是一个有效的选择。
罗伯特·哈维

8
@Robert Harvey:伪代码怎么了?
詹姆斯

6
@Robert Harvey:公平地说,大多数人想要的是弄清楚您如何解决问题,而不是了解您是否已经学习了任何特定语言的语法。在伪代码中指定算法是很常见的。
詹姆斯

8
伪代码和Python有什么区别?:)
David Robinson

15

尽管我不能代表这个特定的采访者,但在前端开发人员职位采访中我也遇到过类似的问题,因此在此示例中将使用的语言是JavaScript。

鉴于:

var A = {
    key1: 'value1',
    key2: 2,
    key3: {
        innerkey1: 'value3'
    }
}

典型的错误响应可能仅“遍历”第一级并打印/比较:

'value1'
2
[Object object]

因此,在编写遍历所有级别的递归示例时,我会提到以下内容:

  • 循环参考处理
  • 如何处理数组(是否也应该递归遍历它们?)
  • 应该评估函数并处理其返回值吗?
  • 对于JavaScript:原型是否应该匹配,继承的属性也应该进行比较?

因此,我猜测面试官想要的“解决方案”是开始一个看似简单的问题的对话,该问题具有许多高级主题-递归性,指针/引用,期望等。


5
用您说的话,WSKid,这很有意义。不幸的是,没有提供任何上下文。
Matt Cashatt

3
没错,这确实很困难。他们应该已经提出了一个用例,或者一个示例3个对象,或者是一些导致实际问题的线索。
WSkid 2012年

1
我在想同样的事情,只适用于python对象属性。知道他们希望回答哪个问题将大有帮助,但这可以通过职位的上下文来预期,即python dev,c#dev,javascript dev,php dev等
Ken Ken

2
+1,用于查找问题可以理解的上下文!
多纳研究员

9

一些面试官专门尝试提出问题,以查看候选人是否足够聪明和诚实,可以给出以下两个答案之一:

我不知道。

或者可能:

正如我所说,我无法回答。

他们不希望候选人接受纯BS作为规范,并且浪费雇主的时间并为实施它付出代价。


6
在这次面试这样的场景中,我们一生都有条件能够提供问题的答案。如果说“我不知道”(顺便说一句)是可以接受的,那么我也应该事先被告知。真诚地回答采访问题的尝试不一定等同于如何对待规格或要求不充分的问题。我认为这是全部要点,这些采访已经偏离了路线,在许多情况下都没有抓住要点。
Matt Cashatt

这么好的答案。但是,不要忘了这需要很多经验。就个人而言,我可以说采访经验是这项工作的重要组成部分。@MatthewPatrickCashatt如果面试官不会接受“我不知道”,那么对IMO的讨论就不多了。
arin 2012年

2
技巧问题要么是拖钓,要么是无能。无论哪种方式,如果面试官问一些技巧性的问题,您都不想在那里工作。
Ben Brocka

7

在我看来,这是关于循环链表的(表达不清)问题。我可能会问这是什么意思(因为答案肯定与上面的答案不同,也就是说它们都是对同一个对象的引用)。

如果这是一个链表问题,那么您(在这种情况下)有一个单链表,其中末端节点指向另一端(尽管按您的话说的话-如果A指向,则可能会被双重链接) B和C-但澄清面试官的角色将对此有所帮助)。

A-> B-> C-> A

同样(这种情况一直发生),面试官可能已经读过这个问题,认为这是一个“好”问题,但实际上自己并不知道答案(甚至是什么意思)。


1
谢谢梅奇-我认为您最有可能讲到最后一点。
Matt Cashatt

5

挑战的一部分是通过询问特定的问题来弄清树结构以及遍历涉及的组成部分,从而获得更多细节。可能有这样的假设:除了树以外,没有其他许多数据结构可以遍历,但在我看来这是一个飞跃。


1
感谢JB King。很好的提醒您提出问题。在这种情况下,我做到了。实际上,我什至问过它是否是一棵树,答案是否定的!但是您的观点是正确的,我有责任通过提问题来提取尽可能多的信息。
Matt Cashatt

3

他们可能想尝试弄清楚您如何处理奇怪的问题。但是在这种情况下,它与“技术采访”无关。它看起来更像是一次心理访谈。


5
我很乐意看到他们的一个软件项目技术规范示例。
Chuck D

如果面试是针对系统分析员或类似职位的,则完全适合:您的工作是帮助客户澄清问题,而不是回答问题。
reinierpost 2012年

1
@reinierpost-不是。
Matt Cashatt '04年

3

编写一种算法遍历“对象”(注意引号),其中A等于B且B等于C且A等于C。

似乎大多数人都认为A,B和C是指针,但是它们也很容易成为小丑。(或者是小丑类的成员。)或者它们可以是小丑的名字。(或类名。或小丑类的子类。)

我本来是要转过桌问的,这是否是他们通常如何准备开发规范,然后告诉他们如何在开发需求规范阶段为他们提供帮助。期望沟通不畅会导致工作产品不佳。他们要么得到要么就没有,如果他们没有得到,我会走开。


2

虽然问题措辞很差,而且面试官显然无法提供任何指导,但我对所要询问的内容略有不同。

我认为面试官正在寻找一种使用某种类型的反射遍历对象结构的解决方案。三个对象相等的信息应该促使进行对象身份比较的对话(A == B表示对象实际上是内存中的同一对象),或者对象相等性比较(A == B表示对象的值是相同)。

面试官说答案是“递归”功能这一事实,可能表明希望对浅层复制和比较进行讨论。


2

这次聚会来得很晚,但是我认为面试官错误地问了这个问题:

编写算法遍历数组,并以此顺序确定 A等于B且B等于C且A等于C。

那么正确的答案将是递归算法。


1

我只是在一次技术采访中被要求写一个遍历“对象”(注意引号)的算法,其中A等于B且B等于C且A等于C。

object问题由这些部分组成A,B and C,并形成一个triangle。这个人只是问对象(一个集合)是否包含所有相等的部分。

面试官想知道是否展示了各个部分A, B and C,您是否可以知道它们是否相等而不会陷入无限循环。这个问题很愚蠢,只是为了理解,但他们仍然设法提出来。

它们在什么时候都是相等的A == B && B == C && A == C,但是可以简化为正义A == B && A == C

问题的简单性导致混乱,而且措辞确实不好。

正确的措词应该是正确的。

编写算法以检查集合的各个部分,以查看它们是否彼此相等。必须注意不要陷入无限循环。例如; 如果部分A等于B并且B等于C并且A等于C可能会引起问题。


面试官的回答是我应该写一个递归函数。

是的,您可以are all my parts equal使用递归函数回答问题。不,这不是一个有效的解决方案。

编辑:经过一番思考。不,不可能使用递归函数检查集合是否包含所有相等的部分。

最有效的解决方案如下。

function are_all_equal(parts)
{
   for(int i=1; i < parts.length; i++)
       if parts[i] is not same as parts[0]:
           return false;
   return true;
}

print are_all_equal(parts) ? "yes" : "no";

在编程中确实会发生此问题,并且要求某人编写算法来测试集合是完全正常的。根据编程语言的不同,通常只需一行代码即可解决此问题。

像他们那样措辞,并期待错误的答案是不正常的。由于这个问题是一年前提出的。我真的希望您最终在其他地方工作。我想听听原帖对他/她的影响。


2
事情变的非常好-从我那家公司可以尽我所能,并且从那以后一直很高兴。
Matt Cashatt

0

如果是这样的话,这是否是Java面试问题,可能是他想通过覆盖“哈希码”和“等于”来测试您的技能。

在将A与A进行比较时,您将不得不重写这两种方法,并使用重写的equals方法停止递归。

在不进行覆盖的情况下,您对“对象” A到B,A到C和A到A的比较将全部为true,但是在覆盖之后,仅当对象A与对象A的比较将返回true时,其他比较将返回false。

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.