写点什么

大数据培训:偶然看到大数据面试题,拿出来分享

作者:@零度
  • 2022 年 3 月 09 日
  • 本文字数:6336 字

    阅读完需:约 21 分钟

1

  • 一面

维度建模 如何建 确认主题 确认粒度 确认度量 确认事实表 确认维度表 Hive shuffle 和 spark shuffle 的区别 Spark 为什么快 Spark 任务是怎么执行的 转化率如何计算 缓慢变化维怎么处理 Flink 状态 Flink 窗口 Flink 广播流

题目 两个升序链表 合并后仍然升序

给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符 删除一个字符 替换一个字符 Sql 题 一个 lag 解决的问题



  • 二面面经

各种业务问题,涉及全流程 Ks iv 值 海量用户 用户分群(位图) Hive count(distinct)有几个 reduce 海量数据会有什么问题 Spark 有什么优化 Flink 精确一致怎么保证 Flink 实时 topN Flink 写入 redis 怎么保证精确一致 事实表分类 Spark hive 用过的解决数据倾斜的方案 事实表分类 累积型快照事实表做法

  • 三面

Hdfs 读数据流程 源码级别(要回答出来 rpc) Hdfs 写数据流程 源码级别(要回答出来 rpc) Mapreduce shffule 原理 源码级别(要回答出来锁 多线程 以及缓存写磁盘交换) 数仓为什么要分层 实时比起来离线 要注意啥 特征挖掘大数据培训是怎么做的 怎么管理的 两道题 Sql top1 问题

编程题 给一个字符串检测是否能重新排布字符串让相邻不同 如 bba 能改成 bab 返回 true aaaac 返回 false

2

Spark Streaming 和 Flink 有啥区别?

  • Spark 宽窄依赖定义,列举几个宽依赖算子

  • join 有哪些种类?map-reduce 里面 join 是咋实现的?

  • 多路复用,NIO 这些了解过吗?

  • Redis 有哪些数据结构?zset 底层咋实现的?

  • Redis 用来当分布式锁是咋整的?

  • Zookeeper 知道不?里面用的啥协议?

  • MySQL 有哪些锁?next-key lock 能解决啥问题?

  • Kafka 通过哪些机制实现了高吞吐量?

3

一面、 8.10 45min(小姐姐)

  • Flink Checkpoint:

面试官是说到 checkpoint 作用,然后我就开始拓展 项目中开启了 checkpoint 相关配置给用户使用,说到一些配置信息 之后我自己对 ck 还挺了解的,所以引申到 Chandy-Lamport 论文,这篇论文基本思想就是 marker n 一到进程就保存进程状态,但是进程状态到最终快照状态 n 的差距还需要链路状态来弥补 而 flink 的 ABS 其实简化了里面思想,但是这种简化思想导致的就是 barrier 需要对齐,而 barrier 对齐那么导致 ck 时效性受到影响,反压更加加剧这种情况。所以 flink 1.11 阿里提出了 unalignCheckpoint 机制 ,这个机制具体怎么做看直接 flink 文档吧

说到配置,C-L 论文,ABS,barrier 对齐,对齐缺点,阿里的不对齐

  • 端到端的 exactly-once:

端到端要说三部分,源+数据处理+sink 比如 kafka,源主要是 offset 由 ck 保存到快照里了,所以 offset 交给自己去管控(assign/seek)而非 kafka 数据处理自然就是 ck sink:要么外部支持幂等性,要么外部支持事务,kafka 这种就是事务了,大概原理就是在 barrier n 来时 preCommit 事务 n-1,开启事务 n,在 notifyCheckpointComplete 时 commit 事务 n-1 (后续传个图上来)

  • Ck 恢复,拓扑图修改后如何恢复?

这个其实只要理解快照中各个算子对应的 state(keyedState+OperatorState)都是算子 id--->State 形式,而如果不指定算子 id,那么算子默认 id 和其前后算子有关,所以一旦拓扑图改变,那么必然算子 id 改变,状态对不上,从 ck 或者 savepoint 中恢复失败 不太会,我说指定算子 id

  • stateBackend 用过哪些

直接说 RocksDB 不太会,这里感觉如果知道 hbase,可以说一说

  • Spark stage、task 划分

这个典中典了,反向创建,反向 submitMissingTask(先父 stage 再子 stage)

  • Spark 提交流程

典中典了 算法:礼物的最大价值(dp) 栈序列是否合法(stack 模拟即可)

二 面 8.12 1h

  • 进程线程区别

3 部分吧 资源、调度单元 通信方式 切换代价

  • 进程通信方式、最常用是哪种

管道、消息队列、共享变量、socket、信号量、信号 socket

  • socket 通信涉及哪些方面(很发散感觉答的不好)

