Hi,我是小萝卜算子!
这篇我们从面试的角度讨论一下转【数仓开发】该怎么学、学什么、学到什么程度。
数仓社招面试一般分为三个部分:
- 技术基础:基于简历上写的技术展开去讨论这些技术点的原理、底层实现等
- sql实践:1~3道sql题,现场写
- 讲项目:中间会基于项目中的一些点展开讨论,穿插业务理解、数据建模、治理相关问题的讨论
我们就朝着这三个方面去准备,尽量的把这些知识融会贯通,变成自己能说的东西。
方法论
我们学习是一个由模糊到清晰的过程:
知道概念—>学习理论—>大量练习—>逐渐清晰—>再大量练习—>清晰—>熟练运用—>融汇贯通
核心技能
数仓开发要学的基础技术大体如下:
整个的核心只有一个:sql 。
我们要学一门【java or scala语言】、要理解【hdfs&yarn】、练习【mapreduce or spark core】 都是为了更好的理解sql,理解sql背后的运行原理,调优原理,实际工作中很少会再去写代码实现一些逻辑了,这就是为啥我周边有很多同学不懂语言,但是能做数仓开发的工作。
学习方法
学习方法有两种:
- 从基础原理学起,按部就班:基础语言—>hadoop(hdfs&yarn)—>hive/spark—>写sql—>项目
- 简单搭建环境,从sql开始:练习写sql—>用sql实现简单数仓项目(模拟业务场景,写sql实现数据建表,逻辑编写,完成数据抽取)—> sql运行的平台的原理hadoop(hdfs&yarn) —> sql本身的原理(hive/spark) —> 想要深入了解源码(java or scala语言)
比较推荐第二种学法,第二种学法之所以能行的通,是因为sql现在已经被抽象为一门通用语言了,mysql/hivesql/sparksql 等这些sql语法大体都是相通的,比如你会mysql,再学hivesql和sparksql就相当容易。
有好多校招生、实习生入职之后,基本也是先从sql入手,试着实现各种逻辑,而后再考虑调优,原理这些。
对于核心技能,学的时候,要学细,能用脑子记住的尽量记脑子里,不要总想着【到时候查一下资料】好了。
就像跳舞一样,慢动作时,要把框架做的尽量大,做到极限。这样变成快节奏时,做的缩小的动作才有可能好看。如果慢动作的框架就很小,那快动作的框架只会更小,就不好看了。
学习资源
市面上学习资料很多、很全:挑资料中和上面列的基础技术点相关的看,比如spark streaming不需要看了。
【尚硅谷】的官网,B站都有课程,在淘宝上也能花很少的钱买到【尚硅谷】和【传智博客】整套的课程。
看过【尚硅谷】的数仓相关的项目,描述非常详细,我们一步一步照着做就ok
学到啥程度
用150分的态度去学sql框架相关:sql语法、sql实践、数仓的项目、sql的运行原理(mapreduce or spark core)、sql编译原理
对sql的一切都保持好奇心
1、Sql的熟练度,常用的关键字拼写和用法都要记住,不要总想着去查资料,要奔着都记住的目标去,才能用的熟练 |
---|
2、给一道写sql的题:能不能很快有思路的写下来? 能不能判断出自己写的逻辑有没有可能出现数据倾斜的地方?如果有会在哪一块? 什么原因?有没有什么解决方案? |
---|
3、再激进一点,对一个不是很复杂的sql,能不能判断出这个sql会shuffle多少次?产生多少个stage?什么情况下会用SortMergeJoin/ShuffleHashJoin/BroadCastJoin? 为啥? |
---|
4、常用函数的运行原理:count(distinct )、row_number() over()、lateral view explode等常用关键字的运行原理:group by 、partition by、distribute by 等这些是不是能讲清楚 |
---|
5、有关项目和数仓建模,在面试时对语言组织和表达能力要求比较高。 逼自己写几遍总结出来,不要边参考资料边写,凭自己的理解去写,写完后,再对着参考资料修改。 写作是思考的过程,能够锻炼组织语言的能力,把学到的东西变成自己的语言写出来。然后,再试着讲出来。 |
---|
用100分的态度去学hdfs&yarn和语言基础相关的知识点
hdfs&yarn的原理能理解,能用自己的话讲出来
语言类只是一个工具,社招面试已经很少再揪着某种语言不放了
相信上面这些做到了,至少在技术层面,面试官对你已经心有所属了。