精选 SpringBoot 面试题
1.什么是SpringBoot?
SpringBoot基于Spring开发,SpringBoot本身并不提供Spring框架的核心特性和扩展功能,只是用于快速、敏捷的开发新一代基于Spring框架的应用程序。也就是说,它不是用来代替Spring的解决方案,而是和Spring框架紧密结合用于提升Spring开发体验的工具。SpringBoot以约定大于配置的核心思想默认帮助我们进行了很多配置,在开发中只开发者只需要配置少量的Spring配置,很适用于敏捷开发。同时它集成了大量常用的第三方框架例如(Redis、MQ、Mysql、MongoDB等),SpringBoot应用将这些第三方框架几乎可以零配置达到开箱即用。
2.为什么要使用SpringBoot?
快速开发、快速整合、配置简化、内嵌Servlet容器
3.SpringBoot和SpringCloud的区别
SpringBoot是快速开发的Spring框架,SpringCloud是完整的微服务框架,SpringCloud依赖于 SpringBoot。
4.SpringBoot由那些优缺点?
Spring Boot 主要有如下优点:
- 容易上手,提升开发效率,为Spring开发提供了一个更快、更简单的开发框架
- 开箱即用,远离繁琐的配置
- 提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、数据监控、运行状态监控和外部化配置等
- SpringBoot使编码变得简单、配置变得简单、部署变得简单、监控变得简单。
Spring Boot 主要有如下缺点:
- 依赖太多
- 缺少服务的注册和发现解决方案
- 缺少监控集成方案,安全管理方案
5.Spring的核心注解是那个?它主要由那几个注解组成?
启动类上面的注解是@SpringBootApplication,它也是SpringBoot的核心注解,主要包含了一下3个注解:
- @SpringBootConfiguration:组合了@Configuration ,实现读取配置文件的功能
- @EnableAutoConfiguration:打开自动配置功能,也可以关闭某个自动配置的选项,例如关闭数据源自动配置@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
- @ComComponentScan:Bean组件扫描(根据约定扫描注解)
6. SpringBoot Starter的工作原理
我个人的理解SpringBoot就是由各种Starter组合起来的,我们也可以自己开发Starter,在SpringBoot启动时由 @EnableAutoConfiguration注解会自动去Maven中读取每个Starter中的spring.factories文件,该文件里配置了所有需要被创建的bean,并且进行自动配置把并注入到Spring的配置文件中。
7.Async异步调用方法
在SpringBoot中使用异步调用是很简单的,只需要在方法上使用 @Async注解即可实现方法的异步调用。注意:需要在启动类加入@EnableAsync使@Async注解生效。(使用的是SpringBoot配置好的默认线程池,也可手动配置)
8.SpringBoot的自动配置原理是什么?
查看文章 SpringBoot自动装配。
9.什么是 YAML?
YAML是一种人类可读的数据序列化语言,它通常用于配置文件,与属性文件相比,如果我们要在配置文件中添加复杂的属性,YAML文件更加结构化,而且更少混淆。
10.Spring Boot 是否可以使用 XML 配置 ?
SpringBoot推荐使用Java配置而非XML配置,但是SpringBoot也是可以使用XML配置,通过@ImportResource 注解可以引入一个XML配置。
10.SpringBoot 核心配置文件是什么?bootstrap.properties 和 application.properties 有何区别 ?
SpringBoot的配置文件有很多种比较常用的properties和yml,它们的优先级为:properties配置优先级 > YML配置优先级 ,两者同时存在的话properties更先加载,yml只做配置补充。
bootstrap和application的区别:
- bootstrap配置文件需要依赖SpringContext,由父ApplicationContext加载,所以bootstrap优先级更高
- bootstrap里面的属性不能被覆盖
- application配置文件主要用于 Spring Boot 项目的自动化配置。
11.什么是 Spring Profiles?
Spring Profiles允许用户根据配置文件(dev、test、prod等)来注册bean,因此,当应用程序在不同环境中可加载不同的配置文件配置文件由用户自定义配置application-xxx.yml,在由主配置文件application.yml配置文件中配置加载某一个具体的配置文件。
12.SpringBoot 中如何解决跨域问题 ?
跨域可以在前端通过JSONP来解决,但是JSONP只能发送GET请求,无法发送其他类型的请求,在RESTful风格应用中很不适用,因此我们推荐后端通过(CORS,CrossOrign)来解决跨域问题。
13.SpringBoot 有哪几种读取配置的方式?
SpringBoot 目前支持 2 种读取配置:
- @Value注解,读取配置到属性,最常用的。
- @ConfigurationProperties注解,读取配置到类上。