Java面试题-----SpringBoot面试题(36道)

目录

1.什么是Spring Boot?

2.为什么需要Spring Boot?

3. 说出Spring Boot 的优点

4. Spring Boot 的核心配置文件有哪几个?它们的区别是什么?

5. Spring Boot 的配置文件有哪几种格式?它们有什么区别?

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

7. 什么是Spring Boot Starter?

8. Spring Boot 有哪几种读取配置的方式?

9. Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?

10. Spring Boot 可以兼容老 Spring 项目吗?

11. SpringBoot事物的使用

12. SpringBoot多数据源事务如何管理

13. 什么是 JavaConfig?

14. (Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的)介绍一下

15. Spring Boot 自动配置原理是什么?

16.  Spring Boot 配置加载顺序?

17. Spring Boot支持哪些嵌入式Web容器?

18. 什么是YAML?

19. YAML 配置的优势在哪里 ?

20. Spring Boot 是否可以使用 XML 配置 ?

21.spring boot 核心配置文件是什么? application.properties和bootstrap.properties有何区别 ?

22. 什么是 Spring Profiles?

23. 如何在自定义端口上运行 Spring Boot 应用程序

24. 如何实现 Spring Boot 应用程序的安全性?

25. 什么是 WebSocket?

26. Spring Boot 中的监视器是什么?(什么是Spring Boot Actuator)?

27. 如何在 Spring Boot 中禁用 Actuator 端点安全性?

28. 什么是 CSRF 攻击?

29. 如何使用 Spring Boot 实现异常处理?

30. 如何监视所有 Spring Boot 微服务?

31. 运行 Spring Boot 有哪几种方式?

32. SpringBoot性能如何优化

 33. Spring Boot 中如何解决跨域问题 ?

34. SpringBoot性能如何优化

 35. Spring Boot 中的 starter 到底是什么 ?

36. Spring Boot 中如何实现定时任务 ?

37. spring-boot-starter-parent 有什么用 ?


 

1.什么是Spring Boot?

SpringBoot主要用来简化使用Spring的难度和繁重的XML配置,它是Spring组件的一站式解决方案,采取了习惯优于配置的方法。通过.properties或者.yml文件替代了Spring繁杂的XML配置文件,同时支持@ImportResource注解加载XML配置。Spring Boot还提供了嵌入式HTTP服务器、命令行接口工具、多种插件等等,使得应用程序的测试和开发简单起来。


2.为什么需要Spring Boot?

Spring Boot 优点非常多,如:独立运行、简化配置、自动配置和无需部署war文件等等

3. 说出Spring Boot 的优点

  • 简化开发,提高整体生产力,容易上手,提升开发效率,为 Spring 开发提供一个更快、更简单的开发框架。
  • 快速创建独立运行的spring项目与主流框架集成
  • 使用嵌入式的servlet容器,应用无需打包成war包
  • starters自动依赖与版本控制
  • 大量的自动配置,简化开发,也可修改默认值
  • 准生产环境的运行应用监控
  • 与云计算的天然集成

4. Spring Boot 的核心配置文件有哪几个?它们的区别是什么?


Spring Boot 的核心配置文件是 application 和 bootstrap 配置文件。
application 配置文件主要用于 Spring Boot 项目的自动化配置。
bootstrap 配置文件有三个应用场景。
使用Spring Cloud Config配置中心时,需要在 bootstrap 配置文件中添加连接到配置中心的配置属性,来加载外部配置中心的配置信息;
一些固定的不能被覆盖的属性;
一些加密或解密的场景;

5. Spring Boot 的配置文件有哪几种格式?它们有什么区别?


主要有.properties 和 .yml格式,它们的区别主要是书写格式不同。另外,.yml 格式不支持 @PropertySource 注解导入配置。

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


继承spring-boot-starter-parent项目
导入spring-boot-dependencies项目依赖

7. 什么是Spring Boot Starter?


Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,可以一站式集成 Spring 和其他技术,而不需要到处找示例代码和依赖包。Spring Boot Starter的工作原理是:Spring Boot 在启动时扫描项目所依赖的JAR包,寻找包含spring.factories文件的JAR包,根据spring.factories配置加载AutoConfigure类,根据 @Conditional注解的条件,进行自动配置并将Bean注入Spring Context

8. Spring Boot 有哪几种读取配置的方式?


使用@Value注解加载单个属性值
使用@ConfigurationProperties注解可以加载一组属性的值,针对于要加载的属性过多的情况,比@Value注解更加简洁

9. Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?


Spring Boot 支持 Java Util Logging, Log4j2, Logback 作为日志框架,如果使用 Starters 启动器,Spring Boot 将使用 Logback 作为默认日志框架,推荐的日志框架是Log4j2。

