🏗️ 21-大数据与数仓 · 高频面试题清单

> 配套 [README.md](README.md)。目标:**体系讲得全、原理说得清、SQL 写得出**。
> 建议配合 `教学/07-大数据面试八股与高频题.ipynb` 刷题与手撕。
> **86 题逐题详解(速答 + 展开 + 可运行代码 + 图示)见 [高频面试题详解.md](高频面试题详解.md)。**

使用建议

• [ ] 第一遍:快速扫读,划出不会的题;

• [ ] 第二遍:每题先自己想 30 秒,再对照要点;

• [ ] 第三遍:模拟面试,把答案讲出来(讲≠想)。

---

一、体系与 HDFS 题(12 题)

• [ ] 1. Hadoop 三件套是什么?各干什么?

• [ ] 2. HDFS 为什么块要设大(128MB/256MB)?

• [ ] 3. 3 副本策略?副本放置规则(机架感知)?

• [ ] 4. NameNode 与 DataNode 分工?NameNode 挂了怎么办(HA)?

• [ ] 5. 读写流程?为什么数据流不过 NameNode?

• [ ] 6. 小文件问题是什么?怎么解决?

• [ ] 7. 存算分离是什么?好处与代价?

• [ ] 8. HDFS 适合什么场景?不适合什么?(低延迟随机访问不行)

• [ ] 9. 数据湖 vs 数仓的区别?Lakehouse(湖仓一体)是什么?

• [ ] 10. Iceberg / Hudi / Delta Lake 解决什么问题?(ACID/时间旅行/增量)

• [ ] 11. 冷热数据分层存储怎么做?

• [ ] 12. 为什么 HDFS 不适合直接支撑高频点查?(索引/随机 IO)

二、MapReduce 题(10 题)

• [ ] 13. MR 三个阶段?Map 和 Reduce 各做什么?

• [ ] 14. Shuffle 是什么?为什么慢?(排序+网络传输+落盘)

• [ ] 15. Combiner 的作用?(map 端预聚合)

• [ ] 16. 分区器(Partitioner)干什么?(决定 key 去哪个 Reduce)

• [ ] 17. MR 为什么被 Spark 替代?(磁盘 IO/迭代)

• [ ] 18. 数据量超大时怎么避免 OOM?(分片/流式处理)

• [ ] 19. MR 处理 TopN 的思路?(分治:局部 TopN + 归并)

• [ ] 20. 什么是数据本地性?(任务调度到数据所在节点)

• [ ] 21. 一个 Reduce 和多个 Reduce 的取舍?(倾斜/并行度)

• [ ] 22. MR 能处理实时数据吗?为什么不行?

三、Spark 题(12 题)

• [ ] 23. RDD 是什么?为什么"弹性"?(分区/血缘重算/缓存)

• [ ] 24. Transformation 与 Action 区别?惰性求值的好处?

• [ ] 25. DAG 是什么?Action 时怎么执行?

• [ ] 26. 血缘(Lineage)有什么用?cache 和 checkpoint 区别?

• [ ] 27. 宽依赖 vs 窄依赖?各举例子?为什么宽依赖要 Shuffle?

• [ ] 28. reduceByKey 为什么优于 groupByKey?

• [ ] 29. DataFrame vs RDD?Catalyst 优化器做什么?

• [ ] 30. 什么是数据倾斜?怎么发现?怎么解决?(两阶段聚合/打散 key/倾斜检测)

• [ ] 31. 分区数怎么设置?过多/过少的问题?

• [ ] 32. Spark 执行流程?(Driver/Executor/Stage/Task)

• [ ] 33. 广播变量与累加器?什么时候用广播?(大表 join 小表)

• [ ] 34. Spark SQL 与 Hive 的关系?(语法/引擎/兼容)

四、Flink 与实时计算题(12 题)

• [ ] 35. 批处理 vs 流处理区别?

• [ ] 36. Lambda vs Kappa 架构?各有什么问题?

• [ ] 37. 事件时间 vs 处理时间 vs 摄入时间?

• [ ] 38. 乱序数据怎么处理?Watermark 是什么?

• [ ] 39. Watermark 怎么生成?(周期/逐条、max-延迟)

• [ ] 40. 滚动/滑动/会话窗口区别?各适合什么?

• [ ] 41. 迟到数据怎么办?(allowedLateness/侧输出/丢弃)

• [ ] 42. Flink 状态是什么?Checkpoint 怎么做?

• [ ] 43. 精确一次(Exactly-once)怎么实现?(两阶段提交)

• [ ] 44. Flink vs Spark Streaming?(真流 vs 微批)

