🌻最近在准备秋招,又到了面试的环节,我将会对秋招面试的问题进行一系列的复盘,在面试中一点一点成长。对往期内容感兴趣的小伙伴可以参考下面👇:

🌿这次面试的是百度大数据研发工程师的提前批,没有笔试,简历通过后直接面试,具体的业务方向是好像是自动驾驶。
在这里插入图片描述

1. 面试问题

1. 自我介绍

开局就是自我介绍,我有点生疏,语速有点快,等面试次数多了,就好了。

2. 介绍一下简历中的项目

我这里介绍的是一个flink的项目,介绍了这个项目的技术,datagen、kafak、flink、es和mysql,数据源为datagen,然后经过kafka消息队列的处理,输入到flink中进行计算,然后输出到mysql和es中进行一个可视化的过程。(这块我没有加入数据的业务逻辑,比如数据源的数据啥样、消息队列如何处理、flink中业务逻辑是什么、最终得到一个什么结果。)

3. 你的项目中提到了kafka,介绍一下你的项目为什么要用kafka,说一说kafka的作用?

我这里说了一下消息中间件的作用,异步和削峰的特点,不用处理完数据之后马上返回结果,达到一种异步的操作,然后还有就是可以处理某一时间段大量的数据输入,我们可以通过消息中间件进行缓存,需要处理的时候再处理。(我觉得我没说到kafka在流式数据处理中的作用,说的是消息队列本身的特点,我应该结合flink说一说)

4. kafka中的生产者的数据一致性保障是如何实现的?

问到这里,我说了幂等性和事务,但是生产者的幂等性和事务的具体实现是什么样子的,我没说出来(这个过程有点复杂,不记得了)

5. 说一说双流join?

我觉得这个名词很熟悉,但是不记得是啥原理,不会答(面试官应该认为我是实时开发的,所以前面问的都是实时相关的问题,我直接说我是离线开发之后,后面就开始说离线的问题了),后面问了一下别人,双流join就是两个流数据直接进行join,因为数据是不断变化的,可能一条流中的数据还没join上就流出去了,所以需要设定一个类似水位线的时间,来限制多久之内没join上,就直接流出去了。

6. 说一下HDFS中如果一个数据块突然坏掉了,会如何处理?

这里我从namenode和datanode的角度来说的,说客户段将数据划分为123m一块,存储在datanode上,datanode会进行备份,会返回每一份的地址给namenode,如果其中一个块坏掉了,会通知namenode从别的datanode上返回备份数据块。

7. 说一下spark和hadoop的区别?

我从map reduce和rdd算子的计算方式、基于内存和磁盘、shuffle中的分区排序和分区不排序做了一些讲解。

8. 介绍一下你在字节跳动做的项目?

七七八八说了一堆,我没有总结,感觉自己说的很乱。

9. 你在项目中遇到过什么困难吗?你是如何解决的?

这个问题好广泛啊,因为我做的需求都是零零碎碎的,我就从我做的业务需求难度、代码的复杂程度等问题进行说明(我觉得这个问题太范了,下次我应该总结几条)

10. 你遇到离线任务出错的情况是如何处理的?

我主要是提了一下我的处理流程:

  • 首先看DAG图,看上游数据是否都成功到达。
  • 都到达就重跑一遍,然后看看日志。
  • 如果是资源不够,可以加资源,比如shuffle超出限制,资源紧张等等。

11. 你提到多是业务问题,有没有遇到过什么技术问题?

这一块我主要说的就是数据倾斜,把数据倾斜处理的手段说了一遍。

12. 你对sparksql优化有何经验?

这里我回答的很浅,像:比如先where后join、不要count distinct、不要select *、不要outer join(我这一块觉得很像如何避免数据倾斜)

13. 如果一个需求很复杂,你觉得应该如何去解决或者优化这个需求?

和需求方确定好,数据范围、包括字段、数据类型等等、然后自己探查和开发的时候碰见疑问,及时抛出来,一起对齐,巴拉巴拉说了一堆(我不知道这个问题的重点在哪)

14.如果一段sql运行很慢你觉得是什么原因?从关系型数据库的角度说一说,并解释一下应该如何处理。

脑子里的第一反应就是:资源不够、数据倾斜,但是感觉以及回答很多遍了,后面面试官叫我从关系型数据库的角度说一说,我就说,可能是数据量太大,应该分库分表,然后我就不会了,面试官也没追问什么。

15. 写一道sql题,窗口函数没问题吧?(下面题目是我记忆中的题目)

这道题主要是算出一个状态的开始时间和结束时间,只要头和尾
在这里插入图片描述
这道题我没写出来,但是有思路,就是lead函数,取下一个,然后打上标记,再判断,有点紧张,只写了个lead函数,然后把思路说了一下,后面复盘的时候就写出来了,还是比较有难度的,需要lead和lag

# 第一层的思路确实是lead函数,但是后面需要用lag函数,补充上一个状态最早的开始时间
SELECT 	if(release_time>lag(t1,1,null)over(ORDER BY release_time ),lag(t1,1,null)over(ORDER BY release_time ),release_time) min_time
				,t1,now_status
from(
		SELECT 	release_time,
						LEAD(release_time,1,null)over(ORDER BY release_time ) t1 ,
						now_status,
						LEAD(now_status,1,null)over(ORDER BY release_time ) s1,
						if(now_status=LEAD(now_status,1,null)over(ORDER BY release_time ),1,0) tag
		from status_info
)main
where tag=0

结果如下:
在这里插入图片描述

16. 我这边会议室时间快到了,这次面试还是以灵活性问题为主,你有什么想问我的?

这个问题就大家问自己想问的,但是我一般会反问面试官,您在这个岗位3年后,除了薪水能得到提高之外,您觉得这份工作还能给您带来其他的收获吗?

2. 自我总结

这次面试还是有点紧张,而且准备的不是很充分,哈哈哈,回答问题没有明确的范围,想到啥说啥,后面可能需要总结出一类问题的回答。面试官也说了,主要是灵活性的问题。应该是提前批,大家基础都不差,主要是想看大家对工作的态度和处理问题的能力吧。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