亚马逊最常问的面试题

2025 年 4 月 26 日 | 阅读 17 分钟

亚马逊前 CEO 杰夫·贝索斯曾说过:“我宁愿面试 50 个人而不雇佣任何人,也不愿雇佣错误的人。”

从他们的 CEO 的话中,你可以了解亚马逊招聘流程的质量。这并不意味着亚马逊希望你失败。相反,它仅仅意味着他们只希望雇用证明自己有价值的人。

在本文中,我们将解释亚马逊的面试流程、你需要准备讨论的技术主题以及如何回答面试官提出的面试问题。

亚马逊的面试流程

整个流程将包括 5 轮(1 次在线编程测试 + 4 次面试),共 5 轮。

第一轮(在线编程测试轮)

本次测试包含两个编程题,你有 2 小时的时间来解决。你还需要提交解决问题的思路以及算法的时间复杂度和空间复杂度。

第二轮(技术面试轮)

在这一轮中,你将得到 2 到 4 个编程题,重点关注基本的问题解决能力和数据结构。题目可能会根据你的经验水平而有所不同。你经验越少,需要面对的编程轮数就越多。

第三轮(设计面试轮)

在这一轮中,候选人可能会被问及关于真实产品的高层设计架构和组件的面向对象(OOPS)设计问题。公司可能会跳过此轮,为初级软件工程师职位。

第四轮(招聘经理轮)

这一招聘经理轮用于根据态度和以往的工作经验来测试文化契合度。在此轮中,候选人会被问及一般性的 HR 问题和之前公司的经验。面试官可能会讨论你在上一家公司所做的项目,并根据这些经历提问行为问题。

第五轮(Bar Raiser 轮)

这是最后一轮面试,称为可选的 Bar Raiser 轮,它整合了以上所有内容。在这里,一位高级工程经理可能会问你关于你过往的工作,并再次提问一些行为问题。目的是判断你在技术上是否优于亚马逊特定团队的平均水平。

亚马逊面试必须准备的技术主题。

编程语言

亚马逊在招聘技术职位之前,不要求对任何特定编程语言有专业知识。但是,你必须熟悉 C/C++、Java、Python、C# 或 Ruby 等语言的语法。你也应该知道内存管理是如何工作的,或者最常用的集合、库等。

数据结构

这是你必须准备的最重要的技术主题。亚马逊的大部分工作都涉及以高效的方式存储和访问数据。因此,你必须对常见数据结构的内部工作原理有良好的知识和理解,并比较和对比它们在各种应用中的使用。

算法

你必须了解并很好地理解最常见的算法,例如遍历、分治、广度优先搜索与深度优先搜索等,并确保你理解它们的权衡。请专注于学习不同类别算法的实现策略,而不是死记硬背。

编码

你可能会被要求编写语法正确的代码而不是伪代码。尝试在没有 IDE 的情况下编写代码。最好用纸笔练习编码。这将在面试时有所帮助。公司偏爱编写可扩展、健壮且经过充分测试的代码的候选人。这些是你代码的主要评估标准。

面向对象设计

面向对象设计是编写良好软件的最佳实践,因为良好的软件设计对成功至关重要。你的软件需要可扩展且可维护。因此,你应该对一些常见且有用的设计模式有实际的了解,并知道如何以面向对象的方式编写软件。

数据库

公司偏爱对非关系型数据库有良好了解的候选人。亚马逊开发了 Amazon Web Services(例如 DynamoDB),以便其开发者社区能够轻松利用非关系型数据库的优势。因此,了解关系型和非关系型数据库是很好的。

操作系统

候选人必须熟悉一些操作系统主题,以提高代码的性能。(例如,内存管理、进程、线程、同步、分页和多线程)。

互联网主题

你必须了解互联网的基础知识,例如浏览器如何从 DNS 查找和 TCP/IP 到套接字连接的整体工作原理。

基础机器学习和人工智能

你必须具备机器学习和人工智能的基本知识,如数据驱动建模、训练/测试协议、错误分析和统计显著性。如果你能复习机器学习和人工智能教科书来准备这些主题,将会很有帮助。

一些技术面试题示例

给定两个大小为 N 的整数数组 A 和 B。沿圆形路线有 N 个加油站,其中站 i 的汽油量为 A[i]。你有一辆油箱无限的汽车,从站 i 到下一个站(i+1)需要 B[i] 的汽油。你从其中一个加油站开始旅程,油箱是空的。