3 个部分吧 scoket 使用和 TCP 各个阶段对应 最后可以说到 I/O 多路复用,然后举 Kafka 网络模型的例子,岂不美哉???

  • Java HashMap 和 ConcurrentHashMap 说了很久很久

典中典了 HashMap:桶集合+链表/红黑树 为什么桶集合选择数组啊?为什么使用拉链法解决冲突啊?什么时候 resize() 啊?什么时候树化?恢复?ConcurrentHashMap :1.7/1.8 区别,然后 size 和 get 无法强一致性之类的

  • Kafka 理解 说了很久很久

kafka 这个可以先说为什么使用 kafka:回溯消费啦、上下游解耦啦... 全部怼上去 然后 kafka 总结下来真的就高吞吐、高可靠、高可用三点 高吞吐:生产者异步、压缩、批量发送啦、网络模型 I/O 多路复用高效啦、写入 pageCache 啦、顺序 I/O 啦、baseOffset 形成跳表啦、零拷贝啦、批量拉取啦,一条龙整上,爽歪歪 高可靠:如何做到不重不漏不乱序?典中典了 高可用:Controller HA、PartitionHA(可以说到 ISR、ISR 概念,为什么设定 ISR、如何保证消费一致性啦.............)

我从高吞吐、高可靠、高可用三点回答的,但是说的太多了,面试官到最后要求用三句话说明高可靠

  • 10TB 日志数据类似统计谁访问了哪些域名,访问了多少次,给出解决方案

我只会用 mapreduce 思想,想请教大佬解答下

算法 最大连续子数组之和(具体数组) 设定 start,end 大于 max 时不断更新 end,nums[i]+dp[i-1] < nums[i] 更新 start

三面 8.16 40min

  • 说说 MR(介绍的很不好)

告辞!

  • 主动说 Spark 的 shuffle 过程

三种 shuffleWrite(名字可能有错,源码好久没看了) BypassMergeSortedShuffleWriter SortedBaseShuffleWriter UnsafeShuffleWriter 每一种都有自己使用范围,第一种就是分区数<200(可配置),不排序,不聚合 最后生成两个文件 blockFile+index ,sortedBaseShuffleWriter 解决了第一种过渡消耗内核缓存区缺点,那么最终要按 pid 分组,那只能对 pid 进行排序了,额外的可以选择对 key 进行排序与聚合(如果可以,说说里面的 sizeTrackingAppendOnlyMap,Array[2*cap] 存放了,使用线性探测解决冲突之类的);unsafeshufflewriter 主要涉及到较新的 spark 内存管理有关了,申请 memoryBlock 为 page,然后数据序列化到 page 中,设立一个类似索引的 page,最后溢写磁盘对索引的 page 进行 排序之类的,可以看看网上博文

reduce 只有 BlockStoreShuffleReader 基本流程就是获取 mapStatus,解析获取 blockManagerId,然后从对应 BlockManager 拉取 map 输出的 blockFile 对应 pid 数据,然后边拉取可以边聚合之类的

  • flink 中 ck 超时原因(这 checkpoint 功能似乎字节面试官很看重,感觉得好好准备)

  1. 反压 毕竟包含 barrier 的 event buffer 一直不到 ,subtaskCheckpointCoordinator 做不了 ck,当然超时

  2. 面试官说:算子执行外部请求能否导致超时?当时没想出来,太紧张了【裂开】

后面三面过了后,通过 hr 给面试官转发了消息:MailBoxProcessor 中的线程也就是数据处理(subtask)线程,该线程每次会 pollNext 从 InputChannel 中拿取 buffer,如果是 event buffer(barrier)并且 barrier 对齐了,那么此时执行 performCheckpoint 方法(之后就是保存快照逻辑)

如果直接在某个 userFunction 去请求数据,那么使用的是就是当前数据处理线程(比如请求 MySQL 数据,耗费大量时间),必然影响当前线程处理 barrier,导致 checkpoint 超时 而比如在 open 方法中去初始个线程池比如 RichAsyncFunction#open 方法中初始化线程池然后去查询,便不会影响正常数据处理线程

必然超时呀!!!

当时脑瓜子嗡嗡的,只说了反压,面试官叫我回去试试算子执行外部请求能否导致超时(东扯西扯,扯到同步快照保存,异步快照保存,都没啥用,最后尬住了。。。)

  • flink 和 spark 区别(spark streaming 不太会)

说了 flink 中 subtask 和 spark 中 task 数据处理区别 这个其实就是数据如何流通还有上游主动推到下游还是下游拉取上游之类的?

  • spark 3.0 特性 gg

真不会 xdm

  • 反问

