先说些废话
作为一个全栈开发工作者,曾经对公司专职的大数据开发有着浓厚的兴趣,所以尝试学习大数据开发所需要的各种技术栈。
本文就是我在学习过程中记录下,所遇到的一些大数据面试的提问,仅供参考。
当然,因为时间精力有限,并非所有的问题我都去记录了答案,如果您不了解某些问题或者不认可我记录的解答,可以带着问题百度或者问ChatCPT,相信会给您留下更深刻的印象。
最后,读者可以把本文当作模拟面试的提纲,欢迎各位在评论区交流,大家一起成长,努力变得更强!!!
高频基础知识点
执行过程
- MapReduce 的执行过程,如何进行一个文件的计算,shuffle的过程(不需要手写MapReduce或者用java写MapReduce)
- HDFS 的读写流程
- Yarn 的任务提交流程,如何查看任务日志和报错信息
- Hive 的执行过程(Hive SQL 如何解析成MapReduce的)
- Spark 任务的执行过程
- Spark SQL 的底层执行过程
Linux
- 如何查看内存,CPU占用
- Shell脚本如何定义函数调用
- Shell脚本第一行:
#!/bin/bash
的含义- 第一行的内容指定了shell脚本解释器的路径,而且这个指定路径只能放在文件的第一行
- 第一行写错或者不写时,系统会有一个默认的解释器进行解释
- Linux脚本授权是什么?Linux授权命令是什么?
chmod [{ugoa}{+-=}{rwx}] [文件或目录]
chmod [mode=421] [文件或目录]
- Shell标准输出和标准错误是什么?
- 工作中常用的Linux命令有哪些?
MySQL
- sql的执行计划,执行错误报警机制
- 索引有什么优缺点
- 什么时候会导致索引失效
- 如果我给一张表的所有字段添加索引会有什么样的问题
- 如何进行sql调优 高频
Hadoop(HDFS/MapReduce/Yarn)
- Haddop3对于Hadoop2有哪些新特性
- HDFS 常用命令有哪些
- 工作中遇到 MapReduce 流程的相关问题如何排查
- 其他问题汇总
Hive
- 工作中如何进行Hive优化 高频
- 同类型问题:Hive中有任务跑的时间比较长,怎么优化
- 同类型问题:Hive任务处理过程中遇到过什么样的问题
- 同类型问题:Hive SQL 查询比较慢,怎么处理
- 同类型问题:Hive的参数设置用过哪些,有什么作用
- 同类型问题:Hive中表关联方式join的分类、用法、应用场景
- 同类型问题:什么时候会走MapJoin
- 同类型问题:什么情况下会产生Hive小文件,小文件有什么危害
- Hive在工作中的调优总结
- mapjoin的使用方法以及注意事项
- Hive在工作中的调优总结
- 实操 | Hive 数据倾斜问题定位排查及解决
- Hive千亿级数据倾斜解决方案
- Hive企业级性能优化
- Hive的查询过程,哪些方法可以提高查询效率 变相的问优化
- Hive的窗口函数,常用窗口函数,怎么使用
- 窗口函数
row_number
、rank
、dense_rank
之间的区别row_number是行号,不会重复
rank数据相同的,给出并列排名,但是会跳跃
dense_rank类似于rank,但不会跳跃
hive窗口函数之排名函数row_number、rank和dense_rank
Hive窗口函数保姆级教程
Hive窗口函数/分析函数详解 - 如何用窗口函数去重
- 窗口函数
- Hive SQL的数据去重方式
- distinct、groupby、row_number
- hive中三种去重的方法
- 项目中Hive有多少表
- Hive查询组件Impala了解吗?简单介绍下
- Hive中的行列转换,除了case when,还有别的方法吗
- 行转列:
collect_set()
、collect_list()
、concat_ws()
- 列转行:
explode()
、split()
、LATERAL VIEW
- Hive sql 行列转换(行转列,列转行)
- 行转列:
- Hive中内部表和外部表的区别?内部表和外部表如果删除了元数据是由谁来维护?元数据的存储位置和管理者是谁
- 从创建表和删除表两个方面说明
- metastore,master节点上
- mysql,metastore
- Hive分区和分桶的区别?分桶的原理?分区可以提高查询效率吗?分区越多越好吗
- MR中:按照key的hash值去模除以reductTask的个数
- Hive中:按照分桶字段的hash值去模除以分桶的个数
- 缩小数据查询范围,提高查询效率,但是不是分区越多越好
- Hive中如果有过多的分区,由于底层是存储在HDFS上,HDFS上只用于存储大文件而非小文件,因为过多的分区会增加NameNode的负担
- Hive SQL会转化为MapReduce, MapReduce会转化为多个task,过多小文件的话,每个文件一个task,每个taskー个JVM实例,JVM的开启与销毀会降低系统效率
- 合理的分区不应该有过多的分区和文件目录,并且每个目录下的文件应该足够大
- Hive中分区是否越多越好?
- 如何反查哪条Hive SQL执行较慢?
- Hive查询在工作中遇到什么样的难点?如何解决?
Hbase
- Hbase查询用的多吗,有没有做过优化?
- 万字长文详解HBase读写性能优化
- Hbase快速入门(超精炼总结)
- 大多数key-value数据库是为了高频写入而设计的,而不是为了高速读取!用来做高性能查询完全是个方向性错误
- Hbase查询过滤器用过吗,简单介绍下
- RowFilter、FamilyFilter、QualifierFilter、ValueFilter
- SingleColumnValueFilter、SingleColumnValueExcludeFilter、PrefixFilter、PageFilter
- 多过滤器综合查询FilterList
- HBase过滤器查询
- 用户画像的构建是Hbase做的吗?特征值怎么提取的?
- 项目Hbase的RowKey是如何设计的?
Scala
- Scala有什么特性
- Scala的class和case class在使用层面有什么区别
- Scala的Option类型的作用与使用方法
- Scala的泛型斜变逆变
- Scala的函数柯里化了解吗?优点是什么?
- Scala的隐式函数、隐式转换
- Scala用过哪些函数
- Scala中的String是可变的吗?
- String是一个不可变的对象,所以该对象不可被修改,这就意味着你如果修改字符串就会产生一个新的字符串对象,但其他对象,如数组就是可变的对象
- String对象是不可变的,如果你需要创建一个可以修改的字符串,可以使用
String Builder
类 - Scala:字符串
- Scala是否可以多继承
- Scala中的多重继承由特质(trait)实现并遵循线性化规则
- 在多重继承中,如果一个特质已经显式扩展了一个类,则混入该特质的类必须是之前特质混入的类的子类
- 这意味着当混入一个已扩展了别的类的特质时,他们必须拥有相同的父类
Spark
- 你了解Spark的序列化吗?Spark提供了哪些序列化类?
- Spark中RDD持久化了解过吗?
- Spark算子分类?常用算子?怎么使用的? 高频
- Spark的惰性计算机制了解过吗?(懒加载)
- 工作中如何进行Spark优化? 高频
- Spark的Stage和Task的划分?Task数目由什么决定?
- Spark的宽窄依赖了解过吗?
- Spark如何查看日志和排查报错问题?
- 工作中跟有没有遇到到Spark数据倾斜,如何处理的?
- Spark Streaming怎么保证精准的消费?
- Spark在工作中遇到什么样的难点?如何解决?
Spark面试资料合集
Kafka
- 简单介绍下kafka的核心概念及个人理解
- Kafka在数据传输过程中遇到重复数据怎么处理
- Kafka在使用过程中如何保证数据不丢失
- Kafka中的ack含义是什么
Kafka面试八问
大厂面试官竟然这么爱问Kafka,一连八个Kafka问题把我问蒙了?
- 为什么要使用Kafka?
- Kafka消费过的消息如何再消费?
- Kafka的数据是放在磁盘上还是内存上,为什么速度会快?
- Kafka数据怎么保障不丢失?
- 采集数据为什么选择Kafka?
- Kafka重启是否会导致数据丢失?
- Kafka宕机了如何解决?
- 为什么Kafka不支持读写分离?
Java
- Java的io流分类
- Java怎么写事务
- MyBatis怎么使用事务
- Java的内部类和外部类
- 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类
- 内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类
- 静态成员内部类:使用static修饰类
- 非静态成员内部类:未用static修饰类,在没有说明是静态成员内部类时,默认成员内部类指的就是非静态成员内部类
- Java中全局变量、静态全局变量、静态局部变量和局部变量的区别
- Java中重写与重载之间的区别
- Java中的final关键字
- Java的jvm了解吗
- 多线程,线程启动个数如何确定?最多多少?
Flink
- Flink-cdc介绍一下
- Flink和Spark的区别是什么?
- 你们之前使用Spark做实时,后来为什么使用Flink了?
- Flink的windowapi的分类介绍一下
- Flink常用算子介绍一下
- Flink的cep了解么?怎么使用的?
- Flink的水位线了解吗?可以具体讲讲吗?
- 你们Flink主要使用api开发还是sql开发?
- 能讲讲Flink双流join是如何实现的吗?
Flink面试资料合集
clickhouse
- 你们有有过clickhouse做join吗?如何保证秒级延迟?
涉及到项目和数仓的问题
- 简单介绍一下你们项目中的业务吧
- 能结合业务说说你们的数仓怎么搭建的吗?你负责哪些模块?
- 你们项目中的人员怎么分配的?
- 你们的
主题
是根据什么来划分,为什么这么划分? - 你们源数据大概多少张表?
- 你们的日志数据到建立
事实表
的过程中,主要做了什么? - 你们的
维度层
是怎么建设的 - 如果在解析日志文件时遇到很多的硬编码,如何使用维度去解决?
- 你们的项目中有多少个
指标
?负责过多少个?怎么编写的? - 如果指标出现同义不同名的情况如何解决?
- 阿里的
oneData体系
有了解吗? - 你们如何保证
数据质量
的?你日常遇到最多的数据质量
问题是什么? - 你的项目中
离线任务
有多少个?任务执行的时间是什么时候? - 你的项目中
数据量,日活,漏斗分析
大概是多少?以及其他分析的方向? - 你们项目中的
业务数据清洗
是怎么做的? - 数仓的
整体架构
是什么样的?数仓是如何分层
的? - 介绍一下项目中的
数据流向
- 介绍一下项目中
处理后的数据用途
? - 数仓中的
增量表
和全量表
分别是怎么做的?有没有用过拉链表
? - 工作中有没有遇到的
数据倾斜
?如何处理的? - 工作中有没有遇到过
断点续传
的问题?怎么处理的 这个问题具体技术具体处理 - 你的
数据建模经验
介绍一下? Java框架
在你们项目中的应用?- 你在实时开发的过程中遇到什么问题?如何解决的?
- 你们的实时模型是如何进行优化的?怎么评估它是否是一个优质的模型?
- 你们的
任务监控
有做过吗?主要监控什么? - 你们如何保证
数据的准确性
? - 埋点数据缺失怎么处理,埋点数据相关的表示如何设计的?
- 零点漂移如何解决?
- 有做过用户路径模型吗?每条路径的转化率是多少?(是不是类似页面单跳率那种)
- 你们的OLAP引擎主要用的什么?为什么这样选型?
- 能聊聊
端到端的一致性
和精准一次消费
吗?
工作内容的问题
- 你们的需求周期一般是多久?拿到需求之后怎么分析?
- 在完成需求的过程中,有没有考虑过数仓的通用性,你们是如何体现的?
- 你在工作中的最大收获是什么,带给你什么样的能力?
- 你们的工作强度怎么样,能接受加班吗?
- 如果一周内让你做十个紧急的需求,你会怎么办?
- 你们部门之间是直接进行对接吗?
- 有没有反驳过产品提出的需求,如果不合理怎么办?
各种组件需要学到什么样的程度
hadoop学习到什么样的程度
- hdfs、mapreduce、yarn 基本原理即可
- 各种面试基本题完成即可
- MapReduce的执行过程,如何进行一个文件的计算,shuffle的过程(不需要手写mapreduce或者用java写mapreduce)
- HDFS的读写流程
- Yarn的任务提交流程,如何查看任务日志和报错信息
- 大多数公司可能都进入spark阶段了
spark学习到什么样的程度
- 主要为了优化mapreduce2的一些问题,利用内存计算,减少磁盘IO
- spark streaming + hbase 离线实时 -> 使用flink搭建一整套实时
- 熟悉spark开发的api和常用的算子
- 熟悉spark调优
- spark的应用:批处理,流处理流计算(flink和sparkstreaming),数据分析,图形计算
spark面试重点
- 一些八股文知识点,基本原理,是高频且必须熟练知晓的,核心原理的流程和图
- spark常见报错的解决方案
- real spark冲突怎么解决
- om怎么处理,driver的om和excute的om分别怎么处理
- 参数调优,集群层面调优,应用层面调优
- 为什么这么做
- 有没有更好的方案
- sparksql调优
- 调优场景
- 怎么发现问题的
- 发现问题后怎么定位问题的
- 定位问题后怎么解决的
- 解决之后达到什么样的一个效果
- 还有哪些更好的一些优化方案吗
- 根据业务场景现场写sql,根据数仓的理论优化sql
- 常规的业务逻辑,join,for函数,截取字符串,嵌套多个高级函数
- 企业开发使用场景的解决方案
- udf管理:统一仓库管理还是自己提交,怎么解决相同含义的sql function被重复的udf提交
- thift server怎么用的,怎么用的,怎么解决多租户,怎么解决权限,怎么解决负载均衡
- spark平台和二次开发,源码,遇到的问题详细问
- 面试流程相关
- 10-20分钟问项目
- 20分钟问编程基础
- 20分钟问组件
- spark问20分钟左右
spark畅谈
- 小公司大部分业务场景是离线开发,实时场景也较少
- 大公司80%离线,20%实时
- sparkstreaming批处理比flink批处理更快,性能差百分之五十左右,spark使用门槛较低
- 入职后可以想老员工讨教经验,核心组件
- 博客快速浏览一些内容
- 官网提供的一些例子
未来技术趋势
附录
面试资料总结
大厂面试总结
我是 fx67ll.com,如果您发现本文有什么错误,欢迎在评论区讨论指正,感谢您的阅读!
如果您喜欢这篇文章,欢迎访问我的 本文github仓库地址,为我点一颗Star,Thanks~