如果能绕行一圈,则返回最小的起始加油站索引,否则返回 -1。

你只能朝一个方向行驶。 i 到 i+1,i+2,… n-1,0,1,2.. 完成一圈意味着从 i 开始,最终回到 i。

问题说我们有两个 int 数组。第一个是 cost(成本),另一个是 gas(汽油)。我们有一辆车,需要行驶“n”个地方,其中 n 是上述两个数组的长度。

现在,根据问题,我们可以从某个点开始。假设是 3,那么意味着到达下一个点,我们需要比 3 的成本更多的汽油。

请看示例

假设汽油数组是:{1, 2, 3, 4, 5}

成本数组是:{3, 4, 5, 1, 2}

这里,我们可以看到汽油数组的第三个元素是:4(索引从 0 开始)。

成本数组的相应元素是 1,所以要到第五个位置,我们的汽油应该比成本多。如我们在此看到的,它是 4 > 1。

这里你看到,汽油消耗了这么多才到达下一个点。即使到达那里,你也会剩下 3 个单位的汽油,因为 4-1=3。

所以,在下一个点,你最初会有 3 单位的汽油。

现在,问题是问我们应该从哪个点开始才能遍历所有点。

现在,让我们取汽油数组和成本数组如下

gas = {1,2}

cost= {2,1}

现在,让我们从第一个元素开始,即索引 0。

所以,第一次行驶后我们车里的汽油将是 = gas[0]-cost[0] = 1-2=-1。

由于这是一个负数,这意味着我们无法从索引 0 开始行驶。

现在,让我们从第二个元素开始,即索引 1;

第一次行驶后我们车里的汽油将是 = gas[1]-cost[1]=2-1=1。

我们还剩下 1 单位的汽油,之后我们将到达索引 0,所以我们将拥有 = 1+gas[0]-cost[0]=1+1-2=0

所以,这意味着我们可以从索引 1 完成我们的旅程。

所以,有两种方法可以解决这个问题

第一个解决方案是使用两个循环来检查索引是否存在,但这将花费大量时间,时间复杂度为 O(n²)。

另一种解决这个问题的方法是按照以下步骤进行

  • 取一个变量 start 并将其初始化为 0,另一个变量 end 并将其初始化为 1。
  • 我们将从 start 循环到 end,并不断增加 end,直到它与 start 相同。例如,如果我们的数组长度为 5,那么:1->2->3->4->0。在这种情况下,我们将知道 start 是答案来自的索引。
  • 为了存储我们车里的当前汽油,我们将使用另一个变量 curr,然后在任何时候,如果 curr 变为负数,这意味着该索引不能是起始点。在这种情况下,我们将 start 增加 1。
  • 这里的主要问题是我们知道如何在数组中向前移动。我的意思是,我们知道如何增加当前指针。但我们如何回来呢?这里的指针是这样的:1->2->3->4->5->6……。它不会像:1->2->3->4->1 这样回来。
  • 要解决这个问题,我们必须使用一个简单的技巧。而不是增加值,例如:n=n+1,我们将使用:n=(n+1)%length。
  • 在这种情况下,当指针到达末尾时,它将再次从零开始。

查看上述问题解决方案的完整代码

从一个大文件或数组中找到 K 个最大的元素。/ 编写一个高效的程序来打印数组中的 k 个最大元素。数组中的元素可以任意顺序。

假设我们有一个数组 [10, 13, 2, 69, 40, 29, 70],我们需要检索最大的 3 个元素,即 k = 3,那么我们的程序应该打印 70, 69 和 40。

有几种方法可以解决这个问题

方法 1(使用排序法)

  • 首先,我们将元素按降序排序,时间复杂度为 O(nLogn)
  • 然后,打印排序后数组的前 k 个数字,时间复杂度为 O(k)。

查看上述问题解决方案的完整 Java 代码

输出

70 69 40

上述问题的 Python 代码

时间复杂度: O(nlogn)

方法 2(使用冒泡排序 k 次)

  • 修改冒泡排序,使外循环最多运行 k 次。
  • 打印第 1 步得到的数组中的最后 k 个元素。

时间复杂度: O(nk)

注意:与冒泡排序一样,我们可以使用其他排序算法,如选择排序来获取 k 个最大的元素。

