
简介这份文档面向大数据开发、运维、云计算、数据治理及架构方向的学习者与求职者系统梳理了面试中高频出现的技术考点适合用于面试前集中复盘与知识查漏补缺。内容覆盖Linux与Shell常用命令、Hadoop端口配置与HDFS读写流程、MapReduce Shuffle与YARN提交流程并延伸至Zookeeper选举机制、Flume事务与防丢失机制、Kafka架构与分区副本策略、Hive内外表与数据倾斜处理、HBase的RowKey设计、Sqoop数据一致性以及Scala语法和Spark部署模式、宽窄依赖、Shuffle流程、缓存与checkpoint等核心议题目录按技术栈分章编排便于按模块检索。资源包共1个docx文件约491KB结构紧凑、知识点密集。目前已有885人学习下载可作为大数据岗位面试准备的参考清单帮助读者快速定位薄弱环节并对照复习。1. 大数据面试的真相不是考你会不会是考你讲不讲得清大数据面试有个反直觉的地方面试官手里那张题库八成题目你在项目里都“用过”但真正拉开差距的是你能不能在三分钟内把一个流程讲成一条线而不是背成一段话。这份 2023 年整理的大数据面试题库覆盖大数据开发、大数据运维、云计算、数据治理、大数据架构师几个方向从 LinuxShell、Hadoop、Zookeeper、Flume、Kafka、Hive、HBase、Sqoop、Scala一路铺到 Spark、Flink、数仓架构、手写代码和 JavaSE/Redis/MySQL/JVM/JUC。它的价值不在于题多而在于把“考点分布”摆在了明面上基础组件占一半计算引擎占三成数仓与项目经验占两成。你要拿分先得知道哪块该背流程、哪块该背参数、哪块必须能现场手写。适合已经做过项目、但一被追问就散架的备考人也适合运维转开发、开发转架构想补全地图的人。2. 基础组件高频考点Hadoop、Zookeeper、Flume、Kafka 怎么答不翻车基础组件是大数据面试的第一道筛子面试官通常不指望你背出源码但会盯着几个“流程题”和“参数题”反复问。这类题答不好后面 Spark、Flink 讲得再花也容易被判成“只会调包”。这一章按组件拆开每个组件给高频题、答题思路和容易踩的坑。2.1 HadoopHDFS 读写流程与 Shuffle 是必考双核HDFS 写流程几乎每场必问答题时不要一上来就背“客户端向 NameNode 请求”而是先给一句定位写流程的核心是“切块、建管道、逐级确认”。然后按顺序讲客户端切分文件、请求 NameNode 返回第一个块的位置、建立 DataNode 管道、Packet 逐个传输并反向确认、最后一个块确认后关闭管道、NameNode 收到完整块报告。读流程同理核心是“就近读、块定位、短路读可选”。MapReduce 的 Shuffle 是第二个必考点。面试官最想听的是“Shuffle 分 Map 端和 Reduce 端Map 端做分区、排序、溢写、合并Reduce 端做拷贝、归并、分组”。答题时把“环形缓冲区默认 100MB、溢写阈值 0.8、溢写前按分区排序”这几个参数带出来可信度立刻不一样。Yarn 的 Job 提交流程也常考答题线是客户端提交到 ResourceManager、RM 分配 ApplicationMaster、AM 申请 Container、Task 在 Container 里跑、AM 汇报进度、完成后注销。调度器部分要能说清 FIFO、Capacity、Fair 三者的区别重点落在“Capacity 按队列分资源、Fair 动态平衡”。提示Hadoop 参数调优题不要泛泛说“调大内存”要落到mapreduce.map.memory.mb、mapreduce.reduce.memory.mb、yarn.nodemanager.resource.memory-mb这几个具体参数并说明调大之后要同步调 JVM 堆否则容器会被 kill。数据倾斜在 Hadoop 层面也要能答表现是少数 Reduce 跑得极慢、Counter 里某分区记录数畸高解决思路是加随机前缀打散 key、Map 端聚合Combiner、或者对热点 key 单独处理。这类题通常这么答先说现象再说定位方法看 Counter、看任务时间分布最后给两到三种方案并说明代价。2.2 Zookeeper 与 Flume选举机制和防丢数据是送分题也是送命题Zookeeper 的选举机制是典型“背了就会、不背就废”的题。答题时抓住三个状态LOOKING、FOLLOWING、LEADING以及投票规则“先比 zxid再比 myid”。面试官常追问“集群启动时谁先投票”你要能说出“每台机器先投自己然后交换投票信息超过半数即当选”。常用命令部分ls、get、stat、create、delete能说清用途即可不用背全部参数。Flume 的高频题集中在“会不会丢数据”。标准答法是分三段Source 端 Channel 写满会阻塞或抛异常Channel 选 FileChannel 并开启 checkpoint 保证持久化Sink 端失败会回滚事务重试。Put 事务和 Take 事务要能讲清“先 put 再 commit、先 take 再 commit失败则 rollback”。拦截器和 Channel 选择器属于加分项能说出“拦截器做 ETl 清洗、选择器按 header 分流到不同 Channel”就够了。HDFS Sink 小文件处理是 Flume 的实战题答题思路是调大hdfs.rollInterval、hdfs.rollSize、hdfs.batchSize或者用hdfs.round按时间滚动再配合后续 Hive 或 Spark 做小文件合并。这类题面试官想听的是“你知道小文件会压 NameNode 内存”而不是只报参数。2.3 Kafka丢不丢数据、重复消费、积压处理三连问Kafka 的题几乎绕不开三个词丢数据、重复、积压。丢数据的答法要分生产端和消费端生产端acksall加retries大于 0 加幂等性开启消费端关闭自动提交、处理完再手动提交 offset。重复消费的答法是“至少一次语义下必然可能重复靠业务幂等或去重表解决”。积压处理的答法是“先看消费能力扩分区、扩消费者、提升单条处理速度必要时临时降级”。ISR 副本同步队列要能讲清“Leader 维护 ISRFollower 落后超过replica.lag.time.max.ms就被踢出min.insync.replicas决定最少几个副本确认才算写成功”。分区分配策略说清 Range、RoundRobin、Sticky 三种即可重点落在“Sticky 在重平衡时尽量保留原分配”。Kafka 高效读写的原因也是高频题答题线是顺序写磁盘、页缓存、零拷贝、批量发送、分区并行。参数优化题带出batch.size、linger.ms、compression.type、buffer.memory四个就够用。注意Kafka 机器数量和分区数这类题没有标准答案面试官看的是你有没有计算过程。答题时先给假设每天数据量、单分区吞吐、副本数再推机器数和分区数最后说“实际以压测为准”比直接报一个数字稳得多。3. 计算引擎高频考点Spark 与 Flink 的流程题怎么讲成一条线计算引擎是大数据面试的分水岭Spark 考“你会不会调”和“你懂不懂 Shuffle”Flink 考“你懂不懂状态和容错”。这一章的题量大但答题套路高度统一先画流程线再点关键机制最后落到参数或优化。3.1 SparkShuffle、宽窄依赖、缓存与 checkpointSpark 作业提交流程是必考的画图题。答题线提交脚本到集群、启动 Driver、Driver 向 Cluster Manager 申请 Executor、Executor 反向注册、Driver 解析 DAG 划分 Stage、Stage 生成 TaskSet 分发、Task 执行并汇报。架构部分要能说清 Driver、Executor、Cluster Manager 三者关系。宽窄依赖和 Stage 划分是笔试重点。答题时先定义窄依赖是父 RDD 每个分区最多被一个子分区使用宽依赖是多个子分区依赖同一个父分区。然后说“遇到宽依赖就切 StageStage 内流水线执行Stage 边界要落盘”。Task 个数由 Stage 最后一个 RDD 的分区数决定这句话要能脱口而出。Shuffle 的两种核心机制要能对比HashShuffle 未优化时产生大量小文件优化后合并文件SortShuffle 按分区排序写一个文件加索引bypass 机制在分区数少且不需要排序时启用。reduceByKey与groupByKey的区别是经典题答法是“前者 Map 端预聚合、后者全量拉取前者更优”。缓存与 checkpoint 的对比要落到“cache 存内存、不可靠、不切断血缘checkpoint 存可靠存储、切断血缘、适合长血缘”。广播变量和累加器的原理各一句话广播变量把只读变量分发到每个 Executor 缓存累加器让 Executor 端累加、Driver 端汇总。TopN 的获取是手写思路题标准答法是“每个分区取 TopN再全局归并取 TopN”能写出takeOrdered或sortBy加zipWithIndex的伪代码更好。# 伪代码Spark 实现分组 TopN # 思路先按 key 分组组内排序取前 N避免全局排序 rdd sc.parallelize([(a, 3), (a, 9), (b, 1), (b, 7)]) top_n rdd.groupByKey() \ .mapValues(lambda vals: sorted(vals, reverseTrue)[:2]) \ .collect() # groupByKey 会全量拉取数据量大时改用 reduceByKey 配合聚合上面这段代码重点不在语法而在说明“分组 TopN 的关键是组内排序取前 N而不是全局排序”。参数上[:2]就是 N实际场景要换成变量如果数据倾斜严重groupByKey要换成加盐打散再聚合。3.2 Spark SQL 与 Streaming三个 API 的区别和精准一次消费RDD、DataFrame、DataSet 三者的区别是笔试高频题。答题线RDD 是底层抽象、无 schema、类型安全弱DataFrame 有 schema、走 Catalyst 优化器、但类型检查在运行时DataSet 有 schema 且类型安全、编译期检查。三者可以互相转换Spark 2.0 之后 DataFrame 就是DataSet[Row]。append和overwrite的区别、coalesce和repartition的区别都是送分题答法各两句话前者是写入模式后者是分区调整coalesce默认不 shuffle、repartition一定 shuffle。广播 join 要能说清“小表广播到每个 Executor避免 shuffle”。Spark Streaming 精准一次消费的答法是“Source 可重放加 offset 手动管理加输出幂等”第一次运行不丢数据靠“先建 StreamingContext 再启动、或者用 checkpoint 恢复”。背压机制说清“根据处理速度动态调整拉取速率”即可。窗口函数原理要能讲“窗口长度和滑动步长每个窗口是一个批次集合”。3.3 Flink状态、水印、Exactly-once 与反压Flink 和 Spark Streaming 的区别是开场题答题线Flink 是真正的流处理、事件驱动、低延迟Spark Streaming 是微批、延迟秒级。Flink 组件栈说清 DataStream、DataSet、Table、SQL 四层即可。水印是 Flink 的核心概念答题时先定义“水印是事件时间的进度标记用来触发窗口计算”再说“水印延迟设置要权衡延迟和完整性”。状态存储要能说清 Operator State 和 Keyed State 的区别以及 State Backend 的三种选择Memory、Fs、RocksDB。Exactly-once 的答法是“分布式快照加两阶段提交Source 端可重放、Sink 端事务提交”。分布式快照原理要能讲“JobManager 插入 Barrier算子收到 Barrier 后做本地快照并向下游广播全部完成后确认”。反压机制说清“基于信用值的流量控制下游处理不过来时上游降速”。Flink 数据倾斜的答法是“先看 key 分布热点 key 加盐打散、或者两阶段聚合”。任务延迟高的排查思路是“看反压、看 GC、看 checkpoint 时长、看数据源消费速率”这条线要能顺下来。提示Flink 的 Slot 和并行度区别是易混点。Slot 是资源单位并行度是任务并发数一个 Slot 可以跑多个并行子任务Slot Sharing答题时用“资源槽 vs 并发数”一句话点破。4. 数仓与项目经验分层、拉链表、指标口径怎么答得像做过数仓题是区分“开发”和“架构”的分水岭面试官会顺着项目经验往下挖挖到你答不出细节为止。这一章的重点不是背概念而是把分层、同步策略、拉链表、指标口径讲成“我做过”的样子。4.1 数仓分层与同步策略ODS 到 DWS 每层做什么数仓分层是必考题标准答法是四层ODS 贴源、DWD 明细、DWS 汇总、ADS 应用。每层要说清“做什么、存什么、用什么压缩和格式”。ODS 层通常用压缩加列式存储DWD 层做清洗和维度关联DWS 层按主题聚合ADS 层直接面向报表。同步策略要能区分全量同步、增量同步、拉链表。全量适合小表增量适合流水表拉链表适合缓慢变化维。拉链表的答法是“用 start_date 和 end_date 标记生命周期新数据到来时关链旧记录、开链新记录”能说出“查询时用where start_date 某日 and end_date 某日”就说明真用过。关系型数据库范式理论属于背景题答出 1NF、2NF、3NF 的定义即可重点落在“数仓反范式是为了查询性能”。4.2 用户行为与业务指标活跃、留存、连续 N 天怎么手写用户行为分析的高频题是“如何分析用户活跃、新增、留存、沉默、回流、流失”。答题套路统一先定义口径再给 SQL 思路最后说“按天分区、按用户去重”。比如留存题取某日新增用户集合再取次日活跃用户集合两者求交除以新增数。连续 N 天活跃是手写 SQL 的高频题标准解法是“用日期减去行号连续日期会得到相同差值再按差值分组计数”。-- 最近七天内连续三天活跃用户 -- 思路日期减行号连续日期差值相同 SELECT user_id FROM ( SELECT user_id, dt, date_sub(dt, rn) AS grp FROM ( SELECT user_id, dt, row_number() OVER (PARTITION BY user_id ORDER BY dt) AS rn FROM user_active WHERE dt BETWEEN date_sub(current_date, 7) AND current_date ) t ) t2 GROUP BY user_id, grp HAVING count(1) 3;这段 SQL 的关键在date_sub(dt, rn)连续日期的 dt 和行号同步增长差值恒定所以按差值分组后计数就能判断连续天数。参数上7是观察窗口3是连续天数要求实际答题时把这两个数说成变量面试官会认为你理解原理而不是背题。电商指标题要能一口气说出三十个指标GMV、客单价、转化率、复购率、动销率、售罄率、退款率、加购率、收藏率、UV、PV、人均下单次数等。答题时按“流量、转化、交易、商品、用户”五类分组说比乱报一通更可信。4.3 项目开发经验遇到什么问题、怎么定位、怎么解决项目经验题的核心是“问题—定位—解决—效果”四段式。Hadoop 常见问题是数据倾斜和 NameNode 内存不足Flume 常见问题是 Channel 满导致丢数据Kafka 常见问题是消费积压Hive 常见问题是小文件多和动态分区过多。答题时不要只说“我们优化了”要给出可验证的细节调了哪个参数、从多少调到多少、任务时间从多久降到多久。面试官最想听的是“你怎么发现问题的”所以定位手段要具体看 Counter、看任务监控、看日志、看 GC。元数据管理和数据质量监控属于加分项能说出“用 Atlas 做血缘、用 Griffin 做质量监控、监控指标包括空值率、重复率、及时性”就够。数据治理和数据中台的概念题答出“标准、质量、安全、生命周期”四个维度即可不要展开成论文。5. 易错点与失分点这五类题最容易把会做的人问倒5.1 把流程题答成名词解释错在哪被问 HDFS 写流程上来就解释“HDFS 是分布式文件系统”。为什么错面试官要的是流程线不是定义。怎么答对第一句话给流程定位然后按“切块、建管道、逐级确认”三步走每步带一个关键动作。5.2 参数题只报数字不说代价错在哪问 Kafka 分区数直接答“我们用了 30 个分区”。为什么错没有计算过程面试官无法判断你是真懂还是背的。怎么答对先给假设日数据量、单分区吞吐再推分区数最后补一句“分区太多会增加元数据开销和重平衡时间”。5.3 数据倾斜只背方案不定位错在哪一问数据倾斜就背“加盐、打散、两阶段聚合”。为什么错不定位就开药面试官会追问“你怎么知道是倾斜”。怎么答对先说表现少数任务慢、Counter 畸高再说定位手段看 key 分布、看任务时间最后给方案并说明适用场景。5.4 数仓分层答成背目录错在哪把 ODS、DWD、DWS、ADS 念一遍就结束。为什么错面试官要听每层的职责和存储选型。怎么答对每层用一句话说清“做什么、存什么、用什么格式”再补一句层与层之间的同步策略。5.5 手写题只写代码不解释错在哪连续 N 天活跃题写完 SQL 就停。为什么错面试官要看思路代码只是载体。怎么答对写完代码后用两句话解释核心技巧日期减行号再说明参数含义和边界情况跨月、时区。6. 临场答题技巧把题库用成答题模板而不是背诵清单这份题库最大的用法不是从头背到尾而是按“流程题、参数题、方案题、手写题”四类拆开练。流程题练的是三分钟讲成一条线参数题练的是先假设再推导方案题练的是“现象—定位—方案—代价”四段式手写题练的是写完能讲清核心技巧。每道题练完强制自己用一句话总结“这题考的是什么”说不出来就说明还没吃透。临场有几个具体动作值得固定下来。第一听到问题先判断题型流程题先画线再补细节参数题先问假设再给数方案题先说现象再说方案。第二遇到不会的题不要沉默把你知道的相邻知识点说出来比如问 Flink 内存管理不会就说“Flink 内存分 JobManager 和 TaskManager 两块TaskManager 又分堆内堆外具体参数我记不全但思路是先定位是 GC 问题还是网络问题”。第三项目经验题一定要带数字哪怕是自己估算的也比“优化了很多”强。押题方向上基础组件的流程题和计算引擎的 Shuffle/状态题出现频率最高数仓分层和拉链表几乎每场必问手写 SQL 的连续 N 天活跃是高频手写题。把这几块练到能脱稿讲比刷一百道偏题有用。注意面试官追问“为什么”的时候往往不是要你给标准答案而是看你的思考路径。答“我是这么判断的依据是……”比答“书上是这么说的”更容易拿分。我自己的血泪经验是每次面试前把这份题库里的流程题挑十道掐表三分钟一道讲给自己听讲不顺的地方就是没吃透的地方。从那以后我每次准备面试都强制走一遍“流程题三分钟自述”比反复看答案管用得多。希望帮到你。本文还有配套的精品资源点击获取