📜  亚马逊面试经历 | SDE-1 校内

📅  最后修改于: 2022-05-13 01:58:37.339000             🧑  作者: Mango

亚马逊面试经历 | SDE-1 校内

最近,亚马逊来到我们的校园担任软件开发工程师的角色。招聘过程包括 1 次编码测试和 4 轮面试。

第 1 轮(编码轮):编码轮包括一个代码调试部分、能力问题和 2 个编码问题。代码调试部分很简单,我们必须在代码中找到错误输出导致的错误。能力倾向问题是一般的逻辑推理问题。编码问题也很简单。我只记得一个问题。

  • 在已排序的二维矩阵中查找元素。

本轮结束后,57人入围面试。由于当前的冠状病毒情况,所有采访均在 Amazon Chime 平台上在线进行。

第 2 轮(技术):我被问到三个编码问题。我被要求在亚马逊使用的 LiveCode 网站上编写代码,并讨论时间和空间复杂性。

  • 找出图中不连贯组件的数量。

我首先通过使用访问数组给出了 DFS 方法,但面试官要求我使用 O(1) 空间。然后,我建议在访问节点时更改节点值。

  • 在二叉树中填充下一个指针。

我首先给出了一个需要队列的级别顺序遍历方法。然后她让我在 O(1) 空间里做。所以,我给出了一个递归解决方案,我们在前进之前遍历每个级别。

  • 给定一个 BST,找出将产生相同 BST 的数组的数量。

例如 - 给定这样的 BST:一个数组是 2 3 4 5 7 6 10。另一个数组是 2 5 7 6 10 3 4。但这不是有效的数组 - 2 5 10 7 6 3 4。这是因为如果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) 时间内执行以下操作——push、pop、top、max element、min element。

我首先给出了一个使用三个堆栈的解决方案——一个用于实际堆栈,一个用于最小元素,一个用于最大元素。他让我优化空间复杂度。所以,我给出了一个解决方案,我们在堆栈本身中编码 min 元素。

第 4 轮(技术):在这次采访中,我被问到了几乎所有主题的问题。他从网络开始,问我输入 www.google.com 时发生的所有步骤。然后,他继续询问当我键入此内容时操作系统会发生什么,以及操作系统如何响应这个高优先级进程。基本上,他是在询问用于调度高优先级进程的调度策略。然后他问我服务器发生了什么以及服务器瓶颈的可能原因。然后,他转向 OOP,问我继承和接口在 OOP 中的重要性。然后他问了我两个编码问题。

  • 给定一个链表,返回一个新的链表,使得节点的顺序为 1->n-1->2->n-2,依此类推。

为此,我给出了将链表中间拆分,后半部分反转,两半交替遍历的解决方案。

  • 给定一个哈希图,我们需要按排序顺序打印哈希图。

为此,我不知道Java中链接哈希映射的概念。当我被卡住时,他给了我链接哈希图的概念。我给出了一个解决方案,将键值对添加到向量中,对它们进行排序,遍历向量并在 hashmap 的节点中填充下一个指针。然后,通过仅遍历 hashmap,我们将获得节点的排序顺序。

第 5 轮(行为 + 技术):在这一轮中,面试官问了我很多行为问题。其中一些是关于我在一个项目中遇到的困难,我如何解决它们,以及我将如何处理团队中的分歧。然后,他问了我两个编码问题。

  • 求和为 0 的数组中对联和三联的数量。我给了他解决这个问题的两个指针的方法。
  • 给定一个字符串,我必须找到没有重复字符的最长子字符串。

这是一个基本的滑动窗口问题,窗口将只包含非重复字符。如果窗口的大小变得大于最大长度,我们将更新最大长度。

在上一轮中,面试官对我的方法比对代码本身更感兴趣。此外,他在上一轮中问了很多行为问题。这可以被视为人力资源回合,尽管在任何地方都没有明确提及。

总的来说,面试很吸引人,每当我被困在某个地方时,面试官都会引导我朝着正确的方向前进。最终,有 7 人入围了这份工作,幸运的是,我是其中之一。

我建议从 GeeksforGeeks 和 interviewbit 做亚马逊面试问题,因为它们包含迄今为止提出的所有类型的问题。 GeeksforGeeks 中的存档面试问题非常有帮助,因为它包含各种难度的所有类型的问题。我还建议修改网络、OOP、操作系统的概念,因为他们也可能会从这些主题中提出问题。