← 返回博客列表 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获取真题


联系方式