中通面经
1、Springboot的启动流程是怎么样的?
new SpringApplication():
在SpringApplication的构造函数中,调用了一个initialize方法,所以他的初始化逻辑直接看这个initialize方法就行了。
1、添加源:将提供的源(通常是配置类)添加到应用的源列表中
2、设置web环境:判断应用是否应该运行在web环境中,这会影响后续的web相关配置
3、加载初始化器:从spring.factories文件中加载所有列出的ApplicationContextInitializer实现,并将他们设置到SpringApplication实例中,以便在应用上下文的初始化阶段执行他们。
4、设置监听器:加载和设置ApplicationListener实例,以便应用能够响应不同的事件。
5、确定主应用类:确定主应用类,这个应用程序类通常是包含public static void main(String[] args)方法的类,是启动整个SpringBoot应用的入口点
这里的第三步,加载初始化器这一步是springboot的自动配置的核心,因为在这一步会从spring.factories文件中加载并实例化指定类型的类。
SpringApplication.run
这个方法是SpringApplication类的核心,用于启动Spring Boot应用。
- 启动&停止计时器
- 获取和启动监听器
- 装配环境参数(application.properties文件中的属性,环境变量、系统属性等)
- 打印Banner
- 创建应用上下文(到这一步真的开始启动了,第一步就是先要创建一个Spring的上下文出来,只有有了这个上下文才能进行Bean的加载、配置等工作)
- 准备上下文
- 刷新上下文(Spring启动的核心步骤,实例化所有的bean、设置他们之间的依赖关系以及执行其他的初始化任务、创建BeanFactory实例化Bean、web容器的启动)
总体框架
2、项目中哪里使用到了线程池?
3、讲一下线程池的执行原理?
4、线程池参数的设置是如何设置的?
5、MySQL的隔离级别?
6、AOP?切点,表达式,自己怎么手写一个AOP?(X)
7、redis是如何删除数据的?
8、redis内存淘汰机制?
9、redis的持久化机制?
10、redis底层数据结构?(SDS+)
11、redis跳表?
12、双重判定锁?
13、用的lock?为什么不用tryLock?
14、redis的分布式锁的底层实现原理?(看门狗机制说一下)
15、你在场景中要不要设置这个等待时间?
16、超卖问题的解决方案?
17、超卖问题怎么保证一定不会出现问题?
18、开发工具?mybatisplus ? mybatis
19、不同MQ的区别,项目中用的哪个?rocketMQ和rabbitMQ的区别?为什么rocketMQ的吞吐量高与rabbitMQ?(rocketMQ基于集群的方式,rabbitMQ是基于单机)
20、缓存场景一致性?
21、用过哪些大模型吗?写代码的时候?
22、反问?