背景
我刚刚在一次技术采访中被要求写一个遍历“对象”(注意引号)的算法,其中A等于B且B等于C且A等于C 。
就这样。这就是我所获得的全部信息。
我问面试官的目标是什么,但显然没有一个目标,只是“遍历”了“对象”。 ,但这对我来说似乎是一个愚蠢的问题。我再次问,“我在寻找价值吗?”。不。只是“遍历”它。
我为什么要无休止地遍历这个“对象”?
面试官回答说我应该写一个递归函数。
好,为什么不简单地问我写一个递归函数呢?谁会写一个永无止境的递归函数呢?也许我在解决现实世界问题上考虑得太辛苦了。我已经成功地编码了很长时间了,但是这种技术面试过程让我觉得自己一无所知。

评论

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

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

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

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

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

#1 楼

这是一个令人困惑,无效的面试问题。面试官无法清楚地表达出他/她正在寻找什么,并希望您阅读他/她的想法,而不是对您为澄清问题所作的适当尝试做出有意义的回应。认为自己很幸运,您没有得到这份工作。开始用各种不同的名词代替宾语这个词后,很快就会发现,宾语的遍历仅对属于物的事物宇宙的一小部分有意义。

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

评论


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

– rupjones
2012年4月12日在21:57

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

– radarbob
2012年12月12日22:50



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

–mplungjan
2012年4月13日在7:29

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

–user11946
2012年4月13日15:54



@JackManey:每个人都知道必须递归遍历小丑。

–亚当·罗宾逊(Adam Robinson)
2012年4月15日下午3:09

#2 楼

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


她完全没有能力。
她没有故意说什么。
她故意使它变得模棱两可,以了解您在提出问题以弄清楚您应该做什么以及她真正想要做什么之后做得如何。 />无论出于何种原因,她都决定不希望您被录用,因此她提出了一个无法回答的问题。当她被问及您的技能时,她会跳过那部分,说:“我问他如何遍历三节点图,他完全不知所措-甚至都不知道如何首先,显然他非常无能!我们甚至不应该考虑雇用他。”


评论


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

–埃米利奥(Emilio Garavaglia)
2012年4月13日下午6:52

当没有提及人的性别时,您通常使用女性代词吗?

– Suhan-Ho Suh
2012年4月13日上午10:01

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

–杰里·科芬(Jerry Coffin)
2012年4月13日在13:31

@ Chan-HoSuh:OP在他的评论之一中提到了性别。

–杰里·科芬(Jerry Coffin)
2012年4月13日在13:31

@JerryCoffin那我很抱歉。

– Suhan-Ho Suh
2012年4月13日在16:43

#3 楼

这只是一个疯狂的猜测,但是假设访问者正在谈论指针引用(这是一个技巧),答案是:没有要遍历的东西,因为所有引用都指向同一个对象。 />递归函数?那是为了遍历一棵树。我在原始问题中没有发现任何暗示他在说树的东西。

评论


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

– Shufler
2012年12月12日21:18

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

–罗伯特·哈维(Robert Harvey)
2012年4月12日在21:19



@Robert Harvey:伪代码怎么了?

–詹姆斯
2012年4月12日21:37

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

–詹姆斯
2012年12月12日21:47

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

–大卫·罗宾逊(David Robinson)
2012年4月13日在5:30

#4 楼

虽然我不能代表这个特定的采访者,但在前端开发人员职位采访中我也遇到过类似的问题,因此在此示例中将使用的语言是JavaScript。 />
var A = {
    key1: 'value1',
    key2: 2,
    key3: {
        innerkey1: 'value3'
    }
}


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

'value1'
2
[Object object]


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


循环引用处理
如何处理数组(也应该递归遍历它们吗?)
应该评估函数并处理它们的返回值吗?
对于JavaScript:原型是否应该匹配,继承的属性也应该进行比较?访调员的目的是开始一个看似简单的问题的对话,该问题涉及许多高级主题-递归性,指针/引用,期望等。

评论


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

–马特·卡夏特(Matt Cashatt)
2012年4月12日21:28在

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

–WSkid
2012年4月12日在22:37

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

–肯
2012年4月13日在1:34

+1可以找到问题有意义的上下文!

–研究员
2013年6月17日18:06

#5 楼

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

我不知道。

或者也许:

我不能按照规定回答。实施它。

评论


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

–马特·卡夏特(Matt Cashatt)
2012年4月13日7:41



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

– Arin
2012年4月13日在16:12



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

–本·布罗卡(Ben Brocka)
2012年4月13日在21:26

#6 楼

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

如果这是一个链表问题,那么您(在这种情况下)有一个单链表,其中末端节点指向另一端(尽管按您所说的话写的话-如果A指向B和C,则它可能是双重链接的, (

A-> B-> C-> A

评论


谢谢梅奇-我认为您的最终结论是最有可能的。

–马特·卡夏特(Matt Cashatt)
2012年4月13日在2:35

#7 楼

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

评论


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

–马特·卡夏特(Matt Cashatt)
2012年12月12日21:47

#8 楼

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

评论


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

–卡盘D
2012年4月13日的1:35

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

– reinierpost
2012年4月13日在13:26

@reinierpost-不是。

–马特·卡夏特(Matt Cashatt)
2012年4月13日15:06在

#9 楼


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


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

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

#10 楼

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

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

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

#11 楼

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

编写一种算法遍历数组并确定A等于B和B等于C且A等于到C的顺序。

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

#12 楼


我刚刚在一次技术采访中被要求写一个遍历“对象”(注意引号)的算法,其中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";


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

像他们那样措辞,并期待错误的答案是不正常的。由于这个问题是一年前提出的。我真的希望您最终在其他地方工作。我有兴趣从原始帖子中了解他/她的情况。

评论


事情发展的非常好-从我那家公司能尽我所能,并且从那以后一直很高兴。

–马特·卡夏特(Matt Cashatt)
2013年6月17日22:41

#13 楼

如果是这样的话,这是否是一个Java面试问题,可能是他想通过覆盖“ hashcode”和“ equals”来测试您的技能吗?

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

不进行覆盖,对“对象” A至B,A至C和A至A的比较都将为true,但是在覆盖之后,仅当object与对象A的比较将返回true,而其他比较将返回false。