22个常见的Spring Boot面试问题和答案

已发表: 2022-11-10

您是一名 Java Spring Boot 开发人员,期待参加即将到来的面试,但不确定会出现哪些问题? 我们是来帮忙的!

本文将概述几个常见的 Spring Boot 面试问题和答案,面试官可以用来测试你,从而帮助你做好充分的准备。

面试官使用策略性 Java Spring Boot 问题来测试面试者与其指定角色相关的技能水平。 因此,您需要准备相关问题并知道如何回答。

在直接跳到面试问题及其相应答案之前,让我们先简要介绍一下 Spring Boot 是什么以及它对 Java 开发人员有多大帮助。

什么是 Java Spring Boot?

这个 Java 框架是关键团队在 2014 年创建的。Spring Boot 是一个开源框架,可以高效地开发独立的、生产级的应用程序,并且还可以在 Java 虚拟机(JVM)上运行。

Java 开发人员更喜欢它用于 Web 应用程序和微服务开发,因为它具有快速简便的设置过程和安全的配置时间。

Spring Boot 可以通过其三个核心功能轻松设置和配置基于 Spring 的应用程序,其中包括:

  • 自动配置——这是 Spring 应用程序的自动配置。
  • Spring Boot 为要使用的配置默认值和为所需依赖项安装的包提供了一种自以为是的方法。 这种固执己见的方法有助于快速设置项目。
  • Sprsetupoot 让您无需网络服务器即可独立运行您的应用程序。

Spring Boot 对 Java 开发人员有何帮助?

一方面,使用 Spring Boot 的 Java 开发人员可以更轻松地自动配置开发生产级 Spring 应用程序所需的所有组件。 从长远来看,这可以减少开发时间并最终提高效率。

Spring Boot 还可以轻松地与 Spring 的生态系统集成,其中包括 Spring JDBC、Spring Data、Spring Security 和 Spring ORM。

Java 开发人员还可以将 Spring Boot 与 Oracle、MySQL、PostgreSQL 和 MongoDB 等不同的数据库连接起来。

当然,具有 XML 配置、Java Bean 和数据库事务的灵活配置是其他有用的特性。

因此,既然您对 Spring Boot 有了基本的了解,让我们考虑一些常见的 Spring Boot 面试问题和答案,它们将帮助您准备面试。

Spring Boot 面试问答

Spring Boot 面试题

Spring Boot 有哪些特点?

其中一些受欢迎的功能包括:

  • Spring Boot CLI 提供了 Groovy 用于编写 Spring Boot 应用程序; 从长远来看,避免了样板代码。
  • Spring Boot 提供日志记录和安全功能,可以轻松保护您的应用程序免受潜在的安全威胁。
  • 它为您的项目提供相关组件的自动配置,从而避免不必要的 WAR 文件的风险。
  • starter Initializer 为您设置了默认的内部项目结构。 这样,您不必手动设置项目结构。
  • Spring Boot 执行器功能允许在应用程序运行时访问洞察力和指标。
  • 当然,Spring Boot 的一项关键特性 Starter Dependency 有助于聚合特定特性的常用依赖项。

什么是 Spring Boot 启动器?

Spring Boot 启动器是依赖描述符,其中包括一组启用应用程序依赖项的依赖项管理提供程序。 它们为框架提供了自动依赖解析。 启动器增强了轻松快速的开发。

Spring Boot 中的 Actuator 是什么,它的优点是什么?

执行器是 Spring Boot 功能之一,可让您在应用程序运行时监控应用程序内部发生的情况。

例如,在调试期间,您可以使用执行器来分析日志,因为它允许访问 CPU 使用率和 bean 标识等功能。

此外,执行器不仅可以轻松访问生产就绪的 REST 端点,这些端点可以监控和管理信息,还可以从 Web 检索数据。

什么是百里香,以及如何使用百里香?

Thymeleaf 是 Java 的服务器端模板,可为 Spring 和 HTML5 Java Web 应用程序创建自然模板布局。

