data-engineering · git:20260920.a4843f5 · 2026-09-20 · sha256 3d724cee69b6ff34
data-engineering git:20260920.a4843f5A
Immutable. This exact content never changes and is served at /api/v1/blob/3d724cee69b6ff34.
--- name: data-engineering 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 跑很久 - 调度与任务治理:不知道任务是否幂等;补数靠手工改日期跑;没有基线或 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 的定位与拆分;小文件合并策略 ### 调度与任务治理 - 阶梯:为什么需要调度系统而不是 crontab → DAG 依赖、重跑、补数、幂等分别怎么保证 → 上游延迟引发下游连锁失败、任务重跑导致重复写入怎么处理 → SLA 分级与基线告警的设计,资源队列的优先级怎么定 - 答实的标志:任务写入按分区覆盖保证幂等;核心链路基线告警;依赖检查用分区就绪而不是固定时间 ### 数据质量与可观测 - 阶梯:数据质量看哪几个维度(完整性、准确性、一致性、及时性、唯一性)→ 规则校验放在链路哪个位置,阻断还是告警 → 指标突然掉 30% 是数据问题还是业务问题怎么快速判断 → 全量校验的成本与抽样、分层校验的取舍 - 答实的标志:从源头波动率、分区记录数、主键唯一性逐层排查;有血缘辅助定位;核心表配置阻断规则 ### 指标口径与数据资产管理 - 阶梯:同一个"活跃用户"为什么各部门数字不一样 → 指标定义(原子指标、派生指标、修饰词)与统一口径 → 口径变更后历史数据要不要回溯、怎么通知下游 → 指标平台 vs 靠文档约定的投入产出 - 答实的标志:区分原子指标与派生指标;口径变更有版本与生效时间;血缘能找到所有受影响的下游 ### 数据采集与埋点 - 阶梯:日志、binlog(CDC)、接口拉取各适用什么 → CDC 的顺序、删除、schema 变更怎么处理 → 埋点丢数、重复上报怎么发现和补 → 采集侧治理(埋点规范、上线校验)投入与下游清洗成本的关系 - 答实的标志:埋点校验与灰度对比;CDC 处理 delete 与主键变更;采集侧带版本号 ### SQL 现场题与执行原理 - 阶梯:去重、topN、连续登录、留存这类题怎么写 → 窗口函数、多表 join 的行数放大、null 参与比较与聚合的语义 → 同一段 SQL 在 Hive 与 Spark 结果不一致、count(distinct) 跑不动怎么处理 → 一条复杂 SQL 拆成多步中间表的可维护性与性能权衡 - 答实的标志:先确认口径再写;用 row_number 与日期差做连续分组;大基数去重用两阶段聚合或近似算法;对结果做总量对账