Snowflake 的 OA 是不少同学投递云数据仓库岗位时的"硬门槛"。难度本身不极端,但不同批次抽到的题型差异很大——有人遇到三道纯 LeetCode Medium,有人遇到一道偏向数据结构设计的 hard,还有人遇到 SQL 风格的 query 题。如果只看一篇面经就上场,很容易踩到当批次的"陷阱清单"。
这篇文章不再聚焦单一批次或单一题,而是把站内多篇 Snowflake OA 面经按时间批次重新聚合,画出"题型分布矩阵",逐批次给出代表题与 Python 解法。配套补一份批次差异速查表,让你做完站内多篇 Snowflake 文章后,知道这一批可能踩到哪几个坑。
招聘流程:Snowflake OA 在整条链路里的位置
| 阶段 | 平台 | 时长 | 通过线 |
|---|---|---|---|
| Online Assessment | HackerRank | 90-120 分钟 | 题数 ≥ 2 全 AC,或 1 全 AC + 1 部分 |
| Recruiter Screen | Zoom | 30 分钟 | 行为 + 简历深挖 |
| Technical Phone | Zoom + CoderPad | 60 分钟 | 1 道 medium / hard 算法 |
| Virtual Onsite | 4-5 轮 | 1 个工作日 | 算法 / 系统设计 / SQL / 行为 |
节奏说明:OA → Recruiter → Phone → Onsite 整体 4-6 周;Snowflake 对 OA 通过线相对严格,接近全 AC 才能进入下一轮。
题型分布矩阵:四个核心批次
下表把站内已记录的 Snowflake OA 真题按照"批次时间窗"分成四组,标记了核心题型。
| 批次 | 时间窗 | 题数 | 主题型 | 难度 |
|---|---|---|---|---|
| A | 早期批次 | 3 题 | Cake Allocation / Min Distance / Word Search | Medium |
| B | 中期批次 | 2 题 | Unequal Elements + String Search | Medium-Hard |
| C | 近期批次 | 3 题 | Longest Consecutive + Group Anagrams + Rotate Image | Medium |
| D | 当前批次 | 2-3 题 | Vowel DP + Interval Scheduling | Medium-Hard |
站内已有 batch A、B、C、D 各自的深度解法长文,本篇负责"导航 + 批次差异"。
批次 A:早期 3 题型(Cake / Min Distance / Word Search)
代表题:Cake Allocation
N 块蛋糕排成一行,每块有重量
w[i]。给 K 个人分蛋糕,每人拿连续一段。问最大化"最小那个人拿到的总重量"。
思路:经典二分答案。
def cake_allocation(w, K):
def can_split(limit):
cnt, cur = 1, 0
for x in w:
if cur + x > limit:
cnt += 1
cur = x
else:
cur += x
return cnt <= K
lo, hi = max(w), sum(w)
while lo < hi:
mid = (lo + hi) // 2
if can_split(mid):
hi = mid
else:
lo = mid + 1
return lo
时间复杂度:O(N log(sum w))。
陷阱:lo 必须取 max(w),否则单块超过 limit 时无解。
批次 B:Unequal Elements + String Search
代表题:Unequal Elements
给数组
a[],求最长子数组使得相邻元素不相等。
思路:滑动窗口 + 上一次重复位置。
def longest_unequal(a):
best = left = 0
for i in range(1, len(a)):
if a[i] == a[i-1]:
left = i
best = max(best, i - left + 1)
return best if a else 0
时间复杂度:O(N)。 陷阱:批次 B 的另一题 String Search 用二分答案,90 分钟两题非常吃节奏,需要预留 25 分钟做第二题。
批次 C:Longest Consecutive + Group Anagrams + Rotate Image
代表题:Rotate Image (in-place)
N×N 矩阵顺时针旋转 90 度,要求 in-place。
思路:先转置,再左右翻转。
def rotate_image(M):
n = len(M)
for i in range(n):
for j in range(i+1, n):
M[i][j], M[j][i] = M[j][i], M[i][j]
for row in M:
row.reverse()
时间复杂度:O(N^2),原地。
陷阱:批次 C 是三题型,必须留时间给 Group Anagrams 的字符计数 key——用 tuple(sorted(s)) 在大数据量下比 26-tuple 慢。
批次 D:Vowel DP + Interval Scheduling
代表题:Interval Scheduling 加权版
给 N 个区间,每个有权重
w[i]。选若干不相交区间,最大化权重和。
思路:按右端点排序 + DP,每个区间用二分找上一个不冲突的位置。
from bisect import bisect_right
def weighted_interval(intervals):
intervals.sort(key=lambda x: x[1])
ends = [x[1] for x in intervals]
n = len(intervals)
dp = [0] * (n + 1)
for i in range(1, n + 1):
s, e, w = intervals[i-1]
j = bisect_right(ends, s) - 1
dp[i] = max(dp[i-1], dp[j+1] + w if j >= -1 else w)
return dp[n]
时间复杂度:O(N log N)。 陷阱:批次 D 的另一题 Vowel DP 看上去简单,但输入字符串可能含非 ASCII,要先做归一化。
批次差异速查表:抽到哪一批,先警惕这些坑
| 批次 | 关键陷阱 | 建议时间分配 |
|---|---|---|
| A | Word Search 容易写出 O(M·N·4^L) 超时 | 30 / 30 / 30 |
| B | String Search 二分答案边界 | 35 / 55 |
| C | Group Anagrams key 选择 | 25 / 30 / 35 |
| D | Vowel DP 非 ASCII 归一化 | 40 / 50 |
备考策略:三阶段两周节奏
| 阶段 | 内容 |
|---|---|
| 1 周 | 把站内 4 篇 Snowflake 批次文一遍刷完,标记自己写不出来的 follow-up |
| 1 周 | LeetCode Top 100 medium 挑出滑动窗口 / 二分答案 / DP 各 10 道 |
| 模考 | 在 HackerRank 公开题集做 2 套 90 分钟 mock,模拟批次 B/D 的双题节奏 |
FAQ
Q1:Snowflake OA 通过线是不是必须全 AC? 不是绝对,但两题中至少一题 100% AC + 另一题接近 AC 是绝大多数通过案例的下限。部分批次会用 corner case 数量打分,AC 率 80% 也有机会进下一轮。
Q2:Snowflake OA 的题和正式 onsite 的题难度差距大吗? Onsite 偏向 LeetCode Hard 和系统设计,难度比 OA 高 1 个等级。OA 通过 ≠ Onsite 通过,Phone Screen 是真正的过滤环节。
Q3:HackerRank 平台 Python 提交有什么常见坑?
默认 Python 3.10,functools.cache 可用;递归深度默认 1000,复杂 DP 建议手写栈或加 sys.setrecursionlimit(10**6)。
Q4:抽到哪一批是随机的吗? 近似随机,但同一招聘窗口内的同学经常拿到同一批次。可以在投递后向 referer / 学长学姐确认当周批次。
Q5:如果 OA 表现一般,还能进下一轮吗? 可以,前提是 referral 强 / 简历亮点突出。但建议把目标设成"两题接近全 AC",避免靠不可控因素翻盘。
正在准备 Snowflake OA?
如果你想知道当前批次具体在抽哪几道题、或希望面试日有真人 OA代面 / VO代面 全程陪跑,可以聊聊看完整的 OA辅助 / VO辅助 方案。
联系方式
需要面试真题与定制备战计划?立刻联系微信 Coding0201,获取真题。
Email: [email protected] Telegram: @OAVOProxy