📜  亚马逊专访 | 54套(实习用)

📅  最后修改于: 2021-11-17 10:02:21             🧑  作者: Mango

大家好。这是我在亚马逊实习的面试经历。
职位:2个月实习生
回合数:1 在线 + 2 PI (2 F2F)

第 1 轮:(90 分钟)
20 个 MCQ 和 2 个编码问题
有 20 个基于 C 输出、概率、基础数学、OOPS、算法分析和操作系统的 MCQ。

问题 1:给定一个链表,编写一个函数来反转每 k 个节点(其中 k 是函数的输入)。
例子:
输入:1->2->3->4->5->6->7->8->NULL 和 k = 3
输出:3->2->1->6->5->4->8->7->NULL。
输入:1->2->3->4->5->6->7->8->NULL 和 k = 5
输出:5->4->3->2->1->8->7->6->NULL。

问题 2:给定一个字符串,其中包含由任意数量的空格分隔的单词。编写一个函数,返回一个由每个单词的第一个字母组成的字符串。 (注意:可能存在在给定字符串的开始任何数目的空格,在给定的字符串的末尾或在所述字符串的单词之间)。
例子:
输入:“这是一个测试用例”
输出:tiatc
(这两个问题都给出了函数原型和main。虽然很多解决方案通过了最初的测试用例,但后来因为不满足边界用例而被拒绝。)

第 2 轮:(面对面)(1 小时 20 分钟)
问题 1:给定由两个链表表示的两个数字,编写一个返回和列表的函数。和表是两个输入数相加的链表表示。
例子

Input:
 First List: 5->6->3  // represents number 563
 Second List: 8->4->2 //  represents number 842
Output
 Resultant list: 1->4->0->5  // represents number 1405

我反转了链表并简单地添加了相应的节点以及进位。然后他让我在不颠倒列表的情况下解决问题。然后我在不颠倒列表的情况下迭代地解决了这个问题。
然后面试官让我为同样的问题写一个递归代码。
之后他让我修改代码,以便每个地方的进位都是按值传递的,而不是使用指针(我在我的代码中使用过)。

问题 2:迭代和递归代码来反转链表(注意极端情况:当列表没有节点或包含单个节点时)

问题 3:编写一个函数来检查一棵二叉树是否是另一棵二叉树的子树(Check for all corner cases)。
我用 O(n^2) 的时间复杂度解决了它。他没有要求我优化我的代码。

问题 4:您会使用哪种数据结构来记录股市?

我请他澄清问题陈述。

然后他问我:假设你要维护各个公司在不同时期的股票价值,并返回特定时期特定公司的最低股票价值。

我回答了段树(可能正确的答案是队列数据结构)。
然而,面试官继续提出关于段树的问题。
他让我写一个代码
a)创建段树
b)在段树中执行范围最小查询
c)更新段树
他让我分析构建段树和在段树中执行范围最小查询的时间复杂度。
然后他问我:如果你要维持一家公司过去 6 个月的股票价值……那么你必须每天通过删除一个股票价值并插入一个新股票价值来更新段树。你会怎么做?
在这里,我卡住了,无法在比 O(n) 时间更好的时间内执行更新。(但是使用队列可以在 O(1) 时间内执行)。

最后他问我有没有什么问题。

第 3 轮:(面对面)(20 分钟)
这一轮只问了我一个技术问题。

a)他让我谈谈我自己和我的技术成就。

b)如何将二叉树存储在文件中然后读回。(不一定是BST)
首先我回答说我会存储树的层序遍历。
然后他问我如何维护各个级别的节点(我无法回答)。所以,我改变了我的方法并告诉我:我将存储可以轻松检索原始树的树的中序和预序遍历。
但是后来他告诉我优化我的方法(因为这种方法需要两倍于原始空间的空间来存储节点中的数据)。我无法进一步优化我的方法(但是更好的方法是使用括号。

A
                                      /   \
                                        B    C
                                        /   \
                             D      E

如果这是二叉树,那么它可以在文件中存储为 (A(B(D),(E)),(C))。)
c)然后进行了 10 分钟的讨论,讨论了我的项目、遇到的问题以及如何解决这些问题。
d)最后他问我有没有什么问题。
我询问了 Amazon 的实习项目以及 DBMS 和 NETWORKING 在其中的使用情况。
他开始详细阐述在亚马逊的整个工作流程和他的工作经历……其中大部分我几乎无法理解。他还告诉我要对Java有很好的了解,因为在项目的某个阶段会需要它。

最后我被选中了。

亚马逊的所有练习题!