📜  亚马逊面试经历 |设置 231(校内)

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

亚马逊面试经历 |设置 231(校内)

我们在我们的大学进行了亚马逊校园面试,提供实习(基于绩效的工作转换)。


第一轮(在线编码轮):

20 个多选题。
2个编码问题。

  1. 给定三个巨大的数字,每个都用一个链表表示(链表的每个节点代表一个数字),计算数字的总和并以链表的形式返回数字。例如,9->2->3、4->6 和 2->5->1 分别代表数字 923、46 和 251。结果应该是 1->2->2->0。这可以使用堆栈来解决。
  2. 给定一个图,检测它是否有一个循环。我们可以在这里执行 dfs。

第二轮(技术面试):
我被要求解释我在实习中的工作。我解释了大约10分钟。然后给了我一个二叉搜索树并要求形成它的镜像,即每个父节点的左右子节点都应该交换。我为它写了一个简单的递归代码。

void BST(Node root) {
  if (root==null)
     return;
  Node temp = root.left;
  root.left = root.right;
  root.right = temp;
  BST(root.left);
  BST(root.right);
}

给定一个稍微排序的数组,其中数字先升序,然后降序,找到顺序更改的索引并返回该索引处的数字。例如,i/p: 1234532, o/p: 5。我为它写了一个修改后的二进制搜索(必须处理一些极端情况)。面试官很满意,我被派到了下一轮。


第三轮(技术面试):

我被要求谈谈其中一个项目。我谈到了我做过的一个人工智能项目。他据此问了我一些问题。大约15分钟。
我被问到与在线回合中的第一个问题相同的问题,只是在这里我只需要添加两个数字。我告诉他,但他仍然要求我写下代码并解释它。我给了他递归解决方案以及更简单的基于堆栈的解决方案作为递归的替代品。
给定正数 a1,a2...an,您可以按以下方式对元素求和:1*a(i%n)+2*a((i+1)%n)...+n*a((i+ n)%n) 其中 i 的范围从 0 到 n-1。找出这个总和最大的 i 的值。例如,5、6、7 的各种和可以是 1*5+2*6+3*7、1*6+2*7+3*5 和 1*7+2*5+3*6。答案是 38。
我们可以在 O(n) 中解决这个问题。我们最初计算 i 为 0 的总和。我们进行以下观察。

i=0, sum0 = 1*a1+2*a2+3*a3…n*an。
i=1, sum1 = n*a1+1*a2+2*a3…(n-1)an
sum1 = sum0 – (a1+a2+…an) + n*a1
推广方程: sumi = sumi-1 – (a1+a2+…an) + n*ai ,其中 i 的范围从 1 到 n-1。 sum0 到 sumn-1 的最大值就是结果。
下一个问题,您需要创建一个持续监听请求的应用程序。该应用程序有一个可以访问的公共文件。对于每个请求,必须从文件中检索并返回一些信息。您会为每个请求或新线程生成一个新进程吗?为什么?我说线程,因为要完成的主要处理是在共享资源上完成的,通过创建线程,您不需要复制文件,因为这些资源可以在线程之间共享。
你知道操作系统中的调度算法有哪些?你会为每个算法使用什么数据结构。我提到了以下内容:
先到先得:排队。
基于优先级的调度:优先队列。
最短作业优先:优先级队列(这种调度算法归结为基于优先级的调度)
Round Robin:循环队列。面试官告诉我循环链表更适合目的。我补充说,由于更有效地删除第 i 个节点,循环双链表将是一个更好的答案。他告诉我,您可以在单个链表本身中有效地执行此操作。我想了想,同意了他的意见,同时也向他展示了我将如何在单个链表中进行此操作。
给定一台具有 1Gb 内存和 2Gb 内存的计算机,后者的性能会更快。解释为什么在正常情况下拥有更多内存会比内存更少的计算机更好。答:分页。我还告诉他在某些计算(如外部排序)中,如果你有更多的 RAM,它也会更有效。
给定一个由 1 和 0 组成的矩阵,其中 1 代表一个岛,0 代表水,求形成的岛的数量。面试官希望我能想出一个与此类似的 dfs 解决方案。(与链接中给出的问题不同,1 只能水平或垂直连接)。但我有一个快速的联合查找(不相交集问题)解决方案。


第四轮(技术面试):

我又被问到我的实习工作。我描述的和第一轮一样。他据此问了我一些问题。我们花了大约20分钟。
从左到右按顺序打印二叉树的顶视图。我花了一些时间才弄清楚。当我找到解决方案时,我一直大声解释。我之前在打印具有类似方法的二叉树的右视图时遇到了问题。

给定一个数字 n,打印所有数字的平方,使得平方小于等于 n。例如,如果 n 为 30,则 o/p: 1 4 9 16 25。不要使用 *、^ 或除法运算。
如果我们观察从输出中得到的序列,为了得到序列中的下一个数字,我们添加下一个奇数。因此,0+1=1、1+3=4、4+5=9、9+7=16 等等。

我已经涵盖了几乎所有问我的问题。我不得不等待一个多星期才能得到结果。我被选中了🙂

亚马逊的所有练习题!