10. Spring Boot 可以兼容老 Spring 项目吗?


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

11. SpringBoot事物的使用

  • SpringBoot的事物很简单,首先使用注解EnableTransactionManagement开启事物之后,然后在
    Service方法上添加注解Transactional便可。

12. SpringBoot多数据源事务如何管理

  • 第一种方式是在service层的@TransactionManager中使用transactionManager指定
    DataSourceConfig中配置的事务
  • 第二种是使用jta-atomikos实现分布式事务管理

 

13. 什么是 JavaConfig?


JavaConfig 是 Spring 社区的产品,它提供了配置 Spring IoC 容器的纯 Java 方法,有助于避免使用 XML 配置。

14. (Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的)介绍一下

@SpringBootApplication 注解
Spring Boot 的核心注解是@SpringBootApplication,它也是启动类使用的注解,主要包含了 3 个注解:
@SpringBootConfiguration:它组合了 @Configuration 注解,实现配置文件的功能。
@EnableAutoConfiguration:具有打开自动配置的功能,也可以关闭某个自动配置的选项。
@ComponentScan:用于Spring组件扫描。

15. Spring Boot 自动配置原理是什么?


@EnableAutoConfiguration注解、 @Configuration注解和 @ConditionalOnClass注解组成了Spring Boot自动配置的核心,首先它得是一个配置文件,其次根据类路径下是否有这个类去自动配置。具体是通过maven读取每个starter中的spring.factories文件,该文件配置了所有需要被创建在spring容器中的bean。

简单来说,Spring Boot通过@EnableAutoConfiguration注解开启自动配置,对jar包下的spring.factories文件进行扫描,这个文件中包含了可以进行自动配置的类,当满足@Condition注解指定的条件时,便在依赖的支持下进行实例化,注册到Spring容器中。

16.  Spring Boot 配置加载顺序?


Spring Boot配置加载顺序优先级是:propertiese文件、YAML文件、系统环境变量、命令行参数。

17. Spring Boot支持哪些嵌入式Web容器?

Spring Boot支持的嵌入式servlet容器有: Tomcat、Jetty、Undertow。

18. 什么是YAML?


YAML 是一种可读的数据序列化语言,它通常用于配置文件。

19. YAML 配置的优势在哪里 ?


配置有序
支持数组,数组中的元素可以是基本数据类型或者对象
简洁方便

20. Spring Boot 是否可以使用 XML 配置 ?


Spring Boot 推荐使用 Java 配置同时支持 XML 配置,通过 @ImportResource 注解加载 XML 配置。

21.spring boot 核心配置文件是什么? application.properties和bootstrap.properties有何区别 ?

  • 单纯做 Spring Boot 开发,可能不太容易遇到 bootstrap.properties 配置文件,但是在结合Spring Cloud 时,这个配置就会经常遇到了,特别是在需要加载一些远程配置文件的时侯。
  • spring boot 核心的两个配置文件:
  1. bootstrap (. yml 或者 . properties):boostrap 由父 ApplicationContext 加载的,比applicaton 优先加载,配置在应用程序上下文的引导阶段生效。一般来说我们在 Spring Cloud 配置就会使用这个文件。且 boostrap 里面的属性不能被覆盖;
  2. application (. yml 或者 . properties): 由ApplicatonContext 加载,用于 spring boot 项目的自动化配置。
     

22. 什么是 Spring Profiles?

  • 在项目的开发中,有些配置文件在开发、测试或者生产等不同环境中可能是不同的,例如数据库连接、redis的配置等等。那我们如何在不同环境中自动实现配置的切换呢?Spring给我们提供了profiles机制给我们提供的就是来回切换配置文件的功能

 

  • Spring Profiles 允许用户根据配置文件(dev,test,prod 等)来注册 bean。因此,当应用程序在开发中运行时,只有某些 bean 可以加载,而在 PRODUCTION中,某些其他 bean 可以加载。假设我们的要求是 Swagger 文档仅适用于 QA 环境,并且禁用所有其他文档。这可以使用配置文件来完成。Spring Boot 使得使用配置文件非常简单。

23. 如何在自定义端口上运行 Spring Boot 应用程序


可以在 application.properties 配置文件中指定端口,比如server.port = 8090

24. 如何实现 Spring Boot 应用程序的安全性?

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

25. 什么是 WebSocket?


WebSocket 是一种计算机通信协议,通过单个 TCP 连接提供全双工通信信道。
WebSocket 是双向的 ,使用 WebSocket 客户端或服务器可以实现消息发送。
WebSocket 是全双工的 ,客户端和服务器通信是相互独立的。
WebScoket 使用单个 TCP 连接 ,与http 相比,WebSocket 消息数据交换要轻得多。

