Java实习模拟面试|字节跳动后端日常实习三面面经:千万级数据导出、CDC同步、OOM排查与高并发设计全解析

Java实习模拟面试|字节跳动后端日常实习三面面经:千万级数据导出、CDC同步、OOM排查与高并发设计全解析

关键词:字节跳动后端实习|Java高频八股|千万级数据导出|CDC数据同步|OOM排查|线程池|HashMap|双重检查锁|CSDN面经


在准备字节跳动后端日常实习的过程中,我系统性地模拟了一场完整的三轮技术面试。本文以高度还原真实对话的方式,采用“面试官提问 + 候选人口头回答 + 连环追问”的形式,覆盖从基础八股到高并发系统设计的全栈能力考察。无论你是备战字节、腾讯还是其他大厂,这篇面经都能为你提供清晰的复习路径和深度思考方向。


一面(60分钟)|系统设计 + 场景题 + 基础编码

1. 自我介绍

面试官提问:先做个简单的自我介绍吧,重点说说你的技术栈和项目经历。


好的!我是XX大学计算机专业的大三学生,主攻Java后端开发,熟悉Spring Boot、MyBatis、MySQL、Redis等主流技术栈。最近在实习中参与了一个基于Agent架构的数据处理平台,负责ETL流程优化和CDC(Change Data Capture)同步模块的设计。此外,我也对大模型应用中的RAG、MCP等技术有一定实践。


2. 实习拷打

面试官提问:你在实习中提到做了ETL优化,具体遇到了什么问题?怎么解决的?


我们最初用单线程全量拉取+批量写入OSS,当数据量达到千万级时,内存溢出且耗时超过4小时。后来我们引入了分页游标 + 并行分片 + 断点续传机制,并通过MD5校验保证一致性,最终将导出时间压缩到30分钟内,内存稳定在512MB以下。

追问:那你怎么保证分片之间的顺序性和幂等性?

  • 有序性:我们按主键ID范围切分(如 [0, 100w), [100w, 200w)),每个分片内部有序,全局通过分片ID排序合并。
  • 幂等性:每个任务生成唯一task_id,OSS路径包含该ID;若重试,先检查OSS是否存在同名文件,存在则跳过。

3. 场景题:千万级数据导出至OSS

面试官提问:假设你只能用普通数据库(比如MySQL)和Java原生API,设计一个高效、可靠、可续传的千万级报表导出流程。要考虑内存、并发、一致性、差错检验等。


我会从分治 + 流式处理 + 异步上传三个维度设计:

  1. 数据切分

    • 使用主键ID范围分片(避免OFFSET性能衰减),每片10万条。
    • 记录每个分片的起止ID和状态(pending/running/success/fail)到元数据表。
  2. 并行处理

    • 使用CompletableFuture或自定义线程池并发处理多个分片。
    • 控制并发数(如8个线程),避免DB连接打满。
  3. 内存控制

    • 每个分片使用ResultSet流式读取(setFetchSize(Integer.MIN_VALUE)),逐行处理,不全量加载到内存。
    • 写入本地临时文件(或直接流式上传OSS),避免OOM。
  4. 续传 & 幂等

    • 元数据表记录每个分片状态,失败可重试。
    • OSS文件名包含分片ID和时间戳,避免覆盖。
  5. 差错检验

    • 每个分片计算行数 + MD5,上传后校验。
    • 最终合并时验证总行数是否匹配。
  6. 最终一致性

    • 导出前加全局快照(如基于binlog位点或事务快照),确保数据一致性。

追问:如果中途DB主从切换,会不会导致数据重复或丢失?


确实有风险。所以我们在导出前会锁定一个只读副本,或者基于GTID/binlog位点做快照隔离,确保整个导出过程看到的是同一时刻的数据视图。


4. CDC数据同步系统设计(MQ + 单一来源 → 多下游)

面试官提问:用CDC思想设计一个同步系统,一个上游MySQL同步到多个下游系统(如ES、Kafka、另一个DB),如何保证可靠性和顺序?


整体架构如下:

  1. 采集层:使用Debezium监听MySQL binlog,将变更事件发到统一Topic(如cdc.mysql.user)。
  2. 分发层:消费者组订阅该Topic,根据下游需求做路由转发
    • 转发到ES:构建文档并批量写入。
    • 转发到Kafka:原样投递或格式转换。
    • 转发到目标DB:构造SQL执行。
  3. 可靠性保障
    • At-least-once:MQ开启ACK,消费成功才提交offset。
    • 幂等写入:下游系统需支持基于主键的upsert。
    • 顺序性:同一个主键的变更必须由同一个分区处理(Kafka按主键hash分区)。
  4. 监控告警:延迟监控、失败重试队列、死信队列。

追问:如果某个下游挂了,会影响其他下游吗?


