疫情期间找工作其实真的不是很好找,下面是最近一段时间的面试总结
hive面试总结:
一、经常会被问到的就是row_number()函数的使用
(1)、用户登录日志:
APP userid datetime
快手 user001 2020-01-01 02:00:00
电猫 user002 2020-03-01 09:12:03
快手 user001 2020-01-02 02:00:00
输出每个APP下访问次数最多的5个用户(快手又被问到)
(2)、数据如下
date user age programid Playtime
20190421 u1 30 a 4min
20190421 u1 30 b 10min
20190421 u2 27 a 2min
20190422 u3 35 c 3min
20190422 u2 27 d 1min
问题如下
统计:(1条sql)用户总量,所有用户平均年龄,所有用户平均观看时长
统计:每10岁一个分段,统计每个区间的用户总量,每个区间用户的平均观看时长
统计:每个用户最喜欢的节目
统计:观看时长大于5min的用户总量,只要有一个节目用户观看时间小于5min就不能算(智联面试题)
(3)、
二、hive倾斜的调优
解决方案:
1、存在大量null值的时候需要取出null
2、大小表关联的时候,小表在左大表在右,减少join操作时的条数
3、增加随机前缀的方式
4、局部聚合+全局聚合
原理:首先把大表先加入随机前缀,对下面需要join的表也进行拆分成多个小表的形式,分别与左表进行关联,然后把最终的结果在进行聚合
5、sql优化
这个在这里就不细说,比如避免使用distinct等
hbase面试题:
因为简历项目中有涉及到二级索引和协处理器方面的东西,所以面试中有被问到过
1、hbase热点问题:
可以使用加盐的方式或者哈希的方式避免热点问题
2、hbase表结构的设计
3、hbase为什么支持高并发增删改?
因为hbase是基于hbfs,所以可以提高并发,而且hbase是构建在hdfs上的分布式的面向列的存住系统,hbase上的数据都是以storeFile二进制流的形式存储到hdfs上的block块中,对于hdfs文件系统是透明的
4、hbase region拆分
(1)手动拆分:手动指定拆分点,调用hbase shell的split方法
(2)预拆分:在建表的时候就定一号拆分点的算法
(3)自动拆分:使用参数hbase.hregion.max.filesize参数
5、hbase中regionserver宕机恢复
因为数据写入并没有直接写入数据文件,而是会先写入缓存(Memstore)在满足一定条件下缓存数据再会异步刷新到硬盘,写入缓存之前会首先将数据写入HLog中,可以从HLog中进行日志回放,进行数据的补救
spark面试题:
1、spark中DAGger理解:
2、spark中stage
3、spark提交流程(大厂可能会问一些源码相关的东西)
4、spark中的shuffle
这个需要把1.6版本前后的一个更新都需要介绍一下 ,shuffle的原理
5、spark底层引擎
这个问的不是很多,感兴趣的大家可以网上查阅资料
6、spark的容错机制
7、spark中sortBykey的底层理解,怎么对key进行排序的
8、spark处理内存溢出
9、scala的class和case class区别
10、scala隐式转换(360有被问到)
11、spark倾斜问题
sparkstreaming主要问的问题就是和kafka结合的时候怎么保证消息的一致性和仅一次语义
还有就是offset的存储问题,这个可以根据实际项目去介绍
其中又被问到kafka如果有一个用户组挂了,会有什么影响的问题
我这里简单介绍一下我的理解
会导致所有新版消费者都无法拉取消息,
为了避免这种现象,我们可以通过设置参数offsets.topic.replication.factor=3设置副本数量,这样当一台消费者宕机时,其他消费者也可以今习惯消费,或者也可以重新启东一个broker,把broker.id设置为损坏的那个broker的id,就会自动复制过去丢失的数据
12、spark中如何优雅的关闭程序
13、spark中的背压机制
数据结构:
快排的原理
代码实现非递归前序遍历二叉树
判断数组中第二大元素
这些可以通过leetcode刷题去学习