← 返回部落格列表 Shopify OA 綜述指南:三大題型矩陣 + 真題實戰 + 備考路徑
Shopify

Shopify OA 綜述指南:三大題型矩陣 + 真題實戰 + 備考路徑

2026-05-31

Shopify 的 OA 在北美電商類公司裡屬於「易上手、難拿滿分」的代表。題面看似都是 LeetCode Medium 等級,但平台會偷偷把考點埋在電商業務語意裡:庫存怎麼分、折扣怎麼算、推薦怎麼挑——你會發現寫完程式卻跑不過 hidden test,原因往往不是演算法錯,而是沒把「業務規則」和「輸入邊界」對齊。這篇文章把 Shopify OA 拆成三類題型矩陣,每一類都給一段可直接背下來的解題骨架。

OA 流程節奏

W0  Career site / 內推投遞 → Resume screen
W1  Recruiter call(15 min)→ 發送 OA 連結
W2  HackerRank / Codility 平台 OA:60-90 min,2-3 題
W3  Tech screen(CoderPad,1 輪 60 min)
W4  VO Loop(4-5 輪:coding × 2 + system design + behavioral)
W5  Team match → offer

OA 這一關 cutoff 不算嚴苛,全 AC + 時間剩 15 分鐘以上幾乎都能進 tech screen。難點在於 hidden test:Shopify 喜歡把電商邊界塞進測試集——零庫存倉、quantity = 0、使用者買過所有商品等,寫程式碼時必須主動想到。

三大題型矩陣

題型 核心演算法 業務語意 出現頻率
庫存分配 貪心 / 模擬 多倉發貨優先順序 ★★★★★
階梯折扣 模擬 + 邊界 滿 N 件減 / 買 X 送 Y ★★★★
推薦引擎 共現矩陣 / 圖遍歷 協同過濾 top-K ★★★

題型一:Inventory Allocation Optimization

題面:給定訂單陣列 orders 與倉庫陣列 warehouses,倉庫按順序發貨,庫存耗盡即失效,回傳未滿足訂單數量

orders     = [3, 5, 4]
warehouses = [8, 2, 5]
output     = 1

最容易翻車的點:很多候選人第一反應是「用最大庫存倉優先」,但題面要求倉庫按順序遍歷——這是模擬題,不是貪心。

def unfulfilled_items(orders: list[int], warehouses: list[int]) -> int:
    unfilled = 0
    w_idx = 0
    for q in orders:
        remaining = q
        while remaining > 0 and w_idx < len(warehouses):
            take = min(remaining, warehouses[w_idx])
            warehouses[w_idx] -= take
            remaining -= take
            if warehouses[w_idx] == 0:
                w_idx += 1
        unfilled += remaining
    return unfilled

複雜度:O(n + m)。邊界warehouses 含 0 項要立刻 skip;訂單為 0 不應消耗倉庫。

題型二:Discounted Price Calculation

題面:購物車每件商品有單價、數量、階梯折扣(如「買 3 付 2」),算總價。

items = [
  {"price": 10, "quantity": 5, "discount": (3, 2)},  # buy 3 pay 2
  {"price": 20, "quantity": 2, "discount": None}
]
output = 10 * 4 + 20 * 2 = 80

陷阱:5 件商品裡能湊出1 個 (3,2) 組合 + 2 件原價,所以付費數 = floor(5/3) * 2 + 5 % 3 = 4。很多人寫成 5 - 5 // 3,丟了餘數。

def cart_total(items: list[dict]) -> int:
    total = 0
    for it in items:
        price, qty = it["price"], it["quantity"]
        d = it.get("discount")
        if d:
            buy, pay = d
            groups = qty // buy
            leftover = qty % buy
            paid_qty = groups * pay + leftover
        else:
            paid_qty = qty
        total += price * paid_qty
    return total

邊界buy = 0pay > buy(題面允許「贈 X 件」)、quantity < buy 都要單獨處理。

題型三:Product Recommendation Engine

題面:購買矩陣 purchases[i][j] = 1 表示使用者 i 買過商品 j。為每位使用者輸出 top-3 共現推薦,排除已買過的。

from collections import defaultdict, Counter

