这是小编的一个读者喜提offer后在群里做的分享,文中隐藏了读者的个人隐私信息,小编这里把他的面经分享出来供大家学习。 群友们看到后都纷纷表示【我酸了,现在我就是个柠檬精系列】。
关于如何学习/准备面试的总结
首先说一说本人的情况
本人普通本科,非计算机专业(之前一直对这个耿耿于怀,后来想通了觉得60%从事软件开发的都是非计算机专业,之后的面试直接说我是非计算机专业,这一块的诚实很重要, 也没有必要瞒着,因为公司看中的是你的开发能力,能不能帮公司解决问题)。对于群里的大牛来说,看了之后肯定会笑话我,哈哈,不过我的能力就这么大,每年有进步就很开心。
怎么学习群主的帖子
群主基本每周都会对帖子有更新,我是一个比较细心的人,每天上班去公司要2个小时左右,然后在地铁上的时间都会在看群主的帖子,一是为了拓展见识,二是为了夯实基础知识。对于我公司开发项目有相似的帖子,会进行收藏,之后做好笔记,理解群主说这个技术栈的思路,为什么要这样搞,而不是单单的对里边的理论知识进行记忆,这一点很重要,特别是面试的时候能说出这些东西,都可以让面试官耳目一新。
我记得特别深刻的是群主在kafak和spark那一块的讲解,kafka怎么实现实时性(pagecage页缓存,顺序写磁盘,零复制技术等等),面试官问到这一块的时候,我都有说的很详细,然后面试官都会跟我说:嗯,你的基础能力很扎实。还有spark调优那一块,这个是我的强项。我把自己掌握和实践中用的方法用自己的语言总结了一部分(数据倾斜,内存溢出,开发调优,资源调优,shuffle调优等),每一个点都能够自己总结出一个例子出来,说给面试官听,之后面试官都会给出高度的评价。
注意事项
知识的学习要结合自己简历中的项目和技术架构,不能原封不动的抄袭;公司做的有哪些项目,那么安排上,再从群主的帖子里去找灵感,这一点很重要,你不能拿着没有做过的项目来套这些东西,因为一个项目会牵涉到业务场景,项目背景以及实现中的很多细节,乱编的项目肯定有考虑不到的地方,有一些细节都会被问出来,结果让面试官对你产生了怀疑。基于真实项目的技术架构,吸收帖子里边的一些思想,加上自己的思考,这样进步就会很快。
遇到的面试题
Java基础
JVM优化和多线程必问。
数仓必问
mapreduce的底层原理(shuffle重点);hivesql怎么转化为mapreduce;数据倾斜怎么处理(大表join大表,大小表join,参数调优等等);hive的优化;数仓分层细节,数仓建模;拉链表;缓慢变化维;星型模型和雪花模型区别;数据库三范式;事实表的分类;具体场景写sql;
Spark部分
spark的运行原理;spark数据倾斜;spark内存溢出;spark的调优;spark的rdd算子细节(map,mappartition,groupbykey,reducebykey等等很多,需要自己逐一的梳理);sparksql(sparksql怎么解析、dataframe、dateset);spark的内存模型;spark的shuffle原理,shuffle优化。
kafka部分
kafak负载均衡;kafka数据一致性;kafka的ack机制;kafka的exact once语义;kafka分区策略;kafka分区的目的等等。
zk部分
zk选举机制,zk用到的算法;zk的数据一致性;zk 节点宕机如何处理;负载均衡;zk一些接口。
hbase
读写原理;rowkey设计;热点问题;数据版本;habse的优化。
elasticsearch
es的读写原理;es的倒排索引;es的优化(重点必问);场景下的es提问。
自己的感受
感觉越往高级的面,就会倾向于问你组件调优以及架构方面的知识:如分布式;CAP理论;数据一致性以及知识掌握的全面性,这些部分都是我需要学习的地方,不说了,再说就感觉自己的水平很low了,哈哈。
然后就是写简历的时候不贪多,把每个项目的实现细节都给搞清楚,很容易就面过,基于此我基本每家单位的一面都能过,二面三面的时候一方面看知识的深度,另一方面靠自己的表达能力。最后就是感觉现在好多公司喜欢搞数据中台,数据治理这一块,这一块我在我们公司搞过一点,感觉可能也是一个加分项。
最后弱弱的给小编打个广告,后台回复【知识星球】,可以加到圈子里来。未来一段时间都在持续更新面试题系列。 小编把阿里巴巴、腾讯、美团等大厂的Java和大数据面试题整理成了电子书和资源,目录如下: 链接: https://pan.baidu.com/s/1ifHfofjawqD9jn2lvoh0NA 提取码: h79x 另外,微信搜索关注【import_bigdata】,回复【资源】,还有几百G大数据资源下载!
欢迎关注,《大数据成神之路》系列文章