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和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏

全部评论

相关推荐

查看16道真题和解析
点赞 评论 收藏
分享
评论
4
8
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务