# 🏗️ 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；血缘=影响分析/故障定位/治理。