git:20260919.2ea5304 to git:20260920.a4843f5

2 added, 16 removed. Audit A to A.

---
name: data-engineering
- description: 数据工程怎么面:数仓分层与维度建模、离线与实时链路、调度与数据质量、存储格式与湖仓、成本与性能。岗位或简历涉及数据开发、数仓、大数据开发、ETL 时加载。
+ description: 数据工程怎么面:数仓建模、离线与实时链路、调度、数据质量、湖仓。数据开发与数仓岗读。
keywords: [数据开发, 数仓, 大数据开发, etl, data engineer, hive, spark, flink, 维度建模, 实时数仓, 湖仓, iceberg, paimon, dolphinscheduler, 数据质量]
layer: domain
---
## 面试官在意什么
数据开发 / 数仓工程师负责把业务数据变成可信、可用、可持续交付的数据资产:建模分层、写离线和实时任务、维护调度依赖、保障数据质量与 SLA、控制存储与计算成本。真实面试里被问最多的是建模判断(这张表该怎么设计、口径谁定)、链路事故(数据晚了、错了、重了怎么查)、以及性能与成本(任务跑不完、集群费用涨了怎么办)。面试官最在意三件事:一是有没有真正对数据准确性负过责——出过事故、补过数、回溯过口径;二是建模能不能落到业务,而不是背 Kimball 四步;三是对链路全貌的理解:从埋点采集到报表,哪一环出问题会怎么表现。
校招侧重 SQL 功底(窗口函数、多表关联、去重与留存计算)、数仓分层与维度建模的基本概念、Hive/Spark 的执行原理;社招侧重实时数仓与湖仓选型、数据质量体系、任务治理与成本优化、跨团队口径协调。一线大厂近年明显更看重"数据资产化"与"降本",外企则更关注 pipeline 的工程规范(测试、版本、幂等)。
怎么问才像这个方向的面试官:
- 所有题目都要挂在"数据准确性"或"链路事故"上:不问"什么是拉链表",问"这个场景用不用拉链表、不用的话怎么回溯"。
- 必须结合候选人的数据规模:日增 GB 级与 PB 级的最优方案完全不同,先问清规模再评判方案对错。
- 不要考组件版本与参数名,考执行原理与排查顺序;候选人说"调参数"要追它改变了执行的哪一步。
- 建模题要给出具体业务场景(订单、日志、用户)与冲突需求,让候选人现场定粒度、说取舍。
+ - 2026 年数据工程的架构主线是批流一体的湖仓:开放表格式(Iceberg 一类)成了跨引擎的存储标准,实时链路靠 CDC 与流处理引擎直接写湖,AI 场景对数据新鲜度提出了新的 SLA。面试官会追候选人怎么统一批与流、表格式解决了什么、新鲜度怎么量。
## 项目 / 实习怎么深挖
简历上出现下面这类经历时从哪里切、追什么。追到候选人能说出机制、数字的来源与一次真实的故障或取舍才算实;只有框架名与结论、说不出自己那一段的,记为危险信号。通用的追问方法见 project-deep-dive。
- 简历出现"搭建数仓" → 追分了几层、粒度怎么定、公共层复用率、你自己建的表被多少下游用
- 简历出现实时数仓 / Flink → 追状态大小、checkpoint 间隔与耗时、迟到数据处理方式、出过什么事故
- 简历出现"数据质量体系" → 追规则数量、阻断率、误报率、最近一次靠它拦住的问题
- 简历出现"性能优化 X 倍" → 追优化前后耗时、怎么定位瓶颈、改了什么、数据量多大
- 简历出现 Iceberg / Hudi / Paimon → 追为什么迁、迁前痛点、小文件与元数据怎么治理
- 简历出现调度平台(Airflow / DolphinScheduler)→ 追任务规模、依赖设计、重跑与补数机制、SLA 达成率
- 简历出现"数据治理 / 指标体系" → 追口径冲突的具体案例、怎么推动统一、变更管理流程
- 简历出现 CDC / Debezium / Canal → 追 delete 与 schema 变更怎么处理、延迟多少、断点恢复怎么做
## 常见失守与危险信号
- 数仓分层与建模落地:只会背分层名字;说不出自己负责过的表在哪一层、上下游是谁;认为"多建宽表就是好"
- 维度建模与事实表设计:粒度说不清;把所有字段堆进一张表;不知道拉链表回溯查询怎么写
- 离线链路与 SQL 优化:直接说"加 executor";不看执行计划;不知道倾斜表现为什么是少数 task 跑很久
- - 实时链路与流处理:认为实时数据一定准;不知道 watermark 与迟到数据的关系;exactly-once 只会说"Flink 支持"
- 调度与任务治理:不知道任务是否幂等;补数靠手工改日期跑;没有基线或 SLA 概念
- 数据质量与可观测:只有"跑完了"没有"跑对了"的检查;出问题从上游一张张表人肉看
- - 存储格式与湖仓:说不出行存和列存的区别;把湖仓当成"新名词"而不知道它解决的具体痛点
- 指标口径与数据资产管理:认为口径是业务的事与数仓无关;口径改了没有变更记录
- - 成本与性能优化:只想到删表;不知道自己任务的资源消耗
- 数据采集与埋点:认为数据来了就是对的;不知道 binlog 里 update 会怎么表现
- SQL 现场题与执行原理:只会 group by 不会窗口;join 后行数翻倍没意识到;count(distinct) 在大表上直接跑不知道会倾斜
## 常考主题清单
只列名字、阶梯与答实的标志,作"问到哪一层算实"的参考;问哪些、问几道由这份 JD 与这份简历定,不是配额。
### 数仓分层与建模落地
- 阶梯:ODS/DWD/DWS/ADS 各层解决什么问题 → 为什么分层能减少重复计算、隔离变化,分层过多的代价 → 业务方直接查 ODS 绕过数仓、DWS 表爆炸式增长怎么治理 → 宽表 vs 星型模型、一致性维度与"每个业务线自建一套"的取舍
- 答实的标志:能用血缘和访问日志判断表价值;理解公共层复用率指标;知道分层是为了口径统一,而不是为了分层本身
### 维度建模与事实表设计
- 阶梯:事实表与维度表的区别,粒度怎么定 → 事务事实表、周期快照、累积快照各自适用场景 → 订单状态频繁变更导致事实表重复、指标口径不一致怎么排查 → 缓慢变化维(SCD2 / 拉链表)的存储与查询代价,什么时候干脆存快照
- 答实的标志:先定粒度再定字段;累积快照处理多阶段流程;理解退化维度与代理键;知道 SCD2 对下游 join 的影响
### 离线链路与 SQL 优化
- 阶梯:一条 Hive/Spark SQL 的执行流程 → 分区、分桶、小文件对性能的影响 → 任务从 30 分钟涨到 3 小时怎么定位(数据倾斜、笛卡尔积、分区裁剪失效)→ 加资源、改 SQL、改模型三种手段的优先级
- 答实的标志:先看执行计划与 stage 耗时分布;分区裁剪、谓词下推是否生效;倾斜 key 的定位与拆分;小文件合并策略
- ### 实时链路与流处理
- - 阶梯:实时和离线各自解决什么,Lambda 与 Kappa 差异 → Flink 的 checkpoint、状态、watermark 分别做什么 → 实时指标与离线对不上、迟到数据、乱序、状态膨胀怎么处理 → 端到端 exactly-once 的代价,什么场景 at-least-once + 幂等就够
- - 答实的标志:能列出差异来源(迟到、去重口径、维表更新时机、时区);理解状态 TTL;知道下游 sink 的幂等或事务写入才是端到端一致的关键
-
### 调度与任务治理
- 阶梯:为什么需要调度系统而不是 crontab → DAG 依赖、重跑、补数、幂等分别怎么保证 → 上游延迟引发下游连锁失败、任务重跑导致重复写入怎么处理 → SLA 分级与基线告警的设计,资源队列的优先级怎么定
- 答实的标志:任务写入按分区覆盖保证幂等;核心链路基线告警;依赖检查用分区就绪而不是固定时间
### 数据质量与可观测
- 阶梯:数据质量看哪几个维度(完整性、准确性、一致性、及时性、唯一性)→ 规则校验放在链路哪个位置,阻断还是告警 → 指标突然掉 30% 是数据问题还是业务问题怎么快速判断 → 全量校验的成本与抽样、分层校验的取舍
- 答实的标志:从源头波动率、分区记录数、主键唯一性逐层排查;有血缘辅助定位;核心表配置阻断规则
- ### 存储格式与湖仓
- - 阶梯:Parquet/ORC 为什么适合分析 → 列式存储、压缩、谓词下推的原理 → 湖仓表(Iceberg/Hudi/Paimon)解决 Hive 表哪些痛点(ACID、schema 演进、小文件、时间旅行)→ 从 Hive 迁到湖仓的收益、成本与风险
- - 答实的标志:理解快照、元数据文件与小文件治理的关系;schema 演进对下游影响;流式 upsert 场景的适配性
-
### 指标口径与数据资产管理
- 阶梯:同一个"活跃用户"为什么各部门数字不一样 → 指标定义(原子指标、派生指标、修饰词)与统一口径 → 口径变更后历史数据要不要回溯、怎么通知下游 → 指标平台 vs 靠文档约定的投入产出
- 答实的标志:区分原子指标与派生指标;口径变更有版本与生效时间;血缘能找到所有受影响的下游
-
- ### 成本与性能优化
- - 阶梯:数据平台成本花在哪(存储、计算、调度空转)→ 冷热分层、生命周期、压缩、任务合并各省什么 → 集群账单月涨 40% 怎么归因到具体任务和负责人 → 降本与 SLA、开发效率的冲突怎么协调
- - 答实的标志:按任务/表归因成本;识别无人访问的表与重复计算;生命周期策略;把降本量化并跟踪
### 数据采集与埋点
- 阶梯:日志、binlog(CDC)、接口拉取各适用什么 → CDC 的顺序、删除、schema 变更怎么处理 → 埋点丢数、重复上报怎么发现和补 → 采集侧治理(埋点规范、上线校验)投入与下游清洗成本的关系
- 答实的标志:埋点校验与灰度对比;CDC 处理 delete 与主键变更;采集侧带版本号
### SQL 现场题与执行原理
- 阶梯:去重、topN、连续登录、留存这类题怎么写 → 窗口函数、多表 join 的行数放大、null 参与比较与聚合的语义 → 同一段 SQL 在 Hive 与 Spark 结果不一致、count(distinct) 跑不动怎么处理 → 一条复杂 SQL 拆成多步中间表的可维护性与性能权衡
- 答实的标志:先确认口径再写;用 row_number 与日期差做连续分组;大基数去重用两阶段聚合或近似算法;对结果做总量对账