📜  SDE-1 的亚马逊面试体验

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

SDE-1 的亚马逊面试体验

我通过亚马逊员工的推荐申请了亚马逊印度的 SDE-1 职位。  

第 1 轮:(书面轮)这一轮包括 20 道不同主题的 MCQ 和 2 道编程题,需要在 90 分钟内解决。大多数 MCQ 来自数据结构和操作系统。问题很简单。编码问题如下:

  1. https://leetcode.com/problems/course-schedule/
  2. https://leetcode.com/problems/reverse-string-ii/

我能够解决问题和大多数 MCQ。

第 2 轮:(技术面试 1,1小时)这一轮从介绍开始,然后是3 个数据结构和算法问题,需要用笔和纸解决。在这里,如果您对问题有疑问,我建议您提出问题。当你被卡住时,面试官可能会给出提示。如果他们要求您编写代码,那么您就走在了正确的道路上。我在面试中被卡了 2 到 3 次,但能够解决所有问题。问题如下:

  1. https://www.geeksforgeeks.org/convert-array-into-zig-zag-fashion/
  2. https://www.geeksforgeeks.org/bottom-view-binary-tree/。写完代码,面试官让我根据用户的选择打印树的顶视图或底视图,而不需要改动太多代码。
  3. www.geeksforgeeks.org/sliding-window-maximum-maximum-of-all-subarrays-of-size-k/

如果您已经听过这个问题,那将是一件好事。但我建议你自己思考,而不是记住解决方案,以防你忘记了解决方案。不要惊慌。尝试解决问题,就好像您以前从未听说过一样。

第三轮:(技术面试2,1小时)面试官有点经验。在这一轮中,面试官讨论了我写在简历上的项目。请仅提及您可以解释的项目。我只写了 3 个项目。他让我选择1并解释。在我解释的时候,面试官问了一些问题。我给了他一个满意的答复。这更像是一场讨论。这次讨论大约有 20 分钟。然后是关于我的实习的 5 分钟讨论,然后是一个简单的算法问题。

www.geeksforgeeks.org/find-minimum-element-in-a-sorted-and-rotated-array/

在此之后,将进行 20-25 分钟的讨论,讨论为两种类型的查询设计最佳数据结构。

  1. 在数据结构中插入邮局。邮局的详细信息按顺序排列:国家、州、城市、城镇、邮局名称。这个顺序总是一样的。
  2. 打印给定区域的所有邮局。该地区可能只涉及一个国家或国家和州的组合等。但请记住,对于任何州,国家总是会给出。对于任何城镇,都会给出国家、州和城市。

在这里,向面试官提出问题。在这种情况下,问题陈述有点模糊。它涉及层次结构。因此,任何人都会提出树的解决方案。但请记住,解决方案是如何存储树。邻接列表在这里不是一个好的选择。请注意,树中的级别数是固定的。因此,在这里我们可以将每个级别存储为哈希映射或 BST 。哈希映射显然更好,但正如我所说的 BST 作为解决方案。也有关于 BST 的讨论。因此,BST 在最差时间复杂度方面表现出色,而哈希映射在平均时间复杂度方面表现出色。有更多的讨论,因为我怀疑如果还有一个级别,如何修改数据结构。但经过讨论,我明白了。最后,面试官说这是一次很好的头脑风暴。

第4轮:(技术面试3,1小时)本轮再次开始项目讨论。我向他解释了我在之前的采访中解释过的同一个项目。但在这次采访中,我遇到了一些关于该项目的新问题。然后他提出了一个数据结构问题。我已经给了他解决方案,但是当我告诉他这个问题与第一轮的问题非常相似时,他阻止了我编写代码。但是,问题是:

https://www.geeksforgeeks.org/print-binary-tree-vertical-order-set-2/amp/

然后,他又问了一个问题:

www.geeksforgeeks.org/find-the-largest-subarray-with-0-sum/

在这里,我想出了涉及两次遍历数组的解决方案。然而,时间复杂度为 O(n)。但他让我在 1 次遍历中解决问题。在那个时候,我无法想出方法。所以,他让我写代码。在编写代码时,我在一次遍历中想出了解决方案。我告诉他方法。然后他又问了一些关于解决方案的问题。基本上,这些问题会告诉你哪里错了,你应该纠正你的解决方案。

之后,他问我是否知道 DBMS。我说我在第二年就学会了。所以,对它不是很自信。但是,我补充说你可以问我这些问题。他问了一些与事务有关的问题,这些问题导致了对死锁和临界区的讨论。临界区和死锁问题基本上都在操作系统中。他给了我一些情况。我使用信号量解决了所有这些问题。

问题:

  1. 如果两个进程试图访问该部分,如何管理关键部分。这可以使用一个信号量来解决。他进一步询问如果有两个以上的过程怎么办。答案还是一样的。
  2. 他询问如果多个进程试图更新和获取索引处的值,如何处理特定索引处的数组中的值。在这里,我们需要 n 个信号量。每个索引一个信号量。
  3. 他进一步询问如果我们使用同一组信号量进行更新和获取会发生什么。答案是我们不能同时获取和更新同一个索引。他还问如果我们使用不同的信号量集进行更新和获取会发生什么。答案是如果我们同时更新和获取,我们可能会得到模棱两可的值。

这些技术面试是在现场进行的。在此之后,将通过电话举行最后一轮(Bar Raiser)。这次采访是在一个月后举行的。

第 5 轮: (Bar Raser Round, 35 分钟):这一轮以简单的介绍开始,然后讨论我的实习。与我共享了协作编辑链接。他让我解决编辑器上的一个编码问题。我告诉他解决问题的方法并不完全正确,但他对解决方案感到满意。有时,更多的是关于你的方法而不是正确性。所以,自信总是有帮助的。问题是:

给定一些涉及单字符变量除法的方程,如 a/b = 2.3 b/c= 3…等,求 a/a、b/a 等表达式的值。答案 - 如果不存在解,则为 1。该问题可以使用有向图来解决,其中节点是字母,边 u->v 给出 u/v 的值。因此,表达式可以通过从一个节点遍历到另一个节点乘以路径中的所有边来解决。找到边缘案例,并在问题不清楚时向面试官提问。

在所有的面试中,最后,如果有任何问题,面试官都会问你。问一些好问题。