SDE-1 的亚马逊面试经验 |亚马逊-WOW 2020
亚马逊有一个专门针对女性的名为 AmazonWOW 的计划。这是为了促进女性在技术方面的发展。这对女性来说是一个很好的机会,因为她们只能与其他女性竞争,而不是与男性竞争。在线申请于 4 月推出。该计划包括为期两个月的预科学生实习和全日制实习以及最后一年学生的实习。
它总共包括 4 轮,首先是在线编码竞赛,然后是 3 轮电话面试。
在线测试:
第一轮是在线编码轮。它由 2 个编码问题和 28 个 MCQ 组成。我们有 1.2 小时。编码问题非常简单,但 MCQ 非常困难。我想说运气在破解在线编码回合中很重要。
1.第一个问题:找到两个字符串之间最长的公共子序列。这是标准的动态编程问题,但约束不是很高,所以我使用递归解决了它。
2.第二个问题:我在任何平台上都没有找到确切的问题,但很简单。给你一个由小写英文字母组成的字符串,返回该字符串的互联网资源地址。
字符串的 Internet 资源地址定义为
<协议>://<域>.ru[/<上下文>]
例如:httpsunrux -> http://sun.ru/x
对于 MCQ,您必须牢牢掌握 OOP 和 c++ 语言。 :
第1轮:
在这一轮中,我获得了一个亚马逊 chime 链接和实时代码编辑器链接,我必须在其中进行编码。面试官先问了我的介绍,然后介绍了。在我的介绍中,我告诉他我对竞争性编码、写作和阅读的热情。
然后我们立即转向编码问题。他告诉我,我只有 45 分钟的时间来回答,所以我必须想出最好的方法。
1. 第一个问题: 求 x ^ y mod z。我给了他 O(log(y)) 方法。我涵盖了当 y 为零或负数时 x 为零或负数的所有边缘情况。当 y 为负数时,他告诉我向用户返回一个错误。我使用缩进和合适的变量和函数名称正确编码。我使用 int 来存储变量,但是当值非常高时,我应该使用 long long int。我错过了这个案子。然后他转到第二个问题。
2. 第二个问题:给定一组依赖项,我必须找到一个合适的依赖项顺序。我告诉他我会为此使用拓扑排序。他让我解释我的方法,然后我编写了代码。但是在编码时,我错过了一个极端情况,即依赖项会循环。他告诉我更正我的代码。我通过检查依赖项中是否存在循环来更正我的代码。
3. 第三个问题:对于这个问题,我给了他两种方法,第一种是线性计算 x 的个数,第二种是使用修改后的二分查找。他没有要求我编写这个问题的代码。
最好的部分是我之前已经解决了所有这些问题,所以我在那里并不紧张。最后,我问他哪里可以改进,他让我检查代码,最后提交给面试官。
12天后,本轮比赛结果公布。
第 2 轮:
在这一轮中,我还获得了 Amazon chime 链接和实时代码链接。面试官问了我两个问题。
1.第一个问题:将所有更大的值添加到给定 BST 中的每个节点。我给了他 O(n ) 时间复杂度的解决方案。最初,我编写了错误的代码,但我的方法是正确的。他干了我的代码,指出我在代码中犯的错误并告诉我更正代码。我更正了代码,他对我的方法感到满意。我告诉他时间复杂度,即 O(n)。我告诉他,如果我们考虑内部堆栈,那么空间复杂度将为 o(n),因为在最坏的情况下,如果 BST 倾斜,BST 的高度可能为 O(n)。
2. 第二个问题:但是在这个问题中,他给了我三个条件。
1. 只能在一个方向上遍历数据结构。
2.您不能使用额外的空间,即就地算法。
3. 您可以使用您选择的任何数据结构。
我的第一种方法是使用数组数据结构。我告诉他,在第一次遍历中我会找到负数的计数,然后我将开始填充我的结果数组。但他说我不能使用额外的空间。
我的第二种方法是使用二叉搜索树,结果将是树的中序遍历。但他告诉我,我必须返回我正在使用的数据结构。
然后他问我知道的数据结构是什么。我告诉他我知道堆、队列、栈、单链表和双链表。然后突然想到了双链表,我告诉他我将使用双链表。他告诉我,在双向链接中,您可以双向遍历。然后我告诉他会使用单链表。他告诉我编写代码并干运行我的代码。他对我的代码很满意。
我的第二位面试官是一个非常乐于助人和知识渊博的人。最后,他说:“很高兴采访你。 ”
11天后,第二轮成绩公布。
第三轮:
在这一轮中,我还获得了亚马逊铃声链接和实时代码链接。面试官是个很nice很冷淡的人。他试图让我舒服。他介绍了自己,然后我做了简要介绍。在这一轮中,我被问到两个问题。一个是编码问题,另一个是 OS(操作系统)问题。
1.第一个问题:如果我们有一个优化好的代码,进程中的最大线程数取决于哪些因素?
我们就这个话题进行了大约半小时的讨论。我告诉他如何在客户端-服务器应用程序中使用线程,在同时执行写入、自动更正和建议的文本编辑器中使用线程。他问我如果一个站点有100万个客户端,那么会创建100万个线程,我告诉他使用多个服务器。我告诉他不。线程取决于机器的资源。我告诉他这将取决于计算机的内存。然后他想知道,是哪个记忆影响了它,主要记忆还是次要记忆。我告诉主内存会影响线程的数量,因为所有进程/线程都驻留在主内存中。我也在考虑其他因素,但后来他转向编码问题。
在此之后,我们转到编码问题。
2. 第二题:找出数组中第一个缺失的正数。
我的第一种方法是使用散列,这种方法的时间复杂度是 O(n),空间复杂度是 O(n)。他告诉我在恒定的空间里做。我向他建议,每当我遇到一个元素并且如果它小于 n 时,我将在该索引处将元素设为负数。然后我将再次遍历整个数组,如果我找到任何值为非负数的索引,则表示该元素不存在,它是第一个缺失的正数。如果没有这样的没有。找到然后答案将是n(数组的大小)+ 1。但是这种方法不适用于包含负数和重复编号的数组。所以我改进了我的代码来处理否定和重复的否。
他对我的做法非常满意。最后,他让我问他一个问题。我问他我怎样才能提高更多。他似乎对我印象非常深刻。他告诉我,我在处理所有边缘情况时非常敏锐,而且我非常专注。
结果:选择
一些重要提示:
1.永远相信自己。
2. 沟通技巧在面试中很重要。
3.运气是一个重要的因素,你不能忽视它。
4. 永远保持积极的生活。再困难的情况也不要放弃。
5.实践和耐心是关键。