最近, 亚马逊来到我们的校园担任软件开发工程师的角色。招聘过程包括1项编码测试和4轮面试。
第一回合(编码回合):编码回合由一个代码调试部分, Aptitude问题和2个编码问题组成。代码调试部分很简单, 我们必须在代码中找到错误的输出, 原因是错误的输出即将到来。能力问题是一般的逻辑推理问题。编码问题也很容易。我只记得一个问题。
- 在排序的二维矩阵中找到一个元素。
在这一回合之后, 有57人入围了面试。由于冠状病毒的当前状况, 所有采访均在Amazon Chime平台上在线进行。
第二回合(技术性):有人问我三个编码问题。我被要求在Amazon使用的LiveCode网站上编写代码, 并讨论时间和空间的复杂性。
- 在图中找到断开连接的组件数。
我首先通过使用访问数组给出了DFS方法, 但是面试官要求我使用O(1)空间。然后, 我建议在访问节点时更改节点值。
- 在二叉树中填充下一个指针。
我首先给出了一个需要队列的级别顺序遍历方法。然后, 她要求我在O(1)空间中执行此操作。因此, 我给出了一个递归解决方案, 在该解决方案中, 我们遍历每个级别, 然后继续前进。
- 给定一个BST, 找到将导致相同BST的数组数。
例如-给定这样的BST:一个数组是2 3 4 5 7 610。另一个数组是2 5 7 6 10 34。但这不是有效的数组– 2 5 10 7 6 34。这是因为如果10在7之前, 则10可以变成根和7成为左子代, 这将导致不同的BST。
5
/ \
3 7
/\ /\
2 4 6 10
第三回合(技术性):面试官首先问我有关我完成的项目的一些问题。然后, 他问了我两个编码问题。
- 给定一个数组, 其中每个元素表示成本, 我们将获取两个元素, 将其添加, 然后将其重新插入数组中。运营成本是两个要素成本的总和。我们必须最小化成本。
例如:给定的数组为2、3、4、10。最小和为5(2 + 3)+ 9(5 + 4)+ 19(9 + 10)= 33。
我给出的解决方案是将所有元素插入一个最小堆(作为优先级队列实现), 然后从队列中弹出两个元素, 添加它们并将其推回队列。我们将执行此操作, 直到队列的大小变为1。然后他要求我编写优先级队列的完整实现, 即push, pop, top, empty和size函数。
- 设计一个堆栈数据结构, 该结构在O(1)时间内执行以下操作-推入, 弹出, 顶部, 最大元素, 最小元素。
我首先通过使用三个堆栈给出了一个解决方案-一个用于实际堆栈, 一个用于最小元素, 一个用于最大元素。他要求我优化空间复杂度。因此, 我提供了一种解决方案, 其中我们在堆栈本身中编码min元素。
第4回合(技术性):在这次采访中, 有人问我所有主题的问题。他从网络开始, 问我键入www.google.com时发生的所有步骤。然后, 他继续询问当我键入此内容时操作系统中会发生什么, 以及操作系统如何响应此高优先级过程。基本上, 他是在询问用于调度高优先级进程的调度策略。然后, 他问我服务器中发生了什么以及服务器瓶颈的可能原因。然后, 他进入OOP, 并问我有关OOP中继承和接口的重要性。然后, 他问了我两个编码问题。
- 给定一个链表, 返回一个新的链表, 使得节点的顺序为1-> n-1-> 2-> n-2, 依此类推。
为此, 我给出了解决方案, 以在中间拆分链表, 将后半部分反转, 并交替遍历两个半部分。
- 给定一个哈希图, 我们需要按排序的顺序打印哈希图。
为此, 我不知道Java中的链接哈希映射的概念。当我陷入困境时, 他给了我一个链接哈希图的概念。我提供了一种解决方案, 可将键值对添加到向量中, 对其进行排序, 遍历向量并在哈希映射的节点中填充下一个指针。然后, 通过遍历哈希图, 我们将获得节点的排序顺序。
第5轮(行为+技术):在这一轮中, 面试官问了我许多行为问题。其中一些是关于我在项目中遇到的困难, 如何解决这些问题以及如何处理小组中的分歧的问题。然后, 他问了我两个编码问题。
- 在一个总和为0的数组中查找对联和三联组的数量。我给他提供了两种解决方案。
- 给定一个字符串, 我必须找到没有重复字符的最长子字符串。
这是一个基本的滑动窗口问题, 其中窗口将仅包含非重复字符。如果窗口的大小大于最大长度, 我们将更新最大长度。
在上一轮中, 面试官对我的方法比对代码本身更感兴趣。此外, 他在上一轮问了很多行为问题。尽管没有在任何地方明确提及, 但可以将其视为人力资源回合。
总体而言, 面试很有趣, 每当我被困在某个地方时, 面试官都会向我指引正确的方向。最后, 有7个人入围了这份工作, 幸运的是, 我就是其中之一。
我建议你进行lsbin和受访者的亚马逊面试问题, 因为它们包含迄今为止提出的所有类型的问题。 lsbin中的存档面试问题非常有用, 因为它包含各种难度各异的问题。我也建议修改网络, OOP, OS的概念, 因为它们也可能从这些主题中提出问题。