Question Study

Snowflake 面试题专题

本地面经库有 37 条来源 URL 去重后的记录,其中 37 条有正文;目前整理出 38 道代表练习题,其中 38 道已完成独立深文。题目清单仍在逐帖核对和补充。

Reading Guide

如何使用这份题目清单

题目根据面经方向重新表述,其中可能包含站内攻略建议的训练题;它们不是公司的官方题库,也不保证下一场面试重复出现。

先分岗位

Snowflake 的不同岗位和团队可能考不同内容。先核对 JD 与面试邀请,再选对应题型。

合并同题变体

相同核心考点只保留一条,后续的附加约束放在原题里练,避免把同一道题当成多道题刷。

练习顺序

先口述输入、输出和边界,再写核心方案;最后解释复杂度、失败路径和面试官可能追加的约束。

Deduplicated Question Map

按考点去重的代表题

同一题的追加条件合并在一条里。题目清单用于确定训练范围;具体流程和准备优先级见公司攻略。

SQL / Training Schema · 02

每项目预算在参与员工间分摊,再计算员工跨项目平均预算份额

每项目预算在参与员工间分摊,再计算员工跨项目平均预算份额;先去重 assignment 并明确是否需要逐项目明细。

解题切入:先按 (employee_id,project_id) 去重,再算每项目不同员工数与预算份额;最后确认要逐员工逐项目明细,还是跨项目的员工平均,NULL 预算需单独定义。

阅读这道题的独立深文 →
Pipeline Design · 03

设计 SaaS sources 到 analytics mart 的 pipeline,支持 CDC、schema evolution、dedup、backfill 和质量监控

设计 SaaS sources 到 analytics mart 的 pipeline,支持 CDC、schema evolution、dedup、backfill 和质量监控。

解题切入:CDC 事件要有顺序键和去重键;schema evolution 需兼容旧消费者,回填路径应复用转换逻辑。

阅读这道题的独立深文 →
System Design · 04

用户 100GB 共享额度已被 Drive 用 30GB、Photo 用 20GB

用户 100GB 共享额度已被 Drive 用 30GB、Photo 用 20GB;高并发上传如何原子预留剩余空间并低延迟拒绝超额?

解题切入:配额检查和扣减需原子化;突发令牌与长期配额分开,重置时刻和审计日志要可解释。

阅读这道题的独立深文 →
Coding · 05

实现 top K hot search,同一用户重复搜索同一个词只计一次

实现 top K hot search,同一用户重复搜索同一个词只计一次;滑动窗口作为额外训练追问。

解题切入:按 user+query 去重后再统计热度;滑动窗口可用时间桶加可删计数,top K 定期重建。

阅读这道题的独立深文 →
Coding / Rate Limiter · 06

给 free/pro/enterprise 客户端配置可运行时修改的 token bucket 限流

给 free/pro/enterprise 客户端配置可运行时修改的 token bucket 限流;客户端缺配置时使用全局默认策略,并用可控时钟测试。

解题切入:按 client 维护 token 与上次更新时间,每次从当前 tier 配置读取 capacity/refill rate;缺档位走默认策略,mock clock 测补充与运行时改额,分布式时用原子状态更新。

阅读这道题的独立深文 →
Binary Search / OA · 07

给流水线各服务吞吐、单次扩容成本和预算,最大化最小吞吐

给流水线各服务吞吐、单次扩容成本和预算,最大化最小吞吐;公开样例答案与成本公式矛盾,先按规则校验。

解题切入:目标最小吞吐 T 的费用是 Σmax(0,T−throughput[i])×cost[i],随 T 单调,可二分;原帖预算 32 的示例按该公式最大为 6,不是其声称的 10。

阅读这道题的独立深文 →
String / OA · 08

相邻相同字符若不切段花 sameTime,每切一刀花 partitionTime

相邻相同字符若不切段花 sameTime,每切一刀花 partitionTime;按公开规则求字符串最小额外传输时间。

解题切入:每个相邻间隙独立:相同字符边取 min(sameTime,partitionTime),不同字符边不切;在没有段数约束的公开规则下 O(n) 扫描即可。

阅读这道题的独立深文 →
Dynamic Programming / OA · 09

等长 words 的每列可选字符来组成 target,列下标严格递增

等长 words 的每列可选字符来组成 target,列下标严格递增;求选择方法数并对 1e9+7 取模。

解题切入:逐列统计字符频次,dp[j] 从大到小更新 target 前 j 字符的方案数;倒序避免同一列被重复使用,乘列频次后取模。

