简介:这份文档面向大数据开发、运维、云计算、数据治理及架构方向的学习者与求职者,系统梳理了面试中高频出现的技术考点,适合用于面试前集中复盘与知识查漏补缺。内容覆盖Linux与Shell常用命令、Hadoop端口配置与HDFS读写流程、MapReduce Shuffle与YARN提交流程,并延伸至Zookeeper选举机制、Flume事务与防丢失机制、Kafka架构与分区副本策略、Hive内外表与数据倾斜处理、HBase的RowKey设计、Sqoop数据一致性,以及Scala语法和Spark部署模式、宽窄依赖、Shuffle流程、缓存与checkpoint等核心议题,目录按技术栈分章编排,便于按模块检索。资源包共1个docx文件,约491KB,结构紧凑、知识点密集。目前已有885人学习下载,可作为大数据岗位面试准备的参考清单,帮助读者快速定位薄弱环节并对照复习。
1. 大数据面试的真相:不是考你会不会,是考你讲不讲得清
大数据面试有个反直觉的地方:面试官手里那张题库,八成题目你在项目里都“用过”,但真正拉开差距的,是你能不能在三分钟内把一个流程讲成一条线,而不是背成一段话。这份 2023 年整理的大数据面试题库,覆盖大数据开发、大数据运维、云计算、数据治理、大数据架构师几个方向,从 Linux&Shell、Hadoop、Zookeeper、Flume、Kafka、Hive、HBase、Sqoop、Scala,一路铺到 Spark、Flink、数仓架构、手写代码和 JavaSE/Redis/MySQL/JVM/JUC。它的价值不在于题多,而在于把“考点分布”摆在了明面上:基础组件占一半,计算引擎占三成,数仓与项目经验占两成。你要拿分,先得知道哪块该背流程、哪块该背参数、哪块必须能现场手写。适合已经做过项目、但一被追问就散架的备考人,也适合运维转开发、开发转架构想补全地图的人。
2. 基础组件高频考点:Hadoop、Zookeeper、Flume、Kafka 怎么答不翻车
基础组件是大数据面试的第一道筛子,面试官通常不指望你背出源码,但会盯着几个“流程题”和“参数题”反复问。这类题答不好,后面 Spark、Flink 讲得再花也容易被判成“只会调包”。这一章按组件拆开,每个组件给高频题、答题思路和容易踩的坑。
2.1 Hadoop:HDFS 读写流程与 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 的题几乎绕不开三个词:丢数据、重复、积压。丢数据的答法要分生产端和消费端:生产端acks=all加retries大于 0 加幂等性开启;消费端关闭自动提交、处理完再手动提交 offset。重复消费的答法是“至少一次语义下必然可能重复,靠业务幂等或去重表解决”。积压处理的答法是“先看消费能力,扩分区、扩消费者、提升单条处理速度,必要时临时降级”。
ISR 副本同步队列要能讲清“Leader 维护 ISR,Follower 落后超过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 Spark:Shuffle、宽窄依赖、缓存与 checkpoint
Spark 作业提交流程是必考的画图题。答题线:提交脚本到集群、启动 Driver、Driver 向 Cluster Manager 申请 Executor、Executor 反向注册、Driver 解析 DAG 划分 Stage、Stage 生成 TaskSet 分发、Task 执行并汇报。架构部分要能说清 Driver、Executor、Cluster Manager 三者关系。
宽窄依赖和 Stage 划分是笔试重点。答题时先定义:窄依赖是父 RDD 每个分区最多被一个子分区使用,宽依赖是多个子分区依赖同一个父分区。然后说“遇到宽依赖就切 Stage,Stage 内流水线执行,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, reverse=True)[: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 天活跃是高频手写题。把这几块练到能脱稿讲,比刷一百道偏题有用。
注意:面试官追问“为什么”的时候,往往不是要你给标准答案,而是看你的思考路径。答“我是这么判断的,依据是……”比答“书上是这么说的”更容易拿分。
我自己的血泪经验是:每次面试前把这份题库里的流程题挑十道,掐表三分钟一道,讲给自己听,讲不顺的地方就是没吃透的地方。从那以后我每次准备面试都强制走一遍“流程题三分钟自述”,比反复看答案管用得多。希望帮到你。
本文还有配套的精品资源,点击获取