问着问着就又变成面试官问我了【裂开】,数据倾斜怎么处理

  1. 暴力加并行度

  2. 两阶段聚合

  3. join 里面广播变量 + 采样复制(和面试官争论了一波) 可以看一波美团技术, https://tech.meituan.com/2016/05/12/spark-tuning-pro.html 平时怎么看源码的

4

实习一面:

java 八股文,引用类型基本类型的区别,list map hashmap 接口继承关系,linkedlist arraylist hashmap 实现等 大数据部分,hadoop 框架,namenode,联邦 namenode,spark rdd,spark 和 mr 区别,转换算子和 action 算子 sql 题一道,忘了,不难 算法题:返回一个用当前数的各位数字组成的比输入数大的最小的数,比如 1234 返回 1243

实习二面:

spark 有哪些算子,spark 比 mapreduce 的优势,spark shuffle 具体实现,和 mr shuffle 的对比,spark 内存 然后问了很多不相关的科研项目(简历上写的)和一些宏观的问题,比如大数据的核心思想是什么(分治) 算法题:20M 内存 100G 文件 找 top10 的 url

实习三面:

主管面,忘了问了啥,问了一点点大数据框架 spark hive hadoop 啥的 是否看过大数据的三驾马车的论文,讲一讲 大多数都是问的宏观问题和一些比如啥时候能到岗实习多久这种 sql 题忘了,也不难 算法题:一个有序数组找唯一重复的数,需要多种方法,用了双指针 hashmap 位运算等

5

一面,1h15min,5.19

感觉面试官特别好,上来刚聊两句我就十分放松了,然后就开始放飞自我 hhhh 1.先来个自我介绍吧 2.聊了一下之前实习 3.kafka 掌握怎么样,flink 有没有接触过呢 4.先来个 mr 过程吧 5.每个小文件为什么要进行排序,最后合成的大文件为什么进行排序 6.一个 wordcount 案例,具体各个流程,map 怎么做,reduce 怎么做,很细 7.spark 掌握怎么样,我说了解,然后就没问了 8.数仓呢,数据仓库的分层能说一下吗 9.数仓知识还了解什么 10.你刚刚说雪花模型把维度表规范化了,那说一下你了解的范式吧 11.做题吧,两道 sql,两道算法,写出来 11.1 订单表 orders:订单 ID (order_id)、销售 (employee_id)、成交价格 (price) 销售表 employees:销售 ID (employee_id)、销售姓名 (employee_name)、所在区域 (region) 求各个销售的总销售额,要求有销售 ID、姓名、所在区域 11.2 订单表 orders:订单 ID (order_id)、销售 (employee_id)、成交价格 (price) 销售表 employees:销售 ID (employee_id)、销售姓名 (employee_name)、所在区域 (region) 求各个区域销售额最高的销售对应的销售 ID、姓名、所在区域、销售额 11.3 给定一个升序整数数列 L(L 中没有重复元素)和一个整数 n,判定 n 是否在 L 中 11.4 给定一个集合,求这个集合的所有子集组成的集合。可用序列来表示集合。12.反问:您觉得我之后需要加强哪方面的学习 总结:面试的很舒服,聊着聊着状态就特别好,题都 a 了 一面结束,第二天早上就接到电话进行二面,约 5.24

二面,1h,5.24

二面面试官也很好,都有回应 1.自我介绍 2.实习时长 2.说一下 mysql 的索引吧 3.B 树和 B+树的区别,问的很细 4.你是考研还是保研,顺便说了下我简历的问题 5.spark 掌握如何?问的很细,具体忘记了,完全没套路,很发散 6.jvm 掌握如何?7.多线程呢?8.kafka 呢,partition 为什么采用磁盘顺序写?9.500G 的文件,机器 1core 1G,频率 TopN 10.两道算法题 10.1 add(x) delete(x) random() 设计一个数据结构满足三种操作时间复杂度 O(1) 10.2 岛屿问题变形,八个方向 11.反问:您觉得我之后要加强哪方面学习 flink,kafka 要深入学一下,jvm 多线程要补一补,之后会有三面 过了一个多小时,接到电话,直接 hr 面了 hr 面,20min,5.25 大概就是个人优缺点,校园生活之类的,聊天 最后反问是不是 hr 面通过就录取了。没问题的话这周就发 offer 俩小时之后就发 offer 了,太效率了,赞!

6

一面:

根据项目问了架构,涉及到的技术 spark streaming Vs flink watermark 是干什么的,如何使用 数据倾斜如何处理 编程原则 Solid Spark reducebykey 和 groupbykey 的区别 mysql 索引相关,B+树,聚簇索引等,回表 Kafka 原理 高可用 算法:中文数字专阿拉伯数字

二面:

