面试系列 | 大厂数据开发面试经验

前言

虽然面试讲究天时地利人和,也有一些机遇和运气。 但是我想说,没有哪一种成功是可以来的不费吹灰之力,没有哪一种光鲜是可以一蹴而就的。 你所看到的成果,无不是别人一路努力而来的结果。

如果把每次面试都当做一个机遇的话,你靠什么去抓住这个机遇?有一句话说: 做正确的事,等待好事发生。 感觉把这句话用在面试上,很合适。

其实就是想表达,把功夫用在平时,在点滴工作中积累,沉淀。一年365天,你所用的技术总共也没有几个知识点。

如果每周都积累几个,你还害怕面试吗?

如果你坚持每天都积累,你依然已经成了一个很厉害很厉害很厉害的人~~ 

说到这儿,感觉面经讲完了,自己都想笑,哈哈。下面我们详细从以下几个方面说一说。

0x01 职业发展方向

找工作前,先搞搞清楚自己要面试的职位,比如大数据方向比较常见的:

  • 大数据套件(平台)开发

  • 数仓开发

  • 机器学习

如果是【 大数据套件(平台)开发 】,那对底层框架原理,源码是要求的,有好多都需要对这些框架进行二次优化开发。

如果是【 数仓开发 】,那就是数据治理,仓库建模,花样写 sql ,如果要想让自己更有优势,让人眼前一亮,最好有优化,源码经验。

如果是【 机器学习 】,那就是得各种算法原理,公式推导,以及在工作中,这些算法的 ? 实际效果是怎么样的,解决了什么业务问题。

我们要专注其中一个方向,一定不要什么方向都写。 我见很多简历,要仔细看很多遍,才能发现,噢,他 / 她可能在数仓方面更擅长一些。因为简历上即写了做算法,也写了做数仓开发,也写平台开发。

但实际上,大家都那么忙,在过简历的时候,不会仔细推敲很多遍。你的简历一定要突出和你面试职位的匹配性,突出你这么多年来,都在做什么。

0x02 SQL BOY/SQL GIRL

依照自己的经验,确认你要面试的职位的等级:高开、资深、专家 ...

这个也算是我对自己的一个复盘,之前,我自己也没好好想想清楚。不同的职级,对能力的要求不一样,这一块的功夫需要在平时工作中、日常生活中去刻意练习。

如果觉得自己在技术方向没有亮点,那就为自己寻找一个亮点,并不断的刻意深入。

大家普遍认为做数仓开发就是 sql boy/sql girl ,但实际,数仓开发还有很多可以深入的地方。

  • 你 sql 写的很好吗?

  • 你敢不敢挑战现场写,并且以最快的速度写出最优化的 sql ?

  • 你对常用的一些 sql 的原理都搞的很清楚吗?能经得住拷问吗?

  • 你对仓库建模方向有哪些好的想法和实践?效果怎么样?

...

如果这些最基本的,都不能搞定,又怎么能觉得数仓开发的工作很浅显呢?那是你在为懒惰,不求上进找的借口吧。 给自己列一些标准,如果不能达到,那就努力去练习。

确认目标,并向着目标靠近。

0x03 术业有专攻

一定要有自信。

一定要有自信。

一定要有自信。

做数仓开发,每天做的最多的事情就是写 sql ,但是我没觉得自己有多 low 。虽然每天写 sql 最多,并不代表我们只会这些。

一个小小的 sql 背后,有多少东西需要去搞搞明白:内存管理, sql 编译过程,各种参数的原理,各种算子的原理 ... 

之前有优化过好几个后端开发工程师写的 sql ,他们每天只关注业务逻辑开发, sql 能力不是很强,导致一些页面因为 sql 效率问题,等 10 几分钟才能展示。 

所以,一定要有自信,术业有专攻。

0x04 何必跟钱过不去呢

要面试了,最忌讳什么都有印象,什么都会,但又讲不出来。 这样你准备十个问题,还不如精通一个问题。

很多时候你觉得自己紧张的忘了,实际上是你根本没有理解并记住啊,有木有?

准备好面试题,用自己认为最好的答案写好,自己对着墙发出声音讲一讲,一直到能非常顺溜的讲十遍。

然后就告诉自己,我已经准备好,克服紧张感。

好好准备面试,何必跟钱过不去呢?你说对不对哇,老铁 ~~~

0x05 面试题目总结

做为一名数据开发人员,我真的很想说,一定要把功夫用在平时,在点滴工作中积累,沉淀。每天要给自己留那么一点时间来思考,总结。。

附上 总结的大厂面试题,这些题也都是很常见的:

Spark

  • join 实现有几种呢,源码有研究过吗?底层是怎么实现的 

  • shuffle形式有几种?都做哪些优化

  • 是通过什么管理shuffle中的内存,磁盘的

  • 讲讲spark内存模型?说说你了解这些,对实际的工作有什么帮助?

  • rdd有哪些特性?

  • 讲讲spark的高可用和高容错

  • 宽依赖,窄依赖都是什么?有什么不同?除了大家都认为的不同点以外,还有哪些不同?

  • sql运行过程

  • full outer join原理

  • spark为什么比hive快

  • 讲讲sparksql优化

  • 讲讲RDD, DAG, Stage

  • 说说groupByKey, reduceByKey

  • spark是怎么读取文件的?

  • 有没有遇到过spark读取文件,有一些task空跑的现象?

  • 窗口函数中几个rank函数有啥不同

  • parquet文件和orc文件有啥不同

MR/Hive

  • mr shuffle 是什么样子?具体原理是什么?为什么要排序?

  • mr map,reduce数量都什么相关

  • hdfs存放副本的算法是什么样的?

  • 讲讲hive sql优化

  • hive 数据倾斜参数原理及解决方案

SQL

  • 花样写sql,跟实际业务有关的

  • 一般情况下,写出一个,然后,他就会问还有没有更优化的方式?

  • 窗口函数,groupingsets cube这些都会用到。有好多是计算滑动的那种

  • 这个sql 在hive中起几个job,为什么是这么几个job?

建模

  • 方法论,数据仓库怎么构建?你是怎么分主题域的?对现在的业务有什么看法?现在的仓库是个什么情况,各个分层有什么特点?为什么这么分? 

  • 讲讲三范式

  • 拉链表,缓慢变化维

  • 给你一个新业务,怎么开展?

  • 数据治理

  • 数据质量,口径一致

基础

  • 谈对jvm的理解 

  • 链表删除算法

  • 排序算法

  • Btree简单讲讲

项目

  • 说说项目中你做的比较有价值的东西

  • 你做的字段血缘,这只是针对有sql语句的,那没有sql的(load的,从其它业务库用sqoop拉过来的,mr里解析的),你有没有想过怎么做字段血缘?

  • 你做过印象最深刻的项目,为什么?你在中承担什么角色,发挥了什么作用?还可以优化吗?

  • 写在最后

    今天的分享到这里就要说再见了,希望能对你有所帮忙。正如前面吹角连营大佬所说,对于面试主观上,能力与JD匹配就可以了。如果你正在感觉迷茫,有一种最简单的方式,面向JD去学习、去匹配自己的能力、去定制职位发展路线。

猜你喜欢

转载自blog.csdn.net/m0_46945278/article/details/105840349