【发布时间】:2018-04-19 15:18:33
【问题描述】:
快速元信息:
我一直在为这个问题寻找真正合适的地方,stackoverflow 上没有。仍然回答这个问题需要编程经验。
我是一名高级软件工程师,并在拥有 250 名员工的公司中负责 node.js 开发人员,因此我正在进行技术面试。我在这里才 2 个月,所以我没有太多经验(以前的公司规模小得多,所以很少招聘新的后端人员)。
面试部分是实时编码,通常通过 Skype。我认为这很重要,因为有些人真的什么都做不了。
但有一件事让我很烦恼——很多人在“查找数组中的第二大数”任务上失败了,我认为这很容易。
我通常只在有限的情况下给他们写这段代码——不要对数组进行排序,也不要对数组使用任何特殊函数:
const _arr = [1, 7, 8, 5, 4, 2];
function findSecondBiggest(arr){
}
console.log(findSecondBiggest(_arr));
任务是将代码写入找到第二大数字的函数中。我认为这只是“检查”问题,并且对于大多数程序员来说都是“去做”。
即使是看起来很有前途的开发人员也经常在这方面失败。我知道他们承受着压力,但我什至试图引导他们,让他们平静下来,他们至少有 20 分钟的时间(通常甚至 30 分钟,因为我在通话中多待了 10 分钟,让他们有机会完成它)。 很多开发人员看起来很有前途——他们有很好的经验和知识,能够评估他们为什么要使用这个框架/技术......但是却不能做到这一点。
我已咨询技术主管,他说如果他们无法做到这一点,我们应该停止 - 因为我们正在寻找程序员并且我们期待编写代码。该公司还对中高级开发人员感兴趣。
这个任务真的那么难吗?或者它是否真正表明您是否可以提出至少简单的算法并实现它?
我也接受使用两个 for 循环的解决方案,当第一个找到最大数字时,第二个 for 循环找到第二大数字,因为它仍然是 O(n)。
【问题讨论】:
-
我知道这将主要基于意见 - 但这绝对不是一个难题。您的候选人是否知道会有编程问题?
-
这确实是一个非常琐碎的问题。
-
我希望我能得到这个问题。它远非微不足道,事实上它与基本的算法素养有关。我的回答是对 Lewis Carroll 的一个小介绍(他提出了这个问题,但没有正确解决),然后按照 Stepanov 的binary counter 进行实施。我不认为这 20 分钟是足够的。 Stepanov 就这个问题做了 10 场讲座。
标签: javascript arrays node.js algorithm