阅读这道题的独立深文 →
Graph / Kahn Layers · 10

课程 DAG 中同一批全部完成才开下一批

课程 DAG 中同一批全部完成才开下一批;各课有时长,求总时间并检测环,区别于即时启动的最长路径模型。

解题切入:课程 DAG 用 Kahn 分层,每批耗时取该批最长课程时长,处理数不足 N 则有环;若允许先修一完成就立刻启动后继,应改求 DAG 最长路径。

阅读这道题的独立深文 →
Streaming Events · 11

事件流 (timestamp,key) 仅保留最近 m 条,查询某时间点前不同 key 数

事件流 (timestamp,key) 仅保留最近 m 条,查询某时间点前不同 key 数;追问最高频 key,先定义事件时间和同时间并列。

解题切入:最近 m 条事件先明确按事件时间还是到达顺序;训练版用 (timestamp,到达序号) 保留最新 m 条,阈值查询扫描其中的 key set 或频次表。

阅读这道题的独立深文 →
Tree / Organization Graph · 12

给员工→直属经理边,输出所有最高级经理到下属的汇报森林

给员工→直属经理边,输出所有最高级经理到下属的汇报森林;检测双经理和环并保持稳定顺序。

解题切入:员工→经理边先反建经理→下属邻接表;根是只出现在经理侧的人,多根构成森林,双经理与纯环要报错,输出顺序需明确。

阅读这道题的独立深文 →
Tree / Preorder / Training Variant · 13

树的若干节点被标记失效,返回先序遍历

树的若干节点被标记失效,返回先序遍历;先问清失效节点的子孙是否也不可访问。

解题切入:树的失效节点是否剪掉整棵子树必须先确认;训练版先核合法根树,再用逆序压孩子的显式栈保持原兄弟顺序,失效即跳过分支。

阅读这道题的独立深文 →
Priority Queue / OOD · 14

实现 addTask(taskId,priority,timestamp) 和 executeTask()

实现 addTask(taskId,priority,timestamp) 和 executeTask();同一任务可重复加入,按优先级取出并跳过已执行任务。

解题切入:每次 addTask 入 (-priority,timestamp,序号,taskId) 堆;executeTask 弹出并跳过已执行 ID,堆项总共只弹一次,单次清理大量旧项时不可声称严格 O(log N)。

阅读这道题的独立深文 →
Tree / Parallelism · 15

把每个树节点改写为其原始子树和并输出新树

把每个树节点改写为其原始子树和并输出新树;大量子树、有限线程时如何按依赖并行且避免线程池死锁?

解题切入:子树和需后序算 S(v)=原值+Σ子树和,输出新树不污染原值;有限线程用就绪子节点计数与有界工作队列,整体加速受最长依赖链限制。

阅读这道题的独立深文 →
Sliding Window / Rate Limits · 16

给按时间排列的请求到达秒数,返回触发每秒最多 3 次或每 10 秒最多 20 次的丢弃时间

给按时间排列的请求到达秒数,返回触发每秒最多 3 次或每 10 秒最多 20 次的丢弃时间。

解题切入:顺序到达请求用同秒计数与 10 秒 deque;清理 t−10 及以前时间,当前请求任一限制超额只记录一次,丢弃项是否留在计数须先约定。

阅读这道题的独立深文 →
Linked List / Heap · 17

先合并两条有序链表,再合并 K 条

先合并两条有序链表,再合并 K 条;比较双指针与小根堆,并处理空链和相同值。

解题切入:两链用双指针和哨兵合并;K 链用堆保存各链当前头,弹出节点前保留其后继,值相同时用序号防 Node 对象比较。

阅读这道题的独立深文 →
Weighted Interval Scheduling · 18

每门课有开始/结束时间和学分,最多选 K 门不冲突课程,使学分总和最大

每门课有开始/结束时间和学分,最多选 K 门不冲突课程,使学分总和最大。

解题切入:课程按结束时间排序,二分求前一门兼容课程数 p(i),dp[i][k] 比较跳过当前课与 credit_i+dp[p(i)][k−1];K 是最多不是必须。

阅读这道题的独立深文 →
System Design / Object Storage · 19

设计简化文件存储,避免相同内容重复保存

设计简化文件存储,避免相同内容重复保存;处理哈希校验、逻辑引用、权限和删除后的垃圾回收。

解题切入:逻辑路径与物理 blob 分离,服务端校验内容哈希再查重;引用计数与文件映射须原子更新,删最后引用后延迟 GC,跨租户共享默认关闭。

阅读这道题的独立深文 →
Fullstack / Calendar · 20