Spring Boot 将使用 pom.xml 文件中的 spring-boot-starter-thymeleaf 依赖项执行 thymeleaf 的自动配置,以提供动态 Web 内容。

要允许 Spring Boot 读取和呈现 thymeleaf 模板或 HTML 文件,请将模板放在src/main/resources/templates中。

Thymeleaf 然后解析 index.html 文件并使用您从控制器类传递的实际值代替索引文件中可用的动态值。

此后,只要 Spring Boot 应用程序运行,消息就会在 Web 浏览器中呈现。

 org.springframework.boot spring-boot-starter-thymeleaf

描述使用 Spring Initializer 创建 Spring Boot 项目的过程。

Spring Initializr 是一个 Spring Web 工具,通过提供项目的详细信息,您可以通过几个步骤创建一个 Spring Boot 项目。

  1. 前往 Spring intializr 并填写输入字段。
  2. 单击“生成”按钮将开始项目下载。
  3. 从 zip 文件中提取下载的项目并从您的 IDE 中打开它。 在 IDE 中,导航到File->New->Project from existing sources -> Spring-boot-app,然后选择 pom.xml 文件。 单击导入更改提示,以便项目同步。 在此之后,请记住转到 application.properties 文件并将 server.port 编号编辑为server.port=7000
  4. 现在,从src->main->java->com.gfg.Spring.boot.app运行应用程序

Spring Boot 中的 JPA 是什么?

这是 Java 中的一种规范,它使用对象关系映射 (ORM) 来管理关系数据,并允许访问 Java 对象或 Java 类与应用程序的关系数据库之间的数据。

JPA 使用 Java 持久查询语言 (JPQL),这是一种面向对象的查询语言,也是独立于平台的。

JPA 允许使用它提供的 Entity Manager API 对数据库进行查询处理和对象事务。

Spring Boot 中的自动配置是什么?

自动配置旨在使用您添加到应用程序的 jar 依赖项来自动化 Spring Boot 应用程序配置。

根据应用程序的 Classpath 中可用的依赖项,自动配置将声明特定于 spring 的模块的内置对象,包括 JPA 和 spring security 等。

什么是 Spring 注解?

Spring 注释指的是提供有关程序片段的信息的元数据,它们向该程序添加补充数据。 代码组件(包括类和方法)通常与注释相关联。

注解不会直接影响程序的运行或编译后的代码的后续操作。
它们的语法以“ @ ”符号开头。

Spring Boot 提供了六种主要的注解类型,包括:

  • Spring 核心注解
  • Spring 数据注解
  • Spring Bean 注解
  • Spring Web 注释
  • Spring 调度注解
  • Spring Boot 注解

Spring Data REST 是什么意思?

Spring Data REST 使用最少的代码以 RESTful 形式公开 Spring Data Resources 周围的资源。

以下示例使用 POST 方法使用http://localhost/example作为 URL 和Content-Type: application/json作为标头来请求内容。

请求内容:

 { "name": "Jimmy", "Gender": "Male", "Age": 23 }

回复内容:

 { "name": "Jimmy", "Gender": "Male", "Age": 23 "_links": { "self": { "href": "http://localhost:8080/example/1" }, "person": { "href": "http://localhost:8080/example/1" } } }

Spring Boot DevTools 需要什么?

这些是一组深刻的预定义工具,其属性应用于各自的开发环境,以使开发更容易并节省开发时间。

每当您更改 Spring Boot 应用程序中的代码时,Spring Boot DevTools 功能都会自动重新启动。 因此,它省去了每次更改代码时手动重新启动应用程序的麻烦。

什么是弹簧数据?

Spring data 旨在让开发人员轻松访问数据访问技术,如关系和非关系数据以及基于云的数据服务,因为它继续保持底层数据存储的特​​殊特征。

当 bean 存在时,如何告诉自动配置退出?

在这里,您将使用 @ConditionalOnMissingBean 注释,其中包括如下的名称和值属性。

  • value 属性存储要检查的 bean 类型
  • 命名要检查的 bean 的 name 属性

