中通面经

中通面经

1、Springboot的启动流程是怎么样的?

image-20240926101402512

image-20240926102408015

new SpringApplication():

在SpringApplication的构造函数中,调用了一个initialize方法,所以他的初始化逻辑直接看这个initialize方法就行了。

image-20240926102425594

1、添加源:将提供的源(通常是配置类)添加到应用的源列表中

2、设置web环境:判断应用是否应该运行在web环境中,这会影响后续的web相关配置

3、加载初始化器:从spring.factories文件中加载所有列出的ApplicationContextInitializer实现,并将他们设置到SpringApplication实例中,以便在应用上下文的初始化阶段执行他们。

4、设置监听器:加载和设置ApplicationListener实例,以便应用能够响应不同的事件。

5、确定主应用类:确定主应用类,这个应用程序类通常是包含public static void main(String[] args)方法的类,是启动整个SpringBoot应用的入口点

这里的第三步,加载初始化器这一步是springboot的自动配置的核心,因为在这一步会从spring.factories文件中加载并实例化指定类型的类。

image-20240926103122051

image-20240926103149188

SpringApplication.run

这个方法是SpringApplication类的核心,用于启动Spring Boot应用。

image-20240926103438112

  • 启动&停止计时器
  • 获取和启动监听器
  • 装配环境参数(application.properties文件中的属性,环境变量、系统属性等)
  • 打印Banner
  • 创建应用上下文(到这一步真的开始启动了,第一步就是先要创建一个Spring的上下文出来,只有有了这个上下文才能进行Bean的加载、配置等工作)
  • 准备上下文
  • 刷新上下文(Spring启动的核心步骤,实例化所有的bean、设置他们之间的依赖关系以及执行其他的初始化任务、创建BeanFactory实例化Bean、web容器的启动)

总体框架

image-20240926104209907
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、反问?

posted @ 2024-09-26 11:15  鲍宪立  阅读(65)  评论(0)    收藏  举报