设计日历多视图、创建删除和循环事件

设计日历多视图、创建删除和循环事件;单独改期一个 occurrence 时如何处理 API 身份、例外和前端状态。

解题切入:循环日程的单次改期以原 occurrenceKey 保持身份、另存 override;视图按可见区间展开规则并合并例外,前端状态区分草稿、乐观更新和服务端版本。

阅读这道题的独立深文 →
React / Kanban State · 21

用左右箭头移动 Kanban 任务,越界箭头隐藏,刚移动的任务追加到目标列底部

用左右箭头移动 Kanban 任务,越界箭头隐藏,刚移动的任务追加到目标列底部;追问 10 万任务。

解题切入:Kanban 把 taskId→节点与列顺序分开,移动 O(1) 摘旧列并追加目标列尾;10 万任务要虚拟渲染,深 offset 的链表遍历还需位置索引。

阅读这道题的独立深文 →
Tree / File System · 22

实现内存文件系统的 ls、mkdir、文件内容追加和读取

实现内存文件系统的 ls、mkdir、文件内容追加和读取;先确认路径格式、目录/文件冲突和缺失路径的错误约定。

解题切入:内存文件系统用目录节点的 name→子节点映射逐段找绝对路径;文件和目录互斥,ls(目录) 排直接子项,ls(文件) 返回自身名,追加内容前先校验父目录。

阅读这道题的独立深文 →
Greedy / Enumeration · 23

虚拟仓库 K 分钟内只能选一种查询类型、可重复执行

虚拟仓库 K 分钟内只能选一种查询类型、可重复执行;按完整执行次数求最大收益及类型,注意整数剩余时间。

解题切入:只能选一种查询类型时,逐类算 floor(K/单次耗时)×单次收益取最大;不能只比较单位时间收益率,整数剩余时间会改变最优类型。

阅读这道题的独立深文 →
String Matching / Streaming · 24

给有序食材和多条连续菜谱,判断各菜谱是否作为连续片段出现

给有序食材和多条连续菜谱,判断各菜谱是否作为连续片段出现;追问 O(1) 额外空间和流式输入。

解题切入:连续食材菜谱是精确子串匹配;单条菜谱可用 KMP 在流上维护匹配状态,多菜谱逐条状态 O(NR),严格 O(1) 空间需接受朴素重扫的时间代价。

阅读这道题的独立深文 →
System Design / ACL · 25

设计给另一项服务调用的 ACL 判权服务

设计给另一项服务调用的 ACL 判权服务;明确主体/资源/动作、默认拒绝、策略版本、缓存与撤权时效。

解题切入:ACL Check 要先定主体、资源、动作和默认拒绝;缓存键包含租户与策略/群组版本,撤权时效决定是否需要权威版本读或同步失效。

阅读这道题的独立深文 →
System Design / Distributed KV · 26

设计分布式 KV,先明确一致性与可用性等非功能需求,再推导分片、复制、故障恢复与条件写

设计分布式 KV,先明确一致性与可用性等非功能需求,再推导分片、复制、故障恢复与条件写。

解题切入:分布式 KV 先量化一致性、可用性、吞吐与恢复目标;强一致单 key 可用分片内多数派复制和条件版本写,少数派网络分区要拒绝线性写。

阅读这道题的独立深文 →
System Design / Scheduler · 27

设计支持一次性和周期任务的 Job Scheduler

设计支持一次性和周期任务的 Job Scheduler;处理稳定 runId、租约、重试、幂等、多租户公平和故障恢复。

解题切入:Job Scheduler 的定义、执行实例和 worker 租约分开持久化;稳定 runId 防重复建实例,租约 fencing 与业务幂等键处理崩溃重试,多租户还要管公平和饥饿。

阅读这道题的独立深文 →
System Design / Metrics · 28

设计云服务 Metrics 系统,覆盖采集、时序基数、事件时间聚合、范围查询、保留和告警抖动

设计云服务 Metrics 系统,覆盖采集、时序基数、事件时间聚合、范围查询、保留和告警抖动。

解题切入:云服务 Metrics 的接入按租户与时序分片,event time 聚合并留 raw/rollup;先限制高基数标签,再谈写入、范围查询、告警抖动与回放。

阅读这道题的独立深文 →
AI Engineer / Agent · 29

从企业 Agent 任务轨迹提取可复用 Skill

从企业 Agent 任务轨迹提取可复用 Skill:如何校验权限、用真实任务评测、版本发布,并管理 Agent Memory?

