亚马逊的SDE面试经验
- 最后更新 : 2021年8月9日
第一轮(在线评估)。 这一轮通常包括两个编码问题,你必须写出代码,并在一个单独的窗口给出适当的解释。这一轮的时间约为1小时。
问的问题有
- 对一个质数和非质数的订单列表进行排序(leetcode.com/discuss/int…
- 优化内存使用 (leetcode.com/discuss/int…)
在这之后,你将不得不做一些行为MCQ类型的问题。
在接下来的所有回合中,我被问到了行为和编码问题,因此我将尝试包括这两个问题。
第二轮: 这一轮从我的介绍和当前项目开始。在这之后,面试官询问了我在做一些意外的复杂工作时的情况,以及我是如何处理这种情况的。
编码问题。
- 给定一棵二叉树,计算所有左边的叶子的总和。
- 实现LRU Cache。面试官故意让这个问题模糊不清,只引用了 "实现LRU缓存",因此我问了很多澄清的问题,并慢慢得出了一个使用双链接列表和哈希图的最优解决方案。
第三轮: 这一轮也是从我的介绍和目前的工作开始。
编码问题。
-
评估一个以字符串形式给出的算术表达式,该表达式只包含数字和+, -, *, /四种运算。
Input: "3*2+5" Output: 11我决定使用两个堆栈来解决这个问题,并将所有的算术运算符和数字存储在不同的堆栈中,规则是。
"不能将低优先级的运算符推到高优先级的运算符上"
"当一个运算符被弹出时,两个数字也会从另一个堆栈中被弹出"
所以我的算法基本上是这样的。
-
启动两个堆栈作为operatorStack和operandStack
-
对表达式进行扫描
-
如果发现一个数字,就把它推到操作数栈中
-
如果找到一个运算符,并且运算符栈的顶部比当前运算符的优先级低,则将其推入运算符栈。
-
如果找到一个运算符,并且operatorStack的顶部比当前运算符的优先级高,那么继续从operatorStack中弹出运算符,直到顶部比当前运算符的优先级低或相等。每弹出一个运算符,你就必须从operatorStack中弹出两个数字,并在这两个数字上应用弹出的运算符,然后将结果推回到operandStack上,像这样。
op = operatorStack.pop() number2 = operandStack.pop() number1 = operandStack.pop() operandStack.push(number1 op number2)
注意这里第二个数字是先被弹出的。
- 在对表达式进行扫描后,用上述同样的规则从operatorStack中弹出其余的运算符。
- 你的最终答案将是opperandStack的顶端。
还有一种简单的方法,将英缀表达式转换为后缀,然后用一个堆栈简单地评估它。
-
-
对于这个问题,我给出了两种方法,一种是O(n^2),另一种是O(n)
由于时间所剩无几(大约15分钟),我在解释O(n)的方法时有些困难,但面试官被说服了,要求我把它编码出来。
之后又问了一些与计算机科学有关的问题,比如。
- 你使用过什么类型的数据库
- SQL和NoSql数据库的区别是什么,对哪种类型的查询都进行了优化?
- 线程和进程之间的区别
- 为什么线程中的通信比进程快(因为线程共享相同的内存空间)?
- 什么是锁和信号灯
第四轮: 在这一轮中,面试官问了大约30分钟的行为问题,他真的希望所有的问题都能得到详细和深入的回答。我引用了我能记住的问题。
- 你曾经做过的一个复杂的功能,你面临的挑战是什么,你是如何处理这些问题的?
- 有一次,你面临紧密而严格的最后期限,你是如何满足它们的?
- 你是如何学习你所从事的技术的,你采取了哪些步骤?
- 你是如何提高自己的? 等等
- 在接下来的30分钟里,他问了这个编码问题。从一个数组中找出一对总和最接近于零的数字。为此,我使用了排序和双指针方法。
第五轮: 在这一轮中,又有大约30分钟的时间被行为问题所占用,与上一轮类似,他也希望得到详细而深刻的答案。
编码问题。
一些提示。
- 如果第一个问题很简单,不要花太多时间去解释,因为通常面试也会问第二个问题,因此留给你解释和编码第二个问题的时间就会很少。
- 在所有的行为问题上都要诚实,因为他们会对你的答案提出很多反问,如果你编造了一个问题,肯定会在某个时候崩塌。
读者请注意!现在不要停止学习。用本手册掌握所有重要的DSA概念。 DSA自学课程以适合学生的价格掌握所有重要的DSA概念,并成为行业的准备者。要完成从学习语言到DS Algo以及更多的准备工作,请参考 完整的面试准备课程.如 果你准备好了,请用以下方法测试你的技能 TCS, 维普罗, 亚马逊.**谷歌**和 微软测试系列。
我的个人笔记 箭头_下降_上升
保存