跳转至

🎯 数据工程面试题精选50题

适用岗位:数据工程师(Data Engineer)、大数据开发 难度分布:基础(20) + 进阶(20) + 系统设计(10)


一、基础题(20题)

Q1: ETL和ELT的区别? - ETL: Extract→Transform→Load,先转换再入仓(传统数仓) - ELT: Extract→Load→Transform,先入仓再转换(现代数据湖/BigQuery/Snowflake) - 趋势: ELT成为主流,利用数仓计算能力做转换

Q2: 数据仓库 vs 数据湖 vs 数据湖仓? | 维度 | 数仓 | 数据湖 | 湖仓 | |------|------|--------|------| | 数据类型 | 结构化 | 全类型 | 全类型 | | Schema | Schema-on-Write | Schema-on-Read | 统一Catalog | | 引擎 | SQL | Spark等 | 统一引擎 | | 代表 | Snowflake/Redshift | S3+Spark | Delta Lake/Iceberg |

Q3: Spark和Hadoop MapReduce的区别? - Spark: 内存计算、DAG优化、丰富API(SQL/ML/Streaming) - MapReduce: 磁盘IO密集、编程模型受限(Map→Reduce) - 速度: Spark比MR快10-100x(主要因为减少磁盘IO)

Q4: Spark的核心概念? - RDD: 弹性分布式数据集,不可变+分区+可重算 - DataFrame/Dataset: 带Schema的高级API,支持SQL优化 - Transformation: 惰性计算(map/filter/groupBy) - Action: 触发计算(count/collect/show) - Shuffle: 数据重分布(join/groupBy触发,性能关键)

Q5: 什么是数据建模?星型模型和雪花模型? - 星型模型: 事实表(中心)+维度表(周围),查询快,冗余多 - 雪花模型: 维度表继续规范化,冗余少但JOIN多 - 实践: 星型模型更常用(查询性能优先)

Q6: SQL窗口函数的使用?

SQL
-- 排名
ROW_NUMBER() OVER(PARTITION BY dept ORDER BY salary DESC)  -- 窗口函数:在结果集上滑动计算
RANK() / DENSE_RANK()

-- 累计
SUM(amount) OVER(PARTITION BY user ORDER BY date ROWS UNBOUNDED PRECEDING)

-- 前后行
LAG(value, 1) OVER(ORDER BY date)
LEAD(value, 1) OVER(ORDER BY date)

Q7: Kafka的核心概念? - Topic→Partition→Offset: 消息存储结构 - Producer→Broker→Consumer Group: 数据流 - 关键特性: 持久化+分区并行+消费者组+Exactly-once语义 - 适用: 日志收集、事件驱动、流处理、消息解耦

Q8: 什么是数据质量?如何保证? - 维度: 完整性、准确性、一致性、及时性、唯一性 - 工具: Great Expectations、dbt tests、Deequ - 实践: 异常检测+数据契约+血缘追踪+SLA监控

Q9: dbt是什么?为什么流行? - 定义: 数据转换工具,用SQL定义数据模型,管理Transform层 - 特点: 版本控制(Git)、测试、文档、依赖管理、增量模型 - 核心: SELECT + Jinja模板 → 自动创建表/视图

Q10: 批处理 vs 流处理? | 维度 | 批处理 | 流处理 | |------|--------|--------| | 延迟 | 小时/天 | 毫秒/秒 | | 吞吐 | 极高 | 中高 | | 工具 | Spark Batch/Hive | Flink/Kafka Streams/Spark Streaming | | 场景 | 离线报表/训练 | 实时监控/推荐 |

Q11: Flink vs Spark Streaming? - Flink: 真正的流处理(event-time)、低延迟、精确一次语义 - Spark Streaming: 微批(micro-batch),延迟较高但吞吐高 - 趋势: Flink在实时场景更优,Spark在批流一体更成熟

Q12: 什么是数据血缘(Data Lineage)? - 追踪数据从源到消费者的完整路径 - 用途: 影响分析、根因定位、合规审计 - 工具: OpenLineage、dbt docs、DataHub、Apache Atlas

