🎯应聘面试准备
问:想应聘上述岗位,需要做哪些准备?
问题:"Hadoop HDFS 中 NameNode 和 DataNode 分别承担什么角色?如果 NameNode 宕机会发生什么?"
参考答案:
NameNode 是 HDFS 的主节点,负责管理文件系统的元数据——包括目录结构、文件到数据块的映射、数据块与 DataNode 的对应关系等。它把这些元数据保存在内存中,同时持久化到磁盘上的 FsImage 和 EditLog 文件里。
DataNode 是从节点,负责实际存储数据块,并定期向 NameNode 发送心跳和块汇报。数据的读写操作由客户端直接和 DataNode 交互完成。
如果 NameNode 宕机,整个集群基本瘫痪:客户端无法创建新文件、找不到已有数据块的位置,删除和重命名也做不了。正在进行的读操作靠本地缓存还能撑一会儿,但写操作会直接失败。所以生产环境一般都会配 HA(用 ZooKeeper 做主备自动切换),或者用 Secondary NameNode / Checkpoint Node 定期合并元数据,把单点故障的风险降下来。
问题:"Spark 相比 MapReduce 有哪些核心优势?为什么说 Spark 更适合迭代式计算任务?"
参考答案:
根本区别在数据处理模型上。MapReduce 每次作业都从磁盘读、处理完再写回磁盘,中间结果直接落 HDFS。Spark 换了个思路,把中间 RDD 缓存在内存里,后续阶段直接从内存取数据,省掉了大量磁盘 I/O。
对于迭代式计算(比如机器学习的梯度下降、PageRank 的多轮迭代),MapReduce 每轮迭代都要读写磁盘,而 Spark 可以把共享的数据集(比如训练数据或权重矩阵)用 cache() 或 persist() 钉在内存里,每轮迭代直接复用,性能差距可以达到 10-100 倍。
Spark 的 DAG 调度器还会把多个阶段拼成有向无环图,能省的 shuffle 就省了。MapReduce 天然是两阶段模型(Map → Reduce),复杂一点的逻辑就得拆成多个串行作业,中间结果反复落盘。
问题:"ClickHouse、Doris、Druid 这几款 OLAP 引擎各有什么特点?选型时应该考虑哪些因素?"
参考答案:
ClickHouse 是单表查询的性能怪兽,列式存储加上向量化执行引擎,单表聚合查询速度极快。缺点是多表 Join 能力偏弱,运维复杂度较高(集群管理需要手动处理)。
Apache Doris 兼具实时和离线分析能力,架构上分 FE(查询解析和元数据管理)和 BE(数据存储与计算)两层,部署运维相对简单。它原生支持多表 Join 和实时数据导入,在需要实时更新的场景下表现不错。
Druid 专注于时序数据的实时 OLAP 分析,架构比较重,涉及 Coordinator、Overlord、Broker、Historical、MiddleManager 多种节点角色。它的强项是高并发下的亚秒级查询和实时数据摄入,适合日志分析、指标监控这类场景。
选型时看几个维度:查询模式(单表聚合多还是多表 Join 多)、数据更新频率(批量导入还是实时写入)、并发量、团队运维能力。没有万能的方案,看场景选就行。
问题:"描述一个你做过或了解的数据处理项目,遇到的主要技术挑战是什么,如何解决的?"
参考答案:
这类问题没有标准答案,面试官主要是想看你有没有真正动手做过数据处理。他们想听到的是:你碰到了什么具体问题、做了什么技术选择、踩了什么坑。
回答可以用 STAR 结构:先说项目背景和目标(比如处理多少数据量、做什么业务),再说你负责的部分用了什么技术栈,然后讲一个实际碰到的问题(比如数据倾斜导致某个任务跑了几个小时、实时作业延迟抖动、数据质量出了问题),最后说你怎么定位和解决的。
如果没有大数据项目的实战经验,可以讲课程设计或自己搭环境做的练习,比如用 Hive 分析过一份日志、用 Spark 写过数据清洗脚本、自己部署过一套 Hadoop 集群跑 TPC-H。重点是能说清"为什么这么做",而不是"照着教程做了什么"。
问题:"假设你刚入职,被分配去排查一个 Flink 实时作业频繁反压的问题,你会从哪些方面入手分析?"
参考答案:
先确认反压的位置。通过 Flink Web UI 的 BackPressure 面板看具体是哪个算子反压比例高,定位到瓶颈节点。反压一般会从消费最慢的算子向上游传播。
定位到算子后,按几个常见方向排查:
数据倾斜。查看各 subtask 的数据量分布是否均匀,如果有热点 key 导致个别 subtask 处理量远超其他,可以加随机前缀先做局部聚合,再去掉前缀做全局聚合。
算子本身处理慢。可能是外部 I/O 瓶颈(比如往数据库写的算子,数据库响应慢),也可能是序列化开销大,或者窗口聚合时状态太大导致访问变慢。对应的解法:用异步 I/O 替代同步调用、调大并发度、换成 RocksDB 状态后端减轻内存压力。
资源不够。检查 TaskManager 的 CPU 和内存使用率,看是不是要加 TaskManager 数量或者给每个 subtask 多分点资源。
排查完了把过程和结论记下来,下次遇到类似问题能省不少时间。
🎯应聘面试准备
问:想应聘上述岗位,需要做哪些准备?
答:
简历优化
1.核心信息前置
- 学历背景:
- 工作经验: 无数据开发经验可接受,有大数据相关项目经历是加分项
- 技术栈: Java/Python/Shell 至少熟悉一门,了解 Linux 开发环境
- 意向岗位:
2.匹配岗位关键词
- 技术栈: Hadoop (HDFS/MapReduce/Yarn)、Hive、Spark、Flink、OLAP 引擎 (ClickHouse/Doris/Druid/Kylin)
- 工程能力: 分布式系统基础概念、数据研发平台、作业调度、数据治理
- 工具与平台:
- 能力标签: 数据敏感度、AI 方向探索意愿、计算机理论基础扎实
技能梳理
编程语言基础
- Java 核心语法、集合框架、多线程、JVM 基础概念
- Python 基础语法、常用数据处理库(Pandas/NumPy)
大数据组件认知
- Hadoop 生态:HDFS 读写流程、MapReduce 执行原理、Yarn 资源调度机制
- Hive:HiveSQL 编写、分区和分桶、文件格式选择
- Spark:RDD/DataFrame/Dataset 概念、常见 Transformation 和 Action 操作、Shuffle 原理
- Flink:DataStream API 基础、状态管理和 Checkpoint 机制
- OLAP 引擎:ClickHouse/Doris/Druid 各自的适用场景和基本架构
计算机基础
- 算法和数据结构:常见排序算法、哈希表、树的基本操作
面试准备
经典问题
- HDFS 的读写数据流程是怎样的?数据副本是怎么管理的?
- Spark 的 Shuffle 过程具体做了什么?和 MapReduce 的 Shuffle 有什么区别?
- Hive 的内部表和外部表有什么区别?分区的作用是什么?
系统设计
- 如果让你设计一个离线数据研发平台,需要哪些核心模块?各模块之间怎么协作?
- 一个日均 TB 级数据量的 ETL 流程,你会怎么设计?考虑哪些容错机制?
- 分布式作业调度系统(比如类似 Airflow/DolphinScheduler)的核心架构应该包含哪些组件?
项目经验准备
- 如果没有大数据实战项目,可以准备自己搭练习环境的经历(比如单机部署 Hadoop 集群、用 Spark 处理公开数据集)