springboot常见面试题

 SpringBoot可以同时处理多少请求

Spring Boot 应用能够处理的并发请求数量主要取决于几个关键因素,包括服务器硬件配置、JVM 配置、应用程序设计、以及所使用的 Web 服务器(如 Tomcat、Jetty 或 Undertow)配置。

 SpringBoot为什么要禁止循环依赖

SPringBoot解决循环依赖的方式是三级缓存,但是循环依赖本来就是一种不合理设计,SpringBoot要防止做出这种不合理设计,所有禁止了循环依赖

SpringBoot如何自定义Starter 
  1. 创建基础项目 
  2. 添加依赖
  3. 创建自动配置类
  4. 创建配置属性类
  5. 创建 spring.factories 文件
  6. 打包和发布
  7. 在项目中使用自定义 Starter

SpringBoot的启动原理?
  • 创建SpringApplication实例

    首先,我们需要创建一个SpringApplication实例。SpringApplication类是Spring Boot提供的一个引导类,它用于启动Spring Boot应用程序。

  • 加载配置文件

    SpringApplication会加载application.properties、application.yml等配置文件。这些配置文件包含了Spring Boot应用程序的配置信息,例如数据源配置、消息队列配置等。

  • 扫描启动类所在包及其子包

    SpringApplication会扫描启动类所在包及其子包,并查找带有@SpringBootApplication、@EnableSpringBootApplication、@SpringBootComponentScan等注解的类。这些注解用于指示Spring Boot扫描哪些类并将其加载到Spring IoC容器中。

  • 创建Spring IoC容器

    SpringApplication会根据加载的配置信息和扫描到的类创建Spring IoC容器。Spring IoC容器是一个用来管理和维护Spring Bean的容器。

  • 刷新Spring IoC容器

    SpringApplication会刷新Spring IoC容器。刷新容器会执行以下操作:

    • 解析@Configuration类中的Bean定义
    • 创建Bean实例
    • 将Bean实例注入到其他Bean中
  • 启动Web应用

    如果Spring Boot应用程序是一个Web应用,SpringApplication会启动Web容器并加载Web应用。

  • 运行Spring Boot应用程序

    最后,Spring Boot应用程序会运行起来。

 为什么SpringBoot的jar可以直接运行?

 Spring Boot的jar可以直接运行,主要得益于以下几个因素:

1. 内嵌的Servlet容器

Spring Boot包含了Tomcat、Jetty等Servlet容器的嵌入式版本,因此无需单独部署Servlet容器即可运行Spring Boot应用程序。这使得Spring Boot应用程序更加轻量级、易于部署。

2. Fat Jar 打包方式

Spring Boot应用程序通常使用Fat Jar方式进行打包。Fat Jar将应用程序的类、依赖项以及必要的资源文件都打包到一个Jar文件中,因此无需额外部署依赖项和资源文件。这使得Spring Boot应用程序更加自包含、易于分发。

3. Spring Boot Application类

Spring Boot应用程序的启动入口是Spring Boot Application类,该类使用了@SpringBootApplication注解。@SpringBootApplication注解整合了多个其他注解,例如@ComponentScan、@EnableAutoConfiguration等,简化了Spring Boot应用程序的配置。

4. Spring Boot自动配置

Spring Boot提供了强大的自动配置功能,可以根据应用程序的类路径自动配置必要的Bean。这使得Spring Boot应用程序的配置更加简便,开发人员无需手动配置很多细节。

5. 主类

每个Spring Boot应用程序都必须有一个带有main()方法的主类。main()方法是应用程序的启动入口,Spring Boot会从main()方法中启动应用程序。

总的来说,Spring Boot的jar之所以可以直接运行,得益于其内嵌的Servlet容器、Fat Jar打包方式、Spring Boot Application类、Spring Boot自动配置以及主类等特性。这些特性使得Spring Boot应用程序更加轻量级、易于部署、易于配置和易于使用。

Springboot的自动配置原理? 
  1. 引入@EnableAutoConfiguration: 在Spring Boot应用程序的主配置类(通常是带有@SpringBootApplication注解的类)中,通常会引入@EnableAutoConfiguration注解,该注解负责启动自动配置功能。
  2. @EnableAutoConfiguration引入了@lmport: @EnableAutoConfiguration注解实际上是通过@lmport注解引入D的。这意味着它会导入其他配置类,这些配置类包含了Spring Boot自动配置的逻辑。
  3. 解析@Import注解:当Spring容器启动时,会解析@lmport注解并加载相应的配置。
  4. deferredlmportSelector:通过@Import导入的配置类中可能包含了一个deferredlmportSelector,它的作用是确保Spring Boot的自动配置类在最后加载,以便方便扩展和覆盖。
  5. 读取META-INF/spring.factories文件: Spring Boot通过SPI(Service Provider Interface)机制,读取类路径下的META-INF/spring.factories文件,该文件包含了各种自动配置类的配置。
  6. 过滤出AutoConfigurationClass:从spring.factories文件中,Spring Boot会过滤出所有AutoConfigurationClass类型的类,这些类包含了自动配置的具体实现。
  7. 条件化加载:最后,Spring Boot会根据条件(@ConditionalXXX注解)来排除或包含特定的自动配置类。这些条件会根据应用程序的环境和配置动态生效。

总结起来,Spring Boot的自动配置原理是通过@EnableAutoConfiguration注解引入自动配置逻辑,然后解析@Import注解,加载各种配置类,包括deferredlmportSelector和自动配置类。通过SPI机制读取spring.factories文件,过滤出自动配置类,并根据条件化配置来动态加载这些类,从而实现自动配置的功能和需求自动配置,极大地简化了开发和部署的工作。 

 Spring和SpringBoot的关系和区别?
  1.  Spring 是基础:Spring 是一个开源的轻量级 Java 开发框架,用于构建企业级应用程序。它提供了丰富的功能和模块,包括依赖注入、面向切面编程、事务管理、数据访问、MVC 等等。
  2. Spring Boot 是 Spring 生态的扩展:Spring Boot 是 Spring 生态的一个子项目,旨在简化 Spring 应用程序的开发、部署和管理。它提供了自动配置、起步依赖、内嵌服务器等特性,使得构建独立的、生产级别的 Spring 应用变得更加容易。

 谈谈你对SpringBoot的理解?
  1. 内置Starter和自动配置:Spring Boot提供了丰富的内置Starter,这些Starter是预定义的依赖集合,可以轻松集成各种主流框架和技术。同时,Spring Boot通过自动配置大大减少了繁琐的配置工作,让开发人员可以直接开箱即用。
  2. 零XML配置: Spring Boot采用JavaConfig的方式进行开发,不需要编写大量的XML配置文件。这种零XML的开发方式让开发更加简洁和可读,同时提高了可维护性。
  3. 内置Web容器: Spring Boot内置了多个Web容器,如Tomcat、Jetty、Undertow等,无需外部Web服务器。这意味着您可以将应用程序打包成可执行的JAR文件,直接运行而不需要额外的容器配置,从而简化了部署过程。
  4. 微服务支持: Spring Boot与Spring Cloud结合使用,可以轻松快速构建和部署微服务架构。
  5. 依赖版本管理: Spring Boot帮助开发人员管理了常用第三方依赖的版本,防止出现版本冲突问题。这样,您可以更专注于业务逻辑,而不用担心依赖的版本兼容性。
  6. 监控和管理: Spring Boot自带了监控功能,包括应用程序运行状况监控、内存使用情况、线程池状态、HTTP请求统计等。此外,Spring Boot还提供了优雅关闭应用程序的方式,使得应用程序的管理更加便捷。
  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值