1. 过程拆解
面试还是有一些难度 的,主要三个部分:
- 底层原理,源码理解。
- 项目相关,难点,仓库建模
- 现场秀sql
1.1 底层原理,源码理解
这一块主要就依据你简历技能那一栏,写的你擅长的技术。
所以我觉得,写在那一栏的,一定是你用的很熟悉的,要么就是自己的亮点,能拿来说事的。不要自己知道一点点,或者只是听说过,就往上写,这基本是在给自己挖坑。
回答问题的技巧就是:不要硬照硬背,要灵活的结合实际经验来讲。
比如,要你讲spark内存模型,你就把网上的都照着一背遍,这没有亮点呀? 对不对,完全可以结合一个实例来说:从一个sql任务理解spark内存模型 即把内存模型讲了,又讲了你是怎么通过理解这个内存模型并指导实际工作做了优化~
我刚面完之后,有同事也要面,所以我就把面试题记录了一下。
题比较多,这里给列几个问题,感受一下,基本也都是比较常见的问题,就看怎么回答出自己的精彩了:
spark和hive:
- join 实现有几种呢,源码有研究过吗? 底层是怎么实现的
- shuffle形式有几种?都做哪些优化
- 是通过什么管理shuffle中的内存,磁盘 的
- sql编译过程有了解吗?(关于这块,我之前也有总结过很多文章 Hive源码系列(五)编译模块之整体介绍 Hive源码系列(九)编译模块之语义解析 整体分析)
- 讲讲谓词下推?(从一个sql引发的hive谓词下推的全面复盘及源码分析(上) 从一个sql引发的hive谓词下推的全面复盘及源码分析(下))
- full outer join原理
- spark为什么比hive快
- 讲讲sparksql优化(记录一次spark sql的优化过程 spark sql多维分析优化——细节是魔鬼 spark sql多维分析优化——提高读取文件的并行度)
- 讲讲RDD, DAG, Stage
- 说说groupByKey, reduceByKey
- spark是怎么读取文件,分片的?
- 有没有遇到过spark读取文件,有一些task空跑的现象?
- 窗口函数中 几个rank函数有啥不同(spark、hive中窗口函数实现原理复盘 Hive sql窗口函数源码分析 sparksql比hivesql优化的点(窗口函数))
- parquet文件和orc文件有啥不同
- mr shuffle 是什么样子?具体原理是什么?跟spark有什么不同?
- 讲讲hive sql优化
- hive 数据倾斜参数原理
- 讲讲spark内存模型?(从一个sql任务理解spark内存模型 )
1.2 项目相关,难点,仓库建模
关于项目这块,真的就很难说,因为不同的公司,项目也不一样,面对的问题也总不相同。 总体的原则就是一定要突出自己的亮点,先介绍项目大框架,再详细深入自己负责的模块。
关于仓库建模部分,不能只照搬照背理论,一定要结合实际案例说话。
项目
说说项目中你做的比较有价值的东西
你说你做过字段血缘,难点是什么?怎么实现?(这个问题,是因为我项目中写了做字段血缘:数仓字段血缘解析实现—hive版)
建模:
方法论,数据仓库怎么设计? (后来针对这样的问题总结了一篇:关于【你们数据仓库是怎么设计的】如何回答?)
讲讲三范式
拉链表,缓慢变化维
给你一个新业务,怎么开展?
数据治理
数据质量,口径一致
有关这里的一些点,后续,我也准备逐个总结成文章,一方面为大家后面要面试的同学提供思路,另一方面也能提高自己
1.3 现场秀sql
现场秀sql是真的考察动手能力。
你要知道在那么紧张的情况下,要写满足各种需求的sql,并且写完后,还要讲出为什么这么写? 还有没有更优化的办法? 原理是什么等等,也不是件容易的事啊,如果平时sql功底不扎实,这个是很难搞定的。
花样写sql
- 一般情况下,写出一个,然后,他就会问还有没有更优化的方式?
- 窗口函数,groupingsets cube这些 都会用到。有好多是计算滑动的那种
- 这个sql 在hive中起几个job,为什么是这么几个job?
这个写sql的功夫真是只能平时多积累了,最不济,面试前,就像刷leetcode一样,刷一些sql题,也会有有很大作用。
不过sql题 与leetcode相比,简直不要简单太多
经典题目:
| 1. 写SQL(连表,然后group by) 公司部门表 b 有两个字段 人名name、部门department ;部门每月的成本。 |
|---|
| 2. 现在有大学考试成绩如下表A: id,subject,score 找出每一科都是这一科前30%的学生的id |
| 3.给了两个表,有用户id和日期以及level属性,如何在不用join的前提下计算第二天相对第一天level上升的用户数 |
| 4.连续几天活跃的用户 |
综上:
回答问题的总体原则就是,先大体讲一下技术框架和技术点(这个主要是突出自己知识的广度),然后,再找几个细节和亮点,着重讲一下自己做了哪些事情,自己的有哪些好的想法,怎么去推动实施,效果怎么样(这个主要是突出自己的深入的地方)