数据仓库工程师面试题及答题要点
数仓工程师面试一般 2-4 轮:技术面重点考 SQL、建模和 ETL 细节,常有一轮手写 SQL 或现场设计题。最容易挂的不是不会答,而是项目经历讲不清细节,被追问两层就露馅。
专业基础
介绍一下维度建模和范式建模的区别,你们项目里用的是哪种?
考察点:考建模基本功,以及你是否真做过建模决策
- 先讲结论:事实表存度量、维度表存描述,星型模型查询性能好
- 再讲取舍:范式建模省存储但 join 多,数仓场景一般选维度建模
- 结合项目说明为什么这么选,比如面向报表分析、查询并发高
- 能提一句分层(ODS/DWD/DWS)与建模的关系是加分项
别踩:只背概念不结合项目,面试官会立刻追问项目细节验证真实性
缓慢变化维(SCD)有哪几种处理方式?你们怎么处理的?
考察点:考维度表设计的实战经验
- 说清 Type1 覆盖、Type2 加新记录拉链表、Type3 加字段
- 重点讲 Type2:新增生效日期和失效日期字段,保留历史
- 举一个真实例子,比如客户经理变更后历史订单归属怎么算
- 如果你们用拉链表,主动说清全量快照和增量更新的流程
别踩:只背 Type1/2/3 定义,说不出项目里为什么选那种方式
ODS、DWD、DWS、ADS 各层的作用是什么?为什么要分层?
考察点:考数仓架构理解,判断你是做数仓还是只会跑脚本
- 逐层说清:ODS 原样落地、DWD 明细清洗、DWS 轻度汇总、ADS 面向应用
- 分层的核心价值:复用、血缘清晰、问题定位快、屏蔽底层变更
- 结合项目说一个例子,比如一个指标从 DWD 到 ADS 的加工路径
- 能提到成本控制和数据复用会更显深度
别踩:把分层讲成教条,说不出自己项目里每层实际做了什么
数据质量和数据一致性你们是怎么保障的?
考察点:考工程化意识,是否只管跑通不管对账
- 讲具体手段:主键唯一性校验、空值率监控、行数波动比对
- 说清对账方式:上下游行数和金额核对,不一致自动告警
- 提数据质量报表或监控大盘,谁负责、多久看一次
- 有故障复盘例子最好,讲清发现、定位、修复的完整过程
别踩:只说「我们做了校验」,说不出具体校验什么、告警给谁
SQL 与技术实操
手写一个 SQL:查询每个部门工资第二高的员工。
考察点:考窗口函数熟练度,这是数仓岗硬门槛
- 用 row_number() over(partition by dept order by salary desc) 取 rn=2
- 主动说明 row_number、rank、dense_rank 的区别
- 注意并列工资的处理,问清面试官要哪种语义
- 写完口述一遍逻辑,边写边讲比闷头写好
别踩:写完不检查边界,或用自连接写出性能差的答案还不自知
一个任务平时 10 分钟跑完,今天跑了 2 小时,你怎么排查?
考察点:考故障排查思路,是否真维护过生产任务
- 先看数据量:上游是否有异常增量或重复数据
- 再看资源:队列排队、内存溢出、并行度被调低
- 查代码变更:最近是否有逻辑改动引入 shuffle 或倾斜
- 最后看执行计划,定位到具体慢的 stage 再优化
别踩:一上来就说「重启试试」,暴露没有生产运维经验
数据倾斜是什么?你在项目里遇到过吗,怎么解决的?
考察点:考大数据场景下的实战调优经验
- 先定义:某 key 数据量过大导致个别任务远慢于其他
- 给现象:任务卡在 99%,个别节点长时间不结束
- 说解法:加盐打散、两阶段聚合、过滤异常 key
- 必须带一个真实例子,处理前后耗时变化说个大概
别踩:只背「加盐」两个字,追问加盐具体怎么写就答不上
增量数据和全量数据你们是怎么处理的?什么时候用哪种?
考察点:考 ETL 日常工作的真实经验
- 说清判断依据:数据量、是否有可靠更新时间戳或 CDC 日志
- 全量适合小维表,简单可靠;增量适合大事实表
- 讲增量的具体机制:按更新时间抽取、合并进分区或拉链表
- 提一句幂等设计:任务重跑不会造成数据重复
别踩:只会说「我们用增量」,说不出增量怎么合并、怎么保证不重不漏
项目经历深挖
挑一个你负责的数仓项目,讲一下整体架构和你负责的部分。
考察点:考表达结构,以及你在项目里的真实角色
- 用「背景—架构—我的职责—结果」四段式,控制在 3 分钟内
- 先讲分层架构和数据流,再讲你负责的具体层或主题域
- 量化结果:表数量、日增量、任务耗时优化了多少
- 主动划清边界:哪些是你做的,哪些是团队做的
别踩:把团队项目说成自己独立完成,追问细节立刻穿帮
这个项目里你遇到的最大技术难点是什么?怎么解决的?
考察点:考解决问题的深度和真实性
- 选一个真有技术含量的:模型重构、数据倾斜、口径统一
- 按「现象—分析—方案—验证」讲,突出分析过程
- 说清为什么选这个方案、放弃了哪些备选
- 量化收益,比如任务耗时从 X 降到 Y(估算值即可)
别踩:选一个伪难点,比如「需求不明确沟通了很久」,技术面会减分
你们指标口径不一致的问题是怎么治理的?
考察点:考数据治理经验,中高级岗高频题
- 先讲问题表现:同名指标不同口径,报表对不上
- 讲治理手段:指标字典、口径评审流程、统一汇总层
- 说清落地方式:谁维护、怎么同步给业务方
- 有具体例子最好,比如统一了某核心指标后投诉减少
别踩:只说「我们建了指标字典」,说不出怎么保证大家真的用它
行为面试
业务方说报表数据不对,但你的任务都显示正常,怎么办?
考察点:考沟通与责任边界意识
- 先别急着甩锅,拉上业务方核对口径和取数时间
- 自查链路:字段逻辑、过滤条件、数据延迟
- 确认是口径问题就补文档,是数据问题就修
- 复盘后推动加监控,避免同类问题反复出现
别踩:第一句就是「我的代码没问题」,显得推卸责任
说一次你和业务方或同事在需求上的冲突,怎么处理的?
考察点:考协作方式,是否只埋头技术
- 选真实小事:需求排期冲突或口径理解分歧
- 讲你如何对齐:摆事实、给方案选项、让业务方拍板
- 强调结果:双方接受的折中,以及后续机制改进
- 不要贬低对方,重点放在沟通方法上
别踩:把故事讲成「我坚持技术判断最后证明我对了」,显得难合作
为什么从现在的公司离开?
考察点:考动机稳定性和诚实度
- 理由正向:想接触更大数据量、更完整的数仓体系
- 不批评前公司,不说「钱少事多」
- 结合目标公司说:贵司的业务场景正是我想深入的方向
- 如果被裁或项目结束,如实说,别编故事
别踩:抱怨前公司或前领导,这是技术面也会挂的送命题
反问环节
你有什么想问我们的?
考察点:考你对岗位的真实兴趣和判断力
- 问团队现状:数仓规模、分层是否完整、治理做到什么程度
- 问工作重心:偏开发、偏治理还是偏业务支持
- 问成长路径:这个岗位一年后期望达到什么状态
- 避免一上来只问加班和薪资,留到 HR 轮再谈
别踩:说「没什么想问的」,直接被判定为兴趣不足
面试准备清单
| 什么时候 | 要做什么 |
|---|---|
| 面试前 3 天 | 过一遍自己的项目:每个项目按「背景-架构-职责-难点-结果」写出口头稿,每段能扛住两层追问 |
| 面试前 3 天 | 刷窗口函数和行列转换 SQL 题,重点练 row_number、lag/lead、多表 join,准备手写环境 |
| 面试前 1 天 | 复习维度建模、分层架构、SCD、数据倾斜等概念,每个概念配一个项目里的真实例子 |
| 面试前 1 天 | 查目标公司业务和数仓规模,准备 2-3 个针对性的反问问题 |
| 面试当天 | 准备好讲清一个完整故障排查案例:现象、定位、修复、预防,这是区分度最高的素材 |
| 面试当天 | 手写 SQL 轮注意边写边讲思路,写完主动检查边界条件 |