面试总结

面试总结
1.面试以项目为开始展开,不断深入,从项目的背景一直介绍到项目用到的技术原理。会不断的问为什么
2.考察底层原理
3.语言表达能力很重要,需要把原理背景说清楚
下面是题目,欢迎大家把想到的答案写在评论区一起讨论
题目:

  1. 简单介绍一下数仓的业务场景
  2. 数仓分为4层,共有多少个主题?分别是什么?为什么分成这3个主题而不是更多?因为电商场景是
  3. 数仓为什么分成这4层? 为什么分层以后便于管理维护?
数仓一共分成3层:
ODS 数据准备层 
DW层 数据仓库层,内部又分为DWD,DWS,DIM等
ADS层 数据应用层
分层的好处:
1.清晰的数据结构,每一个数据分层都有它的作用域,在使用表得时候能够更方便地定位和理解
2.将复杂的逻辑简单化,拆分成一步步来实现。每一层只处理单一的问题,比较简单和容易理解,便于维护数据的准确性。如果有问题,从有问题得地方开始修复就可以
3.减少重复的开发
4.屏蔽原始数据的异常
5.数据血缘追踪,如果发现问题可以及时查到
  1. o d s 层存储源数据有什么特别之处吗?为什么ods会选择textile 这种方式去存储。不能直接用parquet或者其他更好的格式?
ods又称为贴源层,和数据源的结构内容基本一致,之所以算则TextFile这种格式,方便flume,sqoop等数据导入工具的使用
  1. 数据接入的方式是用Load Data是吗?
  2. ods还有什么特别之处吗?比如说内部表还是外部表?
ods层一般使用外部表,表结构和数据分开管理。当表被删除时候,只是将表结构删除了,数据还保留
  1. DWD层除了存放日志中的关键信息,更多应该存放什么数据
dwd层是数据轻微聚合的数据。(感觉更是想问数据仓库层除了明细数据还有什么)还有维表数据
  1. dws层和ads层有什么区别,两者的本质的区别是什么?
dws层是数据仓库服务层,为后续计算ads层的指标提供服务,本身还是中间数据。ads层是数据应用层,与外围系统连接提供最终指标服务
  1. 数仓理论建模,什么是维度建模?一句话总结什么是维度建模
维度建模从分析决策的需求出发构建模型,为分析需求服务,重点关注用户如何更
快速地完成需求分析,同时具有较好的大规模复杂查询的响应性能
  1. 维度建模的模型有哪些?都是什么?适用什么场景?
1. 星型模是一种多维的数据关系,它由一个事实表和一组维表组成;
事实表在中心,周围围绕地连接着维表;
事实表中包含了大量数据,没有数据冗余;
维表是逆规范化的,包含一定的数据冗余;
2.雪花模式是星型模型的变种,维表是规范化的,模型类似雪花的形状;
3.数据仓库由多个主题构成,包含多个事实表,而维表是公共的,可以共享,这种模
式可以看做星型模式的汇集,因而称作星系模式或者事实星座模式。
特点:公用维表
星形模型比雪花模型减少join更适合查询,能用雪花模型的地方一定可以用星形模型
  1. .配置的计算引擎使用的是spark还是mr? 为什么Spark或Tez会比MR快?
sqprk比mr快的原因:
1.spark减少了很多多余的mapreduce进行
2.spark使用内存减少了数据落盘的磁盘开销
3.spark是多线程的,MR是多进程的。mr每次启动任务都需要申请资源,结束时候释放资源
  1. .配置的话是用yarn-cluster模式还是yarn-client模式?
yarn-cluster模式是生产常常使用的模式
yarn-cluster与yarn-client区别在于client在什么地方启动
  1. 一个SPARK任务在Yarn-cluster模式下的运行流程?都跟哪些关键节点进行交互,分别承担了哪些职责
  2. driver启动的节点是由谁分配给它的,在哪个节点启动?
yarn-cluster,driver在NodeManageer种运行。是客户端将任务提交给spark集群后,ResourceManager从空闲的NodeNamager中选择一个空闲的将driver实例化
yarn-client,driver在spark客户端运行
  1. yarn,spark,hive界限是什么?
 yarn 是任务调度工作,spark是计算引擎,hive是数仓分析工具
  1. .在任务调度上有什么调优空间吗?yarn?
采用更合理的任务调度方式,FAIR方式比FIFO更好一些
  1. .spark任务的调优方法?.
  2. SQL调优,去重不用count distinct 而是group by 底层原理是什么?
 		count (distinct) 会将distinct 得字段依次全部加载到内存之中,如果数据量较大容易造成OOM。count是全局操作,会将map输出的结果输入到一个reduce任务中,造成严重的数据倾斜。
 		group by 本质上是先排序再分区,会根据reduce数量进行分区并且多个reduce任务可以提升任务并行度,提高效率
  1. .dsitribute by,cluster by, sort by 还有orderby 4个排序的区别
order by 整体排序,全局排序
sort by 每个reduce任务内排序
distribute by map端的输出分区
cluster by 当 sortby 和 distribute by的字段相同时候即为cluster by
  1. .kafka发布/订阅模式有什么优点和缺点?其他的MQ有哪些消费模式
  2. .hive执行过程中数据倾斜是什么?数据倾斜的底层原理是什么?有哪几种倾斜的类型,比如MAP,Join,reduce的倾斜,底层原理是什么样子的?还有其他过程的倾斜?
map阶段得数据倾斜是由于原始数据异常导致
1.kafka各分区数据量不同
2.原始数据文件不可以切分
数据倾斜又两个必须条件:
1.有shuffle阶段
2.key分布不均匀(一些key分布不均匀或者某个key分布不均匀)
解决方法:
1.大表关联小表:将小表进行广播,在map端join,不需要shuffle
2.两个表都是大表,如果倾斜得key是少量key,可以将少量key得数据挑出来,随机加上前缀,两外一个表对应key得数据扩充n倍添加相同前缀进行聚合,正常得正常聚合。最后将两个数据聚合在一起
3.两个表都是大表,多数key倾斜。一个表数据随即打上1-n前缀,后一个表数据扩充n倍
4.对于聚合算子,可以加盐进行两阶段聚合
5.改变reduce分区数目
6.改变关联的key
7.使用更高效得算子,reduceByKey和aggregateByKey代替groupByKey
  1. JVM的主要组成部分和作用
  2. 堆、栈和队列的区别是什么?
  3. java的垃圾回收机制
  4. 什么对象可以被回收
  5. .从本质上讲一下老年代和新生代
  6. .什么时候垃圾回收机制去检查?
  7. .java会存在内存泄漏吗?是如何发生内存泄漏的,一般如何处理这种情况
  8. .java中什么是深拷贝和浅拷贝?
对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝,此为浅拷贝
对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,此为深拷贝

你可能感兴趣的:(mapreduce,spark,hadoop,面试)