不会。因为每个下游是独立的消费者组,消费进度各自维护。一个下游积压不会阻塞其他消费者。


5–7. 提示词工程、Agent编排、MCP/RAG、质量评估

面试官提问:你在Agent项目中如何做任务编排?MCP和RAG是什么?怎么评估输出质量?

  • Agent编排:我们用状态机 + 工具调用模式。例如用户问“查订单”,Agent先调用“订单查询工具”,再根据结果决定是否调用“物流查询”。
  • MCP(Model Context Protocol):是一种标准化LLM与外部工具通信的协议,类似Function Calling的扩展。
  • RAG:检索增强生成,先从向量库召回相关文档,再注入Prompt让LLM生成答案。
  • 质量评估:我们采用三层指标:
    1. 准确性:人工抽样 + 规则校验(如订单号是否存在)。
    2. 相关性:BLEU/ROUGE + 向量相似度。
    3. 稳定性:错误率、超时率、fallback触发率。

8. SQL事务题(三道)

面试官提问:分析以下事务执行结果(略,典型RC/RR级别下的幻读、不可重复读问题)


(此处根据具体题目分析,核心是理解隔离级别 + 锁机制

  • READ COMMITTED下,两次SELECT可能看到不同结果(不可重复读)。
  • REPEATABLE READ下,InnoDB通过MVCC + Gap Lock避免幻读(但仅限于当前读)。

9. 反问环节

:团队目前主要的技术挑战是什么?实习生能参与核心系统吗?


二面(80分钟)|JVM + 并发 + 项目深挖

1–3. 自我介绍 + 类加载 + 学习方法

面试官提问:说说类加载过程?双亲委派解决了什么问题?


类加载分五步:加载 → 验证 → 准备 → 解析 → 初始化。
双亲委派:子类加载器先委托父加载器尝试加载,避免核心类被篡改(如自定义java.lang.String)。
打破双亲委派:SPI机制(如JDBC)用线程上下文类加载器加载第三方驱动。


4–5. OOM与内存泄漏排查

面试官提问:线上发生OOM,你怎么排查?


四步法:

  1. jstat -gc <pid>看GC频率和堆使用。
  2. jmap -dump:format=b,file=heap.hprof <pid>导出堆快照。
  3. 用MAT分析:看Dominator Tree,找大对象异常引用链
  4. 常见原因:缓存未清理、静态集合不断add、ThreadLocal未remove。

追问:实习中有遇到过吗?


有!一次是MyBatis的ResultHandler没关闭,导致ResultSet持有Connection不释放,最终连接池耗尽。通过Arthas trace定位到SQL执行路径,修复后问题消失。


6–7. 反射使用与八股

面试官提问:项目中哪里用了反射?反射慢在哪?

  • 使用场景:MyBatis参数绑定、Spring Bean注入、动态代理。
  • 性能瓶颈
    • 安全检查(可setAccessible(true)绕过)
    • 无法内联优化
    • 方法查找开销(可通过MethodHandle或缓存Method对象优化)

8. 项目深挖(30分钟!)

面试官针对Agent项目连续追问:架构图、失败重试、超时控制、日志追踪……
建议:务必对自己写的每一行代码负责,能讲清为什么这么设计


9–10. 线程池 + 可重入锁

面试官提问:线程池7大参数?corePoolSize=0会怎样?

  • 7大参数:core/max pool size, workQueue, keepAliveTime, threadFactory, handler。
  • core=0且队列无界,任务永远进队列,永远不会创建线程

可重入锁:ReentrantLock基于AQS,state记录重入次数,owner记录持有线程。支持公平/非公平。


11–14. 线上问题排查 + 拉链表 + CDC原理

  • 拉链表:用于缓慢变化维(SCD Type2),通过start_date/end_date记录历史版本。
  • CDC底层:基于数据库日志(binlog/redolog),解析为结构化事件,本质是日志即数据源

15. 编码题

  • 阻塞队列:用ReentrantLock + Condition实现put/take
  • 最小栈:辅助栈记录当前最小值。
// 最小栈classMinStack{Stack<Integer>data=newStack<>();Stack<Integer>min=newStack<>();publicvoidpush(intx){data.push(x);if(min.isEmpty()||x<=min.peek())min.push(x);}publicvoidpop(){if(data.pop().equals(min.peek()))min.pop();}publicintgetMin(){returnmin.peek();}}

三面(60分钟)|综合能力 + 架构思维

1–4. HR软性问题 + 技术成长

  • 实习最大收获:从“能跑就行”到“高可用、可观测、可运维”的工程思维转变。
  • 学习新技术:官方文档 → 源码 → 动手造轮子 → 分享总结。

5. ADBPG特性

面试官提问:ADB for PostgreSQL 和普通PG有什么区别?


ADB PG是阿里云的MPP分布式数据库

  • 架构:Master节点协调 + Segment节点存储计算。
  • 优势:水平扩展、向量化执行、列存(可选)、兼容PG语法。
  • 适用场景:OLAP、大数据分析。

6. MyBatis拦截SQL

如何拦截SQL?


实现Interceptor接口,拦截Executor.query()方法,从MappedStatement中提取SQL。

@Intercepts(@Signature(type=Executor.class,method="query",...))publicObjectintercept(Invocationinvocation){MappedStatementms=(MappedStatement)invocation.getArgs()[0];BoundSqlboundSql=ms.getBoundSql(args[1]);Stringsql=boundSql.getSql();// 日志/修改}

7–10. 框架扩展 + ETL校验 + 灰度发布

  • 框架扩展:插件化设计(SPI)、配置热加载、Metrics埋点。
  • ETL差错检验:行数校验、Checksum、业务规则校验(如金额非负)。
  • 灰度发布:按用户ID百分比、标签路由,配合影子流量回滚机制

11–18. 集合、索引、Redis、手撕代码

  • HashMap:数组+链表/红黑树,扰动函数,扩容2倍,线程不安全。
  • MySQL索引:B+树(InnoDB)、Hash(Memory),聚簇 vs 非聚簇。
  • Redis数据结构
    • String:SDS
    • List:ziplist / quicklist
    • Hash:ziplist / hashtable
    • Set:intset / hashtable
    • ZSet:ziplist / skiplist

手撕:双重检查锁(DCL)单例

publicclassSingleton{privatestaticvolatileSingletoninstance;publicstaticSingletongetInstance(){if(instance==null){synchronized(Singleton.class){if(instance==null){instance=newSingleton();}}}returninstance;}}

关键点volatile禁止指令重排序!否则可能返回未初始化完成的对象。


总结

字节后端实习面试极度重视工程落地能力

  • 一面考系统设计 + 场景题
  • 二面深挖JVM/并发/项目细节
  • 三面综合架构思维 + 编码规范 + 软素质

建议复习路线

  1. 刷透《Java并发编程实战》《高性能MySQL》
  2. 动手实现:线程池、阻塞队列、LRU、分布式ID
  3. 模拟场景题:导出、同步、限流、降级

最后提醒:不要背答案!用工程师的语言解释技术选型背后的权衡(trade-off),这才是字节想要的人。


欢迎点赞收藏!更多大厂面经持续更新中~
关注我,带你从0到Offer!💪

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1159521.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机深度学习毕设实战-基于python-CNN机器学习训练识别蔬菜是否新鲜基于python-CNN训练识别蔬菜是否新鲜

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Log4j实现全局日志traceId详解

一、为何需要全局 traceId 在分布式系统中&#xff0c;一个请求可能会经过多个服务、多个线程。在日志中引入全局 traceId&#xff0c;可以让你轻松地追踪某一次请求全链路的日志&#xff0c;极大提升排障和分析效率。 二、实现方案总览 生成 traceId&#xff1a;每次请求生成…

多线程与并发-知识总结1

一、run()和start()方法的区别&#xff1f;1、核心区别&#xff1a;是否创建了线程1.1、start()方法&#xff1a;用于创建并启动一个新的独立子线程调用start()时&#xff0c;JVM 会为该 Thread 实例分配新的线程资源&#xff08;脱离当前调用线程&#xff09;&#xff0c;将线…

Java实习模拟面试|字节跳动业务中台后端校招一面面经:Kafka vs RabbitMQ、死锁避免、TCP握手与链表翻转深度解析

Java实习模拟面试&#xff5c;字节跳动业务中台后端校招一面面经&#xff1a;Kafka vs RabbitMQ、死锁避免、TCP握手与链表翻转深度解析关键词&#xff1a;字节跳动校招&#xff5c;业务中台后端&#xff5c;Kafka vs MQ&#xff5c;死锁条件&#xff5c;线程池实现&#xff5c…

Java实习模拟面试|上海禾赛科技后端实习一面面经:高并发数据去重、事务与MQ一致性、反射争议与缓存选型深度解析

Java实习模拟面试&#xff5c;上海禾赛科技后端实习一面面经&#xff1a;高并发数据去重、事务与MQ一致性、反射争议与缓存选型深度解析关键词&#xff1a;禾赛科技后端实习&#xff5c;Java高并发&#xff5c;消息可靠性&#xff5c;事务传播行为&#xff5c;Redis vs 本地缓存…

深度学习毕设选题推荐:基于python-CNN训练识别蔬菜是否新鲜基于机器学习python-CNN训练识别蔬菜是否新鲜

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Java实习模拟面试|字节跳动TTS后端校招二面面经:WaitGroup性能优化、分布式锁实现、线程安全LRU与Optional实战深度解析

Java实习模拟面试&#xff5c;字节跳动TTS后端校招二面面经&#xff1a;WaitGroup性能优化、分布式锁实现、线程安全LRU与Optional实战深度解析关键词&#xff1a;字节跳动TTS后端&#xff5c;WaitGroup原理&#xff5c;分布式锁&#xff5c;SETNX&#xff5c;线程安全LRU&…

9个降aigc工具推荐,本科生高效避坑指南

9个降aigc工具推荐&#xff0c;本科生高效避坑指南 AI降重工具&#xff1a;高效避坑的得力助手 在当今学术写作中&#xff0c;越来越多的本科生开始接触到AI辅助写作工具&#xff0c;但随之而来的AIGC率过高、查重率超标等问题也让人头疼。如何在保持原文语义和逻辑的基础上&am…

大模型黑箱揭秘:从分词到输出的全流程解析(程序员必看)

本文详细解析了大语言模型从文本输入到语言输出的完整工作流程&#xff0c;包括分词与嵌入、Transformer架构与自注意力机制、位置编码等核心技术。文章以通俗易懂的方式解释了文本如何转换为矩阵形式&#xff0c;模型如何理解上下文关系&#xff0c;以及如何将高维向量"翻…

【课程设计/毕业设计】基于python-CNN训练识别蔬菜是否新鲜基于python-CNN深度学习训练识别蔬菜是否新鲜

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

收藏!无GPU也能做的大模型项目,3个零算力落地方案+完整学习路线,简历不再空白

文章介绍3个无需GPU算力即可落地的大模型项目&#xff1a;智能客服机器人(DifyRAG)、多Agent论文精读助手(LangChain免费API)和个性化文案生成系统(PromptOllama)。这些项目通过Prompt工程和开源工具实现&#xff0c;重点在于解决实际问题的能力而非单纯堆算力。同时提供AI大模…

深度学习计算机毕设之基于python-CNN卷神经网络训练识别蔬菜是否新鲜基于python-CNN训练识别蔬菜是否新鲜

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

收藏!面试必问:对称量化与非对称量化核心区别+实战选型指南

面试官&#xff1a;“你对量化&#xff08;Quantization&#xff09;有深入了解吗&#xff1f;能不能详细说说非对称量化和对称量化的核心区别&#xff0c;以及实际应用中的选择逻辑&#xff1f;” 这道题堪称算法岗、部署岗面试的“高频送分题”——既考察你对深度学习底层原理…

深度学习毕设项目:基于python的识别蔬菜是否新鲜基于python-CNN训练识别蔬菜是否新鲜

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Qwen2.5-VL大模型深度解析:从视觉感知到视频理解的全方位技术指南

Qwen2.5-VL模型通过原生动态分辨率ViT、Window Attention和高效Patch Merger技术解决了高分辨率输入的计算不可扩展性问题&#xff1b;采用绝对坐标建模和Multimodal RoPE实现了真实尺度感知和绝对时间对齐&#xff1b;三阶段预训练范式逐步构建视觉表示、跨模态对齐和长上下文…

大模型新人逆袭指南:从零到Offer的实战路径,项目经验+面试迭代双轮驱动

文章面向大模型领域新人&#xff0c;提出两大入行建议&#xff1a;一是先完成2-3个完整项目作为敲门砖&#xff0c;完成度比完美度更重要&#xff1b;二是通过"随机梯度下降"方式学习八股文&#xff0c;即面试-反馈-学习的循环迭代提升能力。作者强调行动的重要性&am…

Node.js用spawn流式读取子进程输出

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Node.js流式处理子进程输出&#xff1a;构建高效实时数据管道的终极指南目录Node.js流式处理子进程输出&#xff1a;构建高效实时…

AI产品经理与普通产品经理的区别:不止懂算法,更要培养AI思维_大模型产品经理成长路线,AI大模型产品经理从零基础到进阶

文章阐述了AI产品经理的核心竞争力在于AI思维而非仅懂算法&#xff0c;详细介绍了人工智能产业链三层结构(基础层、技术层、应用层)&#xff0c;以及AI产品经理的四象限分类(突破型、创新型、应用型、普及型)。强调AI产品设计需前端简单后端复杂&#xff0c;技术成熟度和业务渗…

《创业之路》-853- 商业模式创新、技术创新的比较?

商业模式创新与技术创新是企业实现竞争优势和价值增长的两大核心驱动力。它们常常并行发生&#xff0c;有时相互促进&#xff0c;但本质不同、路径各异。理解两者的异同、适用场景与协同关系&#xff0c;对企业家、投资者和管理者至关重要。一、基本定义概念定义商业模式创新&a…

计算机深度学习毕设实战-基于卷积神经网络识别花卉基于python_CNN卷积神经网络识别花卉

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…