当前位置:   article > 正文

Java面试八股文(2023最新)--SpringBoot面试题_八股文 spring boot面试题

八股文 spring boot面试题

目录

1. 什么是SpringBoot?有什么优点?

2. 什么是约定大于配置?

3.SpringBoot Starter实现热部署的方式?

4. 什么是yaml?有什么优势?

5. SpringBoot项目启动时做了些什么(启动流程)?

6. SpringBoot启动时自动配置的原理?

7. Spring Boot中的starter是什么?有什么优点?

8. SpringBoot核心配置文件是什么?bootstrap.properties和application.properties区别?

9. Spring Boot项目打的jar包和普通的jar有什么区别?

10. SpringBoot如何实现定时任务?

11. SpringBoot性能如何优化? 

12. 如何实现SpringBoot项目的安全性?

13. 比较一下SpringSecurity和Shiro的优缺点?

14. SpringBoot是否可以使用XML配置?

15. SpringBoot事务管理的基本流程

16. SpringBoot如何定义多套不同环境配置?

17. 什么是Swagger


1. 什么是SpringBoot?有什么优点?

SpringBoot是一个基于Spring框架的快速开发框架,它采用约定大于配置,自动装配的方式,可以快速地创建独立的,生产级别的,基于Spring的应用程序。

相比于传统的Spring框架,SpringBoot更加简单易用,它将大量常见的配置和依赖项内置到框架,开发人员可以快速搭建一个完整的应用程序,无需手动配置复杂的XML文件或Java代码。SpringBoot还支持集成其他流行的框架和技术等。

2. 什么是约定大于配置?

约定大于配置是一种软件开发理念,它的核心思想是:通过建立约定,默认值和惯例,减少编程中需要做出的决策,提高开发效率和生产力。

例如在SpringBoot种,默认按照一定的命名规则查找数据库连接,bean定义等相关内容,这样开发人员就可以省略大量的配置和代码,直接使用默认的约定和规则来完成开发任务,从而提高开发效率和代码质量。

总的来说,约定大于配置是一种软件开发的优化策略,通过建立约定和默认值,帮助开发人员快速构建和维护高质量的应用程序,减少出错的可能性,提高开发效率和生产力。

3.SpringBoot Starter实现热部署的方式?

  • 热部署就是可以不用重新运行SpringBoot项目可以实现操作后台代码自动更新到运行的项目中
  • 方式:
    • SpringLoaded
    • Spring-Boot-devtools
    • 模板热部署
    • Jrebel

4. 什么是yaml?有什么优势?

YAML是一种轻量级的数据序列化格式,采用缩进的方式表示复杂的数据结构,易读,易写,易扩展。被广泛应用于配置文件,数据交换和其他场景。

5. SpringBoot项目启动时做了些什么(启动流程)?

  1. 加载SpringBoot配置文件:SpringBoot会先加载内部的spring-boot-autoconfiguration和spring-boot-starter等Starter,然后再加载用户自定义的配置文件application.properties或application.yml,并将其中的配置项加载到Spring环境中。
  2. 自动配置IOC容器:SpringBoot根据应用程序所引入的依赖和上下文的配置,自动配置SpringIOC容器。它会自动扫描所有带有@Component以及派生注解的bean,并添加相应的依赖关系,从而构建出整个应用程序的bean容器
  3. 扫描处理注解:SpringBoot根据配置文件中的@ComponentScan注解指定的扫描路径,扫描所有带有注解的类,并进行相关的处理。例如它会扫描加了@RestController,@RequestMapping,@Service等注解的类,并将其注册到SpringIOc容器,从而构建整个应用程序的bean。
  4. 开启Web服务器:如果应用程序是Web应用程序,SpringBoot会自动开启内嵌的Tomcat,等Web服务器,并将应用程序注册到服务器中,使其可以响应请求。
  5. 运行CommandLineRunner和ApplicationRunner:如果应用程序中有实现了CommandLineRunner或者ApplicationRunner接口的bean,SpringBoot会在容器启动完成后自动调他们的run()方法。
  6. 注册ServletContextListener:Spring Boot会自动注册SpringBootServletInitializer,ServletContextListener和Filter等,以保证程序正常运行。

6. SpringBoot启动时自动配置的原理?

  1. SpringBoot 启动时会从类路径下的 META-INF/spring.factories 中获取 EnableAutoConfiguration 指定的值。

  2. Spring Boot 将这些值作为自动配置类导入容器,并使它们生效,帮我们进行自动配置工作。

  3. 整个 J2EE 的整体解决方案和自动配置都在 spring-boot-autoconfigure 的 jar 包中。

  4. 它会给容器中导入非常多的自动配置类(xxxAutoConfiguration),就是给容器中导入这个场景需要的所有组件,并配置好这些组件。

  5. 有了自动配置类,就免去了我们手动编写配置注入功能组件等的工作,可以大大提高开发的效率和降低出错的风险。同时,这些自动配置类还提供了很多默认值,可以充分利用 Spring Boot 的约定大于配置的特点,让我们的开发更加简单和高效。

注解@EnableAutoConfiguration,@Configuration,@ConditionalOnClass就是自动装配的核心。

@EnableAutoConfiguration给容器导入META-INF/spring-factories里定义的自动配置类。

每个自动配置类结合对应的xxxProperties.java读取配置文件进行自动配置功能。

7. Spring Boot中的starter是什么?有什么优点?

在SpringBoot种,Starter是一种Maven依赖项集合,可以方便地引入一组相关的依赖项来支持某种特定的功能。

