这次面试大约面了50min,
整个过程体验还是不错的,面试官迟到也做了解释,记错了时间。
下面👇是面试题:
由于我准备面试时大部分的项目准备是围绕数据仓库开发准备的,
而我面试的是货拉拉的大数据开发岗,
所以整个面试过程面试官也在反复和我确认到底是面试应用开发还是数仓开发。。。
1.自我介绍
2.简单介绍2个项目+项目选型+负责哪一部分
负责的部分是离线数仓部分
3.围绕项目问问题:
项目所使用的数据模型(问的是星型模型和雪花模型的区别,愣是半天没反应过来,害)
ClickHouse和Hbase有什么区别
Hive和Hbase有什么区别
•Hive是通过构建元数据,映射HDFS文件构建成表,本质还是HDFS,实现离线大数据仓库
•Hbase是通过构建上层分布式内存,底层HDFS,实现大数据实时存储的NoSQL数据库
Hive和Mysql有什么区别
(内心os:啊这,为啥老问我这么多区别,现在仔细想想我应该回答的更完整才符合面试官的需求。)
如何处理Hive的数据倾斜
如何解决数据倾斜一类的问题,可参见这篇:
描述一下Hive的MapReduce过程
mapreduce的三大阶段:
map阶段:并行处理的阶段 shuffle阶段:从离开Mapper开启到进入Reduce之前的阶段 reduce阶段:汇总整理的阶段
mapreduce的八大步骤
设置MapReduce的输入InputFormat类型,默认为TextInputFormat
自定义map函数,得到TextInputFormat的k1,v1;经过处理后传出k2,v2
分区–默认根据k2决定map中的数据该发送到哪个reduce中 排序–默认根据k2进行字典排序
规约–默认没有此阶段,是优化手段,可以提前合并 分组–相同k2的value会放到同一个集合中
自定义reduce函数,讲分组得到的k2,v2转成k3,v3输出
设置输出的OutputFormat,默认采用TextOutputFormat,将结果输出到一个纯文本文件中
Hbase的设计原则
(没答完整,刚刚自己才写的面试题,小丑竟是我自己~)
业务原则:贴合业务,保证前缀是最常用的查询字段
唯一原则:每条rowkey唯一表示一条数据
组合原则:常用的查询条件组合作为Rowkey
散列原则:rowkey构建不能连续
长度原则:满足业务需求越短越好
最后一问:项目的数据流转
4.Java方面
java的基本数据类型有哪些???
java基本数据类型有boolean、byte、short、int、long、char、float、double等
说一下Java的多态和继承
继承 子类可以直接实现父类中的方法,有选择的扩展
多态 调用同一个方法展示出来不同的方式。
String、StringBuilder、StringBuffer的区别?
String:String类被final修饰不能被继承,String内部char[]被final修饰,字符串内容无法被修改
StringBuffer:可变字符串、效率低、线程安全;
StringBuilder:可变字符序列、效率高、线程不安全;
5.Mysql的 一些问题
union和union all的区别
左连接和右连接 内连接和外连接
什么是最左前缀原则?什么是最左匹配原则
顾名思义,就是最左优先,在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。
最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1
and b = 2 and c > 3 and d = 4
如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。
=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式
innoDB啥。。。
没有复习过全军覆没。。。
总的来说,这是我的第一次正经面试,
面试下来自我打分是不及格的,
还是太菜了。。。