推荐阅读文章列表大数据开发面经汇总【持续更新...】我的大数据学习之路大数据开发面试笔记V6.0面经及答案1.有没有做过一些SQL优化,用过布隆过滤器吗 *我们要明白为什么要做SQL优化?当然时因为任务跑的慢,那么哪些算子跑的慢呢?最常见的包括 join、group by、count(distinct)、row_number等等接下来就一一讲一下针对每一种算子有哪些优化的方法论(这里主要说一下count distinct)第一种最常见的方法就是两阶段聚合,即使用两层group by(这时候选取key非常重要,可能会因为选取的key倾斜导致代码执行并没有变快)第二种就是布隆过滤器(bitmap的扩展),详细描述见此文 BitMap在数仓领域的应用2.谈谈你对数据仓库的理解 *定义:数据仓库是一个面向主题的(司机、乘客、订单)、集成的(来自不同数据源的统一数据规范比如男女的取值,命名规范的统一,字段类型的统一)、非易失(一般不会进行删除和修改操作)且随时间变化(并不是数据会变,而是数据随着时间会不断增多)的数据集合作用:主要用于存储历史数据,然后通过分析整理进而提供数据支持和辅助决策。3.为什么要对数仓进行分层第一个是将复杂的需求简单化;我们通过将复杂的问题分解为多个步骤来完成,每一层只处理单一的步骤,比较容易和理解第二个是提高数据的复用性;比如在已经得到最终结果之后,又需要中间层的一些数据,我可以直接查询中间层的数据,不必重新进行计算4.group by和窗口函数的区别窗口函数保留原始数据,会将分组聚合后的结果拼接在原始数据上,最终返回的行数与原始据行数相等。而group by只能得到分组聚合后的数据,最终返回的行数和分组数目相等。窗口函数能够限制对每一组的部分数据进行处理(指定开窗范围),而group by只能对每一组的所有数据进行处理。5.你知道spark的作业执行流程吗 *当一个 Spark 应用被提交时,首先需要为这个应用构建基本的运行环境,即由Driver创建一个SparkContext对象,SparkContext 会向资源管理器注册并申请运行Executor的资源,SparkContext可以看成是应用程序连接集群的通道。资源管理器为Executor分配资源,并启动Executor进程,Executor运行情况将随着心跳发送到资源管理器上。SparkContext根据RDD的依赖关系构建DAG图,并将DAG图提交给 DAG 调度器(DAGScheduler)进行解析,将 DAG 图分解成多个阶段(每个阶段都是一个任务集),并且计算出各个阶段之间的依赖关系,然后把一个个任务集提交到底层的任务调度器(TaskScheduler)进行处理;Executor 向 SparkContext 申请任务,任务调度器将任务分发给 Executor 运行,同时,SparkContext 将应用程序代码发放给 Executor。任务在 Executor 上运行,把执行结果反馈给任务调度器,然后反馈给 DAG 调度器,运行完毕后写入数据并释放所有资源。6.Spark的内存区域是怎么划分的Spark分为堆内内存和堆外内存,堆内内存由JVM统一管理,而堆外内存直接向操作系统进行内存的申请,不受JVM控制堆内内存又分为存储内存、执行内存**(前两种统称为统一内存)、其他内存(前三种统称为可用内存)**和预留内存,存储内存主要存放广播变量和缓存变量,执行内存主要存放shuffle过程的数据,其他内存主要存放RDD的元数据信息,预留内存和其他内存作用相同;预留内存一般为300M,统一内存占比60%,其中存储内存和执行内存的占比时动态变化的堆外内存:减少了垃圾回收的工作,因为垃圾会收会暂停其他的工作7.听说过双亲委派模型吗如果一个类加载器收到了类加载的请求,它首先不会尝试加载整个类,而是把这个请求委派给上一层类加载器去完成,每一层的类加载器都是如此,因此最终会传送到最顶层的启动类加载器上。它会尝试加载这个类,只有当它无法完成这个加载请求时,下一层的类加载器才会去尝试加载,如果所有的类加载器都无法加载,就会抛出ClassNotFoundException8.JVM的垃圾回收算法有哪些 *标记-清除算法:分为标记和清除两个阶段,标记是标记出所有需要回收的对象(也可以反过来,标记出所有存活的对象),标记的时候是基于可达性分析算法实现的;清除就是标记后对所有未被标记的对象进行回收标记-复制算法:复制就是将可用内存按容量分为大小相等的两块,每次只使用其中一块,当这一块的内存用完了,就将还存活的对象复制到另一块内存上,然后再把已使用过的内存空间一次清理掉标记-整理算法:整理就是根据存活对象进行整理,让存活对象都向一端移动,然后直接清除边界以外的内存9.介绍一下JVM的内存结构程序计数器:记录当前线程执行的字节码指令的地址虚拟机栈:在执行方法的时候,JVM会同步创建一个栈帧,用于存储局部变量表、操作数栈、方法出口等信息,如果方法执行完毕,就会将该栈帧从虚拟机栈中出栈本地方法栈:和虚拟栈原理基本一样,区别是为native方法服务的堆:用来存放创建的对象元空间:用来存储被加载的类信息、常量、静态变量以及常量池等数据10.Spark3.0新特性AQE有了解过吗 *AQE又叫自适应查询执行(Adaptive Query Execution),解决了最初生成的查询计划不是最优的问题,在Spark查询过程中不断收集统计数据,然后通过算法模型来优化执行计划。AQE主要由三个核心功能:动态合并Shuffle分区、动态切换Join策略、动态优化数据倾斜
点赞 16
评论 0
全部评论

相关推荐

真tmd的恶心,1.面试开始先说我讲简历讲得不好,要怎样讲怎样讲,先讲背景,再讲技术,然后再讲提升多少多少,一顿说教。2.接着讲项目,我先把背景讲完,开始讲重点,面试官立即打断说讲一下重点,无语。3.接着聊到了项目的对比学习的正样本采样,说我正样本采样是错的,我解释了十几分钟,还是说我错的,我在上一家实习用这个方法能work,并经过市场的检验,并且是顶会论文的复现,再怎么不对也不可能是错的。4.面试官,说都没说面试结束就退出会议,把面试者晾在会议里面,丝毫不尊重面试者难受的点:1.一开始是讲得不好是欣然接受的,毕竟是学习。2.我按照面试官的要求,先讲背景,再讲技术。当我讲完背景再讲技术的时候(甚至已经开始蹦出了几个技术名词),凭什么打断我说讲重点,是不能听出人家重点开始了?这也能理解,每个人都有犯错,我也没放心上。3.我自己做过的项目,我了解得肯定比他多,他这样贬低我做过的项目,说我的工作是错误的,作为一个技术人员,我是完全不能接受的,因此我就和他解释,但无论怎么解释都说我错。凭什么,作为面试官自己不了解相关技术,别人用这个方式work,凭什么还认为这个方法是错的,不接受面试者的解释。4.这个无可厚非,作为面试官,不打招呼就退出会议,把面试者晾着,本身就是有问题。综上所述,我现在不觉得第一第二点也是我的问题,面试官有很大的问题,就是专门恶心人的,总结面试官说教,不尊重面试者,打击面试者,不接受好的面试者,技术一般的守旧固执分子。有这种人部门有这种人怎么发展啊。最后去查了一下,岗位关闭了。也有可能是招到人了来恶心人的,但是也很cs
牛客20646354...:招黑奴啊,算法工程师一天200?
点赞 评论 收藏
分享
渴望wlb的牛油果很...:直说卡第一学历不就行了 非得拐弯抹角
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务