写点什么

java 培训:22 道 springboot 高频面试题

作者:@零度
  • 2022 年 3 月 14 日
  • 本文字数:2727 字

    阅读完需:约 9 分钟

1. 什么是 SpringBoot?

SpringBoot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。

2. SpringBoot 有哪些优点?

  • 减少开发,减少测试时间。

  • 使用 JavaConfig 有助于避免使用 XML。

  • 避免大量的 Maven 导入和各种版本冲突。

  • 提供意见发展方法。

  • 通过提供默认值快速开始开发。

  • 没有单独的 Web 服务器需要。这意味着你不再需要启动 Tomcat,Glassfish 或其他任何东西。

  • 需要更少的配置 因为没有 web.xml 文件。只需添加用 @ Configuration 注释的类,然后添加用 @Bean 注释的方法,Spring 将自动加载对象并像以前一样对其进行管理。您甚至可以将 @Autowired 添加到 bean 方法中,以使 Spring 自动装入需要的依赖关系中。

基于环境的配置 使用这些属性,您可以将您正在使用的环境传递到应用程序:

-Dspring.profiles.active = {enviornment}。

在加载主应用程序属性文件后,Spring 将在 (application{environment} .properties)中加载后续的应用程序属性文件_java培训

3.SpringBoot 的核心配置文件有哪几个?他们的区别是什么呢?

  • Spring Boot 的核心配置文件是 application 和 bootstrap 配置文件。

  • application 配置文件这个容易理解,主要是用于 Spring Boot 项目的自动化配置。

  • bootstrap 配置文件有以下几个应用场景: 使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息; 一些固定的不能被覆盖的属性; 一些加密/解密的场景出现

4.SpringBoot 的配置文件有哪几种格式?他们有什么区别吗?

.properties 和 .yml,它们的区别主要是书写格式不同。1.properties

app.user.name = javastack

2.yml

app: user: name: javastack

5. SpringBoot 的核心注解是哪个?它主要由哪几个注解组成的?

启动类上面的注解是 @SpringBootApplication,它也是 SpringBoot 的核心注解 主要组合包含了以下 3 个注解:

  • @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。

  • @EnableAutoConfiguration:打开自动配置的功能, 也可以关闭某个自动配置的选项,比如关闭数据源自动配置功能:

  • @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。

  • @ComponentScan:Spring 组件扫描。



6.开启 SpringBoot 特性有哪几种方式?

  • 继承 spring-boot-starter-parent 项目

  • 2.导入 spring-boot-dependencies 项目依赖

7. SpringBoot 需要独立的容器运行吗?

可以不需要,内置了 Tomcat/ Jetty 等容器。

8. 运行 SpringBoot 有哪几种方式?

  • 打包用命令或者放到容器中运行

  • 用 Maven/ Gradle 插件运行

  • 直接执行 main 方法运行

9. SpringBoot 自动配置原理是什么?

注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自动配置的核心,首先它得是一个配置文件,其次根据类路径下是否有这个类去自动配置。

10. SpringBoot 2.X 有什么新特性?

  • 配置变更

  • JDK 版本升级

  • 第三方库升级

  • 响应式 Spring 编程支持

  • HTTP/2 支持

  • 配置属性绑定

  • 更多的改进与加强…

11. 如何使用 SpringBoot 实现分页和排序?

使用 Spring Boot 实现分页非常简单。使用 Spring Data-JPA 可以实现,将可分页的 org.springframework.data.domain.Pageable 传递给存储库的方法。

12. 如何实现 SpringBoot 应用程序的安全性?

为了实现 Spring Boot 的安全性,我们使用 spring-boot-starter-security 依赖项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展 WebSecurityConfigurerAdapter 并覆盖其方法。

13. 如何集成 SpringBoot 和 ActiveMQ

对于集成 Spring Boot 和 ActiveMQ,我们使用 spring-boot-starter-activemq 依赖关系。它只需要很少的配置,并且不需要样板代码。