Q13: Parquet vs CSV vs JSON的选择? - Parquet: 列式存储,压缩好,查询快(分析场景首选) - CSV: 通用但无Schema,适合小数据交换 - JSON: 半结构化,灵活但体积大 - ORC: Hive生态列式格式

Q14: 什么是CDC(变更数据捕获)? - 捕获数据库增量变更同步到下游 - 方法: 日志解析(Debezium/Canal)、触发器、时间戳 - 场景: 数据库→数据湖实时同步、微服务数据同步

Q15: 数据分区策略? - 时间分区: dt=2026-02-08(最常用,适合时序数据) - Hash分区: 按ID Hash均匀分布 - Range分区: 按值范围划分 - 优化: 分区裁剪(Partition Pruning)减少扫描数据量

Q16: Spark性能优化方法? - 避免Shuffle: 减少groupBy/join - 广播Join: 小表broadcast避免Shuffle - 数据倾斜: Salting Key/两阶段聚合 - 缓存: persist()复用中间结果 - 并行度: repartition调整分区数

Q17: 什么是数据仓库分层?

Text Only
ODS(原始层) → DWD(明细层) → DWS(汇总层) → ADS(应用层)
- ODS: 原始数据清洗入湖 - DWD: 维度建模、去重、标准化 - DWS: 按主题汇总(日/周/月聚合) - ADS: 面向应用的指标表

Q18: Airflow是什么?核心概念? - 定义: 工作流编排工具,用DAG定义数据管道 - 核心: DAG(有向无环图)→Task→Operator→Schedule - 特点: Python定义、Web UI监控、丰富的连接器

Q19: 如何处理数据倾斜? - 现象: 少数Task处理大量数据,整体速度受限于最慢的Task - SQL: DISTRIBUTE BY加盐key → 两阶段聚合 - Join: 大表join倾斜key → 单独处理+union、广播小表 - Spark: AQE自适应查询执行自动处理

Q20: Delta Lake/Apache Iceberg的核心特性? - ACID事务: 数据湖上的事务保证 - 时间旅行: 查看历史版本 - Schema演进: 安全地增删列 - 小文件合并: OPTIMIZE/Compaction - 统一批流: 同一表批量写+流式读


二、进阶题(20题)

Q21: 数据湖仓一体(Lakehouse)架构设计 Q22: 实时数据仓库架构(Lambda vs Kappa) Q23: Slowly Changing Dimensions(SCD)类型和实现 Q24: 数据治理的核心要素和工具链 Q25: Feature Store的设计和应用(Feast/Tecton) Q26: 大规模数据迁移策略和方案 Q27: Spark on Kubernetes部署方案 Q28: 数据网格(Data Mesh)理念 Q29: Apache Iceberg的底层原理(Snapshot/Manifest) Q30: 流式Join的实现和挑战 Q31: 数据安全和隐私合规(GDPR/数据脱敏) Q32: 实时指标计算系统设计 Q33: Spark AQE(自适应查询执行)的优化策略 Q34: 如何设计幂等的数据管道 Q35: 数据编排工具对比(Airflow/Dagster/Prefect) Q36: 向量数据库和传统数据库的区别 Q37: 大数据存储格式的列存原理(Parquet内部结构) Q38: 数据可观测性(Data Observability) Q39: MLOps中的数据版本管理(DVC/LakeFS) Q40: A/B测试的数据基础设施


三、系统设计题(10题)

Q41: 设计一个日处理10TB的ETL管道

Text Only
数据源 → Kafka → Flink(实时清洗) → Delta Lake(S3)
                     ↓                      ↓
              实时Dashboard          Spark(离线聚合) → 数仓(Snowflake)
                                    dbt(数据建模) → BI(Tableau/Metabase)

Q42: 设计用户行为分析系统(埋点→分析→洞察) Q43: 设计推荐系统的数据管道(行为采集→特征计算→模型训练) Q44: 设计数据质量监控平台 Q45: 设计多租户数据平台 Q46: 设计LLM训练数据管道(爬取→清洗→去重→质量过滤→Tokenize) Q47: 设计实时风控系统的数据架构 Q48: 设计数据血缘追踪系统 Q49: 设计日志分析平台(ELK替代方案) Q50: 设计AI Feature Store(在线特征服务)


最后更新:2026年2月