字节跳动大数据架构面经(超详细答案总结)

【面经】字节大数据开发一二三HR面面经 字节 阅读详情
AI摘要

本文描述了一次关于Flink开发的面试过程,涵盖了面试者的自我介绍,重点介绍了流计算平台的Flink版本升级与Ranger鉴权模块,解释了Ranger如何进行表级别鉴权,以及为什么选择FlinkSQL而非HiveSQL进行鉴权。此外,还详细讨论了FlinkSQL的解析流程,包括operation之后的转化步骤,以及Flink中的join类型。面试中还涉及了Spark3.0的自适应查询优化特性,特别是如何处理join策略。最后,面试者解答了关于checkpoint失败的原因和解决方案,以及LRU算法的原理和实现思路。

字节一面

1 面试官:简单的做个自我介绍吧

面试官,您好!我叫 xxx , xxxx 年 x 月毕业于 xxx 学校,xx 学历,目前就职于 xxx 公司 xxx 部门,职位为:大数据开发工程师,主要从事于 xxx 组件、平台的开发工作。

工作以来,我先后参加了 xxx 项目、xxx 项目以及 xxx 项目,积累了丰富的项目经验,同时,这 x 个项目都得到了领导的一致好评。

我对 Flink 组件有着浓厚的兴趣,工作之余经常钻研技术、例如:Flink 四大基石、Flink 内核应用提交流程、Flink 调度策略等。

入职 x 年,曾荣获优秀员工,以上是我的自我介绍,请面试官提问。

2 面试官:介绍一下你最拿手的项目

好的,那我重点介绍一下 流计算平台。该平台对标 阿里云的实时计算 Flink,是一个 一站式、高性能的大数据计算、分析平台,底层基于 Flink 实现,平台提供多种核心功能,支持多种 source、sink 插件,内置统一的元数据管理,支持 一键提交、应用管理、断点调试、监控告警、Ranger 鉴权等多个核心模块。

我主要负责对该平台的 Flink 版本升级、从原先的 Flink 1.11.0 升级到 1.14.0,同时对平台进行架构重构及代码优化,并参与核心模块应用管理、Ranger 鉴权模块的开发工作。

主要解决了多部门提交 Flink 任务需要大量开关配置问题, 版本升级后的 SQL 语法校验、应用提交报错问题,以及 Ranger 鉴权问题。

3 面试官:ranger 鉴权能介绍一下吗?是对哪方面进行鉴权?

Ranger 鉴权是对表级别的读写进行鉴权。

通过 Flink sql 调用 parser 解析后获得 operation ,然后判断 operation 的表类型是 DDL\DML\DQL 的哪种,通过自研的 flink-ranger 插件获取 operation,从 operation 提取关键信息,组成 ranger 格式的约定进行鉴权,如果鉴权成功,就根据 Flink 原生的执行逻辑,继续往下执行,反之报出鉴权异常。

4 为什么要用 Flink sql 鉴权,而不用 Hive sql 鉴权或者 HDFS 本身的鉴权?

首先该流计算平台底层基于 Flink 实现,在鉴权方面,由于编写的 SQL 在提交过程中需要走 Flink SQL 提交流程,所以在鉴权时直接通过 SQL 解析,校验 拿到 对应的 operation 类型,同时为了和流计算平台更适配,满足更多业务场景需求,才最终选用 Flink SQL 鉴权,其实用 Hive SQL 也是可以鉴权的。

5 面试官:Flink sql operation 之前的解析流程清楚吗?可以详细介绍一下

如下图所示:

在这里插入图片描述
Flink sql 调用 parser() 方法,将 sqlText 转为 Flink 内部的 operation。在这其中主要经历了4大步骤。

(1) 调用 parse() 方法,将 sql 转为 未经校验的 AST 抽象语法树(sqlNode) ,在解析阶段主要用到词法解析和语法解析。

词法解析将 sql 语句转为一组 token,语法解析对 token 进行递归下降语法分析。

(2)调用 validate() 方法,将 AST 抽象语法树转为经过校验的抽象语法树(SqlNode).在校验阶段主要校验 两部分:

  1. 校验表名、字段名、函数名是否正确,

  2. 校验特殊的类型是否正确,如 join 操作、groupby 是否有嵌套等。