• [ ] 45. 背压(Backpressure)是什么?怎么处理?

• [ ] 46. 实时指标和离线指标对不上怎么办?(口径/窗口/时区/重算)

五、数仓建模题(12 题)

• [ ] 47. 数仓为什么分层?各层职责?

• [ ] 48. ODS/DWD/DWS/ADS 分别做什么?粒度如何变化?

• [ ] 49. 事实表 vs 维度表?

• [ ] 50. 星型模型 vs 雪花模型?怎么选?

• [ ] 51. 什么是宽表(维度退化)?什么时候用?

• [ ] 52. 指标口径不统一怎么治理?

• [ ] 53. 数据质量四维度?(完整性/准确性/一致性/及时性)

• [ ] 54. 元数据管理包含什么?血缘有什么用?

• [ ] 55. 缓慢变化维(SCD)Type1/Type2?

• [ ] 56. 数据倾斜在 SQL/MapReduce 里怎么处理?

• [ ] 57. 为什么数仓不建议大量 join?怎么优化?(冗余/宽表/预聚合)

• [ ] 58. 拉链表是什么?怎么更新?(增量+版本)

六、Kafka 与管道题(12 题)

• [ ] 59. Kafka 在数据链路中起什么作用?(解耦/削峰/缓冲)

• [ ] 60. Topic / Partition / Offset / Broker 概念?

• [ ] 61. 分区内有序还是全局有序?要全局有序怎么办?

• [ ] 62. 为什么同 key 路由同分区?

• [ ] 63. 消费者组是什么?分区与消费者数量关系?

• [ ] 64. Rebalance 是什么?为什么有代价?

• [ ] 65. 消息积压怎么排查和处理?

• [ ] 66. acks=0/1/all 区别?怎么选?

• [ ] 67. 消费语义:at-most-once / at-least-once / exactly-once?

• [ ] 68. Kafka 为什么吞吐高?(顺序写/零拷贝/批量压缩)

• [ ] 69. 重复消费怎么去重?(幂等键/事务)

• [ ] 70. Kafka vs RocketMQ?(吞吐/顺序/延迟侧重)

七、平台与调度题(8 题)

• [ ] 71. 调度系统做什么?(DAG/定时/依赖/重跑)

• [ ] 72. 数据时间 vs 运行时间?(T-1 概念)

• [ ] 73. 任务失败怎么处理?(重试/告警/阻断/补偿)

• [ ] 74. 任务积压怎么追?(并行度/拆分/优先级/跳重跑)

• [ ] 75. 血缘怎么采集与使用?(影响分析/故障定位/下线治理)

• [ ] 76. 权限与安全?(行列级/脱敏/审计)

• [ ] 77. Airflow vs DolphinScheduler?

• [ ] 78. 一条数据从产生到应用的全链路怎么讲?

八、手撕与 SQL 题(8 题)

• [ ] 79. 手写 MR 词频统计(Map→Shuffle→Reduce)

• [ ] 80. 实现拓扑排序(判断 DAG)

• [ ] 81. 手写滚动/滑动窗口

• [ ] 82. 手写两阶段聚合(抗倾斜)

• [ ] 83. 手写全局 TopN 分治

• [ ] 84. SQL:分组 top1(row_number)

• [ ] 85. SQL:日活/月活去重、留存

• [ ] 86. 手写模拟 HDFS 分块与 3 副本分配

---

附:90 秒背诵骨架

**全链路**:日志/库 → 采集(Kafka) → 存储(HDFS/湖) → 离线(Hive/Spark) → 数仓(ODS→DWD→DWS→ADS) → 报表/特征;实时:→ Flink → 实时指标;调度+血缘+质量贯穿。
**HDFS**:块 128MB、3 副本(机架感知)、NameNode 元数据/DataNode 数据、小文件是坑。
**MR**:Map(局部) → Shuffle(排序分组) → Reduce(聚合);Shuffle 慢、被 Spark 替代。
**Spark**:RDD+惰性求值+血缘;窄依赖无 shuffle、宽依赖要 shuffle;reduceByKey 预聚合;倾斜用两阶段聚合。
**Flink**:事件时间+Watermark 处理乱序;滚动/滑动/会话窗口;迟到用 allowedLateness/侧输出;精确一次=两阶段提交。
**数仓**:四层解耦复用;星型快/雪花省;宽表更快;口径统一+质量四维+血缘治理;倾斜打散。
**Kafka**:分区并行、同 key 同分区有序;消费者组互斥;acks=all 最稳;积压=扩分区扩消费者。
**平台**:DAG+拓扑排序+重试阻断;数据时间 T-1;血缘=影响分析/故障定位/治理。