文章出处:Top 15 Spring Boot Interview Questions with Answers for Java/JEE Programmers
大家好,如果您正在为下一次Java面试做准备,并且准备了有关Spring框架的工作描述,那么您还应该准备一些Spring引导面试问题,以避免失望。SpringBoot现在是Java开发中使用Spring框架的标准方式,而且几乎所有的公司都在从使用Spring框架的传统方式转向更现代的SpringBoot方式。向开发人员询问诸如您是否使用过Spring Boot之类的问题的日子已经一去不复返了。现在的面试要求应聘者对Spring Boot有更多的了解,这是有原因的,我们将在本文中探讨。
SpringBoot旨在简化Java开发,通过消除配置、依赖项管理和开发简便性方面的主要难点。正如Craig Walls在Spring boot中所做的那样,这可能是Java在JDK 1.5发布和Spring框架在15年前引入之后发生的最好的事情。
它引入了大量的特性,如启动器依赖、自动配置、嵌入式服务器、Spring Boot CLI, Spring Actuator、Spring初始化器等,将Spring的Java开发带入了一个新的层次,这就是为什么Spring引导面试问题在Java面试中越来越常见的原因。
为了自信地回答Spring Boot的问题,您不仅要知道Spring Boot解决了什么问题,还要深入了解它的一些核心特性,比如自动配置和启动依赖项。这两个特性消除了基于spring的Java应用程序的大量配置和设置工作。
顺便说一下,如果你不熟悉他们,我首先建议你通过一个初学者的课程,如Spring Boot Essentials来获得最新的速度。一旦您对Spring Boot有了很好的了解,就可以尝试这些问题。
有关Java开发人员的10个Spring Boot面试问题
下面是我列出的Java面试中最常见的Spring Boot面试问题。这些问题涵盖了大多数Spring启动特性,例如自动配置、启动器依赖项、Spring Actuator, Spring Initializer, Spring Boot CLI 等。
他们也收集了对中级和有经验的Java开发人员(例如2到5年的经验)的Java访谈。
1.什么是Spring Boot?为什么要使用它?
Spring Boot是另一个来自Sring umbrella的Java框架,它旨在简化Spring框架在Java开发中的使用。它消除了与Spring相关的大部分痛苦,例如大量的配置和依赖以及大量的手动设置。
为什么要使用它?Spring Boot不仅通过自动配置为您提供了很多便利,还提高了生产率,因为它让您只专注于编写业务逻辑。
例如,您不需要设置Tomcat服务器来运行web应用程序。您可以只编写代码并将其作为Java应用程序运行,因为它附带了一个嵌入式Tomcat服务器。您还可以根据自己的方便程度创建用于部署的JAR文件或WAR文件。
总之,使用Spring Boot有很多原因。事实上,它现在是用Spring框架开发Java应用程序的标准方法。
2. 使用Spring Boot有哪些重要的特性?
这是一个很好的主观问题,面试官会用它来衡量求职者的工作经验。不管怎样,以下是Spring Boot框架的一些重要特性:
1. 起动器的依赖
此功能将公共依赖项聚合在一起。例如,如果您想开发基于RESTful的Spring MVC服务,那么不需要将Spring MVC JAR和Jackson JAR文件包含到类路径中,您只需指定Spring -boot-web-starter,它就会自动下载这两个JAR文件。Spring Boot附带了许多这样的启动依赖项,以提高工作效率。
2.自动配置
这是Spring Boot的另一个很棒的特性,可以为您配置很多东西。例如,如果您正在开发Spring web应用程序,并且类路径中有Thymeleaf.jar,那么它可以自动配置Thymeleaf模板解析器、视图解析器和其他设置。要成为一名有经验的Spring引导开发人员,需要具备良好的自动配置知识。
3.Spring初始化
可以为您创建初始项目结构的web应用程序。这简化了初始项目设置部分。
4.Spring Actuator
该特性为运行中的Spring启动应用程序提供了许多有用的信息。例如,您可以使用执行器来查找哪些bean是在Spring的应用程序上下文中创建的,以及哪些请求路径被映射到控制器。
5.Spring CLI
这是Spring Boot的另一个很棒的特性,它将Spring开发带入了下一个阶段。它允许您使用Groovy编写Spring引导应用程序,这意味着要编写更简洁的代码。
3.什么是Spring boot中的自动配置?这有什么用呢?为什么Spring Boot被称为opinionated?
在这个问题本身中有很多问题,但是让我们首先处理自动配置。正如前面的示例所解释的,它根据类路径中的内容自动配置很多东西。
例如,如果当前的数据源bean和数据源bean在类路径中可用,则可以配置JdbcTemplate。如果类路径中存在Spring security,它甚至可以做一些基本的web安全工作。
顺便说一下,如果您不熟悉spring security库,那么可以查看spring security Masterclass以了解更多相关信息。它是保护现代Java应用程序的最重要的工具之一。
无论如何,关键是自动配置在配置bean、控制器、视图解析器等方面为您做了大量工作,因此它在创建Java应用程序方面帮助很大。
现在,大问题来了,为什么它被认为是武断的?因为它自己做判断。有时它会导入您不想要的东西,但是不要担心,Spring Boot还提供了覆盖自动配置设置的方法。
它在默认情况下也是禁用的,您需要在主类上使用@SpringBootApplication
或@EnableAutoConfiguration
注释来启用自动配置功能。
4. 什么是SpringBoot启动依赖?这有什么用呢?
这个问题通常是前一个问题的后续问题,因为它非常类似于自动配置,许多开发人员会混淆这两个问题。顾名思义,初学者依赖项处理依赖项管理。
在研究了几个基于Spring的项目之后,Spring人员注意到总有一些库是一起使用的,例如Spring MVC和Jackson一起创建RESTful web服务。由于在Maven的pom.xml中声明依赖关系比较麻烦,因此他们将许多库合并到一个基于功能的库中,并创建了这个启动包。
这不仅使您不必声明许多依赖项,而且还使您避免兼容性和版本不匹配问题。Spring Boot starter自动获取其他库的兼容版本,这样您就可以使用它们而不必担心任何兼容性问题。
5. @SpringBootApplication和@EnableAutoConfiguration注释的区别是什么?
尽管两者都是基本的Spring引导应用程序,并在主类或引导类中使用,但它们之间有细微的区别。@EnableAutoConfiguration用于启用自动配置,但是@SpringBootApplication要做的远不止这些。
它还结合了@Configuration和@ComponentScan注释,以在您的项目中启用基于java的配置和组件扫描。
@SpringBootApplication实际上是@Configuration、@ComponentScan和@EnableAutoConfiguration注释的组合。
6. 什么是Spring初始化器?为什么要使用它?
开始使用框架的困难之一是初始设置,特别是如果您是从零开始的,并且没有引用设置或项目。Spring初始化器在Spring启动时解决了这个问题。
它只是一个web应用程序,帮助您创建初始的Spring boot项目结构,并提供Maven或Gradle构建文件来构建您的代码。
7. 什么是Spring Actuator?它的优点是什么?
这是一个有趣的Spring引导问题,主要针对Java角色提出,Java角色也有一些支持职责。Spring Actuator是另一个很酷的Spring Boot功能,它允许查看内部运行的应用程序。
是的,你没看错。它允许您查看应用程序的内部。由于Spring引导完全是关于自动配置的,因此调试非常困难,而且在某些时候,您希望知道在Spring的应用程序上下文中创建了哪些bean,以及如何映射控制器。Spring Actuator提供所有这些信息。
它提供了几个端点,例如一个REST端点来在web上检索这类信息。它还提供了许多关于应用程序健康状况的见解和度量,例如CPU和内存使用量、线程数量等。
它还提供了一个远程shell,您可以使用它安全地进入Spring Boot应用程序并运行一些命令来公开相同的数据集。您甚至可以在运行时使用JMX来控制这种行为。
顺便说一句,保护您的Spring Actuator端点是很重要的,因为它暴露了许多机密信息和一个潜在的危险一二。例如,通过使用/showdown端点,您可以终止一个Spring启动应用程序。
8. 什么是Spring Boot CLI?它的好处是什么?
Spring Boot CLI是一个命令行接口,它允许您使用Groovy创建基于Spring的Java应用程序。由于使用的是Groovy,它允许您从命令行创建Spring启动应用程序,而不需要任何仪式,例如,您不需要定义getter和setter方法,或者访问修饰符、返回语句等。
它也非常强大,如果您碰巧使用它,可以在Groovy的默认包中自动包含很多库。
9. 在SpringBoot应用程序中如何定义属性?
您可以将应用程序和Spring boot相关的属性定义到一个名为application.properties的文件中。您可以手动创建这个文件,也可以使用Spring Initializer来创建这个文件,尽管它是空的。
您不需要做任何特殊的配置来指示Spring引导加载这个文件。如果它存在于类路径中,那么Spring Boot将自动加载它并根据它配置自身和应用程序代码。
例如,您可以使用它来定义一个属性来更改Spring Boot中的嵌入式服务器端口,这也是我们的下一个问题。
10. 可以在Spring boot中更改嵌入式Tomcat服务器的端口吗?如果可以,如何操作?
是的,我们可以在application.properties文件中添加一个名为server.port的属性来更改Spring Boot中嵌入式Tomcat服务器的端口。
如前所述,此属性文件由Spring Boot自动加载,可用于配置Spring Boot和应用程序代码。
11. 嵌入式容器和WAR之间的区别是什么?
嵌入式容器和WAR文件之间的主要区别是,您可以从命令提示符中以JAR的形式启动应用程序,而无需设置web服务器。但是要运行WAR文件,首先需要设置一个像Tomcat这样的web服务器,它有Servlet容器,然后需要在那里部署WAR。
12.SpringBoot支持哪些嵌入式容器?
Spring引导支持三种嵌入式容器:Tomcat、Jetty和Undertow。默认情况下,它使用Tomcat作为嵌入式容器,但是您可以将其更改为Jetty或Undertow。
13.有哪些常见的SpringBoot注释?
一些最常见的SpringBoot注释是@EnableAutoConfiguration
、@SpringBootApplication
、@SpringBootConfiguration
和@SpringBootTest
。
@EnableAutoConfiguration
用于在Spring启动应用程序上启用自动配置,而@SpringBootApplication
用于主类上,以允许它运行JAR文件。@SpringBootTest
用于在Spring启动环境中运行单元测试。
14. 你能说出一些常见的Spring Boot 启动POMs吗?
一些最常见的Spring启动依赖项或POMs是Spring - Boot -starter
、Spring - Boot -starter-web
、Spring - Boot -starter-test
。您可以使用Spring - Boot -starter-web
在Spring Boot应用程序中启用Spring MVC。
15. 如何用Spring Boot控制日志记录?
是的,我们可以通过在应用程序上指定日志级别来使用Spring Boot控制日志记录。属性文件。当这个文件存在于类路径中时,SpringBoot将加载它,并且可以使用它来配置Spring引导和应用程序代码。
Spring Boot对所有内部日志使用通用日志记录,您可以application.properties文件中通过在应用程序中添加以下行来更改日志级别
logging.level.org.springframework=DEBUG
logging.level.com.demo=INFO
这就是关于Java开发人员常见的Spring启动面试问题的全部内容。如果您正在准备Java开发面试,其中需要Spring Boot作为一项技能,那么您应该熟悉这些面试问题。它们不仅能帮助你在面试中表现出色,而且还能鼓励你详细地学习关键的Spring Boot概念,以便最好地利用它。
感谢您阅读本文。如果你喜欢这些SpringBoot面试问题,请与你的朋友和同事分享。如果您有任何反馈或疑问,请留言。