vinqi.com

数据仓库工程师面试题及答题要点

数仓工程师面试一般 2-4 轮:技术面重点考 SQL、建模和 ETL 细节,常有一轮手写 SQL 或现场设计题。最容易挂的不是不会答,而是项目经历讲不清细节,被追问两层就露馅。

专业基础

介绍一下维度建模和范式建模的区别,你们项目里用的是哪种?

考察点:考建模基本功,以及你是否真做过建模决策

答题要点:
  1. 先讲结论:事实表存度量、维度表存描述,星型模型查询性能好
  2. 再讲取舍:范式建模省存储但 join 多,数仓场景一般选维度建模
  3. 结合项目说明为什么这么选,比如面向报表分析、查询并发高
  4. 能提一句分层(ODS/DWD/DWS)与建模的关系是加分项

别踩:只背概念不结合项目,面试官会立刻追问项目细节验证真实性

缓慢变化维(SCD)有哪几种处理方式?你们怎么处理的?

考察点:考维度表设计的实战经验

答题要点:
  1. 说清 Type1 覆盖、Type2 加新记录拉链表、Type3 加字段
  2. 重点讲 Type2:新增生效日期和失效日期字段,保留历史
  3. 举一个真实例子,比如客户经理变更后历史订单归属怎么算
  4. 如果你们用拉链表,主动说清全量快照和增量更新的流程

别踩:只背 Type1/2/3 定义,说不出项目里为什么选那种方式

ODS、DWD、DWS、ADS 各层的作用是什么?为什么要分层?

考察点:考数仓架构理解,判断你是做数仓还是只会跑脚本

答题要点:
  1. 逐层说清:ODS 原样落地、DWD 明细清洗、DWS 轻度汇总、ADS 面向应用
  2. 分层的核心价值:复用、血缘清晰、问题定位快、屏蔽底层变更
  3. 结合项目说一个例子,比如一个指标从 DWD 到 ADS 的加工路径
  4. 能提到成本控制和数据复用会更显深度

别踩:把分层讲成教条,说不出自己项目里每层实际做了什么

数据质量和数据一致性你们是怎么保障的?

考察点:考工程化意识,是否只管跑通不管对账

答题要点:
  1. 讲具体手段:主键唯一性校验、空值率监控、行数波动比对
  2. 说清对账方式:上下游行数和金额核对,不一致自动告警
  3. 提数据质量报表或监控大盘,谁负责、多久看一次
  4. 有故障复盘例子最好,讲清发现、定位、修复的完整过程

别踩:只说「我们做了校验」,说不出具体校验什么、告警给谁

SQL 与技术实操

手写一个 SQL:查询每个部门工资第二高的员工。

考察点:考窗口函数熟练度,这是数仓岗硬门槛

答题要点:
  1. 用 row_number() over(partition by dept order by salary desc) 取 rn=2
  2. 主动说明 row_number、rank、dense_rank 的区别
  3. 注意并列工资的处理,问清面试官要哪种语义
  4. 写完口述一遍逻辑,边写边讲比闷头写好

别踩:写完不检查边界,或用自连接写出性能差的答案还不自知

一个任务平时 10 分钟跑完,今天跑了 2 小时,你怎么排查?

考察点:考故障排查思路,是否真维护过生产任务

答题要点:
  1. 先看数据量:上游是否有异常增量或重复数据
  2. 再看资源:队列排队、内存溢出、并行度被调低
  3. 查代码变更:最近是否有逻辑改动引入 shuffle 或倾斜
  4. 最后看执行计划,定位到具体慢的 stage 再优化

别踩:一上来就说「重启试试」,暴露没有生产运维经验

数据倾斜是什么?你在项目里遇到过吗,怎么解决的?

考察点:考大数据场景下的实战调优经验

答题要点:
  1. 先定义:某 key 数据量过大导致个别任务远慢于其他
  2. 给现象:任务卡在 99%,个别节点长时间不结束
  3. 说解法:加盐打散、两阶段聚合、过滤异常 key
  4. 必须带一个真实例子,处理前后耗时变化说个大概

别踩:只背「加盐」两个字,追问加盐具体怎么写就答不上

增量数据和全量数据你们是怎么处理的?什么时候用哪种?

考察点:考 ETL 日常工作的真实经验

答题要点:
  1. 说清判断依据:数据量、是否有可靠更新时间戳或 CDC 日志
  2. 全量适合小维表,简单可靠;增量适合大事实表
  3. 讲增量的具体机制:按更新时间抽取、合并进分区或拉链表
  4. 提一句幂等设计:任务重跑不会造成数据重复

别踩:只会说「我们用增量」,说不出增量怎么合并、怎么保证不重不漏

项目经历深挖

挑一个你负责的数仓项目,讲一下整体架构和你负责的部分。

考察点:考表达结构,以及你在项目里的真实角色

