[toc]
数据仓库(实时+离线)面试宝典(2026最新版)
核心定位:本宝典适配数据仓库开发工程师、实时数仓工程师、大数据开发工程师(初级/中级/高级),全覆盖离线数仓+实时数仓,聚焦数仓架构、建模方法论、计算引擎、分层规范、数据治理、SQL优化、业务落地,贴合互联网/金融/电商/车企大厂面试题库,话术直白、可直接背诵,对标2026年主流技术栈(Hive3、Flink1.19、Doris、StarRocks、CDC、OneData)。
核心原则:大厂数仓面试固定四大优先级:数仓分层与建模 > 离线+实时架构链路 > 引擎原理与调优 > 数据治理+项目落地,拒绝零散知识点,统一大厂标准化话术,全部贴合面试官标准答案。
第一部分:面试前置准备(自我介绍+职级能力)
一、标准化自我介绍(直接背诵,适配所有数仓岗位)
1、1分钟精简版(初面、笔试后一面)
面试官您好,我从事大数据数据仓库开发工作X年,精通离线数仓+实时数仓全链路建设,熟练掌握Hive、Flink、Spark、Kafka、Doris等主流组件,精通维度建模、分层规范、缓慢变化维度、拉链表、数据集市。主导过电商/金融行业数仓搭建,熟练进行数据清洗、分层建模、指标体系建设、SQL优化、数据质量监控,擅长解决数据倾斜、数据延迟、重复、漂移问题,能够独立完成离线报表、实时大屏、业务指标开发,具备完整的数据治理经验。
2、3分钟专业版(复面、技术主管面)
面试官您好,我叫XX,拥有X年大数据数仓开发经验,深耕离线+实时混合数仓架构,熟悉行业通用分层规范与OneData统一指标体系。
技术层面:离线方向熟练掌握Hive调优、Spark批处理、分层建模、缓慢变化维度、拉链表、分区分桶、数据缓慢变化处理;实时方向精通Flink流式计算、CDC增量同步、Kafka消息队列、实时宽表、Doris/StarRocks实时分析;熟练使用DataX、SeaTunnel做数据同步,掌握维度建模、范式建模,精通SQL高阶优化、数据倾斜治理、数据质量监控。
业务层面:参与/主导过电商交易、用户行为、金融风控、流量分析类数仓项目,从需求评审、指标拆解、模型设计、任务开发、调度运维、数据治理全流程负责,搭建过ODS-DWD-DWS-ADS标准分层,完成实时大屏、离线报表、用户画像、复购转化指标体系建设。
我擅长复杂业务建模、慢SQL优化、大规模任务调度治理、实时链路延迟优化,严格遵循数据口径统一、分层复用、数据规范原则,保证数据准确、稳定、可追溯,希望入职贵司深耕数据仓库,为业务提供高质量数据支撑。
二、职级能力划分(精准对标面试要求)
- 初级(1-2年):会写Hive SQL、简单Flink SQL、懂分层、会同步数据、能跑通调度、听懂业务指标,能独立开发DWD/ADS层,了解拉链表、分区。
- 中级(3-5年):精通建模、精通倾斜优化、会设计宽表、能搭建实时链路、精通CDC、精通Doris/StarRocks、能独立维护指标体系、治理脏数据。
- 高级(5年+):能做架构选型、混合数仓架构设计、统一指标平台、数据中台、数据治理规范、元数据管理、成本优化、跨部门口径统一。
第二部分:高频核心考点(离线+实时,大厂必考)
模块一:数仓基础概念(入门必背,送分题)
一、核心知识点
- 数据库 VS 数据仓库(必考)
- 数据库:面向业务、OLTP、增删改查频繁、保存当前业务数据、范式建模、追求事务一致性。
- 数据仓库:面向分析、OLAP、只读为主、保存历史全量数据、维度建模、追求整合、分析、复用。
- ETL & ELT 区别
- ETL:抽取、转换、加载,转换在外部,适合传统离线数仓,清洗重、耗时高。
- ELT:抽取、加载、转换,原始数据先入仓,计算在数仓内部,适合云原生、实时数仓、Doris/StarRocks。
- 四大基本特征(数仓标准定义)
- 面向主题:按业务主题划分(交易、用户、商品、流量)。
- 集成性:多源业务系统数据统一清洗、规整。
- 非易失:数据写入极少删除修改,历史永久留存。
- 时变性:带有时间维度,保留历史快照,可回溯。
二、高频面试题(标准答案)
- 问:为什么要做数据仓库?直接查业务库不行吗? 答:① 业务库承受不了大查询、报表、聚合分析,容易压垮线上业务;② 业务库分散多源,数据孤立,数仓统一整合;③ 业务库无历史快照,无法回溯历史数据;④ 数仓分层建模,指标复用、口径统一;⑤ 数仓专门做OLAP,聚合查询性能更强。
- 问:什么是脏数据?怎么处理? 答:脏数据包括:空值、异常值、重复数据、乱码、业务逻辑错误、格式不统一。处理方式:ODS原样保留;DWD层清洗过滤、空值替换、异常剔除、格式统一;DWS层做业务逻辑校验;建立数据质量监控告警。
- 问:数据仓库分层的意义? 答:① 解耦:原始数据不改动,中间层隔离;② 复用:明细层通用,上层集市直接复用;③ 容错:分层回溯,出错快速定位;④ 简化开发:每层职责单一;⑤ 口径统一:避免重复计算、重复开发。
模块二:离线数仓架构(大厂主流五分层)
一、分层标准(全网统一大厂话术)
通用分层:ODS、DWD、DWS、DIM、ADS(必背)
- ODS原始数据层:原样同步业务库、日志数据,不做清洗,保留原始结构,支持回溯;格式最全、冗余最高。同步工具:DataX、Canal、SeaTunnel。
- DWD明细事实层:清洗、去重、过滤、补空、规整,单业务明细,保持粒度最细,不聚合;遵循一业务一事实表。
- DWS聚合宽表层:按维度聚合,构建宽表,常用指标预聚合,比如用户日活、商品交易额、地区汇总;减少上层重复计算。
- DIM维度层:所有维度表,用户、商品、地区、门店;维护缓慢变化维度、拉链表,保存维度历史快照。
- ADS应用集市层:面向业务最终报表、大屏、看板、推送;指标高度定制,直接给业务方使用。
二、离线完整链路(背诵版)
业务MySQL/日志 → DataX/Canal同步 → ODS层(Hive) → DWD清洗过滤 → DWS聚合宽表 → DIM维度关联 → ADS报表指标 → 同步BI/报表平台。
三、高频面试题
- 问:ODS为什么不清洗? 答:ODS定位是原始备份,业务数据随时可能需要回溯排查;原始数据不能丢失,清洗放在DWD层,保证分层职责单一,便于故障回滚。
- 问:DWD和DWS区别? 答:DWD是明细、粒度最细、不聚合;DWS是聚合、宽表、预计算、降低查询压力;DWD用于明细查询,DWS用于指标统计。
- 问:大表join怎么优化? 答:① 大表过滤前置,减少数据量;② 合理分区,按时分区裁剪;③ 小表广播join;④ 倾斜key单独打散;⑤ 开启MapJoin;⑥ 避免笛卡尔积;⑦ 拆分复杂SQL,分步执行。
模块三:数仓建模(面试重中之重)
一、建模分类
1、范式建模(Inmon)
三范式、减少冗余、关系复杂、多张表关联;适合传统数仓、金融、银行;查询慢、关联多。
2、维度建模(Kimball,互联网主流)
事实表+维度表,以业务过程为中心;冗余高、查询快、易懂;互联网、电商、大厂全部使用。
二、三大模型(必背)
- 星型模型:一张事实表关联多张维度表,维度表不关联;结构简单、查询最快;互联网主流。
- 雪花模型:维度表继续拆分,层级更深;冗余低、关联多、查询慢;传统金融使用。
- 星座模型:多张事实表共用维度表;企业级数仓通用,节省维度维护成本。
三、缓慢变化维度SCD(必考)
- SCD1 直接覆盖:新值覆盖旧值,无历史;适用于不重要维度。
- SCD2 拉链表(大厂最常用):新增一行历史数据,用开始时间、结束时间标记生命周期;保留全部快照,支持任意时间回溯。
- SCD3 新增字段:新增一列保存旧值;只保留最近一次变更,适合简单维度。
四、高频面试题
- 问:拉链表怎么做?适用场景? 答:适用维度缓慢变化场景,例如用户地区、商品分类、店铺等级。做法:每日增量同步,比对维度字段;变更则旧数据结束时间更新为昨天,新增一条新数据开始时间为今天,结束时间为9999-12-31;实现永久快照、无损回溯。
- 问:事实表和维度表区别? 答:事实表:存度量、指标、行为、数值,量大、更新频繁;维度表:存描述、属性、分类,量小、变化慢。
模块四:离线核心引擎(Hive+Spark)
一、Hive核心考点
- 分区:按时间、地区分区;分区裁剪,减少扫描数据;常用静态分区+动态分区。
- 分桶:哈希打散,相同key进入同一桶;优化join、抽样、去重。
- 存储格式:Text(原始)、ORC(列式、压缩高、数仓首选)、Parquet(通用、兼容所有引擎)。
- 压缩:Snappy(速度快)、Gzip(压缩率高)。
二、数据倾斜(面试最高频痛点)
1、倾斜常见原因
key重复、空值过多、热点key、数据分布不均、业务本身倾斜。
2、通用解决方案(背诵顺序)
- 空值打散:空值拼接随机数,单独打散;
- 热点key拆分:热点key单独处理,非热点正常join;
- MapJoin:小表广播,避免shuffle;
- 加盐打散:给倾斜key加随机后缀,聚合再合并;
- 参数调优:开启倾斜自动优化、调整reduce个数。
三、高频Hive面试题
-
问:Hive内部表和外部表区别?
答:内部表:删除表同时删数据,管理严格;外部表:删表仅删元数据,数据保留;生产全部使用外部表,防止误删数据。
-
问:Hive动态分区注意事项?
答:必须开启动态分区参数;严格模式限制全动态分区;分区字段放最后;避免大量小分区。
模块五:实时数仓架构(2026必考重点)
一、实时vs离线区别
| 维度 | 离线数仓 | 实时数仓 |
|---|---|---|
| 延迟 | T+1、小时级 | 秒级/分钟级 |
| 引擎 | Hive/Spark | Flink |
| 存储 | HDFS | Kafka+Doris/StarRocks |
| 成本 | 低、吞吐高 | 高、资源占用大 |
| 用途 | 报表、复盘、归档 | 大屏、监控、实时预警 |
二、实时数仓主流分层(四层)
- ODS实时层:Canal CDC同步MySQL、日志入Kafka,原始消息不处理。
- DWD实时明细层:Flink消费Kafka,清洗、过滤、脱敏、规整,下发明细Kafka。
- DWS实时聚合层:Flink窗口聚合、累计指标、构建实时宽表,写入Doris。
- ADS实时应用层:Doris对外服务,大屏、接口、实时告警、推送。
三、实时核心组件讲解
- CDC增量同步:监听binlog,捕获增删改,无需全量抽数,不压业务库;主流Canal、Debezium。
- Kafka:实时数仓存储介质,缓存数据流,削峰填谷,多分区提高并发。
- Flink:实时计算、窗口、状态、回撤、维表关联; Exactly-Once保证数据不丢不重。
- Doris/StarRocks:实时分析、低延迟、高并发、支持明细+聚合,替代传统Druid、Kylin。
四、实时高频面试题
-
问:实时宽表怎么做?
答:以用户/订单为主键,Flink双流join、维表join,将常用维度、行为、属性全部合并为一张大宽表;减少上层重复关联,提升查询速度;维度采用Redis缓存、Lookup关联。
-
问:实时数据怎么保证不重复不丢失?
答:Kafka开启副本、acks=1;Flink开启Checkpoint、Exactly-Once;消费offset持久化;事务写入Doris;故障自动重启、状态恢复。
-
问:数据漂移、乱序怎么解决?
答:使用事件时间+水位线Watermark;设置乱序容忍时间;迟到数据侧输出单独处理;分区有序、业务主键去重。
模块六、OLAP引擎(Doris+StarRocks,2026最热)
一、核心区别(面试必背)
- Apache Doris:运维简单、兼容MySQL、电商互联网主流、更新友好、实时写入稳定。
- StarRocks:查询性能更强、向量化极致优化、复杂报表更快、大厂高端数仓首选。
二、表模型
- Aggregate:预聚合,指标汇总;
- Unique:唯一键,去重、更新;
- Duplicate:明细模型,原始明细存储。
模块七:数据治理(中高级必问)
1、四大治理方向
- 数据质量:完整性、准确性、一致性、及时性;配置监控规则、失败告警。
- 数据标准:字段命名、业务口径、编码格式统一,OneData方法论。
- 元数据治理:血缘分析、字段溯源、任务依赖、影响分析。
- 成本治理:小文件合并、无效任务下线、冷数据归档、分区生命周期。
2、小文件治理(高频)
危害:NameNode压力大、查询卡顿、任务耗时高;
解决方案:定时合并、调整输出分片、减少随机写入、分区生命周期清理。
模块八:项目实战模板(直接背诵,离线+实时通用)
一、项目名称:电商离线+实时混合数据仓库搭建
1、项目背景
原有数据分散在MySQL业务库、Nginx日志,数据孤立、统计缓慢、无实时监控,T+1报表延迟高,无法支撑业务实时运营;需要搭建统一分层数仓,实现离线复盘+实时大屏双架构。
2、技术栈
DataX、Canal、Hive3.1、Spark3.5、Flink1.19、Kafka3.6、Doris2.1、Redis、Azkaban、Prometheus。
3、个人职责
- 数据同步:使用Canal监听MySQL binlog,实时同步增量数据入Kafka;DataX每日全量同步业务库至Hive ODS层。
- 离线建模:遵循五分层规范,完成交易、用户、商品主题建模;DWD清洗去重,DWS构建用户行为宽表,DIM维护拉链表缓慢变化维度。
- 实时开发:Flink消费Kafka,完成实时清洗、双流join、窗口聚合;构建实时交易宽表,写入Doris,支撑实时大屏。
- 性能优化:解决交易表热点key倾斜,采用加盐打散+拆分热点;优化Hive小文件,合并分片;优化Flink水位线解决乱序漂移;P95查询延迟降低60%。
- 治理运维:搭建数据质量监控,配置空值、重复、波动告警;梳理数据血缘,下线无效任务;规范字段命名、统一指标口径。
4、项目难点与解决方案
- 难点1:订单数据倾斜,热门商家数据量大;方案:拆分热点key、加盐打散、分桶聚合。
- 难点2:实时数据乱序、漂移;方案:事件时间+水位线,设置5分钟乱序容忍,迟到数据单独补批。
- 难点3:维度频繁变更;方案:DIM层制作拉链表,永久保留历史快照。
5、项目成果
搭建完整离线+实时混合数仓;离线每日生成200+业务报表,实时大屏延迟稳定在3秒内;数据准确率99.95%;任务失败率下降90%;支撑运营、风控、商品分析多业务线。
第三部分:面试兜底话术+避坑总结
一、面试官最爱追问清单(必背)
- 你们公司数仓分层怎么分?——严格回答ODS/DWD/DWS/DIM/ADS,每层职责复述一遍。
- 实时和离线怎么结合?——离线做复盘、历史、宽表打底;实时做监控、大屏、预警;冷热分层、混合存储。
- 数据不一致怎么排查?——分层比对、分区校验、维度快照比对、增量日志排查、任务执行日志追溯。
- 为什么不用Spark做实时?——Spark微批、延迟高、无状态、不适合实时更新;Flink原生流式、状态强大、支持回撤、水位线。
二、2026最新技术趋势(拔高加分)
- 实时离线一体化:统一计算、统一元数据、统一口径;
- 湖仓一体:Hudi/Iceberg,支持实时更新、历史回溯;
- 云原生数仓:Doris、StarRocks替代传统Hive数仓;
- AI+数仓:智能异常检测、指标预测、自动分级治理。
第四部分:必考SQL手写题 + 大数据算法(面试默写版)
前言:本章节全部为面试原题,数仓工程师必考,不需要复杂语法,全部使用Hive SQL通用语法,可直接默写;算法为大数据高频手撕算法,通俗易懂、面试直白话术。
模块一:高频SQL基础面试题(初级必背)
1、行转列、列转行(必考)
(1)行转列:多行合并为一行(常用:商品标签、用户标签)
业务场景:一个用户多条标签,合并为一条、逗号分隔。
标准答案SQL:
1 | -- Hive/Spark SQL |
面试话术背诵:行转列使用collect_list无序聚合、collect_set去重聚合,搭配concat_ws拼接字符串,常用于标签合并、多属性合并。
(2)列转行:一行拆多行(标签拆分)
业务场景:一条数据多个标签,拆分多条明细。
标准答案SQL:
1 | select |
面试话术背诵:使用lateral view炸裂函数,搭配explode数组拆分,split切割字符串,实现列转行,常用于标签拆分、多维拆解。
2、分组取TopN(高频手撕)
业务场景:每个部门薪资最高前2人、每个商品类目销量TOP3。
标准答案SQL:
1 | select * from ( |
三大排序函数区别(必背)
- row_number():连续不重复,1234(排名无并列)
- rank():跳跃排名,1224(并列跳过)
- dense_rank():连续排名,1223(并列不跳)
3、去重方案(面试追问)
方式1:distinct(少量数据、简单去重)
1 | select distinct user_id from log; |
方式2:group by(大数据量去重,推荐)
1 | select user_id,max(dt) from log group by user_id; |
方式3:row_number(复杂条件去重,生产最常用)
1 | select * from ( |
面试话术:生产环境禁止大表distinct,容易触发数据倾斜,优先row_number分组去重。
模块二:业务进阶SQL(数仓中级必考)
1、连续签到问题(大厂经典原题)
需求:统计每个用户连续签到天数、最长连续签到。
解题思路(背诵逻辑):
- 先开窗排序,给用户日期排序;
- 日期减去排序编号,连续日期得到同一分组标记;
- 根据分组标记聚合,统计连续天数。
标准答案SQL:
1 | select |
2、用户留存率(数仓重中之重)
需求:计算每日新增用户、次日留存、7日留存。
留存定义:当天新增用户,后续某天再次活跃。
标准答案SQL:
1 | select |
面试话术背诵:留存使用自关联,当天新增表关联未来活跃表;离线留存T+1计算,实时留存使用Flink状态做当日留存。
3、漏斗转化分析(电商、金融必问)
业务:浏览-加购-下单-支付,每一步转化率。
解题思想:同一用户行为路径、判断是否走完下一个节点。
1 | select |
面试话术:漏斗核心逻辑是用户行为埋点、行为编号,分层统计人数,计算转化率;大厂一般使用Flink实时漏斗、离线Hive漏斗。
4、累计指标(日累计销售额、累计用户)
开窗函数 rows between 边界,生产高频。
1 | select |
关键字背诵:unbounded preceding(首行)、current row(当前行)。
模块三:SQL优化高频问答(面试必问)
- where和having区别? where分组前过滤,不经过shuffle;having分组后过滤,性能差;优先where过滤。
- order by底层原理? Hive两次排序,map端局部排序、reduce端全局排序,数据量大产生磁盘溢写。
- 开窗函数优缺点? 优点:减少join、代码简洁;缺点:大数据量分区容易倾斜、内存占用高。
- 大表关联优化? 前置过滤、分区裁剪、广播join、倾斜key打散、避免笛卡尔积。
模块四:大数据手撕算法(面试必考,直白背诵)
1、洗牌算法(随机打乱、抽样)
适用场景:用户随机抽样、风控随机打散。
算法思想:从后往前遍历,当前位置与随机位置交换,时间复杂度O(n)。
面试背诵话术:Fisher-Yates洗牌,保证概率均匀、无偏,大数据抽样常用,Hive中order by rand()底层就是洗牌算法。
2、蓄水池抽样算法(海量数据随机取样)
面试原题:亿级数据随机抽取100条,内存放不下全部数据怎么做?
原理背诵:
- 先初始化蓄水池,放入前k条数据;
- 遍历后续每条数据,以k/i概率替换蓄水池;
- 最终每条数据被选中概率相等。
使用场景:Hive抽样、日志随机采样、风控黑名单抽样。
3、数据倾斜算法(高频)
原理话术:数据倾斜本质是hash分区不均匀,热点key落在同一个reduce。解决方案:空值打散、加盐随机、热点key拆分、局部聚合。
4、LRU缓存淘汰算法(Redis、维度缓存必考)
面试原题:Redis缓存满了怎么淘汰?
原理背诵:最近最少使用淘汰,链表维护访问顺序,头部最新、尾部最久未使用;淘汰尾部节点;Redis近似LRU。
数仓场景:Redis缓存维度表、用户画像、热点特征,使用LRU淘汰冷数据。
5、布隆过滤器(去重、黑名单)
面试话术:二进制数组+多个哈希函数;判断一定不存在、不一定存在;优点内存极小;缺点无法删除、存在误判。
业务场景:用户去重、黑名单过滤、日志重复判断。
6、TopK 海量数据求最大/最小K个数(大数据必考)
面试原题:10亿条访问日志,找出访问量最高的100个IP,内存放不下全部数据怎么做?
算法原理(背诵):
- 采用小顶堆解决最大TopK;大顶堆解决最小TopK;
- 维持堆容量为K,遍历全部数据;
- 堆未满直接放入,堆满后比较堆顶;大于堆顶替换堆顶;
- 遍历结束堆内即为最大K个数据。
大数据生产应用:热门商品、热点IP、倾斜key排查、流量TOP排行。
面试话术:海量数据求TopK不能全局排序,时间复杂度太高;使用小顶堆,时间复杂度O(nlogK),内存只保留K个元素,适合超大数据量。
7、位图算法 BitMap(海量去重、状态标记)
面试原题:1亿用户ID,判断用户是否登录,怎么极致节省内存?
原理背诵:
- 利用二进制bit位存储状态,一个int占4字节可以存32个状态;
- ID对应下标,存在置为1,不存在置为0;
- 优点:极度省内存、查询极快;
- 缺点:ID必须为整型、连续、不能过大。
数仓应用场景:日活用户去重、签到状态、用户黑白名单、用户留存标记。
8、一致性哈希算法(Kafka、Redis、分库分表必考)
面试原题:Kafka分区为什么能保证同一个key发送到同一个分区?扩容为什么不会大量迁移数据?
原理背诵:
- 构建0~2^32环形哈希环;
- 节点IP哈希落在环上,数据key哈希顺时针找最近节点;
- 新增节点只影响相邻一小部分数据,不会全局重分布;
- 优化:增加虚拟节点,解决数据倾斜、节点不均匀。
大数据应用:Kafka分区路由、Redis集群、分库分表、数据分片。
9、滑动窗口算法(Flink实时必考)
面试原题:Flink滚动窗口、滑动窗口底层原理?
算法原理:
- 固定窗口大小,不断向前滑动;
- 滑动步长 < 窗口大小产生数据重叠;
- 只维护窗口内最新数据,过期数据丢弃;
- 时间复杂度极低,适合流式实时计算。
业务场景:实时最近1小时交易额、最近30秒流量、实时告警、滑动留存。
10、快速排序(大数据最常用排序、面试手写)
原理背诵:选取基准值,小于基准放左边、大于基准放右边;递归拆分;平均时间复杂度O(nlogn)。
大数据优化点:Hive、Spark底层排序都是优化快排;结合外排序解决磁盘海量数据排序。
面试话术:大数据生产不用冒泡,全部使用快速排序,无序海量数据效率最高。
11、外排序算法(海量大文件排序)
面试原题:一个100G日志文件,内存只有4G,怎么排序?
解题步骤(必背):
- 拆分:大文件切分成多个小文件;
- 内排序:内存中快速排序,生成有序小文件;
- 归并排序:多路归并,最终输出一个全局有序大文件。
生产应用:Hive大表排序、离线超大日志排序、历史数据规整。
12、中位数算法(海量数据求中位数)
面试原题:十亿条交易金额,求交易中位数,内存放不下?
解法话术:双堆法,大顶堆存前半段、小顶堆存后半段;堆顶即为中位数;海量数据配合分片抽样,近似中位数。
13、贪心算法(数仓指标、资源调度)
原理:每一步只做当前最优选择,不回溯;局部最优推全局最优。
大数据场景:Azkaban调度资源分配、任务优先级、压缩策略、冷热数据存储选型。
14、冷热分离算法(中高级数仓必问)
原理背诵:
- 热数据:近7天,高频查询,存放SSD、Doris、Kafka;
- 温数据:近30天,中低频,存放HDFS;
- 冷数据:超90天,归档、压缩、低成本存储。
生产作用:降低存储成本、提升查询速度、优化集群压力。
15、大数据去重三大算法(面试总结)
- 布隆过滤器:超大批量、允许误判、不删除;黑名单、日志去重。
- BitMap位图:整型连续ID、极致省内存;用户签到、日活去重。
- Hash表:精准去重、占用内存大;中小批量明细去重。
模块五:面试手写SQL万能模板(直接默写)
1、通用开窗模板
1 | row_number() over(partition by 分组字段 order by 排序字段 desc) rn |
2、通用去重模板
1 | select * from ( |
3、累计求和模板
1 | sum(col) over(order by dt rows between unbounded preceding and current row) |
4、分组内占比模板
1 | count(1)/sum(count(1)) over(partition by class_id) |
模块六:大数据算法面试终极总结(一句话背诵)
- 抽样:蓄水池抽样、洗牌算法;
- 去重:布隆过滤器、位图、Hash;
- 排序:快速排序、外排序;
- TopK:大小顶堆;
- 流式:滑动窗口、水位线;
- 分片:一致性哈希;
- 优化:贪心、冷热分离。
模块七:大数据进阶手撕算法(面试压轴必问,新增完整版)
说明:以下算法只保留面试能用、大数据数仓必考,全部直白通俗,不用深层源码,面试直接口述。
1、二分查找算法(海量有序数据快速查询)
面试原题:百亿条有序时间数据,怎么最快查到某条记录?
原理背诵:有序数组,每次取中间值比较,折半缩小范围;时间复杂度O(logN)。
大数据场景:Hive分区查找、索引查询、Doris有序列快速过滤、日志时间检索。
面试话术:海量有序数据优先二分查找,比遍历快得多;数仓中用于分区裁剪、有序索引定位。
2、双指针算法(去重、有序合并、区间判断)
原理:快慢指针、左右指针;一次遍历完成去重、合并、区间筛选。
大数据场景:有序大文件合并、日志去重、连续时间段筛选、行为轨迹分析。
面试举例:两个有序超大日志文件,双指针一趟遍历合并为一个有序文件。
3、链表算法(LRU底层、Flink状态链表)
原理背诵:单向链表、双向链表;插入删除快、查询慢;LRU底层=哈希表+双向链表。
大数据场景:Redis缓存、Flink状态管理、Kafka偏移量链表维护。
4、栈&队列算法(消息积压、任务调度)
栈:后进先出;用于括号匹配、递归回溯、任务回滚。
队列:先进先出;Kafka消息队列、任务排队、流量削峰。
阻塞队列:Flink线程池、Spark资源调度、生产消费模型。
5、递归算法(树形层级、维度层级)
原理:自己调用自己,拆分重复子问题;注意递归深度防止栈溢出。
数仓场景:商品类目层级、地区树形结构、部门层级、血缘溯源。
6、二叉树算法(血缘分析、层级结构)
面试必考:前序、中序、后序、层序遍历。
大数据场景:数据血缘树、任务依赖树、菜单类目树、索引B+树。
面试话术:数据平台血缘分析底层采用二叉树遍历,递归追溯上游依赖表。
7、多路归并算法(海量文件合并)
面试原题:100个有序大文件,合并成一个全局有序文件?
原理:每个文件保留一个指针,最小堆维护最小值;每次取出最小写入结果。
生产场景:Hive合并小文件、日志合并、离线大排序、历史数据规整。
8、频率统计算法(热门商品、热点key排查)
原理:Hash统计频次,结合TopK找出高频key。
数仓用途:倾斜key排查、热点用户、爆款商品、恶意IP限流。
9、雪花算法(分布式唯一ID)
结构背诵:时间戳+机器码+序列号;全局唯一、趋势递增、无重复。
大数据场景:订单ID、埋点日志ID、分布式数据表主键、Flink唯一标识。
10、负载均衡算法(中间件必考)
- 轮询:均匀分发;
- 随机:随机分发;
- 加权轮询:高性能节点多分配;
- 一致性哈希:固定key固定节点;
场景:Kafka分区分发、Redis集群、服务网关、集群负载。
11、限流三大算法(实时风控、流量压测)
- 计数器限流:固定时间计数,简单粗暴;
- 滑动窗口限流:平滑流量,避免临界突刺;
- 令牌桶:允许突发流量,实时大屏流量控制;
生产场景:埋点日志限流、风控防刷、Kafka流量削峰。
12、字典树Trie(前缀匹配、日志过滤)
原理:字符逐层存储,公共前缀共享节点;查询极快、节省内存。
场景:URL黑名单、敏感词过滤、日志前缀筛选、域名匹配。
13、正则匹配算法(数据清洗)
数仓用途:清洗手机号、身份证、URL、特殊乱码、脏数据过滤;DWD层高频使用。
14、哈希算法(大数据基石)
面试话术:哈希算法将任意长度数据转为定长哈希值;用于去重、分片、加密、路由。
生产应用:shuffle分区、分桶、一致性哈希、布隆过滤器、文件校验。
模块八:大数据算法终极分类(一页纸背诵清单)
1、海量数据处理:蓄水池、位图、布隆、外排序、多路归并、TopK
2、分片路由算法:一致性哈希、哈希取模、负载均衡
3、流式实时算法:滑动窗口、水位线、限流、令牌桶
4、基础高频算法:快排、二分、双指针、递归、栈队列、链表
5、工程实用算法:雪花ID、字典树、正则、贪心、冷热分离
6、去重算法三件套:BitMap > 布隆过滤器 > Hash表
模块九:算法一页纸极简口诀(面试前10分钟速背)
说明:全部最短口诀,不记原理、不记代码,面试张口就说,专门针对大数据数仓开发。
一、海量数据处理(超大文件、内存不够)
- 洗牌算法:倒序遍历、随机交换、均匀抽样,hive rand()底层。
- 蓄水池抽样:先存k个、概率替换、海量无偏抽样。
- TopK堆排序:大堆求最小、小堆求最大,内存只留k个。
- 外排序:大文件切小文件、内部快排、多路归并。
- 中位数:双堆维护,一大一小,堆顶为中位。
二、去重算法(面试最高频)
- BitMap位图:整型id、bit存状态、极致省内存、不能存大数。
- 布隆过滤器:二进制数组+多哈希、能判不存在、不能删、有误判。
- Hash表:精准去重、占用内存大、中小数据使用。
三、分片&路由(中间件必考)
- 哈希算法:任意长度转定长,分区、分桶、去重全靠它。
- 一致性哈希:环形哈希、新增节点少迁移、kafka、redis用。
- 负载均衡:轮询均匀、加权择优、哈希固定、随机分发。
四、实时流式算法(Flink必考)
- 滑动窗口:窗口固定、步长滑动、数据重叠、统计最近时段。
- 水位线:标记时间、处理乱序、容忍延迟、剔除迟到。
- 限流算法:计数器简单、滑动平滑、令牌桶扛突发流量。
- LRU缓存:哈希+双向链表、淘汰最久未使用、redis底层。
五、基础手撕算法(简单但必问)
- 快排:基准值、左右划分、递归、大数据默认排序。
- 二分查找:有序数据、折半查询、速度最快。
- 双指针:一趟遍历、合并有序、去重、区间筛选。
- 链表:增删快、查询慢、flink状态、偏移量。
- 栈队列:栈后进先出,队列先进先出,消息削峰。
- 二叉树:前中后层序遍历,数据血缘、索引底层。
六、工程实战算法(工作常用)
- 数据倾斜:分区不均、热点key、空值加盐、拆分打散。
- 多路归并:最小堆合并有序文件、hive合并小文件。
- 雪花算法:时间+机器+序号、全局唯一递增id。
- 字典树:前缀匹配、敏感词、url黑名单过滤。
- 贪心算法:局部最优、资源调度、任务优先级。
- 冷热分离:热数据ssd、温数据hdfs、冷数据归档压缩。
- 正则匹配:清洗脏数据、手机号、特殊字符剔除。
七、算法终极顺口溜(背这一段全部拿捏)
海量抽样蓄水池,去重位图布隆池;
分片一致哈希环,实时窗口水位齐;
堆求top快排序,二分指针最简单;
倾斜加盐打散用,冷热归档省机器;
工程雪花唯一id,缓存LRU永不弃。
第五部分:面试简短兜底总结(面试最后自我介绍收尾)
我熟练掌握离线+实时数仓建设,精通Hive、Flink、Doris;熟悉分层建模、拉链表、缓慢变化维度;能够独立完成同步、清洗、建模、指标开发;精通SQL优化、数据倾斜、小文件治理;了解湖仓一体、CDC实时同步;具备数据治理、监控、调优实战经验,能够快速适配业务需求,产出高质量、高准确、高稳定的数据指标。