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



导读本文由小萝卜算子小姐姐总结分享,现就职于头条,是技术过硬的源码级别大佬。小姐姐以风趣幽默的文风,把多年大厂切身经历的面试经验和面试题目整理分享与我们ღ( ´・` )笔芯~ 再次感谢小萝卜姐姐投稿!


☞ 关注公众号『数据仓库与Python大数据』,获取更多​优质资源与干货文章​。


作者:小萝卜算子

编辑: 紫霞仙子






正文





前言


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


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


其实就是想表达,把功夫用在平时,在点滴工作中积累,沉淀。一年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去学习、去匹配自己的能力、去定制职位发展路线。One More,再次感谢仙子,由心感谢,也欢迎大家关注这个公众号,一起进步,一起走的更远!



欢迎加入技术交流群。戳:快来加入数据交流群



等你


更多精彩,请戳"到"数仓之路"查看


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

关注不迷路~ 各种干货、资源定期分享


学习小密圈