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 []
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)
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