Spring Boot 如何从数据库中获取数据?

我们可以使用以下步骤将数据从 MySQL 数据库访问到我们的 Spring Boot 应用程序。

第 1 步:使用create DATABASE person命令在 MySQL 中创建数据库。

第 2 步:在数据库中,创建一个表:

 CREATE TABLE person(id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, name VARCHAR(255));

第 3 步:现在创建一个 Spring Boot 应用程序,然后向其中添加 JDBC、MySQL 和所需的 Web 依赖项。

第 4 步:从 application.properties 文件配置数据库,如下所示。

 spring.datasource.url=jdbc:mysql://localhost:3306/personDetails spring.datasource.username=example123 spring.datasource.password=example123 spring.jpa.hibernate.ddl-auto=create-drop

第5步:接下来,让我们在控制器类中处理请求:

 package com.person; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.web.bind.annotation.RestController; @RestController public class JdbcController { @Autowired JdbcTemplate jdbc; @RequestMapping("/save") public String index(){ jdbc.execute("insert into person (name)values(Trial)"); return "Name entered Successfully"; } }

最后,在检查数据库条目以查看访问的数据时运行您的应用程序。

为什么我们需要 Spring Profiles?

Spring Profiles 允许分离应用程序的不同部分的配置,并将它们用于特定的开发。

如果 Spring Profiles 不可用,Spring Profiles 还为开发人员节省了管理特定于环境的外部配置的痛苦。

此外,这将使保持同步变得困难,并且意味着额外需要编写几个类似工厂的组件,这些组件将根据特定的环境特定参数来利用某些必需的东西。

我们可以在 Spring boot 中更改嵌入式 Tomcat 服务器的端口吗?

我们可以。

这是通过操作application.properties文件以包含server.port属性并为其分配您选择的端口来完成的。 Spring Boot 会自动加载应用程序属性文件并将所需的配置应用于应用程序。

例如,您可以将server.port编号从默认值 8080 更改为server.port= 8081

如何配置 Log4j 进行日志记录?

通过这几个简单的步骤,我们可以配置 Log4j 进行日志记录:

  1. 首先,创建您的 Java 项目,然后右键单击该项目。 导航到MyEclipse->File->New->Java Project以命名项目并单击完成。
  2. 接下来,右键单击您的 Java 项目名称并选择 Build Path -> Configure Build Path。 此步骤将添加 log4j 文件。
  3. 导航到库并单击Add External JARS按钮,然后从出现的下拉菜单中选择 log4j 文件。 然后单击确定。
  4. 创建一个新的 java 文件,您将调用log4j.properties文件,然后单击完成并将此文件添加到 Classpath。
  5. 从 Classpath 中单击 Advanced,然后选择Add Folders 选项,并记住单击 OK。
  6. 您现在可以搜索 log4j.properties 文件,单击 OK,然后运行该项目。
  7. 检查控制台以获取以下输出。
 [main] DEBUG Example – Hello this is a debug message [main] INFO Example – Hello this is an info message

什么是 IoC 容器?

IoC(Inversion of Control)容器是Spring的核心容器,自动实现依赖注入。 它实例化类的应用程序并负责对象的配置和必要依赖项的组装。

它还管理对象从实例化到销毁的生命周期。

IoC 使用 Java 代码、XML 和 Java 注释中的元数据配置来执行这些任务。

容器被称为控制反转,因为它控制 Java 对象和这些对象的生命周期。 否则,这是开发人员的任务。

讲解如何使用 Maven 创建 Spring Boot 应用程序

这个过程需要一系列步骤。

第一步:选择项目类型。

第 2 步:命名您的项目进行配置,然后单击完成按钮创建项目。

第 3 步:现在,我们将从 Maven 项目中配置 pom.xml 文件,以从中创建一个 Spring Boot 项目。

pom.xml 文件:

 <project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.javatpoint</groupId> <artifactId>spring-boot-example</artifactId> <version>0.0.1-SNAPS<name>JavaTpoint Spring Boot Example</name> </project>

