📜  亚马逊 SDE-II 面试体验(虚拟回合)

📅  最后修改于: 2021-11-18 02:18:26             🧑  作者: Mango

我接到了一位亚马逊招聘人员的电话,因为我的一位朋友推荐我担任这个职位。她给我发送了编码测试链接,我必须在一周内完成。完成测试后,我接到电话,要求在两周内安排面试。按照计划在 Amazon Chime 上进行了 3 次面试。发布后 4-5 天,hr 通知我他们想继续最后一轮提高门槛,这将在几天后进行。以下是被问到的问题:

在线回合(编码测试 – 90 分钟)

  1. 我们得到了裤子、衬衫、鞋子、裙子清单的成本。我们有一定数量的现金,我们需要确定我们可以购买的可能组合的总数,因为我们必须购买一种并且每种类型只能购买一种
    Eg: pants=[3, 5, 7], shirts = [4, 7, 8], 
    skirts = [5, 8], shoes = [3], budget = 25

    所以在上面的例子中,除了组合 [7, 8, 8, 3] 之外,所有其他都是可能的。

    提示:由于我们必须全部购买,我们可以将前两个列表和后两个列表结合起来,因此我们将有像pants_shirts = […] 和

    Skirts_shoes = […],现在我们可以遍历一个列表,并在另一个列表上二分搜索剩余数量并相应地添加。

  2. 这很琐碎,所以不记得了。

第1轮:

面试官做了介绍,问了一些我做过的项目。然后他从一个数据结构问题开始。

  1. 给定具有以下 TreeNode 的二叉树,在不使用任何额外空间的情况下创建该树的副本。
    TreeNode{
                  left*, right*, random*, val
           }

    我的解决方案:我首先告诉了一个 hashmap 解决方案,我将在其中维护从原始节点到新树中复制节点的映射,并且在第二次遍历中,我也可以分配随机指针。面试官同意这行得通,但他希望我在没有哈希图的情况下做到这一点。我花了大约 15-20 分钟才想出最终代码。我首先将重复节点附加到原始节点的左子节点,例如:

    A                                    A
         B          C         ->                A'        C    
                                              B        C'
                                          B'

    这样在迭代原始节点时,我们可以分配左右指针,我们需要再遍历一次来分配随机指针。

  2. 我们有 N 个太阳系,每个太阳系都有 M 个行星。我们可以在 1 光年内移动到同一太阳系的任何其他行星。我们可以在 1 光年内从第 K 个太阳系的第 M 个行星移动到第 (K + 1) 个太阳系的第一个行星。除此之外,我们还获得了一个虫洞列表,其中每个虫洞指定了入口行星和出口行星。穿过虫洞也需要 1 光年。

    现在考虑到 X 起始行星和 Y 目标行星,我们需要找到我们旅行所需的最小光年数。

    我的解决方案:我告诉他我会创建一个图表(这是一个非常荒谬的建议 tbh :p)然后做 bfs。他询问了创建图形然后应用我的方法的时间复杂度。复杂性非常糟糕,所以我转向了一个新的解决方案。我建议从 X 开始,添加距离为 1 的所有相邻行星,如果该行星存在任何虫洞,并在不创建图形的情况下动态执行 bfs。由于时间较少(因为我在第一个问题上花了大约 35-40 分钟),我只是编写了一个水平 bfs 并且面试官似乎被说服了。

第二轮:

  1. 这是由一位工程经理采取的,他向我询问了我的项目大约 10-15 分钟,然后我们转向了系统设计问题。他让我设计 Slack 信使。

    我首先列出了功能性和非功能性需求(他对此提出了一些疑问),然后我开始绘制高级架构。我画的组件是客户端,网关服务(LB+认证等),消息服务,用户服务,Web Socket Manager服务,Fan Out服务(我加了这个是为了群消息,但他没有问太多在那)。

    他问我我的消息表的架构是什么,以及接收用户在线/离线的场景。还询问了我制作的 2-3 个表的分区键和主键。

第 3 轮:

  1. 这是由 SDE III 人员拍摄的,他又问了我大约 10 分钟的项目,然后转向低级设计问题。他让我设计 HackerRank 平台。

    我再次开始列出我将涵盖的用例,面试官要求我编写我需要公开的所有 API。

    我制作了各种类,如问题(子类为 MCQ 和 CodingQuestion)、答案、候选人、测试、问题库等。

    令人惊讶的是(因为这是 LLD 回合)他问我表的架构以及我会选择哪种 SQL/NoSQL 以及为什么。然后他问我当问题改变时的情况,我无法回答,后来他提到他期待在每个测试实体中都有类似和 EditHistory 的东西。

第 4 轮(提高酒吧):

一位工程经理再次采取了这一点,他对我的项目进行了大约 20-25 分钟的深入讨论。在剩下的时间里,他问了我 2 个 DSA 问题。 (是的,我也很惊讶他没有问任何有关设计的问题)。

  1. 给定一个字符串列表,将字谜组合在一起。 (https://practice.geeksforgeeks.org/problems/print-anagrams-together/1)
  2. 给定两个链表 L1 和 L2,其中链表的头部指向最高有效位,返回将这两个列表相减后创建的链表。 (https://practice.geeksforgeeks.org/problems/subtraction-in-linked-list/1)

笔记:

  1. 在几乎所有轮次中,我都被问到与亚马逊领导力原则相关的问题,因此请确保在参加面试过程之前先完成这些问题。您可以参考此链接(https://kraftshala.com/what-questions-to-expect-in-amazon-interview/)进行相同的练习,我发现它很有用。
  2. 在设计回合中,面试官不会期望你给出最理想的答案,除非你选择的技术大错特错,否则他不会指出这一点。