面向Java程序员的15个SpringBoot面试问题和答案

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

在这里插入图片描述

文章出处: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 -starterSpring - Boot -starter-webSpring - 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面试问题,请与你的朋友和同事分享。如果您有任何反馈或疑问,请留言。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
7天前
|
Java 程序员
JAVA程序员的进阶之路:掌握URL与URLConnection,轻松玩转网络资源!
在Java编程中,网络资源的获取与处理至关重要。本文介绍了如何使用URL与URLConnection高效、准确地获取网络资源。首先,通过`java.net.URL`类定位网络资源;其次,利用`URLConnection`类实现资源的读取与写入。文章还提供了最佳实践,包括异常处理、连接池、超时设置和请求头与响应头的合理配置,帮助Java程序员提升技能,应对复杂网络编程场景。
29 9
|
4天前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
12天前
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
35 1
Spring 框架:Java 开发者的春天
|
23天前
|
JavaScript 前端开发 Java
解决跨域问题大集合:vue-cli项目 和 java/springboot(6种方式) 两端解决(完美解决)
这篇文章详细介绍了如何在前端Vue项目和后端Spring Boot项目中通过多种方式解决跨域问题。
262 1
解决跨域问题大集合:vue-cli项目 和 java/springboot(6种方式) 两端解决(完美解决)
|
4天前
|
监控 前端开发 Java
Java SpringBoot –性能分析与调优
Java SpringBoot –性能分析与调优
|
4天前
|
SQL Java 程序员
倍增 Java 程序员的开发效率
应用计算困境:Java 作为主流开发语言,在数据处理方面存在复杂度高的问题,而 SQL 虽然简洁但受限于数据库架构。SPL(Structured Process Language)是一种纯 Java 开发的数据处理语言,结合了 Java 的架构灵活性和 SQL 的简洁性。SPL 提供简洁的语法、完善的计算能力、高效的 IDE、大数据支持、与 Java 应用无缝集成以及开放性和热切换特性,能够大幅提升开发效率和性能。
|
12天前
|
Java 数据库连接 开发者
Spring 框架:Java 开发者的春天
【10月更文挑战第27天】Spring 框架由 Rod Johnson 在 2002 年创建,旨在解决 Java 企业级开发中的复杂性问题。它通过控制反转(IOC)和面向切面的编程(AOP)等核心机制,提供了轻量级的容器和丰富的功能,支持 Web 开发、数据访问等领域,显著提高了开发效率和应用的可维护性。Spring 拥有强大的社区支持和丰富的生态系统,是 Java 开发不可或缺的工具。
|
10天前
|
IDE Java 程序员
C++ 程序员的 Java 指南
一个 C++ 程序员自己总结的 Java 学习中应该注意的点。
16 5
|
7天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
12天前
|
JSON Java Maven
实现Java Spring Boot FCM推送教程
本指南介绍了如何在Spring Boot项目中集成Firebase云消息服务(FCM),包括创建项目、添加依赖、配置服务账户密钥、编写推送服务类以及发送消息等步骤,帮助开发者快速实现推送通知功能。
26 2