解题切入:Agent Skill 蒸馏要从获授权任务轨迹归一、聚类提候选,经 schema/权限检查和沙箱任务回放后版本化灰度;Memory 分短期状态、长期偏好、检索证据和技能库。

阅读这道题的独立深文 →
Graph / Async Messaging · 30

给 root 与异步发收消息接口,发现 cluster 节点数

给 root 与异步发收消息接口,发现 cluster 节点数;追问返回拓扑、失败重试和重复回复时的去重与终止条件。

解题切入:异步 cluster 发现用稳定 nodeId 与 requestId 去重,按 root 可达图遍历;重试同一请求 ID,只有所有已发现节点回复完成且无在途请求才能返回完整节点数与拓扑。

阅读这道题的独立深文 →
Tree / Boundary · 31

LC545 边界遍历的平衡完全树变体

LC545 边界遍历的平衡完全树变体:按根、左边界非叶、叶节点、逆序右边界输出,避免重复叶子。

解题切入:LC545 边界遍历可拆成根、左边界非叶、左到右叶子、逆序右边界非叶;根为叶与两侧边界叶要避免重复,原帖 full/complete/balanced 的组合约束须核清。

阅读这道题的独立深文 →
Behavioral / Project Deep Dive · 32

选一个真实最难项目,讲清目标与基线、自己的设计决策、失败修正、结果和可追问证据

选一个真实最难项目,讲清目标与基线、自己的设计决策、失败修正、结果和可追问证据;适配 AI 语音及 Staff 深挖。

解题切入:项目深挖先准备可证实的目标、基线、个人职责、两个方案取舍、测试/回滚和结果;最难点要落到具体技术约束,Staff 轮再补跨团队决策。

阅读这道题的独立深文 →
KV / Transactions · 33

KV Store 追加 begin、commit、rollback,事务边界要求 O(1)

KV Store 追加 begin、commit、rollback,事务边界要求 O(1);用持久化根指针处理嵌套回滚,并讨论多线程隔离。

解题切入:KV 的 begin/commit/rollback 要严格 O(1) 可保存不可变树根指针,put 路径复制另付 O(log n) 期望代价;嵌套 commit 后外层 rollback 仍能恢复,多线程需独立事务与冲突策略。

阅读这道题的独立深文 →
Tree / LCA · 34

给二叉树两个节点,用 U/L/R 表示从起点到终点的路径

给二叉树两个节点,用 U/L/R 表示从起点到终点的路径;找共同祖先后拼接向上与向下方向。

解题切入:树中两节点 U/L/R 路径先建父指针,沿目标节点向上找与起点祖先链的交点;起点到交点输出 U,交点到终点输出逆序的 L/R。

阅读这道题的独立深文 →
Game State / LC794 · 35

以标准 3×3 井字棋训练状态可达性

以标准 3×3 井字棋训练状态可达性:检查落子数、双方胜利状态与胜后即停;原帖的扩展规则待核。

解题切入:LC794 标准井字棋先核 X/O 落子数、双赢和赢家与最后一步是否一致;原帖只说扩展版,具体扩展规则待核,不能把标准 3×3 规则直接外推。

阅读这道题的独立深文 →
Behavioral / Career Change · 36

回答为什么跳槽

回答为什么跳槽:用真实成果、下一阶段目标、岗位职责匹配和一致的时间线说明选择。

解题切入:为什么跳槽要从真实项目成果与下一阶段岗位目标连接,说明时间线和具体职责匹配;避免编造目标团队信息或与项目深挖的个人贡献口径冲突。

阅读这道题的独立深文 →
Behavioral / Conflict · 37

讲一次冲突或 pushback

讲一次冲突或 pushback:还原双方约束、证据、替代方案、决策执行与复盘;追问给当前团队的建议。

解题切入:冲突与 pushback 用共同目标、双方约束、可比证据、具体替代方案、执行结果和复盘组织;给当前团队建议要可执行且有衡量指标。

阅读这道题的独立深文 →
System Design / Search · 38

以 Yelp 商家搜索作训练题

以 Yelp 商家搜索作训练题:按位置、关键词和营业状态召回,精确地理过滤后排序并处理新鲜度与分页。

解题切入:Yelp 类本地商家搜索先定义位置、关键词和营业过滤;地理 cell 粗召回后做精确距离过滤,与倒排文本候选交集再排序,快变营业状态用覆盖层。

阅读这道题的独立深文 →

Next Step

把题目放回面试流程

题目只是准备的一部分;按公司攻略核对轮次、岗位差异和常见失分点。

查看 Snowflake 面试全攻略 →
✓已复制微信号!