亚马逊面试经历 |设置 281(用于 SDE1)
最近我接受了 Amazon Hyderabad 的 ERM-C 团队的 SDE-1 职位面试。
所以,总共有5轮。
第一轮(屏幕采访):他们与我分享了一个链接,它是 collabedit,您和面试官都可以在其中进行更改。所以,面试从面试官的简介开始,然后他说,在我们开始面试之前,我能简单介绍一下你吗?之后他问我你用哪种语言比较舒服,我告诉他 C.
在这一轮中,他让我编写了两个问题,都是关于数据结构的。
Q.1 将两个由单链表表示的整数相加,生成表示总和的结果链表,如下所示:
链表 1:1->2->3(编号:123)
链表 2:1->2->3(编号:123)
结果链表:2->4->6(编号:246)
你需要处理所有的边缘情况。
我给了他一个解决方案,即反转列表,使用每个节点数据一个接一个地添加两个列表,然后转发进位,反转结果列表。
他再次问你能想到任何其他解决方案,我说他将列表数据转换为整数并将它们添加并存储在结果列表中。他说一个列表中可能有数百万个节点,结果可能超出整数范围,那么你会怎么做?然后他给了我一个提示。你能用递归来做吗?我说是的,使用递归可以很容易地完成,然后他让我使用递归编写求和链表的代码。
Q.2 给定一棵二叉树和一个总和,找到所有从根到叶的路径,其中每个路径的总和等于给定的总和。
例如:给定下面的二叉树和 sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
输出:
[
[5,4,11,2],
[5,8,4,5]
]
我告诉他递归地将树的元素存储在数组中,并在我们得到总和时打印数组。他对此感到满意,并要求我为此编写递归函数。我写了代码。他检查了所有测试用例,然后将问题修改为如果您必须找到从任何节点到任何其他节点的给定总和并打印路径,您会怎么做。
我告诉他解决方案,但他不得不离开一天,所以他说我今天完成了。 8 天后,我接到 HR 的电话,说我下周将进行现场面试,并问我下周你什么时候有空。
然后我进行了现场面试。
总共进行了四轮,其中两轮通过视频会议进行,另外两轮是 f2f 轮。
第 2 轮(与 ERM-C 团队经理的视频会议):
采访从他的介绍开始,然后是我的介绍,然后经理告诉我亚马逊团队的工作和角色。
然后他问了我一些与我之前项目中完成的工作相关的命令,我如何编译代码以及命令的输出是什么等。
他让我详细解释我在之前的项目中所做的两个项目。
之后他问我你知道的所有数据结构是什么,我告诉他基本的数据结构。
现在他说让我们讨论一些编码部分。
您将获得两棵非二叉树,您需要在两棵树中找到最大高度的公共子树。各种问题:您将如何定义此类树的结构?你将如何遍历树?写出结构和树。
他只是问我方法,他没有要求写整个代码。
接下来他问静态变量在Java中的作用是什么。
你在你的项目中学到了什么新东西吗?等等
第 3 轮(视频会议):
采访从他的介绍开始,然后是我的介绍。
告诉我你的项目。
Q.1 给定一个包含从 1 到 N 的 N 个元素的数组和一个包含 N/2 个元素的字符串,其中字符串的每个元素都是两个整数对。您需要以这样一种方式排列数组的元素,即字符串中的对在数组中组合在一起,您需要进行多少次最小交换。
例如:
a[]={1,2,3,4,5,6};
s[]={1,6;2,5;3,4};
结果数组应该是:
结果[]={1,6,2,5,3,4};
和一个返回最小交换次数的整数。
我无法准确解决这个问题。
然后他问我,给你一个单树遍历,你能不能在它的帮助下构造一棵树。
我说,我们需要两次遍历,其中一个必须是中序遍历,他说好的。
Q.2 给你两棵树遍历,一个是中序的,另一个是你从前序或后序中选择的任何一个,你需要为它构造一个二叉树。为它写代码。
写了完整的代码。
然后他问什么是虚拟内存。
进程间通信是什么意思。
它的各种类型是什么等等。
第四轮(面对面):
这是与亚马逊的另一位团队经理一起。
与前几轮面试一样,首先是介绍,然后是一些与项目相关的问题。
然后他讨论了一些技术问题。
再次与第一轮相同的问题,但对其进行了一些更改。
Q.1 给定两个单链表,返回结果和列表。这个时间编号在每个节点中以相反的顺序给出。
前任。
N1=123。所以,第一个列表是 3->2->1
N2=764。所以,第二个列表是 4->6->7
结果列表为 7->8->8,总和为 887
我,涵盖了所有的边缘情况,为它编写了代码。我正在使用 list 的函数insert_at_end() 所以他让我为相同的函数编写代码,然后再次让我检查所有边缘情况。
Q.2 给你一个只有时针和分针的模拟时钟,你需要想出一个广义方程来找到这两只手之间的角度。
在我的脑海里经过这么多的挣扎后,我想出了一个等式
6*|5x-y|
其中 x 代表小时,y 代表分钟。
然后他问了我一些行为问题,比如
为什么是亚马逊?
你为什么不加入你的实习生公司?
你准备好重新分配了吗?
然后他在等其他面试官来,所以他问的是大学,学位等等。
第5轮(面对面2对1):
采访从他们的介绍开始,然后是我的介绍。
向我们简要介绍一下您的项目。
然后他提出了技术问题。
说让我们从一个热身问题开始。
Q.1 给你一棵二叉树,你能画出它的镜像吗?我画了图像,然后他让我为它编写代码,涵盖所有边缘情况。
Q.2 老鼠迷宫问题。
只是问我方法不是完整的解决方案。
Q.3 给定一个排序后的旋转数组,您需要找出需要进行多少次旋转才能使数组完成排序数组,并且正确处理所有边缘情况。
我写了代码,他问了很多案例,我根据他给出的所有条件修改了代码。