Amazon 是北美 SDE Intern 招聘量最大的公司之一,但同时也是题库最稳定、流程最清晰的一家。它不像 Google 那样靠创意题,也不像 Meta 那样狂卷难度,Amazon 想看的是「你能不能把经典数据结构题做对,并且用 Leadership Principles 包装你的项目经历」。这篇文章把 SDE Intern 一次完整 VO 拆成三阶段,并把三道高频题:LRU Cache、Word Ladder II、Insert/Delete/GetRandom O(1),逐题拆到 hidden test 边界。
三阶段总览
阶段 1 Application + Resume Screen (1-2 周)
阶段 2 Online Assessment 双关 (2-3 周)
├─ OA1: Coding (2 道 Medium,70 min)
└─ OA2: Workstyle Survey + Logic
阶段 3 Tech Onsite + Behavioral (1-2 周)
├─ Coding × 2-3 (45 min each)
├─ Behavioral 1-2 轮 (基于 LP)
└─ 可选:System Design (Junior 一般免,Senior Intern 偶有)
Intern 流程通常 4-6 周走完。OA1 通过率约 30-40%,OA1+OA2 同时过约 25%,最终 onsite offer 约 12-15%。
阶段 1 — Application + Resume Screen
Amazon 的简历筛偏向结构化关键词匹配:
- 必备技能词:Java / Python / C++、Data Structures、Algorithms、Git、Linux
- 加分项:AWS / Distributed Systems / Microservices 任一项 OSS 贡献
- LP 隐含信号:Customer Obsession(用户量化指标)、Ownership(端到端责任)、Bias for Action(快速发布)
不要把简历堆成「学校 → 课程 → 课程作业」,要堆成「项目 → 我做了什么 → 用户/影响数字」。
阶段 2 — Online Assessment 双关
OA1 Coding
通常 2 道题,70 分钟。难度 LeetCode Easy-Medium,主题包括:
- 数组 / 字符串模拟
- BFS / DFS 图遍历
- 简单动规
- 优先队列调度
特征:题面会包装成 Amazon 业务场景(订单、仓库、机器人、会员订阅)。算法本身不难,业务语义解析要快。
OA2 Workstyle Survey
Amazon 的 LP 量化测验。每道题问「你在 X 场景下倾向 A 还是 B」,A/B 各对应一个 LP。建议:每道题选最贴近你真实工作风格的答案——不要刻意往 LP 上靠,因为 LP 内部之间会冲突,过度优化某一项会被算法识别。
阶段 3 — Tech Onsite + Behavioral 三道经典题
经典题 1: LRU Cache(必考)
题面:设计 LRU 缓存,支持 get(key) 和 put(key, value) 都在 O(1) 时间。容量超出时淘汰最久未使用的。
核心思路:HashMap + 双向链表。
- HashMap:key → 链表节点
- 双向链表:维护使用顺序(头部最新,尾部最旧)
class Node:
__slots__ = ("key", "val", "prev", "next")
def __init__(self, key=0, val=0):
self.key, self.val = key, val
self.prev = self.next = None
class LRUCache:
def __init__(self, capacity: int):
self.cap = capacity
self.map: dict[int, Node] = {}
self.head, self.tail = Node(), Node()
self.head.next, self.tail.prev = self.tail, self.head
def _remove(self, node: Node) -> None:
node.prev.next, node.next.prev = node.next, node.prev
def _add_front(self, node: Node) -> None:
node.prev, node.next = self.head, self.head.next
self.head.next.prev = node
self.head.next = node
def get(self, key: int) -> int:
if key not in self.map:
return -1
node = self.map[key]
self._remove(node)
self._add_front(node)
return node.val
def put(self, key: int, value: int) -> None:
if key in self.map:
node = self.map[key]
node.val = value
self._remove(node)
self._add_front(node)
return
if len(self.map) == self.cap:
lru = self.tail.prev
self._remove(lru)
del self.map[lru.key]
node = Node(key, value)
self.map[key] = node
self._add_front(node)
复杂度:所有操作 O(1)。
Amazon reviewer 关注:
- 是否使用 sentinel head/tail(避免边界判断)
__slots__这种空间优化(加分但非必须)- 在 put 中先检查是否已存在再决定是否淘汰(顺序错会导致 cap 计算错误)
经典题 2: Word Ladder II(最难)
题面:给 beginWord、endWord 和字典,每次只能改一个字母(且改后的词必须在字典中)。返回所有最短转换路径。
核心思路:双向 BFS 找最短长度 + DFS 回溯重建路径。直接 DFS 会指数爆炸。
from collections import defaultdict, deque
def find_ladders(begin: str, end: str, word_list: list[str]) -> list[list[str]]:
words = set(word_list)
if end not in words:
return []
# Step 1: BFS, build parents map (each level)
parents: dict[str, set[str]] = defaultdict(set)
layer = {begin}
found = False
while layer and not found:
words -= layer
next_layer: dict[str, set[str]] = defaultdict(set)
for w in layer:
for i in range(len(w)):
for c in "abcdefghijklmnopqrstuvwxyz":
nw = w[:i] + c + w[i+1:]
if nw in words:
next_layer[nw].add(w)
if nw == end:
found = True
for k, v in next_layer.items():
parents[k] |= v
layer = set(next_layer)
# Step 2: DFS backtrack from end
res = []
def dfs(node: str, path: list[str]) -> None:
if node == begin:
res.append([begin] + path[::-1])
return
for p in parents[node]:
path.append(node)
dfs(p, path)
path.pop()
if found:
dfs(end, [])
return res
复杂度:BFS O(N·L·26),DFS 回溯 O(K·L)(K 为路径数)。
Amazon reviewer 关注:
- 必须 BFS 找最短长度,DFS 直接搜会指数爆
words -= layer的 layer-wise 删除避免环- 双向 BFS 是更优解,但单向 BFS + 分层 visited 已经足够过
经典题 3: Insert/Delete/GetRandom O(1)
题面:实现一个数据结构支持:
insert(val):插入,O(1)remove(val):删除,O(1)getRandom():均匀随机返回一个元素,O(1)
核心思路:HashMap (val → index) + 动态数组。删除时把要删的元素和数组末尾交换,pop_back O(1)。
import random
class RandomizedSet:
def __init__(self):
self.arr: list[int] = []
self.idx: dict[int, int] = {}
def insert(self, val: int) -> bool:
if val in self.idx:
return False
self.idx[val] = len(self.arr)
self.arr.append(val)
return True
def remove(self, val: int) -> bool:
if val not in self.idx:
return False
i = self.idx[val]
last = self.arr[-1]
self.arr[i] = last
self.idx[last] = i
self.arr.pop()
del self.idx[val]
return True
def getRandom(self) -> int:
return random.choice(self.arr)
复杂度:所有操作 O(1)。
Amazon reviewer 关注:
- swap-and-pop 是核心:直接
arr.remove(val)是 O(n) 不达标 self.idx[last] = i必须在 pop 之前更新,否则 last 的 index 错误- 当
val == last(即删的就是末尾元素)的边界要测
Behavioral 轮:Leadership Principles 模板
Amazon 把 16 条 LP 当面试评分卡。Intern 面试常考的 5 条:
| LP | 你的故事要回答 |
|---|---|
| Customer Obsession | 你的项目谁是用户?你怎么收集 feedback? |
| Ownership | 你独立 own 过什么 feature 端到端? |
| Bias for Action | 你在不完美信息下做过什么决策?结果怎样? |
| Learn and Be Curious | 你最近学了什么新技术?怎么用到项目? |
| Are Right, A Lot | 你做过的最难判断的决定是什么? |
每个 LP 准备 1-2 个 STAR 故事,每个故事配一个量化结果(用户数 / 性能 / 节省时间)。
OA → VO 节奏(4-6 周)
W1 申请 + Resume Screen
W2-3 OA1 + OA2 双关,等结果
W3-4 收到 onsite 邀请,准备 1-2 周
W5 Tech Onsite (2-3 hrs)
W6 Decision + offer call
OA1 提交后 1-3 周才有反馈,Intern 季节高峰期可能 4 周。期间不要慌,可以并行投其他公司。
VO 辅助怎么对接 Amazon Intern
Amazon Intern VO 的核心痛点是:题库稳定 + LP 量化打分。VO 辅助 / VO代面 在这条线的标准节奏:
- OA 题库识别:拿到邀请截图,5 分钟内判定是 OA1 还是 OA2 题型
- 三经典题专项:LRU / Word Ladder II / Insert-Delete-GetRandom 每道 1 小时手写练
- 限时 mock:45 min × 3 onsite 节奏仿真
- 现场 cue:onsite 当天 reviewer 后台推骨架 + LP 关键词
- LP 故事打磨:1-2 个 STAR 故事配 5 条核心 LP 预设映射
- Workstyle Survey 引导:OA2 答题倾向校准(不刻意但不偏离)
FAQ
Q1: Amazon SDE Intern OA 多久出结果? A: 通常 1-3 周。Intern 季节高峰期可能 4 周。如果 4 周没动静,邮件 recruiter 跟进。
Q2: OA1 的两道题都要 AC 才能过吗? A: 不一定。1 题全 AC + 1 题 90%+ 部分 AC 仍有过线机会。两题都低于 50% AC 几乎必拒。
Q3: 我没有 AWS 经验,会被刷吗? A: 不会。Intern 不要求 AWS,但简历提到「曾用 AWS 部署一个个人项目」会有加分。
Q4: Behavioral 轮的 LP 一定要全背吗? A: 16 条全背太累。准备 5 条核心 LP(见上表)的 1-2 个 STAR 故事,足以应对 80% 题面。
Q5: Intern 转 NG 的 conversion 率? A: Amazon Intern → NG 转化率约 60-70%(高于行业平均 50%)。Intern 期间表现 = NG offer 等级。
写在最后
Amazon SDE Intern 不需要你创意爆棚,只要你**「经典题做得稳 + LP 故事讲得清 + Workstyle 不踩雷」**就有 offer。如果你正在准备 Amazon Intern 的 OA 或 VO,可以微信 Coding0201 联系,发岗位 JD + 当前流程节点截图,先做岗位线判定,再排 VO 辅助 / VO代面 节奏。
需要面试真题? 立刻联系微信 Coding0201,获取真题。
联系方式
- 微信:Coding0201
- Email: [email protected]
- Telegram: @OAVOProxy