亚马逊面试经历 |设置 302(校内)
第 0 轮:(在线):20 个 MCQ + 2 个编码问题:
MCQ 主题:OS 页面错误、等待时间(RR 调度)、分页、信号量等。
DS:散列(基于数字的简单链接)
能力:1个概率问题,拼图:1个问题,C:2个问题等。
4轮面试(都是技术面)。每轮进行45-50分钟。
第一轮:
在这一轮中,面试官问了我以下两个问题。
1.a)给定一个数字,找到具有相同数字集的下一个更大的数字。(找到具有相同数字集的下一个更大的数字)
我必须编写涵盖所有边缘情况的完整代码。
由于我已经练习过这个问题,因此没有花费太多时间来编写它。
1.b)给定一棵二叉树,将其转换为一棵树,其中每个节点都包含原始树中左右子树的总和。(将给定树转换为其总和树)
对于这个问题,我首先讨论了方法,确认了边缘情况,然后使用递归编写了代码。
第二轮:
这一轮从操作系统的问题开始。
面试官问了我关于进程和线程、进程调度、互斥和信号量以及内存管理的问题。
被问到的一些问题:
a) 进程和线程之间的区别。
b) 使用线程的优缺点。
c) 差异 b/w 调度程序和调度程序。
d) 命名所有进程调度算法并解释循环进程调度。
e) 一台机器上一次最多可以激活多少个线程?
f) 什么是竞争条件,我们如何避免它?
g)信号量和互斥量之间的区别?
h) 什么是辅助存储器,我们为什么要使用它?
i) 什么是颠簸?
然后他问我关于计算机网络的问题。
a) 解释 OSI 参考模型并编写该模型中存在的所有层以及每一层使用的协议。
b) TCP 和 UDP 的区别。
最后他给了我一个问题,并告诉我首先与他讨论该方法,然后编写涵盖所有边缘情况的相同代码。
问题如下:
你得到一个无限的数字流,在任何时候你都必须打印最早的非重复数字。
例如:2 3 4 2 5 6 输出 3
2 3 4 2 3 7 8 输出 4
我和他讨论了我的方法,他告诉我要进一步提高效率并给我提示。
在他的提示下,我想出了最终的解决方案(使用双向链表和 HashMap)并编写了代码。
他对其进行了评估,发现了 3 个错误。
第三轮:
在这一轮中,面试官问了我关于实习项目的问题。
他让我简要解释整个项目,并就此提出了各种问题。
然后他给了我一个编码问题,让我先解释方法,然后再编码。
问题是,
给定一个无限的数字流和一个整数 k,在任何时刻,您都必须打印到该点扫描的前 k 个元素。
我解释了使用大小为 k 的数组然后在适当的位置插入元素从而确保
数组始终保持排序。复杂度 O(k)
他对这个解决方案不满意,并告诉我进一步改进它,即以 O(log(k)) 为目标。
我进行了一段时间的头脑风暴,然后使用大小为 k 的最小堆给他最终的解决方案。
他还让我写下最小堆的完整代码。
下一个问题是关于缓存的。
他让我告诉不同的页面替换政策。
然后他问我,“你将如何实现 LRU Cache”?
我告诉他可以使用优先队列来实现。
然后他就优先队列、它的内部实现和复杂性向我提出了交叉问题。
他没有要求为此编写代码。
第四轮:
面试官给了我 45 分钟的时间来解决下面的编码问题。
你得到一个无限的数字流,在任何时候你都必须打印到那个时候扫描的元素的中值。
这里的数组中位数是指排序后数组的中间元素。
首先我告诉他我会维护一个排序数组,因此插入的顺序是 O(N),查询的顺序是 O(1)。
他告诉我进一步优化它。
我想过使用堆,并以某种方式尝试为插入和查询实现 O(log(N)),但后来他告诉我它可以进一步优化。
他告诉我分别瞄准 O(log(N)) 和 O(1) 进行插入和查询。
突然,我想到我可以利用 minheap 和 maxheap 来解决这个问题。
我和他讨论了我的方法。他印象深刻。
最后我对问题进行了编码。
最后他问我,“给定一个 BST 的中序遍历,你能建树吗?”我告诉他是的。然后他问我,“有多少这样的树是可能的”?
我知道这个问题的答案,因为它是在课堂上教授的。
我告诉他加泰罗尼亚数字。
结论:从 33 名受访者中选出 3 名。