26年2月京东 Java开发工程师 二面
1. Spring Boot启动时,SpringApplication.run()背后经历了哪几个关键步骤?
思路
按启动全流程:准备环境 → 创建上下文 → 刷新容器 → 加载自动配置 → 初始化Bean → 启动完成
回答示例
面试官您好,run方法的核心步骤是这样的:
首先启动计时器,初始化监听器;然后准备运行环境,加载配置文件、激活配置;接着创建Spring应用上下文;再刷新上下文,扫描Bean、加载自动配置类;然后完成Bean的创建、依赖注入、初始化;最后执行Runner,发布启动完成事件,整个项目就启动好了。
2. MySQL的二阶段提交(2PC)如何解决redo log和binlog的一致性问题?
思路
redo log负责崩溃恢复,binlog负责主从同步,2PC保证两者要么都提交,要么都回滚
回答示例
面试官您好,MySQL通过两阶段提交保证redo和binlog一致。
第一阶段InnoDB写入redo log并标记为prepare;第二阶段MySQL写入binlog,完成后再把redo标记为commit。
如果崩溃在prepare,事务回滚;如果崩溃在写完binlog之后,就提交。
这样就能保证redo和binlog永远一致,不会出现主从数据不一致的问题。
3. 一个三层B+树结构,假设每页存储1000个键值,最多能存储多少行数据?
思路
根节点1页 → 二层1000页 → 三层1000*1000页,叶子存数据
回答示例
面试官您好,三层B+树就是根、非叶子、叶子。
根节点1页,指向1000个子节点;每个子节点再指向1000个叶子节点。
叶子节点总数是1000×1000=100万页。
每页存1000行,所以总共能存 10亿行 数据。
4. JVM中哪些区域可能产生OOM?分别对应什么现象?
思路
堆、元空间、虚拟机栈、直接内存四个区域,分别说明OOM表现
回答示例
面试官您好,四个区域会OOM:
第一,堆OOM,就是对象太多回收不了,报错Java heap space;
第二,元空间OOM,动态类太多,报错Metaspace;
第三,栈OOM,递归太深或线程太多,StackOverflow或无法创建线程;
第四,直接内存OOM,NIO用多了,报错Direct buffer memory。
5. Netty的Reactor线程模型有哪几种类型?主从Reactor如何分工?
思路
单Reactor、多Reactor、主从多Reactor;主Reactor负责连接,从Reactor负责读写
回答示例
面试官您好,三种:单Reactor、多Reactor、主从多Reactor。
主从模式里,主Reactor只处理accept连接,接收到连接后分给从Reactor。
从Reactor负责读写、编解码、业务处理,真正实现高并发。
6. 为什么实际项目不直接用NIO而选择Netty?列举三个具体痛
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏

查看11道真题和解析