方法 3(使用临时数组)从 arr[0..n-1] 中获取 K 个最大的元素

  • 将前 k 个元素存储在临时数组 temp[0..k-1] 中。
  • 找到 temp[] 中的最小元素,设最小元素为 min。
  • 对于 arr[k] 到 arr[n-1] 中的每个元素。O(n-k)
  • 如果 x 大于 min,则从 temp[] 中移除 min 并插入 x。
  • 然后,确定 temp[] 中的新 min。O(k)
  • 打印 temp[] 中的最后 k 个元素

时间复杂度: O((n-k)*k)。如果需要排序输出,则为 O((n-k)*k + klogk)。

方法 4(使用最大堆)

  • 构建一个最大堆树,时间复杂度为 O(n)。
  • 执行 k 次 Extract Max 操作,从最大堆中获取 k 个最大元素,时间复杂度为 O(klogn)。

时间复杂度: O(n + klogn)

方法 5(使用最小堆)

  • 构建一个包含给定数组前 k 个元素(arr[0] 到 arr[k-1])的最小堆 MH。O(k)
  • 对于第 k 个元素之后的每个元素(arr[k] 到 arr[n-1]),将其与 MH 的根进行比较。
  • 如果该元素大于根,则将其设为根并调用 MH 的 heapify,否则忽略它。// 步骤 2 的时间复杂度为 O((n-k)*logk)
  • 最后,MH 包含 k 个最大的元素,MH 的根是第 k 个最大的元素。

时间复杂度: O(k + (n-k)Logk)(无排序输出)。如果需要排序输出,则为 O(k + (n-k)Logk + kLogk)

上述问题的 Java 代码

输出

70 69 40 

亚马逊最常问的 HR 问题

1)你为什么想来亚马逊工作?/ 你为什么选择亚马逊?

这是 HR 面试环节中你会被问到的第一个标准问题。但大多数人并没有很好的答案。我们知道这个问题没有正确答案,但候选人必须避免含糊不清的陈述,例如“这是一家伟大的公司”。如果你想这么说,没问题,但首先,你必须有一个很好的解释来证明你的观点。

在这里,我们根据不同的职业视角提供一些标准答案。以下是一些最佳可能答案

工程师的回答

我想来亚马逊工作,因为我认为我可以在家庭自动化领域帮助公司开拓新的商机。(这里,你可以具体说明你想在家庭自动化领域应用的更细分的领域)。由于 Alexa 部门正在研究家庭自动化,我可以将我的硕士研究项目关于家庭自动化、智能电表和大数据延伸到这里。[这里最好解释你的具体工作领域和你在这个领域的想法。]

财务经理的回答

我想来亚马逊工作,因为它是全球领先的在线零售公司之一,净销售额为 1360 亿美元,位列财富 500 强第 12 位。这是一家快速发展的公司,也是互联网零售领域的先驱,其销售额在过去四年翻了一番。这是我想工作的地方,因为我知道我将有机会发挥我的能力。[这里你可以说明你之前工作中最具挑战性的部分,以及你知道你将在新工作中需要做的事情。]

销售经理或产品经理的回答

我想来亚马逊工作的原因如下

  • 我之所以想来亚马逊工作,第一个也是最重要的原因是我看到了创造和营销对社会产生巨大影响的产品的可能性。我在消费品行业拥有丰富的销售和营销领导经验,所以我看到亚马逊是一个非常有趣的工作场所,其产品质量和交付速度都非常出色。他们有机会超越竞争对手。
  • 我总是喜欢深入研究工作细节并保持关注。我认为亚马逊是一家非常注重数据的公司,所以如果我在那里工作,我可以使用数据。
  • 在我之前工作的快速消费品公司,我培养了对了解消费者行为和制定营销策略以取悦客户的热情和好奇心。这确实是站在消费者的角度来赢得他们的信任和信赖。因此,我认为亚马逊将为我提供一个大展身手的绝佳机会。

2)你知道我们的 CEO 吗?你怎么发他名字的音?

问这个问题是为了检查你是否对公司进行了充分的研究。一般来说,人们知道像亚马逊这样的科技巨头及其 CEO,但这个问题是为了检查候选人如何发音。亚马逊的 CEO 自 1996 年以来一直是杰夫·贝索斯。他被发音为“Bay-zohs”,而不是“Bee-zos”。


3)如果你来自火星,你会如何解决问题?

问这个问题是为了检查你的创造力。面试官想看看你是否能跳出常规思维。你可以用有趣的方式回答这个问题,为客户问题制定创意解决方案,改进内部流程,或者通过创新的策略来达成销售。


4)讲讲你最后一次向某人道歉的故事。

