在过去的几个月里,我收到了一些关于Spring Boot面试问题的请求。在这篇文章中,我将涵盖21个Spring Boot面试问题。此外,我还将介绍一些与微服务体系结构相关的问题。
我将这些Spring Boot面试问题分为三类——针对新手、中级和有经验的开发人员。
1. Spring Boot是什么?它在Web应用程序开发中有什么用处?
Spring Boot是一个构建在Spring framework之上的框架,用于快速应用程序开发。同样,Ruby on Rails、Django与Python的web框架也很有名。特别是,Spring为Java带来了一个急需的web框架来构建web应用程序。嵌入式应用服务器和自动配置等重要特性允许快速开发和部署。
- Spring Boot框架允许轻松地导入依赖项。
- 它还通过其丰富的特性简化了在应用程序中使用Spring Security。
- Actuator-可以实现监控应用程序。
2. Spring Boot和 Spring有什么区别?
Spring框架包括可以在Spring Boot框架中使用的多种特性。另一方面,Spring Boot框架用于应用程序开发。
同样,Spring 框架提供了数据绑定、依赖注入、面向方面编程、数据访问、安全性等特性。简而言之,Spring Boot是Spring框架的模块之一。Spring Boot构建在Spring框架的顶部。Spring Boot是一个基于微服务的框架,用于构建应用程序。Spring Boot中的自动配置特性有助于减少代码行数。
3.如何使用maven或gradle设置Spring Boot应用程序?
要设置spring boot应用程序,可以使用maven或gradle。两者都用于在应用程序中拉取所需的依赖项。特别是,对于spring boot应用程序,可以拉取spring-boot-starter-parent依赖关系。
在maven中,我们使用pom.xml文件,而在gradle中,我们使用build.gradle用于依赖声明。
Maven:
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>2.4.1</version>
Gradle:
compile group: 'org.springframework.boot', name: 'spring-boot', version: '2.4.1'
4. 如何更改Spring Boot应用程序的默认端口?
有三种方法可以更改Spring Boot应用程序的默认端口。最直接的方法是使用application.properties 或application.yml文件。
- server.port在application.properties中使用此属性。
- 还可以在主@SpringBootApplication类中以编程方式更改端口。
- 在作为jar文件启动应用程序时,可以使用所选择的端口。
5. 如何使用Spring Boot设置一个带有HTTPS端口的应用程序?
默认情况下,Spring Boot应用程序运行在HTTP端口上。要让你的应用程序使用HTTPS端口运行,有两种方法。可以使用server.port,server.ssl.key-store-password server.ssl.key-store,server.ssl.key-store-type 和server.ssl.key-alias。另一种使用HTTPS端口的方法是通过编程的方式。
6. Spring Boot支持哪些嵌入式服务器?
Spring Boot应用程序支持Tomcat、Jetty和Undertow网络服务器。默认情况下,Spring Boot的web启动器支持Tomcat web服务器。
要更改默认的web服务器,必须排除spring-boot-starter-tomcat,并包括相应的服务器启动程序,如jetty或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-jetty</artifactId>
</dependency>
7. Spring Boot有什么优点?
下面是Spring Boot的主要优点:
- 允许创建独立的Spring应用程序
- 可以轻松地使用tomcat、jetty或undertow服务器
- 快速发展
- 还允许轻松地使用基于微服务的体系结构
到目前为止,我已经涵盖了一些基本的面试问题。如果你是一名在Java或Spring Boot开发方面有几年经验的开发人员,下面的一组问题将帮助你改进哪里。
8. 如何将Spring Boot Web应用程序部署为jar和war文件?
通常,我们将web应用程序部署为war。我们将war文件部署到外部web服务器上。
显然,如果使用maven构建应用程序,Spring会提供一个插件Spring -boot-maven-plugin。然后,你可以将web应用程序打包为可执行的jar文件。如果使用gradle, gradle build默认会创建一个可执行的jar文件。
maven通过<packaging>jar</packaging> 将构建一个jar文件。<packaging>war</packaging>将构建一个war文件。如果没有包含打包元素,则maven将默认生成jar文件。你还需要保持容器依赖关系如下
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
对于gradle,你需要将嵌入容器的依赖项标记为属于war插件providedRuntime 配置。
9. 为什么我们在Spring Boot应用程序main 类中使用注释@SpringBootApplication ?
对于使用自动配置、组件扫描和额外配置的应用程序,可以包含一个注释@SpringBootApplication。该注释包括三个注释@EnableAutoConfiguration、@ComponentScan和@Configuration。
- @EnableAutoConfiguration -启用Spring Boot的自动配置
- @ComponentScan -这允许扫描应用程序所在的包。
- @Configuration——允许在上下文中注册额外的bean或导入额外的配置类。
10. @RestController和@RequestMapping注释用于什么?
@RestController——这个注释添加了注释@Controller和@ResponseBody。这个注释标记了一个将处理传入请求的类。通常,此注释用于创建RESTful api。
@RequestMapping——该注释在处理传入请求的类中提供路由信息。这个注释将传入的HTTP请求映射到相应的方法。
11. 为什么我们需要Spring Porfiles?
在构建企业应用程序时,我们使用不同的环境,如开发、测试、QA和生产。Spring Boot允许为每个环境配置不同的应用程序属性。
为了帮助分离每个环境的配置,可以根据环境(如application-dev)来命名属性文件。例如:application-dev.properties,application-test.properties, and application-prod.properties。
12. 如何禁用特定的自动配置?
要禁用任何特定的自动配置,可以使用@EnableAutoConfiguration注释的exclude属性。
@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)
public class SampleApplication
{
}
13. 什么是Thymeleaf,如何使用它?
Thymeleaf是一个web应用程序的服务器端模板引擎。它的主要目的是将模板引入web应用程序。
具体来说,要使用Thymeleaf,必须在应用程序中包含依赖spring-boot-start -thymeleaf。
14. 有哪些不同的Spring Boot启动器,它们的用途是什么?
强调的是,Spring Boot的一个主要优点是能够为Spring Boot应用程序使用各种依赖项。
所有启动器Spring引导依赖项都在org.springframework下。这些依赖从spring-boot-starter-作为前缀。
有超过50个初始依赖项,但这里有一个列表,大多数开发人员会在他们的应用程序中使用:
- spring-boot-starter-核心启动器。这包括自动配置、日志记录和YAML。
- spring-boot-starter-data-jpa——这包括使用hibernate的Spring data JPA。
- spring-boot-starter- security——Spring安全模型为你的web应用程序提供安全性。默认情况下,它将添加基本的基于表单的身份验证。
- spring-boot-start -web——这包括一个web模块,帮助使用Spring MVC创建web的RESTful应用程序。
- spring-boot-starter-thymeleaf ——导入这个模块可以让开发者在应用中使用thymeleaf模板引擎。
- spring-boot-starter-jdbc——这个模块帮助连接应用程序的数据库。
- spring-boot-starter-tomcat——通常,这是spring boot父模块的一部分。这允许开发人员使用嵌入式tomcat servlet容器。
针对有经验的开发人员的Spring Boot面试问题
下一组问题是针对有经验的开发人员的。尽管有这些区别,初学者和中级开发人员都应该了解这些问题。
15. 如何使用JPA将Spring Boot应用程序连接到数据库?
Spring Boot提供了spring - boot -starter-data-jpa依赖项来连接Spring应用程序到关系数据库。
另一方面,Spring Data JPA处理了基于jdbc的数据库访问和对象关系建模的复杂性。因此,它改进了数据访问层处理的实现。从开发人员的角度来看,它减少了对关系数据库查询的依赖。
JPA允许将应用程序类映射到数据库表。
16. 为什么要使用 Spring Boot Actuator?
Spring Boot Actuator为应用程序带来了可用于生产的特性。因此,可以很容易地监视应用程序。
它还为应用程序提供审计、运行状况检查和不同的度量。因此,你需要包含以下依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<scope>provided</scope>
</dependency>
以下是该依赖为应用程序提供的一些关键点:
env -显示所有环境属性
health-显示应用程序的运行状况
metrics——显示应用程序的各种度量
loggers——显示应用程序中日志的配置
Httptrace——显示HTTP跟踪信息
17. Spring Boot Devtools的用途是什么?
Spring Boot DevTools或Developer Tools是一组使开发过程更容易的工具。要包含DevTools支持,必须在项目中添加spring-boot-devtools依赖项。
Spring Boot DevTools可以帮助禁用许多Spring Boot依赖项使用的缓存。这在开发过程中非常有用,因为开发人员希望立即看到更改。
此外,使用这个库允许应用程序在类路径上的文件发生更改时重新启动。该库还支持web的调试日志记录。
18. 使用Spring Data JPA的优势是什么?
Spring Data Jpa提供了JpaTemplate来集成Spring应用程序。还可以选择JPA规范的特定实现。
默认情况下,它是Hibernate。
Spring Data JPA的优点:
- 减少样板代码。
- 生成的查询有助于减少开发人员对数据库查询的依赖。
- Repository 模式允许开发人员轻松处理持久性。
19. Spring Boot支持放松绑定。
通常,属性的键需要与Spring Boot应用程序中的属性名精确匹配。Spring Boot支持放松绑定,这意味着属性的键不必与属性名完全匹配。
此外,环境属性可以在任何情况下编写。例如——如果你的bean类中有一个属性propertyDB,并且带有注释@ConfigurationProperties,那么你可以将该属性绑定到这些环境属性中的任何一个—PROPERTYDB、propertyDB或property_db。
20.如果想在应用程序中使用Spring Security,该如何使用它?它如何使应用程序安全?
目前,为了保护Spring Boot应用程序的安全,可以在项目中包含spring-boot-starter-security依赖项。默认情况下,它将为你的应用程序添加一些安全措施。这些缺省措施包括向应用程序添加基本的基于表单的身份验证或保护REST api。
随后,为了利用Spring Security,可以扩展WebSecurityConfigurerAdapter类来添加定制的安全措施。在同一个类中,你将使用@EnableWebSecurity注释。这个注释允许Spring查找配置并将类应用到全局WebSecurity。
21. 你使用注释@ControllerAdvice做什么?
@ControllerAdvice注释有助于管理Spring Boot应用程序中的异常。简而言之,它是一个拦截器,拦截由带@RequestMapping注释的方法抛出的异常。
ResponseEntityExceptionHandler是提供集中异常处理的基类。
到目前为止,我已经涵盖了Spring Boot面试的问题。