(3)调用 rel() 方法,将 抽象语法树 SqlNode 转为 关系代数树 RelNode(关系表达式) 和 RexNode(行表达式) ,在这个步骤中,DDL 不执行 rel 方法,因为 DDL 实际是对元数据的修改,不涉及复杂查询。

(4)调用 convert()方法,将 RelNode 转为 operation ,operation 包含多种类型,但最终都会生成根节点 ModifyOperation。

6 面试官:那在 operation 之后又做了哪些操作?

如下图所示:

在这里插入图片描述
在 Flink 内部的 operation 之后,会调用 translate 方法将 operation 转为 transformation。在这中间也经历了四大步骤:

(1) 调用 translateToRel() 方法 先将 ModifyOperation 转换成 Calcite RelNode 逻辑计划树,再对应转换成 FlinkLogicalRel( RelNode 逻辑计划树);

(2) 调用 optimize() 方法 将 FlinkLogicalRel 优化成 FlinkPhysicalRel。在这中间的优化规则包含 基于规则优化 RBO 和 基于代价优化 CBO 。

(3) 调用 TranslateToExecNodeGraph() 方法 将物理计划转为 execGraph。

(4) 调用 TranslateToPlan() 方法 将 execGraph 转为 transformation。

7 面试官:ROB 里面都了解哪些规则优化?

RBO 规则优化中 包含 谓词下推、Join 优化、列裁剪,分区裁剪等等。

8 面试官:分区裁剪主要解决什么问题?

分区剪裁就是对于分区表或者分区索引来说,优化器可以自动从 from 和 where 中根据分区键直接提取出需要访问的分区,从而避免扫描所有的分区,降低了 IO 请求。

分区剪裁可以细分为静态分区剪裁和动态分区剪裁,其中静态分区剪裁发生在 sql 语句编译阶段,而动态分区剪裁则发生在 sql 语句执行阶段,对于分区键是常量值优化器在会走静态分区剪裁的,如果分区键是变量形式优化器只会走动态分区剪裁。

9 面试官:那在 flink sql 中, join 都包含哪些类型?(引擎层的实现)

在 join 中 包含 Regular join、Interval join、Temporal join、 lookup join

Regular join 包含 left join、right join、 inner join、 full join

Interval join 时间区间 join, 表示两条流之间 一段时间的join.

10 面试官:Spark 3.0 优化特性了解不?

了解 Spark 3.0 AQE 自适应查询优化。

Spark3.0 AQE 自适应查询 里面包含 3 种优化,如 动态合并 shuffle 分区、动态调整 join 策略、动态优化数据倾斜 join 等.

(1) 动态合并 shuffle 分区

在 spark 中,shuffle 前后的分区不同,如果分区数太少,那么每个分区处理的数据大小可能非常大,导致大分区处理时需要落盘,查询效率太低,如果分区过多,导致每个分区处理数据较少,这也会导致 IO 请求增多降低查询效率。

动态合并 shuffle 的含义就是 当 map 端的两个分区 经过 shuffle 操作后,本来产生五个分区的,但因为有两个分区数据过小,所以直接对其进行合并,最终输出 3 个分区。

(2) 动态调整 join 策略。

总共包含 3 种 join 策略:broadcast hash join、hash join、sortmergejoin.

(3) 动态优化数据倾斜 join

11 面试官:假如两张表 join ,但目前达不到 Broadcast hash Join 的要求, Spark3.0
是怎么处理的可以让其达到要求?

在 Spark3.0 AQE 中通过动态调整 join 策略,其中 broadcast hash join 性能是最好的,前提是参加 join 的一张表的数据能够装入内存。由于这个原因,当 Spark 估计参加 join 的表数据量小于广播大小的阈值时,其会将 Join 策略调整为 broadcast hash join。

所以当 两张表 join 时,如果 A 表的数据量大于 广播大小的阈值,此时不能选择 broadcast hash join ,但恰好可以通过 filter 条件 将 A 表无用数据过滤掉,且 B 表不包含 无用数据,这时候 过滤掉后的 A 表数据量小于 广播大小的阈值,此时就可以选择 broadcast hash join。

12 面试官:checkpoint 失败有遇到过吗,什么原因导致的?

有遇到过,checkpoint 失败一般都和反压相结合。导致 checkpoint 失败的原因有两个:

1. 数据流动缓慢,checckpoint 执行时间过长。

