📜  亚马逊面试经历| SDE实习生

📅  最后修改于: 2021-11-10 06:46:10             🧑  作者: Mango

实习– 2019 年 12 月校外 6 个月

第1轮:

这是 Mettl 的在线测试。它由 28 个基于数据结构和算法的 MCQ 以及一些基于输出的问题组成。难度:- 中到高

它还有两个编程问题:-

  1. 掷骰子问题
    https://www.geeksforgeeks.org/dice-throw-dp-30/
  2. 给定一个无符号的 32 位整数,找到 a) 最左边的有符号位 b) 最右边的有符号位 c) 有符号位的总数。我们有两个返回一个包含 a#b#c 的字符数组

我能够解决这两个问题。大约 7 天后,我收到一条消息,说我已经通过了考试,并在一周后被要求进行面试。

第二轮:

这是一个面对面的回合。面试官很友好。首先询问技术介绍,我是否做过任何实习。然后他直接进入了 DS 和算法。
在这一轮中,我被问到两个问题,并被要求为此编写代码。

  1. 二叉树的迭代后序遍历。 (面试官特意让我只用一叠)
    https://www.geeksforgeeks.org/iterative-postorder-traversal-using-stack/
  2. 打印最大长度递增子序列(长度和子序列都)
    他期待优化的形式,但我只能为 O(n^2) 方法编写代码。我刚刚提到了耐心排序算法,它可以在 O(N log N) 时间内解决这个问题。

问完这个问题,他问我有没有什么问题要问他。商量后,他让我等结果。 HR来了,说要等第二轮。大约 40 分钟后,我被要求参加第二轮比赛。

第 3 轮:

面试官没有浪费任何时间,直接进入了 DS 和算法。本轮没有问简历问题。
我被问到以下问题:-

  1. 给定一个包含 n 个元素的数组,它应该满足以下属性a < b > c < d > e < f > g
    我观察到偶数索引处的元素必须小于它们的邻居,而奇数索引处的元素必须更大。我告诉他一个天真的方法 O(N log N)
    我们可以将元素放在一个 maxHeap 中,然后一个一个地弹出并首先填充奇数索引,然后是偶数索引。他对复杂性并不满意。
    他想要 O(n) 时间复杂度的解决方案。思考了大约 5 分钟后,我向他征求了意见。 (他说冒泡排序)。我也在考虑换
    相邻元素并在我从他那里听到后得到了绿色信号。我告诉他,如果当前元素不满足规则,我们将它与下一个元素交换。
    我为它编写了代码,他通过了一些例子。他心满意足,转到下一个问题。
  2. 他让我实现一个LRU缓存(间接)
    https://www.geeksforgeeks.org/lru-cache-implementation/
    他让我实现为用户获取三个最近播放的视频的机制,如果用户播放了一个新视频并且不在最近播放列表中,则从列表中删除最早的视频,并成为最新的视频。我马上告诉他,这看起来像一个 LRU 缓存。他问我会使用哪种数据结构来解决这个问题。
    我告诉他一个带有双向链表的无序映射。他问地图和列表将存储什么。讨论完方法后,他让我写插入函数的代码。
    写完代码,他问,既然你专门用双链表写删除函数给双链表,给定一个节点指针。
  3. 给定一个指向双向链表节点的指针,删除该节点。
    https://www.geeksforgeeks.org/delete-a-node-in-a-doubly-linked-list/
    我写了代码,他让我处理一些边缘情况。密码是正确的,所以他很快就进入下一个问题。
  4. 设计一个自定义的数据结构,支持 O(1) 时间内的插入、搜索、删除和 getRandom 操作。
    https://www.geeksforgeeks.org/design-a-data-structure-that-supports-insert-delete-search-and-getrandom-in-constant-time/
    我花了一些时间来思考这个方法,并把方法交给了他。当我遇到困难时,他甚至帮助了我。我告诉他无序映射和可变大小的数组会很好。
    他让我编写删除函数的代码。我写了代码,他问我是否犯了任何错误。我又看了一遍,发现了一个错误。我纠正了它,然后他很满意。
  5. 给定一个由 0 和 X 组成的矩阵,其中 0 代表水,X 代表陆地,求连续岛的最大尺寸。我告诉他我会使用 BFS 来做到这一点。
    他问我 Ii 将在队列中存储什么以及我将如何保持岛的大小。我不必为此编写代码。听完介绍他就很满意了。这之后他问我有没有什么问题要问他。我问了他一些关于在亚马逊工作的问题。我们讨论了大约 10-15 分钟,然后他说采访结束了。我知道这是最后一轮了。 HR 告诉我他们会把结果邮寄给我,我在离开前与面试人员握手。面试后一天,我收到邮件说我被选为实习生。

    提示:- 遇到问题时,请尝试与面试官讨论您的想法以及您遇到的问题。我在使用链表或数组之间的第 2 轮中陷入了问题 4。他让我专注于阵列方法。当失败时,不要羞于寻求提示。面试官会给你一个小小的提示,你可以以此为基础。

    判决:选择!!!