26. Spring Boot 中的监视器是什么?(什么是Spring Boot Actuator)?

Spring boot actuator 是 spring 启动框架中的重要功能之一,Spring boot 监视器可以访问生产环境中正在运行的应用程序的当前状态。监视器模块公开了一组可直接作为 HTTP URL 访问的 REST 端点来检查状态。

27. 如何在 Spring Boot 中禁用 Actuator 端点安全性?


默认情况下,所有敏感的 HTTP 端点都是安全的,只有具有 ACTUATOR 角色的用户才能访问它们。
安全性是使用标准的 HttpServletRequest.isUserInRole 方法实施的,可以用来禁用安全性。
只有在执行机构端点在防火墙后访问时,才建议禁用安全性。

28. 什么是 CSRF 攻击?


CSRF 代表跨站请求伪造,这是一种攻击,迫使最终用户在当前通过身份验证的Web 应用程序上执行不需要的操作。CSRF 攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。

29. 如何使用 Spring Boot 实现异常处理?


Spring 通过使用 @ControllerAdvice 注解处理异常,实现一个ControllerAdvice 类来处理控制器类抛出的所有异常。

30. 如何监视所有 Spring Boot 微服务?


Spring Boot 提供监视器端点监控各个微服务,这些端点对于获取有关应用程序的信息(如它们是否已启动)以及它们的组件(如数据库等)是否正常运行很有帮助。但是用监视器的一个主要缺点是,必须单独打开应用程序的知识点以了解其状态或健康状况。

31. 运行 Spring Boot 有哪几种方式?


用命令打包或者放到容器中运行
用 Maven 插件运行
直接执行 main 方法运行

32. SpringBoot性能如何优化

  • 如果项目比较大,类比较多,不使用@SpringBootApplication,采用@Compoment指定扫包范
  • 在项目启动时设置JVM初始内存和最大内存相同
  • 将springboot内置服务器由tomcat设置为undertow

 33. Spring Boot 中如何解决跨域问题 ?


跨域可以在前端通过 JSONP 来解决,但是 JSONP 只可以发送 GET 请求,无法发送其他类型的请
求,在 RESTful 风格的应用中,就显得非常鸡肋,因此我们推荐在后端通过 (CORS,Crossorigin resource sharing) 来解决跨域问题。这种解决方案并非 Spring Boot 特有的,在传统的
SSM 框架中,就可以通过 CORS 来解决跨域问题,只不过之前我们是在 XML 文件中配置 CORS ,现在可以通过实现WebMvcConfigurer接口然后重写addCorsMappings方法解决跨域问题。

@Configuration
public class CorsConfig implements WebMvcConfigurer {
	@Override
	public void addCorsMappings(CorsRegistry registry) {
		registry.addMapping("/**")
		.allowedOrigins("*")
		.allowCredentials(true)
		.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
		.maxAge(3600);
	}
}

 34. Spring Boot 中的 starter 到底是什么 ?


首先,这个 Starter 并非什么新的技术点,基本上还是基于 Spring 已有功能来实现的。首先它提
供了一个自动化配置类,一般命名为 XXXAutoConfiguration ,在这个配置类中通过条件注解来
决定一个配置是否生效(条件注解就是 Spring 中原本就有的),然后它还会提供一系列的默认配
置,也允许开发者根据实际情况自定义相关配置,然后通过类型安全的属性(spring.factories)注入
将这些配置属性注入进来,新注入的属性会代替掉默认属性。正因为如此,很多第三方框架,我们
只需要引入依赖就可以直接使用了。当然,开发者也可以自定义 Starter
 

35. Spring Boot 中如何实现定时任务 ?

在 Spring Boot 中使用定时任务主要有两种不同的方式,一个就是使用 Spring 中的 @Scheduled
注解,另一-个则是使用第三方框架 Quartz。
使用 Spring 中的 @Scheduled 的方式主要通过 @Scheduled 注解来实现。

36. spring-boot-starter-parent 有什么用 ?


我们都知道,新创建一个 Spring Boot 项目,默认都是有 parent 的,这个 parent 就是 springboot-starter-parent ,spring-boot-starter-parent 主要有如下作用:
定义了 Java 编译版本为 1.8 。
使用 UTF-8 格式编码。
继承自 spring-boot-dependencies,这个里边定义了依赖的版本,也正是因为继承了这个依
赖,所以我们在写依赖时才不需要写版本号。
执行打包操作的配置。
自动化的资源过滤。
自动化的插件配置。
针对 application.properties 和 application.yml 的资源过滤,包括通过 profile 定义的不同
环境的配置文件,例如 application-dev.properties 和 application-dev.yml。
总结就是打包用的
 

 

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值