亚马逊面试经历 | Set 227(校内实习和全职)
今年我们的大学在亚马逊开始了实习季。我们在安置过程之前获得了职位描述(JD)。我们得到好消息,亚马逊增加了总 CTC。有了这个好消息,它也增加了紧张和压力。
第 1 天:编码和能力回合
编码轮是在下午 5 点进行的,所以从早上开始我就修改了一些非常基本的东西,比如排序技术、B 树、AVL 树、寻找幂集和一些 DP 问题。
在线编码考试时间为两个小时,在 HackeRank 上。有 20 个多项选择题和两个程序。多项选择题是 GATE 类型的题,主要来自 OS、数据结构、算法、数据库和 C。我的计划是尽早尝试这些问题并开始编程,但问题很长,花了 30 分钟。 30 分钟后,我跳过了 3 到 4 个问题并开始编程。
程序 1:字谜
当一个单词可以通过改组/重新排列字符转换为另一个单词时,就说两个单词是字谜。给定一组单词,找出给定单词集中每个单词的字谜数。
程序 2:在 O(n) 复杂度中找到二叉搜索树的直径。
给定一组整数值,将这些值插入二叉搜索树并找到树的直径。
这两个程序都很简单。我在 O(n) 中正确解决了程序 2,在 O(n^2) 中正确解决了第二个程序。结果在第二天,所以我们所有人都很紧张。我只能睡 3 个小时:p。
Day2:面试流程
面试第一轮:
问题1:第一轮面试的第一个问题是如何使用递归和不使用递归在二叉搜索树中插入节点。他让我编写两者的代码。
问题 2:给定一棵二叉树,如何找到树中两个节点的最小共同祖先。
问题 3:给定一个二叉搜索树,找到树中两个节点的最小共同祖先。他让我也写这个程序的代码。
问题 4:他询问了大约需要 10-15 分钟的项目。
时间:45分钟。
面试第二轮:
问题1:他让我谈谈我自己。在介绍中,我提到了我以前公司的项目。他问了关于那个项目的下一个问题。我在那个项目上工作了将近 2 年,所以我可以详细地向他解释那个项目。他要求为计数信号量的 Wait And Signal 方法编写代码。
问题 2:给定一个包含 -ve 和 +ve 元素的数组,求最大连续和。
这个问题很简单。
问题 3:给定一个包含 +ve 和 -ve 数字的单循环链接列表,找到 max continue sum。我向他解释了 O(n^2) 算法,但他问的是 O(n)。我没有得到这个问题的答案。我为此工作了 4 到 5 分钟,但我没有得到完美的答案,所以他通过在圆圈上绘制所有元素来给出提示。我一看到圆圈就得到了答案,我告诉我要从大多数 -ve 数字中打破戒指,然后使用第一个问题中的普通算法。他不确定这个算法,他试图用 4 到 5 个例子来打破这个算法,但他不能。得到这个答案后,他很高兴,因为他可能脑子里有另一个解决方案。
问题 4:给定每天的股票价格,找出您可以通过买卖股票获得的最大利润。您只能进行一次交易。
这个问题很简单,来自 geeksforgeeks。
问题 5:给定股票每天的价格,找出你可以通过买卖股票获得的最大利润。您可以进行多笔交易。他让我写这个程序的代码。
时间:1小时10分钟。
第三轮面试:
问题一:他看到我的简历,问我觉得哪个项目最难。我告诉了同一个办公室项目。他问我觉得这个项目的哪个部分最困难。我告诉了与日程安排有关的部分。他问我有关调度和同步的基本问题。
问题2:CPP中的拷贝构造函数是什么
问题 3:解释 LRU 缓存技术以及如何实现它。我给出了各种方法,如数组、队列、堆栈、链接列表。最后他同意使用哈希方法的链接列表。所有其他方法都是 O(n^2) 解决方案,但带有散列方法的链接列表是 O(n)。他对这个答案很满意。
带有散列方法的链接列表:
LinkList 的大小将是缓存的大小。列表中的数据表示缓存的页码。在运行算法之前,我们将构建哈希表。 HashTable 的键是页码,值是链表中包含键的节点的地址。一个指向链接列表的指针表示最近使用的页面(链接列表的前端),一个指针将指向最近最少使用的页面(链接列表的末尾)。当新页面出现时,我们将直接从 O(1) 中的哈希表中获取包含页码的节点。获得该节点后,将该节点移动到表示最近使用的页面的链接列表的前面。如果哈希表中不存在新页面,则更新最近最少使用的指向的页面中的值并将该页面移动到前面。并更新哈希表中的键。
在这里,我们只构建一次哈希,之后不再修改它的值。
时间:50分钟
面试第四轮:
问题1:他询问了项目。我向他详细解释了我的项目,大约花了 10-12 分钟。在解释过程中,他问你为什么使用这种方法,为什么不使用其他方法。
问题 2:给定 n 条跑道和 m 架飞机。您将如何有效地设计此调度问题,以免发生冲突。我通过查看 CPU 调度问题和信号量来解释这一点。
使用基于优先级的调度,其中优先级可以是出发时间和紧急情况。每架飞机使用的跑道如下:
Plane Pi:
Wait(S)
Take off(M.E.)
Signal(S)
S=n
问题 3:这是一个简单的问题。给定已排序的矩阵,按行和按列排序,如下所示:
01 04 07 09
11 23 45 46
51 56 59 63
70 73 75 79
和钥匙。有效地找到给定矩阵中键的位置。我解释了 O(log m)+O(log n) 中的解决方案。他问我写这个问题的代码。
问题4:他问了非常基本的数据库问题。之后他问我什么是最终一致性。我不知道这个答案,所以我说我不知道,他再次问你是否知道 NoSQL 我说不。
时间:45分钟
感谢我的父母、老师、朋友和 GeeksForGeeks。