为 Java Spring Boot 面试做好准备
你是一名 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 提供了一种约定俗成的方式来设置默认配置值并安装所需的依赖包,从而有助于快速设置项目。
- Spring Boot 允许你独立运行应用程序,无需依赖网络服务器。
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,以及如何使用 Thymeleaf?
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 项目。
- 前往 Spring Initializr 并填写输入字段。
- 单击“生成”按钮开始项目下载。
- 从 zip 文件中提取下载的项目,并在你的 IDE 中打开它。在 IDE 中,导航至“文件”->“新建”->“从现有来源创建项目”->“Spring Boot 应用程序”,然后选择 pom.xml 文件。单击“导入更改”提示以同步项目。在此之后,请记得转到 application.properties 文件,并将 server.port 编辑为 server.port=7000。
- 现在,从 src->main->java->com.gfg.Spring.boot.app 运行应用程序。
Spring Boot 中的 JPA 是什么?
JPA 是 Java 中的一种规范,它使用对象关系映射 (ORM) 来管理关系数据,并允许访问 Java 对象或 Java 类与应用程序的关系数据库之间的数据。
JPA 使用 Java 持久化查询语言 (JPQL),这是一种面向对象的、独立于平台的查询语言。
JPA 允许使用它提供的实体管理器 API 对数据库进行查询处理和对象事务。
Spring Boot 中的自动配置是什么?
自动配置旨在自动化 Spring Boot 应用程序的配置,使用你添加到应用程序的 jar 依赖项。
根据应用程序的类路径中可用的依赖项,自动配置将声明特定于 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 应用程序中的代码时,Spring Boot DevTools 功能都会自动重新启动。 因此,它省去了每次更改代码时手动重新启动应用程序的麻烦。
什么是 Spring Data?
Spring Data 旨在让开发人员轻松访问各种数据访问技术,例如关系和非关系数据以及基于云的数据服务,同时保留底层数据存储的特殊特征。
当 bean 存在时,如何告诉自动配置退出?
可以使用 @ConditionalOnMissingBean 注解,它包含如下的 name 和 value 属性。
- value 属性存储要检查的 bean 类型。
- name 属性指定要检查的 bean 的名称。
Spring Boot 如何从数据库中获取数据?
可以使用以下步骤将数据从 MySQL 数据库访问到 Spring Boot 应用程序。
步骤 1:在 MySQL 中使用 create DATABASE person 命令创建数据库。
步骤 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 进行日志记录:
- 首先,创建你的 Java 项目,然后右键单击该项目。导航至 MyEclipse->“文件”->“新建”->“Java 项目”,命名项目,然后单击“完成”。
- 接下来,右键单击你的 Java 项目名称,然后选择“构建路径”->“配置构建路径”。 此步骤将添加 log4j 文件。
- 导航至“库”并单击“添加外部 JAR”按钮,然后从出现的下拉菜单中选择 log4j 文件。然后单击“确定”。
- 创建一个新的 java 文件,并将其命名为 log4j.properties 文件,然后单击“完成”并将此文件添加到类路径。
- 在类路径中单击“高级”,然后选择“添加文件夹”选项,并记住单击“确定”。
- 现在你可以搜索 log4j.properties 文件,单击“确定”,然后运行该项目。
- 检查控制台以获取以下输出。
[main] DEBUG Example – Hello this is a debug message [main] INFO Example – Hello this is an info message
什么是 IoC 容器?
IoC(控制反转)容器是 Spring 的核心容器,它自动实现依赖注入。 它实例化应用程序的类,并负责对象的配置和所需依赖项的组装。
它还管理对象从实例化到销毁的生命周期。
IoC 使用 Java 代码、XML 和 Java 注解中的元数据配置来执行这些任务。
容器被称为控制反转,因为它控制 Java 对象和这些对象的生命周期。否则,这是开发人员的任务。
讲解如何使用 Maven 创建 Spring Boot 应用程序
这个过程需要一系列步骤。
第一步:选择项目类型。
第二步:命名你的项目进行配置,然后单击“完成”按钮创建项目。
第三步:现在,我们将从 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>
第四步:接下来,将 web 依赖项 spring-boot-starter-web 添加到 pom.xml。
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
第五步:添加项目的 Java 版本。
<properties> <java.version>1.8</java.version> </properties>
第六步:注意每次添加新的依赖,都需要更新Maven项目。
第七步:通过在 src/main/java 包中创建一个 Java 类,使 Maven 项目可运行。
第八步:接下来,调用 Spring Application 的类静态运行方法。
第九步:最后,将该类作为 Java 应用程序运行。
Spring Boot 与 Spring 相比有哪些优势?
- Spring Boot 使用 Boot Initializer 编译源语言的引导功能(一种称为引导的技术),可以节省用户设备上的空间,并减少应用程序的加载时间。
- 与 Spring 不同的是,Spring Boot 允许在添加 spring-boot-dependencies 后进行依赖管理,而无需依赖于父 POM(父对象模型)或 XML 文件。
- Spring Boot 还允许开发人员使用注解或 XML 配置,而无需使用 XML 配置。
- 开发人员更喜欢 Spring Boot,因为它减少了设置应用程序所需的重复代码。 这是因为 Spring Boot 带有一个内存数据库和一个嵌入式 Tomcat 服务器,从而减少了样板代码。 另一方面,Spring 有更多重复代码。
- Spring Boot 不一定需要 WAR(Web 应用程序资源) 文件,只能依赖 JAR(Java 资源),JAR(Java 资源) 结构更小更简单,因此对用户和开发人员更有用。
- Spring Boot 还会自动嵌入 Tomcat 和 Jetty 等服务器;因此,开发人员不需要像在 Spring 中那样手动设置服务器。
分页过程将数据分成多个部分以节省资源。 它需要两个字段:页面大小和页码。
此过程涉及以下几个步骤:
步骤 1:初始设置
设置实体,将其命名为 Person,作为域类。
@Entity public class Person { @Id private long id; private String name; }
步骤 2:存储库创建
接下来,使用 PersonRepository 扩展 PagingAndSortingRepository 以分别获取用于分页和排序的 findAll(Pageable pageable) 和 findAll(Sort sort) 方法。
public interface PersonRepository extends PagingAndSortingRepository<Person, Integer> { List<Product> findAllByPrice(double price, Pageable pageable); }
步骤 3:分页步骤
这里的第一步涉及创建一个 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
说明如何注册自定义自动配置
在 @EnableAutoConfiguration 键的 META-INF/spring.factories 文件下,提及完全限定的名称。此步骤将注册自动配置类。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.baeldung.autoconfigure.CustomAutoConfiguration
使用 Maven 构建项目时,需要将文件放置在 resources/META-INF 目录中。
Spring Boot 中的引导是什么?
引导是在启动时在 Spring Boot 应用程序中执行逻辑的过程。
Boot Initializr 在 Spring Boot 中编译源语言。此过程节省了设备空间,并且缩短了应用程序的加载时间。
最后的话👨💻
本文涵盖了面试官在面试期间可能会问到的一些 Spring Boot 问题,以及帮助你自信地应对这些问题的答案。我们希望你能找到你梦想的工作!
你可能还需要学习一些 Java 面试中提出的相关问题。
祝你好运!🙂