📜  SDE-I 的亚马逊面试体验(校内)

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

2021年3月-4月

2021 年 3 月,我通过我的大学校园参加了 Amazon SDE-I FTE(全职等效)招聘流程。首先,有一轮在线编码,然后是三轮虚拟面试过程。

在线编程回合:从在线编程回合中,大约有 40 名候选人入围了下周举行的面试过程。

  • 在在线编码回合中,提出了两个问题(针对不同候选人的不同问题),一个有点棘手,另一个更容易。我实际上最终没有完全成功(:3)。
  • 在我的第一个问题中,我记得我通过了 13 个测试用例中的大约 8 个,而在另一个测试用例中仅通过了 9 个中的 2 个。我以为我没有机会通过资格赛,但是当入围名单公布时,我最终在名单中名列前茅。我很惊讶,但后来我了解到,提出这些问题的开发人员实际上会彻底检查您的代码,并找出您是否使用了正确的逻辑(或至少接近它)。
  • 如果您的逻辑看起来不错,并且您错过了一些边缘案例并且最终没有通过每个测试案例,那么您仍然有不错的机会通过(像我一样!)。所以,也要注意你的逻辑!

第一轮面试:

  • 在第一轮面试过程中,我被要求自我介绍以及我是如何培养对这样一个软件角色的兴趣的。
  • 然后,面试官在为我提供了一个实时编码链接后,我必须在其中编写代码(只是所需的函数/类/结构,而不是从上到下的整个代码),然后转向了一些编码问题。
  • 他让我在旋转的数组中找到一个以其他方式排序的元素(https://practice.geeksforgeeks.org/problems/search-in-a-rotated-array4618/1)。我告诉他我可以为他提供一个需要 O(log n) 时间的二进制搜索解决方案。
  • 当得知我已经知道了方法,他移动了,要我写一个函数来找到一个二叉树的最低共同祖先(PHP= 700221)。我成功地编写了代码并在其上运行了一些手动测试用例。之后,他稍微修改了 LCA 问题并询问了我的方法。我分享了我的想法,但不是 100% 正确,所以他告诉我正确的方法。
  • 然后他又问了我一个问题:https://practice.geeksforgeeks.org/problems/maximum-gap3845/1
  • 他让我用 O(n) 的时间复杂度解决它,想了一会儿,我告诉他我想到了什么方法。我不知道 Pigeonhole Sorting 技术,并尝试使用堆栈来解决它,但无法在有限的时间内找到合适的解决方案。但是面试官对我的方法很满意,并告诉我“非常接近”。
  • 几个小时内,我接到一个电话,并被告知我的第二轮面试安排在一个小时内。

面试第二轮:

  • 在像上一轮一样自我介绍之后,面试官问了我关于我的机器学习项目的问题,然后转向了编码问题。
  • 他问了我关于 Circular Tour 问题(https://practice.geeksforgeeks.org/problems/circular-tour/1),这对我来说实际上是新的,因为我之前没有解决它。当面试官问我想使用什么额外的数据结构时,当我告诉他我不需要任何数据结构时,他感到非常惊讶(甚至不需要队列,因为它的解决方案非常受欢迎,正如我在我之后了解到的那样)面试)。我用 O(n) 时间复杂度和 O(1) 空间复杂度解决了它,并花了大约 15-20 分钟来思考该方法。
  • 后来我们手动检查了一些测试用例,在我的代码中,我发现了一些错误并更正了它们。最后,他实际上对我的方法很满意,我们在采访结束前就 Big O、theta 和 Omega 符号进行了一些讨论。
  • 第二轮过后,我很有信心能入围第三轮,这在我收到邮件说决赛和第三轮定于第二天早上后确实如此。
  • 现在一些紧张开始在我的脑海中蔓延,因为我实际上可以在我的脑海中看到终点线。我根本没睡好,一大早就准备面试了。

面试第三轮:

  • 说完我的过去,面试官彻底问了我的项目以及我在其中使用的概念。
  • 他实际上事先研究了这些概念,所以他问了我它的每一个细节,我真的很喜欢这次谈话,因为这是第一次有人真正对我所做的事情感兴趣 (;3)。
  • 然后他根据他们的领导原则问了我一些行为问题(非常重要!)。
  • 接下来,他让我实现任何缓存并编写 get() 和 set()函数。我不知道缓存,因为它不在我的课程中,因为我来自电气工程背景。但是我对 LRU 缓存的工作原理有一点了解,并尝试使用数组列表和哈希图来实现它。
  • 那些已经解决了这个问题的人可以意识到我无法得出一个最佳解决方案,实际上,我离它很远:(。但我尝试并尝试并实施了每一个在我脑海中点击的想法规定时间1小时,最后他说会离线看我的做法,祝我好运。
  • 我实际上非常失望,因为我无法解决很多朋友已经知道的缓存问题。如果一个人不知道它是如何工作的,那实际上很难,所以我没有为此责怪自己,而是对一切顺利进行得很开心。但在一周之内,我欣喜若狂地发现我和我大学的其他 7 名学生一起被选中,我的名字!当然,他们确实喜欢我在最后一轮的思考过程和态度,否则,我的工作解决方案远不及最佳解决方案。那种感觉是不真实的,永远无法被其他任何东西取代🙂

几个重要提示:

  1. 处理你的逻辑,更多地关注你如何解决问题而不是结果。
  2. 彻底了解亚马逊的领导原则,并非常重视可能出现的任何类型的行为问题。此外,要重视解决给定情况的 STAR 格式,因为亚马逊非常重视这些事情。
  3. 每当您编写代码时,请始终尝试推断代码的时间和空间复杂度,因为这对于验证任何编码面试过程的轮次至关重要。
  4. 面试前不要紧张,因为相信我,亚马逊面试是互动式的,而不是疑问式的。因此,这实际上是您与面试官进行的讨论,以尝试针对特定情况找到解决方案。请注意手头的时间,因为亚马逊面试严格约为 45-60 分钟。

最后,如果我能进入亚马逊,相信我任何人都可以。在完全不夸大自己的情况下,我会说我非常专注并致力于我想要实现的目标,并为之而努力。享受您的代码成功运行的感觉,并通过关注更大的目标来处理今天手头的事情。必要时总是休息一下,并确保整个过程不会让你感到压力。我相信你们都会做得很好!祝你好运🙂

本次采访经历由 Supratik Mitra 提供。