SpringBootStarter命名规则通常是spring-boot-starter-*,其中 * 表示某种包括技术,模块或服务等

例如:spring-boot-starter-web就是一个web应用程序所需要的基本依赖项集合,包含了SpringMVC,Tomcat和其他依赖项。

SpringBootStarter优点:

  • 简化应用程序的构建:Starter可以帮助开发人员快速引入所需的依赖项,从而简化构建过程
  • 确保依赖项版本兼容性:Starter可以确保所有的依赖项版本兼容性,避免因版本不兼容而导致的依赖项冲突问题。
  • 避免不必要的依赖项:Starter只包含必要的依赖项,避免了不必要的依赖项的引入,从而减少了应用程序的体积。
  • 可扩展性强:在需要自定义配置或添加其他依赖项时,可以通过继承和覆盖Starter中的配置文件或类来扩展Starter。

8. SpringBoot核心配置文件是什么?bootstrap.properties和application.properties区别?

bootstrap.properties/.yml 是SpringBoot应用程序启动加载的第一个配置文件,通常用于制定一些底层配置,如连接配置,加密配置等。通常情况下,这个文件来配置SpringCloudConfigServer的访问信息或者是其他一些需要启动顺序更早的配置。

application.yml/.properties则是应用程序的主要配置文件,包含了大部分业务相关的配置,如数据库配置,缓存配置,日志配置,服务端口配置等。该文件会覆盖bootstrap中的同名配置。

两者的区别?

  • 加载顺序不同。bootstrap.yml/.properties比application.yml/.properties更早加载,并且只加载一次。
  • 作用范围不同。bootstrap.yml/.properties主要用于底层配置,如连接配置,加密解密配置;而application.yml/.properties则是应用程序的主要配置,包含了应用程序中大部分的业务相关配置。

bootstrap.yml/.properties可以使用SpringCloudConfigServer实现远程配置中心,从而实现动态的配置管理。

9. Spring Boot项目打的jar包和普通的jar有什么区别?

SpringBoot打的jar包内置了Tomcat,Jetty等Web服务器,可以直接通过命令java -jar xxx.jar启动应用程序,不需要手动部署到Web服务器中。这种方式使得应用程序的部署和运维非常方便。这种jar不可以作为普通的jar被其他项目依赖,即使依赖也无法使用其中的类。无法被其他项目依赖主要原因是他和普通jar结构不同。普通的jar包,解压后就是包名,包里面就是代码,而SpringBoot 的jar包解压后在\Boot-INF\classes目录下才是我们的代码,因此无法直接引用。如果非要引用,可以在pom.xml文件增加配置,将项目打成两个jar,一个可执行,一个可引用。

10. SpringBoot如何实现定时任务?

主要有两种不同方式,一个是使用Spring中的@Scheduled注解,另一个是使用第三方框架。

11. SpringBoot性能如何优化? 

  • 启动速度优化:SpringBoot应用程序启动时会自动扫描并加载所有的bean,可能导致启动过慢。可以使用延迟初始化机制,配置懒加载等方式加快启动。
  • 内存优化:关闭不必要的自动配置,配置适当的线程池,减少HTTP响应体大小等。
  • IO优化:考虑使用异步IO,使用缓存技术等提升IO性能。
  • 数据库优化:使用数据库连接池,优化SQL语句,使用缓存等方式提高数据库访问性能。 
  • 日志优化:减少不必要的日志输出,采用异步日志方式提升日志性能。
  • 静态资源优化:压缩静态资源,启用浏览器缓存等方式减少静态资源加载时间。
  • 代码优化:必满重复执行代码,优化算法,缓存计算量等方式提高程序执行效率。
  • ......

12. 如何实现SpringBoot项目的安全性?

为了实现SpringBoot的安全性,我们使用spring-boot-starter-security依赖项,并且添加安全配置。配置类必须扩展WebSecurityConfigurationAdapter并覆盖其方法。

13. 比较一下SpringSecurity和Shiro的优缺点?

由于SpringBoot官方提供大量方便地开箱即用的Starter,包括SpringSecurity的Starter,使得Spring Boot项目中使用SpringSecurity更加容易,只需要添加一个依赖就可以保护所有的接口,所以如果是Spring Boot项目一般选择SpringSecurity。它和Shiro相比主要有以下区别:

  • SpringSecurity是一个重量级的安全管理框架;Shiro则是轻量级的安全管理框架。
  • SpringSecurity概念复杂,配置繁琐;Shiro配置简单,概念简单。
  • SpringSecurity功能强大,Shiro功能简单

14. SpringBoot是否可以使用XML配置?

SpringBoot仍然支持使用XML配置文件。不过SpringBoot更推荐基于Java注解的配置方式,因为它更加灵活且易于维护。如果要使用XML配置,通过@ImportResource注解可以引入一个XML配置。

  1. @SpringBootApplication
  2. @ImportResource("classpath:application-context.xml")
  3. public class Application {
  4. public static void main(String[] args) {
  5. SpringApplication.run(Application.class, args);
  6. }
  7. }

15. SpringBoot事务管理的基本流程

首先使用@EnableTransactionManagement注解开启事务后,在Service层方法上加上@Transaction注解便可。

16. SpringBoot如何定义多套不同环境配置?

提供多套配置文件:

application.yml,application-dev.yml,application-test.yml,application-prod.yml

17. 什么是Swagger

Swagger是一个API文档生成工具,可以根据代码注释自动生成API文档,同时提供易于使用的UI界面,可以让开发者方便地查看和测试API接口。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/305330
推荐阅读
相关标签
  

闽ICP备14008679号