项目:重点讲一个,其中的架构,技术等 spark streaming vs structured steaminng vs flink 差别,flink checkpoint,barrier 等,扩展到谷歌 millwhile, dataflow 等模型 Kafka 高可用如何保证,幂等性如何保证 exactly-once。为什么性能好 其他的记不清了,多是大数据相关 算法:数组中 乘积最大的三个数,有负数,零的情况。排序后处理,复杂度分析

三面:(痛苦来了)

聊了很多现在公司业务问题 场景:三个节点日志,每个节点两千万,有时间和 IP 等信息,如何设计系统查询一个时间 范围内 top10 的 IP,要求快速响应 想的是:通过 flink 或 flume 刷到 mysql,然后 groupby count。但是面试官问的特别详细,比如,flink 如何读数据,什么原理……,怎么写入 mysql,怎么存,一天 6kw,10 天 6 亿数据,分库分表?,怎么连接 mysql……groupby 怎么做,count 怎么做…… 问的相当崩溃,最后如何及时响应用户请求,通过 sql groupby 过后 rollup,卷数据。触及知识盲区了。最后问了一些项目和管理中的问题,个人优势啥的

四面:

离职愿意,个人规划,薪资等

7

看面经里都没有与 Flink 相关的,由于我实习做的主要是用 Flink 开发实时任务,我来补充一下

这部分是问的问题,基本官方文档都有

Flink 的 Exactly Once 语义怎么保证 Flink 的 checkpoint 流程,都是同步 checkpoint 吗?Flink 任务故障重启流程,full restart 和 region restart 区别,举例 region restart Window 的概念 这部分是实习项目里用到的比较有价值的点

Flink 的 operator chain 机制一般会提升性能,但有耗时逻辑时把对应的 operator 拆开来跑,可以提高性能 上游数据不均匀的情况下,采用 rebalance 的连接方式均衡消费 多流 Join 的实现, connect stream + keyBy + CoProcessFunction + state state 和 timerService 的使用,很关键的一点是延时任务是 per key per timestamp 的,这里踩过坑 其它主要问的是 Java 基础和算法题

实现 ImmutableStack 即 pop 和 push 都要生成新的 stack,要求复杂度为 O(1) 二叉树中序和先序遍历数组,求后序遍历数组 实现 36 进制加法 "1z"+"1" = "20"

8

写在前面 大家好,这是一篇超长面经+总结,是对自己上一阶段的梳理,也希望给以后准备找工作/正在找工作的同学们多多少少一点帮助。

基本介绍:普通 985 本+海外渣硕,大二转到 CS 专业,大三项目交流 3+2,19 年 10 月留学毕业,有工程项目,无实习无额外加分项,主 Java 研发岗,非 battmd 级别选手,加一起拿了 4 个 offer,最后准备去星环了。

一,面经集合(按公司划分) 最早是去年的 12 月开始,中间有几个月在研究室抗压没有面,考虑到读者的阅读喜好所以按公司划分面经,强调一点是时间线很重要,前后自己面试能力也有差距,请留意。一般都是远程视频/电话面,每场面经内问题提问顺序不定。一些过于水的面经没有包括在内(比如 8 月前的某为,银行)

最后关于笔试作弊,请不要拿社会什么的做借口,作弊可耻是基本常识,并不会因为形势或人数的因素而改变,扎实的代码能力肯定有用的,现在多吃点苦是值得的。

五,关于面试 有技术只是入场券,拿 offer 还是要一定的运气。当然,很多大牛之所以为大牛是因为平时积累的就足够多,会议论文,acm 竞赛,大厂实习,科研创新成绩等等,非大牛的我们就要做好任人挑选的准备,态度端正到最后一刻,有比较烦人的面试官是常事,保持心态很重要。

面试官:“最后有什么问题要问我的吗?”

我一般是问一些公司业务,和进去之后做什么工作,然后直接问后续流程(我觉得挺好的,既能节省彼此时间也能直到自己一些技能点不足,下次面试加以改进)

六,关于选择 不要给自己太大压力,找工作和考试不一样,要顺着自己的心意在自己可达的范围内找合适的,不是追高(当然有上进心是好事)。努力很重要学会放下和生活也很重要。研发岗位有游戏研发,服务器研发,客户端研发,面向各种语言的研发,大数据研发,网络工程研发,安全研发等等,不同机构和公司业务要多少了解一点再选比较好。比如游戏岗几个经典考题(洗牌算法,搭配算法,动态规划,经典数据结构树,链表的考察),服务器研发针对各部门要求会有变化,感觉操作系统会多一些

文章来源于实时数仓架构

用户头像

@零度

关注

关注尚硅谷,轻松学IT 2021.11.23 加入

还未添加个人简介

评论

发布
暂无评论
大数据培训:偶然看到大数据面试题,拿出来分享_大数据_@零度_InfoQ写作平台