配置涉及向 Maven 项目添加父级。 这会将 Maven 项目声明为父项目的子项目。

 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.2.RELEASE</version> </parent>

第 4 步:接下来,将 web 依赖项 spring-boot-starter-web 添加到 pom.xml。

 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>

第 5 步:添加项目的 Java 版本。

 <properties> <java.version>1.8</java.version> </properties>

第六步:注意每次添加新的依赖,都需要更新Maven项目。

第 7 步:通过在src/main/java 包中创建一个 Java 类,使 Maven 项目可运行。

步骤 8:接下来,调用 Spring Application 的类静态运行方法。

第 9 步:最后,将该类作为 Java 应用程序运行。

Spring Boot 与 Spring 相比有哪些优势?

  • Spring Boot 使用 Boot 初始化程序编译源语言的引导功能(一种称为引导的技术)可以节省用户设备上的空间并减少应用程序的加载时间。
  • 与 Spring 不同的是,Spring Boot 允许在添加 spring-boot-dependencies 后进行依赖管理,而不依赖于父 POM(父对象模型)或 XML 文件。
  • Spring Boot 还允许开发人员使用注解或 XML 配置,而无需使用 XML 配置。
  • 开发人员更喜欢 Spring Boot,因为它减少了设置应用程序所需的样板代码。 这是因为 Spring Boot 带有一个内存数据库和一个嵌入式 Tomcat 服务器,从而减少了样板代码。 另一方面,Spring 有更多样板代码。
  • Spring Boot 不一定需要 WAR(web application resource) 文件,只能依赖 JAR(Java Resource),JAR(Java Resource) 结构更小更简单,因此对用户和开发者更有用。
  • Spring Boot 还会自动嵌入 Tomcat 和 Jetty 等服务器; 因此,开发人员不需要像在 Spring 中那样手动设置服务器。

如何在 Spring Boot 中进行分页?

分页过程将数据分成多个部分以节省资源。 它需要两个字段,页面大小和页码。

该过程涉及几个步骤,包括:

第 1 步:初始设置
Consisetupn 实体,我们将 Person 命名为域类。

 @Entity public class Person { @Id private long id; private String name; }

步骤 2:存储库创建
接下来,使用PersonRepository extends PagingAndSortingRepository以分别获取用于分页和排序的findAll(Pageable pageable ) 和findAll(Sort sort)方法。

 public interface PersonRepository extends PagingAndSortingRepository<Person, Integer> { List<Product> findAllByPrice(double price, Pageable pageable); }

第三步:分页步骤
这里的第一步涉及创建一个PageRequest对象; 通过根据请求传递实现Pageable接口的页码和页面大小。

 Pageable firstPageWithTwoElements = PageRequest.of(0,2); Pageable secondPageWithThreeElements = PageRequest.of(1,3);

然后将此PageRequest对象作为参数传递给存储库方法。

 Page<Person> allProducts = personRepository.findAllByPrice(findPageWithTwoElements); List<Items> allTwoDollarItems = itemsRepository.findAllByPrice(2, secondPageThreeElements)

默认情况下, findAll(Pageable pageable)方法将返回一个Page<T>对象。

说明如何注册自定义自动配置

在 @EnableAutoConfiguration 键 META-INF/spring.factories 文件下,提及完全限定名称。 此步骤注册自动配置类。

 org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.baeldung.autoconfigure.CustomAutoConfiguration

使用 Maven 构建项目需要您将文件放在resources/META-INF目录中。

Spring Boot 中的引导是什么?

Bootstrapping 是在启动时在 Spring Boot 应用程序中执行逻辑的过程。
Boot initializr 在 Spring Boot 中编译源语言。 这个过程节省了设备空间,也减少了应用程序的加载时间。

最后的话

好吧,这篇文章涵盖了面试官在面试期间可能会问你的一些 Spring Boot 问题,以及帮助你自信地应对它的答案。 我们希望你能找到梦想的工作!

您可能还想从 Java 面试中提出的问题中学习一些相关的技巧。

祝你好运!