# Spring Boot 面试题
# 01. Spring Boot 2.0 支持最低的 JDK 版本是?
A:JDK 6
B:JDK 7
C:JDK 8
D:JDK 9
参考答案
选 C
# 02. Spring、Spring Boot、Spring Cloud 是什么关系?
参考答案
它们都是来自于 Spring 大家庭,Spring Boot 是在 Spring 框架的基础上开发而来,让更加方便使用 Spring;Spring Cloud 是依赖于 Spring Boot 而构建的一套微服务治理框架。
# 03. Spring Boot 项目有哪些优势?
参考答案
Spring Boot 项目优势如下:
开发变得简单,提供了丰富的解决方案,快速集成各种解决方案提升开发效率;
配置变得简单,提供了丰富的 Starters,集成主流开源产品往往只需要简单的配置即可;
部署变得简单,其本身内嵌启动容器,仅仅需要一个命令即可启动项目,结合 Jenkins、Docker 自动化运维非常容易实现;
监控变得简单,自带监控组件,使用 Actuator 轻松监控服务各项状态。
# 04. 如何将 Spring Boot 项目打包成 war 包?
参考答案
在 pom.xml 里设置 <packaging>war</packaging>
。
# 05. 在 Maven 项目中如何修改打包名称?
参考答案
在 pom.xml 文件的 build 节点中,添加 finalName 节点并设置为要的名称即可,配置如下:
<build>
<finalName>warName</finalName>
</build>
# 06. Ant、Maven、Gradle 有什么区别?
参考答案
Ant、Maven、Gradle 是 Java 领域中主要有三大构建工具,它们的区别如下:
Ant(Another Neat Tool)诞生于 2000 年,是由 Java 编写,采用 XML 作为构建脚本,这样就允许你在任何环境下运行构建。Ant 是 Java 领域最早的构建工具,不过因为操作复杂,慢慢的已经被淘汰了;
Maven 诞生于 2004 年,目的是解决程序员使用 Ant 所带来的一些问题,它的好处在于可以将项目过程规范化、自动化、高效化以及强大的可扩展性;
Gradle 诞生于 2009 年,是一个基于 Apache Ant 和 Apache Maven 概念的项目自动化建构工具。它使用一种基于 Groovy 的特定领域语言来声明项目设置,而不是传统的 XML。结合了前两者的优点,在此基础之上做了很多改进,它具有 Ant 的强大和灵活,又有 Maven 的生命周期管理且易于使用。
Spring Boot 官方支持 Maven 和 Gradle 作为项目构建工具。Gradle 虽然有更好的理念,但是相比 Maven 来讲其行业使用率偏低,并且 Spring Boot 官方默认使用 Maven 。
# 07. Maven 如何设置发布的包名?
参考答案
在 build 节点下设置 finalName 就是发布的包名,如下代码所示:
<build>
<finalName>biapi</finalName>
</build>
# 08. Spring Boot 热部署有几种方式?
参考答案
Spring Boot 热部署主要有两种方式:Spring Loaded、Spring-boot-devtools。
方式 1:Spring Loaded
在 pom.xml 文件中添加如下依赖:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> <version>1.2.6.RELEASE</version> </dependency> </dependencies> <configuration> <mainClass>此处为入口类</mainClass> </configuration> </plugin>
方式 2:Spring-boot-devtools
在 pom.xml 文件中添加如下依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>provided</scope> <optional>true</optional> </dependency>
# 09. Spring Boot 2.0 可以在 Tomcat 7 运行吗?为什么?
参考答案
Spring Boot 2.0 无法在 Tomcat 7 上运行。因为 Spring Boot 2.0 使用的是 Spring Framework 5,Spring Framework 5 使用的是 Servlet 3.1,而 Tomcat 7 最高支持到 Servlet 3.0,所以 Spring Boot 2.0 无法在 Tomcat 7 上运行。
# 10. 如何使用 Jetty 代替 Tomcat?
参考答案
答:在 spring-boot-starter-web 移除现有的依赖项,添加 Jetty 依赖,配置如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
# 11. Spring Boot 不支持以下哪个内嵌容器?
A:Tomcat
B:Jetty
C:Undertow
D:Nginx
参考答案
答:D
题目解析:Jetty 容器支持如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
Undertow 容器支持如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
# 12. Spring Boot 中配置文件有几种格式?
参考答案
Spring Boot 中有 .properties 和 .yml 两种配置文件格式,它们主要的区别是书写格式不同。
properties 配置文件格式如下:
app.user.name = hellojava
yml 配置文件格式如下:
app: user: name: hellojava
# 13. 项目中有两个配置 application.properties 和 application.yml,以下说法正确的是?
A:application.properties 的内容会被忽略,只会识别 application.yml 的内容。
B:两个配置文件同时有效,有相同配置时,以 application.properties 文件为主。
C:application.yml 的内容会被忽略,只会识别 application.properties 的内容。
D:两个配置文件同时有效,有相同配置时,以 application.yml 文件为主。
参考答案
选 B
# 14. RequestMapping 和 GetMapping 有什么不同?
参考答案
RequestMapping 和 GetMapping 区别如下:
- RequestMapping 可以支持 GET、POST、PUT 请求;
- GetMapping 是一个组合注解,相当于 @RequestMapping(method = RequestMethod.GET) 。
# 15. 以下关于 @RestController 和 @Controller 说法正确的?
A:@Controller 返回 JSON 数据
B:@RestController 返回 JSON 数据
C:@APIController 返回 JSON 数据
D:以上都对
参考答案
选 B
# 16. 如何理解 Spring Boot 中的 Stater?
参考答案
Stater 可以理解为启动器,它是方便开发者快速集成其他框架到 Spring 中的一种技术。比如,spring-boot-starter-data-jpa 就是把 JPA 快速集成到 Spring 中。
# 17. 常见的 starter 有哪些?
参考答案
常见的 starter 如下:
- spring-boot-starter-web:Web 开发支持
- spring-boot-starter-data-jpa:JPA 操作数据库支持
- spring-boot-starter-data-redis:Redis 操作支持
- spring-boot-starter-data-solr:Solr 权限支持
- mybatis-spring-boot-starter:MyBatis 框架支持
# 18. Spring Boot Starter JDBC 和 Spring JDBC 有什么关系?
参考答案
spring-boot-starter-jdbc 是 Spring Boot 针对 JDBC 的使用提供了对应的 Starter 包,在 Spring JDBC 上做了进一步的封装,方便在 Spring Boot 生态中更好的使用 JDBC。
# 19. Spring Boot 有哪几种读取配置的方式?
参考答案
Spring Boot 可以通过 @Value、@Environment、@ConfigurationProperties 这三种方式来读取。
例如,配置文件内容如下:
app.name=中文
Value 方式
@Value("${app.name}") private String appName;
Environment 方式
public class HelloController { @Autowired private Environment environment; @RequestMapping("/index") public String index(String hiName) { // 读取配置文件 String appName = environment.getProperty("app.name"); return "Hello, " + hiName + " |@" + appName; } }
ConfigurationProperties 方式
@ConfigurationProperties(prefix = "app") public class HelloController { // 读取配置文件,必须有 setter 方法 private String name; public void setName(String name) { this.name = name; } @RequestMapping("/index") public String index(String hiName) { System.out.println("appname:" + name); return "Hello, " + hiName + " |@" + appName; } }
# 20. 使用 @Value 读取中文乱码是什么原因?如何处理?
参考答案
这是因为配置文件的编码格式导致的,需要把开发工具的编码(File Encoding)格式设置为 UTF-8 。