eBay 的軟體工程實習 (SWE Intern) 是不少同學投遞的「中等難度但題型很集中」的目標。和 FAANG 頭部公司相比,eBay 的題面看上去沒那麼「花」,但題型分布非常穩定——抓住核心五個主題,再配套準備 Karat 風格的 follow-up,就能把面試轉化率拉滿。
這篇文章把站內多篇 eBay 面經實錄裡的真題,按 陣列前綴 / 字串狀態機 / 樹與圖 / 資料結構設計 / 系統設計入門 五個主題重新組織,每個主題給一道代表題 + Python 完整解法 + 時間分配建議。如果你正在準備 eBay 實習的 OA、Karat live coding 或 final loop,可以把這套題庫當作「考前必過一遍」的 checklist。
eBay SWE Intern 招聘流程一覽
| 階段 | 平台 | 時長 | 題型 |
|---|---|---|---|
| Online Assessment | HackerRank | 60-75 分鐘 | 2 道編碼 + 部分批次 4-6 題 MCQ |
| Karat Live Coding | Karat / Zoom | 60 分鐘 | 1-2 道演算法 + follow-up 優化 |
| Tech Phone | Zoom + CoderPad | 45 分鐘 | 1 道中等難度 + 簡單 OOD/系統對話 |
| Virtual Onsite | 4 輪 × 60 分鐘 | 1 個工作日 | 演算法 / 系統設計 / 程式碼審查 / 行為題 |
要點:HackerRank OA 一般在投遞後 7-10 天內發;Karat 與 Tech Phone 節奏緊湊,連續 2-3 週;Onsite 多為遠端,時差需提前協調。
主題一:陣列前綴和與視窗計數
真題:連續區間內不同 Promotion 數
給定一個長度 N 的陣列
promo[],每個元素是當天的促銷活動 id。給定 Q 個查詢(l, r),回傳區間內不同活動 id 的數量。N, Q ≤ 1e5。
思路:
- 離線 + Mo's Algorithm 是經典解,O((N+Q)·√N)
- eBay OA 通常給的資料規模 ≤ 1e5,可以用位置+前綴計數:把每個 id 出現的位置存進 list,對每個查詢二分
from collections import defaultdict
from bisect import bisect_left, bisect_right
def distinct_in_ranges(promo, queries):
pos = defaultdict(list)
for i, p in enumerate(promo):
pos[p].append(i)
res = []
for l, r in queries:
cnt = 0
for p, idxs in pos.items():
lo = bisect_left(idxs, l)
hi = bisect_right(idxs, r)
if hi > lo:
cnt += 1
res.append(cnt)
return res
時間複雜度:O(Q · K · log N),K 是不同 id 數;當 K 較小時非常快。 空間複雜度:O(N)。
Follow-up:如果 N=1e6 且需要 online,必須用持久化線段樹(主席樹),可以口頭描述思路即可。
主題二:字串狀態機與解析
真題:Listing Title 校驗器
輸入一段商品標題字串,規則:
- 不能以小寫字母開頭
- 不能連續出現 3 個相同字母
- 不能包含
<>script等危險關鍵字- 長度 5-80
回傳是否合法 + 第一個違規原因(按順序優先級)。
思路:典型字串校驗,用一個 rule pipeline 寫最清晰:
def validate_title(title: str) -> tuple[bool, str]:
if not (5 <= len(title) <= 80):
return False, "length"
if title[0].islower():
return False, "leading_lower"
for i in range(2, len(title)):
if title[i] == title[i-1] == title[i-2]:
return False, "triple_repeat"
blacklist = ("<", ">", "script", "javascript")
low = title.lower()
for kw in blacklist:
if kw in low:
return False, f"blacklist:{kw}"
return True, "ok"
時間複雜度:O(N),N 是標題長度。 面試加分:能用 enum + dataclass 把 rule 抽出來寫成可擴充的 validator 鏈。
主題三:樹與圖(站點拓撲)
真題:Categories 樹最大銷售路徑
商品類目是一棵樹,每個節點有一個
sales值(可正可負)。從根到任意葉子路徑的總銷售額最大值是多少?
思路:
- DFS 自頂向下累加 path sum,記錄最大值
- 注意銷售可能是負數,路徑不能「提前停下」——題目要求是到葉子,所以不能貪心剪枝
class Node:
def __init__(self, sales: int):
self.sales = sales
self.children = []
def max_leaf_path(root: Node) -> int:
best = float("-inf")
def dfs(node, acc):
nonlocal best
acc += node.sales
if not node.children:
best = max(best, acc)
return
for c in node.children:
dfs(c, acc)
dfs(root, 0)
return best
時間複雜度:O(N)。 Follow-up:如果題目改成「任意起點到任意終點」——退化成 LeetCode 124 的變體,要在每個節點合併左右最大單邊路徑。
主題四:資料結構設計
真題:商品搜尋 LRU + 熱度衰減
實作一個搜尋快取:
query(keyword, ts):回傳該關鍵字的命中結果,並更新最近存取時間top_k(ts, k):回傳截至當前時間最熱門的 k 個關鍵字,熱度 = 存取次數 × 時間衰減因子0.99^(ts - last_ts)
思路:
- 一個 dict 存關鍵字 → (count, last_ts)
- top_k 時按
count * (0.99 ** (ts - last_ts))排序
class HotSearch:
def __init__(self, decay=0.99):
self.decay = decay
self.data = {}
def query(self, keyword, ts):
if keyword not in self.data:
self.data[keyword] = [0, ts]
c, last = self.data[keyword]
c = c * (self.decay ** (ts - last)) + 1
self.data[keyword] = [c, ts]
def top_k(self, ts, k):
scored = [
(kw, c * (self.decay ** (ts - last)))
for kw, (c, last) in self.data.items()
]
scored.sort(key=lambda x: -x[1])
return [kw for kw, _ in scored[:k]]
時間複雜度:query O(1),top_k O(N log N)。 Follow-up:用 bucket + heap 優化 top_k 到 O(N);面試官常問。
主題五:系統設計入門
真題:設計 eBay 商品詳情頁 API
要求口頭設計 GET /listing/{id} 介面,覆蓋:
- 快取策略(CDN / Redis / DB)
- 高並發讀怎麼扛?寫更新如何 invalidate?
- 商品圖片、推薦位、價格歷史的來源
回答骨架(P-A-S 模型:Path / API / Storage):
- Path:CDN → API Gateway → Listing Service → Cache (Redis) → MySQL
- API:回傳
{listing, seller, price_history, related_listings},每塊獨立 fetch 後聚合(fan-out) - Storage:listing 主表 MySQL;圖片 S3 + CDN;推薦位走 ML 服務;價格歷史 ClickHouse 時序
- 一致性:寫更新時先寫 DB,再透過 CDC(Debezium)非同步刷 Redis,TTL 兜底
- 抗壓:熱門商品在 Redis 內做 local cache,避免 thundering herd
備考策略:四週節奏
| 週次 | 主任務 |
|---|---|
| 第 1 週 | 把 LeetCode "eBay" tag + Top 50 中等題做完 |
| 第 2 週 | 主題二、三的字串與樹/圖重點訓練 |
| 第 3 週 | 資料結構設計 + 系統設計 P-A-S 模板演練 |
| 第 4 週 | Karat mock + 行為題 STAR 故事打磨 |
FAQ
Q1:eBay SWE Intern OA 難度和 LeetCode 比是什麼水平? 大致 LeetCode Medium 偏中等,少數批次會出 1 道偏難。關鍵在 60 分鐘內寫出 bug-free 解法,不要追求最優。
Q2:HackerRank 平台有哪些坑?
預設編輯器沒有 LSP;建議在本地寫好再貼上。注意輸入解析常用 input().split(),不要花太多時間在 IO 上。
Q3:Karat 面試和正式 onsite 一樣嚴格嗎? Karat 是外包面試官,給分相對客觀;通過率 ~50%。題目難度比 OA 略高,但允許更多溝通。
Q4:eBay 實習的實際工作內容是什麼? 分散在 Listings / Search / Trust&Safety / Payments 等團隊;前端 React,後端 Java + Scala,資料 Spark。
Q5:如何提升 eBay Final Loop 通過率?
- 提前研究目標 team 的產品
- 行為題準備至少 5 個 STAR 故事,覆蓋 conflict / leadership / failure
- 系統設計用 P-A-S 模板,不要堆砌概念
正在準備 eBay 實習面試?
如果你已經收到 OA 連結但 60 分鐘 2 題仍然吃緊,或者 Karat 階段反覆卡 follow-up,可以聊聊看 OA代面 / VO輔助 / VO代面 的全套支援方案——從面試日真人陪跑、題型映射、到行為題 STAR 故事打磨,都能端到端提供。
聯絡方式
需要面試真題與客製備戰計畫?立刻聯絡微信 Coding0201,獲取真題。
Email: [email protected] Telegram: @OAVOProxy