答题要点:
  1. 用「背景—架构—我的职责—结果」四段式,控制在 3 分钟内
  2. 先讲分层架构和数据流,再讲你负责的具体层或主题域
  3. 量化结果:表数量、日增量、任务耗时优化了多少
  4. 主动划清边界:哪些是你做的,哪些是团队做的

别踩:把团队项目说成自己独立完成,追问细节立刻穿帮

这个项目里你遇到的最大技术难点是什么?怎么解决的?

考察点:考解决问题的深度和真实性

答题要点:
  1. 选一个真有技术含量的:模型重构、数据倾斜、口径统一
  2. 按「现象—分析—方案—验证」讲,突出分析过程
  3. 说清为什么选这个方案、放弃了哪些备选
  4. 量化收益,比如任务耗时从 X 降到 Y(估算值即可)

别踩:选一个伪难点,比如「需求不明确沟通了很久」,技术面会减分

你们指标口径不一致的问题是怎么治理的?

考察点:考数据治理经验,中高级岗高频题

答题要点:
  1. 先讲问题表现:同名指标不同口径,报表对不上
  2. 讲治理手段:指标字典、口径评审流程、统一汇总层
  3. 说清落地方式:谁维护、怎么同步给业务方
  4. 有具体例子最好,比如统一了某核心指标后投诉减少

别踩:只说「我们建了指标字典」,说不出怎么保证大家真的用它

行为面试

业务方说报表数据不对,但你的任务都显示正常,怎么办?

考察点:考沟通与责任边界意识

答题要点:
  1. 先别急着甩锅,拉上业务方核对口径和取数时间
  2. 自查链路:字段逻辑、过滤条件、数据延迟
  3. 确认是口径问题就补文档,是数据问题就修
  4. 复盘后推动加监控,避免同类问题反复出现

别踩:第一句就是「我的代码没问题」,显得推卸责任

说一次你和业务方或同事在需求上的冲突,怎么处理的?

考察点:考协作方式,是否只埋头技术

答题要点:
  1. 选真实小事:需求排期冲突或口径理解分歧
  2. 讲你如何对齐:摆事实、给方案选项、让业务方拍板
  3. 强调结果:双方接受的折中,以及后续机制改进
  4. 不要贬低对方,重点放在沟通方法上

别踩:把故事讲成「我坚持技术判断最后证明我对了」,显得难合作

为什么从现在的公司离开?

考察点:考动机稳定性和诚实度

答题要点:
  1. 理由正向:想接触更大数据量、更完整的数仓体系
  2. 不批评前公司,不说「钱少事多」
  3. 结合目标公司说:贵司的业务场景正是我想深入的方向
  4. 如果被裁或项目结束,如实说,别编故事

别踩:抱怨前公司或前领导,这是技术面也会挂的送命题

反问环节

你有什么想问我们的?

考察点:考你对岗位的真实兴趣和判断力

答题要点:
  1. 问团队现状:数仓规模、分层是否完整、治理做到什么程度
  2. 问工作重心:偏开发、偏治理还是偏业务支持
  3. 问成长路径:这个岗位一年后期望达到什么状态
  4. 避免一上来只问加班和薪资,留到 HR 轮再谈

别踩:说「没什么想问的」,直接被判定为兴趣不足

面试准备清单

什么时候要做什么
面试前 3 天过一遍自己的项目:每个项目按「背景-架构-职责-难点-结果」写出口头稿,每段能扛住两层追问
面试前 3 天刷窗口函数和行列转换 SQL 题,重点练 row_number、lag/lead、多表 join,准备手写环境
面试前 1 天复习维度建模、分层架构、SCD、数据倾斜等概念,每个概念配一个项目里的真实例子
面试前 1 天查目标公司业务和数仓规模,准备 2-3 个针对性的反问问题
面试当天准备好讲清一个完整故障排查案例:现象、定位、修复、预防,这是区分度最高的素材
面试当天手写 SQL 轮注意边写边讲思路,写完主动检查边界条件

常见问题

数仓工程师面试一般有几轮?
通常 2-4 轮:1-2 轮技术面(含手写 SQL)、可能加一轮主管面或交叉面、最后 HR 面。大厂可能加笔试。
没有大数据组件经验,只做过传统 ETL,能面数仓岗吗?
可以。建模、SQL、数据质量这些核心能力是通用的。面试时主动说明学习意愿,并展示你快速上手新工具的经历。
面试官一直追问项目细节,是不是不信任我?
不是,这是数仓岗的标准验证手段。追问两层以上是为了确认工作是你亲手做的。答不上就如实说这部分是同事负责的。
数仓工程师和 ETL 工程师面试重点一样吗?
高度重叠:SQL、建模、数据处理都是必考。ETL 岗更偏调度和任务运维细节,数仓岗更偏建模和分层架构,可按 JD 侧重准备。

继续看这个岗位

相关岗位