问这个问题是为了检查你是否承认自己的错误?你是否是团队合作者?这是招聘人员想知道的一个非常重要的线索。我们大多数人都犯过错误,但选择一个你道歉并成功纠正错误的例子,让它成为你故事的焦点。永远不要说你还没有道歉过。这显示了你的傲慢态度。


5)你人生中面临过的最困难的处境是什么?你是如何处理的?

通过问这个问题,面试官想了解你的内在观点。有时候选人会敞开心扉,分享他们的个人故事。这是一种糟糕的做法。你应该坚持使用专业的轶事,避免分享个人故事。在你的叙述过程中,你的积极态度应该得到认可。它告诉面试官,你很有韧性,并且愿意解决问题。完成一个在紧迫预算下的项目,在截止日期错过时让项目重回正轨,处理一个困难的客户等等,都是你可以谈论的一些情况。


6)你最难缠的客户是谁?

通过问这个问题,面试官想了解你之前处理客户的经验。在这里,你可以分享一个你成功处理了一个跋扈客户的故事。最好强调你如何保持冷静并化解了局面。


7)如果你错过了截止日期/生产力目标,你会怎么做?

问这个问题是为了检查候选人的诚实度以及呈现事物的技巧。在这里,你必须直言不讳,告诉面试官他或她想听到的。面试官不想听你正在做的项目的细节。他们不关心。他们想知道你为什么错过了截止日期以及你是如何处理后果的。

你必须非常小心你想要分享的例子。最好选择一个与事实相关的、可以让你积极呈现的故事。错过截止日期没有什么好处,如果你试图以任何方式辩解,你看起来都会很愚蠢。人无完人,每个人都会犯错,面试官也知道这个事实。所以,你应该承认你的错误,并专注于解释你如何改变并从中吸取教训。人们喜欢诚实,当雇主听到他们的员工对自己的错误负责并努力避免它们再次发生时,这会更加令人欣慰。

最佳实践是诚实,并解释情况。STAR 方法最适合回答这些行为面试问题。它可以解释如下

S/T - 情况或任务

A - 行动

R - 结果

STAR 方法强调以下几点

  • 您所处的问题情境或您被分配的任务。
  • 描述您为解决情况或完成任务而采取的行动。
  • 解释您从经验中学到了什么。

解释积极的一面: 在某些情况下,错过截止日期不在员工的控制范围之内。如果属实,你可以利用这一点,并强调唯一的原因是外部事件。然而,这并非总是可能的。在这些情况下,你必须强调结果或你学到了什么以及你如何改进。

如果你对截止日期负全部责任,并且描述了你犯的错误,请不要给面试官留下负面印象。相反,让你的回答对你有利,以一个非常积极、清晰的信息结束你的回答,说明你采取了哪些步骤来改进以及你目前正在朝着实现目标的方向努力。

保持自信: 如果面试官让你分享一次失败的经历,不要失去你的专注和自信。请记住,每个人都犯过大大小小的错误。解释你是如何从这次事件中吸取教训并继续前进的。

一个好的范例答案

有一次,我接到了一个客户的文章写作任务,需要在很短的时间内完成。我认为我可以处理这篇文章,并且还有我之前的工作量,但我低估了写这篇文章需要的时间。在文章到期的那个早晨,我意识到我无法按时完成,于是联系了我的老板解释情况。我道歉了,解释了发生的事情,并请求延期,他同意了。我学到的是,我需要对自己能处理的每日工作量诚实。我还学到,在接受任务时,我需要包含一个时间缓冲,以确保即使发生意外事件,我也能按时完成任务。


8)如果你发现你最亲密的工作伙伴在偷东西,你会怎么做?

问这个问题是为了检查你对公司的忠诚度以及对朋友的忠诚度。在决定如何处理之前,你应该考虑犯罪的性质。

根据问题,你朋友的行为是不道德的,所以你应该告诉公司你朋友的行为。你可以给你的朋友一个机会,并提前警告他。


9)如果你的直属经理指示你做你不同意的事情,你会怎么处理?

通过问这个问题,你的面试官想了解你如何处理分歧。这也有助于检查你的谈判技巧。你可以解释你的沟通灵活性,并向面试官传达你并非不愿意发表意见。你相信通过沟通直到找到解决方案。


10)如果你看到有人在工作场所不安全,你会怎么做?

你可以告诉面试官,你对你自己和你的同事负有责任。如果你发现这种情况,你会警告那个人,他工作的方式可能导致事故。如果你知道一种更安全的工作方式,你会提出建议。否则,你会联系你的主管。