def recommend(purchases: list[list[int]], k: int = 3) -> list[list[int]]:
    n_users = len(purchases)
    n_items = len(purchases[0])

    cooccur = defaultdict(Counter)
    for user in purchases:
        bought = [j for j, v in enumerate(user) if v]
        for a in bought:
            for b in bought:
                if a != b:
                    cooccur[a][b] += 1

    out = []
    for i in range(n_users):
        scores = Counter()
        for j in range(n_items):
            if purchases[i][j]:
                scores.update(cooccur[j])
        for j in range(n_items):
            if purchases[i][j]:
                scores.pop(j, None)
        top = [item for item, _ in scores.most_common(k)]
        out.append(top)
    return out

複雜度:建構 O(U·B²),推薦 O(N·B·I)。:題面要求「排除已買過的」必須最後一步再做,否則會汙染 score。

OA 通關節奏(90 分鐘版)

00:00 - 00:05  通讀 3 題,標記最熟的一題先做
00:05 - 00:25  Q1 模擬 / 陣列類 → 100% AC
00:25 - 00:55  Q2 業務建模題 → 80%+ AC
00:55 - 01:20  Q3 資料結構題 → 50%+ AC
01:20 - 01:30  回頭跑 hidden case 邊界(空陣列 / 單元素 / 全 0 輸入)

最後 10 分鐘留給「業務邊界檢查」是 Shopify OA 的特殊節奏:往主流程裡塞一句 if not orders: return 0 這種小補丁,往往就是分數差距來源。

不同職缺線的 OA 差異

職缺線 OA 題型偏好 時長 平台
Backend SDE 庫存 + 折扣模擬 60-90 min HackerRank
Data / ML 推薦引擎 + 矩陣分析 90 min HackerRank
SRE / Infra 限流 / 佇列模擬 75 min Codility
Frontend DOM tree 模擬 + JS API 60 min HackerRank

如果你拿到的題面是「Order processing pipeline simulation」,幾乎可以判斷是 Backend SDE 線;如果題面帶 users × items 矩陣,多半是 Data / ML 線。

OA 輔助怎麼對接 Shopify

Shopify OA 的難點不在演算法,而在業務邊界 + hidden test。OA 輔助 / OA代面 在 Shopify 這條線的標準節奏:

  1. 職缺線判定:根據 JD 關鍵字(Liquid / Ruby on Rails / Hydrogen)鎖定 SDE / Data / Frontend 線
  2. 題型預判:庫存 / 折扣 / 推薦三類挑出最高頻兩類提前 mock
  3. 限時 mock:90 分鐘擬真,提前練「最後 10 分鐘邊界回掃」節奏
  4. 現場 cue:OA 當天後台拉骨架程式碼 + hidden test 提示
  5. 覆盤:OA 提交後回放,識別得分 vs 實際 AC 差距

FAQ

Q1: Shopify OA 的 cutoff 是多少? A: 平台會顯示一個 score(滿分 300 / 題),實際通過線大約 220-240,3 題全 AC + 邊界覆蓋即可穩過。

Q2: 可以選語言嗎? A: HackerRank 預設提供 15+ 語言,Shopify 推薦 Python / Ruby / JavaScript / Go。後端職缺提交 Ruby 會獲得輕微加成。

Q3: OA 會有 plagiarism check 嗎? A: 會。Shopify 用 HackerRank 自帶相似度檢測,且會比對歷史候選程式碼。直接抄題解會被標記。

Q4: OA 後多久收到 tech screen 邀請? A: 一般 5-7 個工作日。如果 10 天沒動靜,可以禮貌郵件 recruiter 跟進一次。

Q5: 三道題做不完該怎麼取捨? A: 優先保證 Q1 和 Q2 全 AC,Q3 拿部分 case 即可。Shopify 評分對「完整性」加權高於「數量」。

寫在最後

Shopify OA 最值得訓練的不是演算法本身,而是把電商規則翻譯成程式碼的能力。如果你正在準備 Shopify 的 OA,可以微信 Coding0201 聯繫,傳職缺 JD + 目前階段,先做職缺線判定,再排 OA 輔助 / OA代面 的節奏。


需要面試真題? 立刻聯繫微信 Coding0201取得真題


聯絡方式