14. 什么是 YAML?

  • YAML 是一种人类可读的数据序列化语言。

  • 它通常用于配置文件。

  • 与属性文件相比,如果我们想要在配置文件中添加复杂的属性,

  • YAML 文件更加结构化,而且更少混淆。可以看出 YAML 具有分层配置数据。

15. SpringBoot 中的监视器是什么呢?

  • Spring boot actuator 是 spring 启动框架中的重要功能之一。

  • Spring boot 监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。

  • 有几个指标必须在生产环境中进行检查和监控。

  • 即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。

  • 监视器模块公开了一组可直接作为 HTTP URL 访问的 REST 端点来检查状态。

16. 什么是 Swagger?你用 SpringBoot 实现了它吗?

Swagger 广泛用于可视化 API,使用 Swagger UI 为前端开发人员提供在线沙箱。

Swagger 是用于生成 RESTful Web 服务的可视化表示的工具,规范和完整框架实现。

它使文档能够以与服务器相同的速度更新。

当通过 Swagger 正确定义时,消费者可以使用最少量的实现逻辑来理解远程服务并与其进行交互。

因此,Swagger 消除了调用服务时的猜测。

17. 如何使用 SpringBoot 实现异常处理?

Spring 提供了一种使用 ControllerAdvice 处理异常的非常有用的方法。

我们通过实现一个 ControlerAdvice 类,来处理控制器类抛出的所有异常。

18. RequestMapping 和 GetMapping 的不同之处在哪里?

RequestMapping 具有类属性的,可以进行 GET,POST,PUT 或者其它的注释中具有的请求方法。

GetMapping 是 GET 请求方法中的一个特例。

它只是 ResquestMapping 的一个延伸,目的是为了提高清晰度。

19. SpringBoot 可以兼容老 Spring 项目吗?如何做?

可以兼容,使用 @ImportResource 注解导入老 Spring 项目配置文件。

20. 保护 SpringBoot 应用有哪些方法?

  • 在生产中使用 HTTPS 使用 Snyk 检查你的依赖关系

  • 升级到最新版本

  • 启用 CSRF 保护

  • 使用内容安全策略防止 XSS 攻击

21. SpringBoot 打成的 jar 和普通 jar 有什么区别?

Spring Boot 项目最终打包成的 jar 是可执行 jar ,这种 jar 可以直接通过 java -jar xxx.jar 命令来运行,这种 jar 不可以作为普通的 jar 被其他项目依赖,即使依赖了也无法使用其中的类。

Spring Boot 的 jar 无法被其他项目依赖,主要还是他和普通 jar 的结构不同。

普通的 jar 包,解压后直接就是包名,包里就是我们的代码,而 Spring Boot 打包成的可执行 jar 解压后,在 \BOOT-INF\classes 目录下才是我们的代码,因此无法被直接引用。

如果非要引用,可以在 pom.xml 文件中增加配置,将 Spring Boot 项目打包成两个 jar ,一个可执行,一个可引用。

22. SpringBoot 中如何实现定时任务?

定时任务也是一个常见的需求,Spring Boot 中对于定时任务的支持主要还是来自 Spring 框架。

在 Spring Boot 中使用定时任务主要有两种不同的方式,

  • 一个就是使用 Spring 中的 @Scheduled 注解,

  • 另一个则是使用第三方框架 Quartz。

使用 Spring 中的 @Scheduled 的方式主要通过 @Scheduled 注解来实现。

使用 Quartz ,则按照 Quartz 的方式,定义 Job 和 Trigger 即可。

文章来源于 Java 学习之道

用户头像

@零度

关注

关注尚硅谷,轻松学IT 2021.11.23 加入

还未添加个人简介

评论

发布
暂无评论
java培训:22道springboot高频面试题_JAVA开发_@零度_InfoQ写作平台