我们知道, Flink checkpoint 机制是基于 barrier 的, 在数据处理过程中, barrier 也需要像普通数据一样,在 buffer 中排队,等待被处理。当 buffer 较大或者数据处理较慢时,barrier 需要很久才能够到达算子,触发 checkpoint。尤其是当存在反压时,barrier 需要在 buffer 中流动数个小时,从而导致 checkpoint 执行时间过长,超过了 timeout 还没有完成,从而导致失败。

当算子需要 barrier 对齐时,如果一个输入的 barrier 已经到达,那么该输入的 barrier 后面的数据会被阻塞住,不能被处理,需要等到其他输入 barrier 到达之后,才能继续处理。在 barrier 对齐过程中,其他输入数据处理都要暂停,将严重导致应用实时性,从而让 checkpoint 执行时间过长,超过了 timeout 还没有完成, 导致执行失败。

2. 状态数据过大。

当状态数据过大,会影响每次 checkpoint 的时间,并且在 chackpoint 时 IO 压力也会很大,执行时间过长,导致超时还没有执行成功,从而导致执行失败。

13 面试官:怎么解决的上述问题?

对于数据流动缓慢 解决思路是:

    面经1:字节跳动:22年实习生大数据开发面试(一面凉经) 本人是一个双非硕士在读地研二狗,非科班出身,最近也是参加了大数据开发地面试,已拿到了哔哩哔哩和顺丰的大数据开发岗实习offer,现在把自己的面试经历分拨记录下来,记录了面试各个公司的问题和心经,给正在面试的你做一些适当的参考 字节跳动 第一家面试的公司就是字节跳动 面试时间:21.1.10 面试时长:1h13min 面试软件:飞书,字节自己开发的,在使用中发现了一些bug,面试官记录了下来反馈给了公司 这个面试可谓是把我虐的体无完肤了,从里到外都透漏着我啥也不是 首先进行了自我介绍,第一次面试并不是特别了解 阅读详情

    相关推荐

    字节跳动大数据开发面试题-附答案

    此面试题来自牛客网友分享的字节跳动应届一面,面试时长一小时。 网友情况:985 本硕。 参考答案由本公众号提供。如有错误,欢迎指正! 以下为面试过程中提问,岗位为大数据开发: 自我介绍+项目介绍 为什么用 kafka、sparkstreaming、hbase?有什么替代方案吗? 聊聊你觉得大数据的整个体系? 你看过 hdfs 源码?nn 的高可用说一下 zookeeper 简单介绍一下,为什么要用 zk?zk 的架构?zab? hbase 的...

    yuan_more的博客 4612

    《面经分享》2021字节跳动秋招提前批面经(含详细答案! ! ! )

    文章目录1.一面1.1自我介绍1.2项目经历1.3算法题1.4进程和线程的区别?1.5你了解哪些锁?1.6 死锁的四个必要条件?1.7 volatie与sychronized的对比?1.8 volatie的应用场景?1.9 虚拟内存了解吗?与物理内存的区别?1.10 Java分配内存两种方式?(指针碰撞、空闲列表)1.11 OSI七层协议讲一讲?1.12 应用层协议有哪些?1.13 TCP与UDP区别?1.14 聚簇索引与非聚簇索引对比?1.15 Redis的内存淘汰机制说一说?1.16 Redis的key

    Awwwze的博客 2796

    字节跳动日常实习广告大数据研发实习面经(初面)

    在实习僧上面投递的简历,然后过了大概三天的时间HR发邮件联系我 因为人在悉尼,她在邮件中明确说明了联系不上我,于是便把自己的微信号留在邮箱中 我通过邮箱中的微信和HR小姐姐取得联系,最后把面试时间定在了15号(这算因祸得福吗hhh) 面试开始的时候,是一个很帅的小哥。他逻辑十分清晰,反而是面试人生初体验的我紧张的不行(捂脸) 内容分为三个部分; 1) 自我介绍 2) 让我在简历中的三个项目找一个来介绍 3) 两道题目 a) 一道概率题 b) 一道算法题 1) 自我介绍 当时在自我介绍中简单讲了一下自己为什么

    互联网校招面经 1501

    字节跳动 数据研发实习面经(一面二面)

    上上周周五投了字节跳动的数据研发的岗位,然后上周进行了一面,上周周天进行了二面,目前还没出结果,但是应该是凉了。在这里写点东西留个经验教训。 首先这是我的第一次面试,之前一直在准备竞赛,论文,没打算找实习。等我想找实习的时候已经6月中旬,很晚了。这时候投简历发现大厂主要就字节跳动还在找人了。 我目前比较熟练的就是python,sql,数据挖掘,所以找的也都是数据研发,大数据开发,python后端等工作。 一面: python深拷贝浅拷贝,BFS遍历树,微信红包算法(实现每个人期望相同),sql中le

    所爱隔山海 2706

    嵌入式面经111题答案汇总(含技术答疑)_嵌入式项目源码分享

    正式员工,餐补、报销加班车费、年假、带薪病假、六险一金(全额12%)、年度体检、定期团建、下午茶等等。27 一面,面试八股场景sql算法都ok,反问面评很好29 二面,面试算法sql都ok,自己中间件哪。小米,快手附近,我实习提前结束了,多租了1个月的房,需要转出去,有伙伴最近来附近实习的吗。家在哈尔滨,土木211硕士,手里两个offer,有点纠结怎么选1.哈尔滨锅炉厂,年总包12w,听里师。各位大佬帮忙看看简历,三月已经过完了,春招目前0offer,真的很焦虑 #前端# #金三银四,你有感。

    2301_78234743的博客 1034

    字节跳动大数据研发实习面经:从简历到三面的完整复盘

    大数据研发岗位面试考察的是对分布式计算与存储体系的整体理解,而非孤立的框架记忆。从Hadoop生态到实时计算引擎,Spark的Shuffle机制、Flink的状态管理与Checkpoint原理、Kafka的消息可靠性保障,共同构成了面试官评估候选人工程能力的关键维度。理解这些组件背后的设计思想,不仅有助于回答底层原理问题,更能支撑数据链路的性能优化与故障排查。在真实业务场景中,无论是离线数仓的ETL调优,还是实时报表的秒级延迟链路设计,都依赖对这些技术栈的深度掌握。以字节跳动大数据研发实习面试为切入点,完整

    weixin_34326558的博客 381

    大数据面试汇总+答案

    本文整理了一份大数据领域高频面试题集锦,涵盖Hadoop、Kafka、Hive、Spark、Flink等主流技术框架。从基础配置到核心原理,从性能优化到故障处理,共100个典型问题,包括:HDFS读写流程、Yarn调度机制、Kafka高可用保障、Spark数据倾斜解决方案、Flink精准一次消费实现等。每个问题均提供简明解答,帮助开发者快速掌握大厂面试核心知识点,适合准备互联网大厂大数据岗位面试的求职者参考学习。

    zh_19995的博客 1050

    道岔故障监测系统设计(源码+开题)

    通过实时监控道岔的工作状态,系统能够及时发现异常情况,预防潜在的安全隐患,从而减少事故发生的概率。此外,监测系统还能够为维护人员提供详细的数据支持,帮助他们更准确地判断道岔的磨损程度和故障类型,优化维修计划,延长道岔的使用寿命。随着智能化、自动化技术的发展,道岔故障监测系统的设计与应用也将推动铁路行业的技术进步,为实现智能铁路和未来交通系统的构建奠定基础。因此,开展道岔故障监测系统的设计研究,不仅具有重要的工程实践价值,也有助于推动铁路运输行业向更高水平的发展。

    灵军程序设计 771

    超实用!用ChimeraX对AlphaFold 结果可视化(中): 蛋白结构美化篇

    而一般需要的背景颜色是无色(白色),有三种方法可以更改背景颜色,这里我们介绍两种方法,第三种在下一小节中讲解。如果想选中蛋白链中的某一结构区域或者某些位点,可以用Ctrl+Shift+鼠标左键,或在软件窗口中点击。在这个窗口中可以对蛋白的主链、侧链、表面等颜色进行修改,只用在。,即可在右下角看到我们蛋白的序列信息,在这里面直接用鼠标选择要选择的结构域。就会有更多的颜色供我们选择,如果有特定的色号还可以在这个界面继续选择。后面的颜色(②),就可以选择想要的任何背景颜色(③)。就可以选择软件推荐的常用颜色。

    m0_63153079的博客 5490

    【Unity3D渲染】Unity3d实现Photoshop的各种图层混合模式

    Adobe Photoshop图层混合原理、Unity ShaderLab图层混合实现

    a310989583的专栏 2438

    基于YOLOv8改进的目标检测算法研究及毕设实现全流程指南

    在PyTorch中定义改进后的YOLOv8模型。首先,导入相关的库和模块,然后定义骨干网络、颈部和头部的结构。# 这里定义骨干网络的结构,例如使用改进的CSP结构# 卷积层、批归一化层、激活函数等# 更多的卷积层、批归一化层、激活函数等# 其他层...# 其他层的输出...然后,定义颈部和头部的结构,类似地,将注意力机制和特征增强方法集成到模型中。本毕设以YOLOv8为基础,通过集成注意力机制、应用特征增强技术等方法,改进了目标检测算法。

    m0_64661770的博客 326

    【OpenClaw从入门到精通】第05篇:实战!OpenClaw自动化搞定邮件/日历/文件管理(2026实测避坑版)

    本文聚焦OpenClaw核心实用场景,手把手教你实现邮件、日历、文件管理的全自动化。通过安装三大核心技能,配置IMAP/SMTP邮箱、跨平台日历及文件沙盒权限,结合4个虚拟实战案例,演示从邮件自动摘要、会议冲突预警到下载文件夹分类的完整流程。文中包含2026实测的命令代码、配置步骤、排障方案,所有案例需在测试环境验证,代码未上传GitHub。兼顾新手入门与进阶需求,让OpenClaw从“能聊天”升级为“能干活”,帮你节省80%重复工作时间。

    专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2680

    prplOS组件流程梳理

    本文梳理了prplOS系统中设备信息管理模块(deviceinfo-manager)的工作流程。该模块启动时通过/etc/init.d/deviceinfo-manager调用核心框架amxrt执行,主要功能包括收集设备信息、管理数据模型、初始化子系统等。系统采用ODL文件定义数据模型,通过解析器将配置文件转换为内存中的对象树。流程涉及命令行参数解析、ODL文件加载、后端模块扫描等核心步骤,最终构建出完整的数据模型供上层应用访问。整个架构体现了模块化设计思想,通过动态加载插件实现功能扩展。

    四儿家的小祖宗的博客 1276

    CRC_16---ModBus 计算方法及代码实现

    1、 CRC寄存器初始值为 0xFFFF;即16个字节全为1; 2、 CRC-16 / ModBus的多项式0xA001H (1010 0000 0000 0001B) ; ‘H’表示16进制数,‘B’表示二进制数。 计算步骤为: (1).预置 16 位寄存器为十六进制 0xFFFF(即全为 1) ,称此寄存器为 CRC 寄存器; (2).把第一个 8 位数据与 16 位 CRC 寄存器的低位相异或,把结果放于 CRC 寄存器; (3).检测相异或后的CRC寄存器的最低位,若最低位为1,CRC寄存器

    1万+

    VHDL六层电梯控制器及仿真

    六层电梯电梯 设计要求:设计一个六层电梯控制系统要求有超载、关门中断、提前关门清除报警信电梯外人的上升请求信号,电梯外人的下降请求信号, 电梯外人上升请求信号显示电梯外人下降请求信号显示到达楼层信号 设计思路:输入有clk时钟信号(频率为2Hz) full,deng,quick,clr超载、关门中断、提前关门清除报警c_u1,c_u2,c_u3,c_u4,c_u5电梯外人的上升请求c_d2,c_d3,c_d4,c_d5,c_d6 电梯外人的下降请求 d1,d2,d3,d4,d5,d6电梯内人的...

    QQ_778132974的博客 1712

    pscad IEEE标准系统搭建说明

    pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

    Probability and Statistics - 4th edition

    Probability and Statistics - 4th edition

    怀旧版电脑GBC模拟器

    再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

    jdk-8u144-linux-x64.tar.gz.

    该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

    上一篇: 关于程序员简历造假,只能说太 “勇” 了
    下一篇: 学Python真的赚钱,爬虫一个月收入7000+
    大模型应用场景
    博客等级 码龄5年 7670粉丝 1350原创
    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    个

    红包个数最小为10个

    元

    红包金额最低5元

    当前余额3.43元 前往充值 >
    需支付:10.00元
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付元
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值