快速元信息:
我正在寻找一个真正合适的地方来提问这个问题,但是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循环找到最大的数字,第二个for循环找到第二大的数字,因为它仍然是O(n)。