通过阅读本网站和SO,我看到了许多关于采访问题和答案的故事,这些故事都说候选人必须从头开始实现链接列表。通常,这是对候选人编程(例如编写FizzBuzz)进行的“技巧”练习。这个想法是,如果候选人不能做到这一点,他们就不能编程,应该几乎立即被拒绝。
但是,由于以下原因,我不禁认为这可能是一个不好的做法:
- 诸如C#和Python之类的现代高级语言在本地广泛使用列表。仅在特殊情况下甚至可能不明智的情况下,才需要编写自己的链表对象。
- 像C ++这样的低级语言具有带有迭代器/列表容器和对象的标准库。
- 根据前两点,编码人员可以花很多年甚至不用考虑自己实现列表(链接,双向链接等)。自大学时代以来,有些人甚至可能还没有真正看到过这种东西。
- 计算能力也不是几年前的因素,因此通过指针进行的效率不是(通常)曾经存在的问题。
- 一个简单的网络搜索,例如“链表示例”,将带来大量代码示例,这些代码示例只能被记住并吐出来,而不能真正表明申请人的真正能力。
我应该说,使用链表引发对候选人的问题解决能力/批判性思维能力的开放式提问/讨论最有可能是一种非常好的面试习惯。面试官可以通过任何方式真正看到申请人的身分,以及他们认为如何从中受益。
我认为对于在台式机或Web应用程序上工作的程序员来说,这种“无链表代码,无工作”的二进制方法有点过时了。这也可能非常有害;如果一个候选人不记得如何正确地处理列表的开头,那么他本来就是一个出色的编码人员和同事,但却迷失了自己。有什么想法吗?
编辑:有很多(好)评论表明这是一个要问的好还是坏的问题,取决于工作的上下文。我完全同意,所以让我改一下这个问题:对于许多编码工作,实现链接列表是常见的面试问题,类似于FizzBuzz之类的问题或编写用于计算阶乘的递归函数的问题。这个问题是否具有足够的实用性,可以普遍用于全面评估编程候选人?还是应该问一个不好的问题,除了“高级开发人员,嵌入式链表团队”职位以外?