22个常见的Spring Boot面试问题和答案
你是一位Java Spring Boot开发者,期待在即将到来的面试中脱颖而出,但不确定会有什么问题?我们在这里帮助你!
本文将通过概述一些常见的Spring Boot面试问题和答案来帮助你做好充分的准备,面试官可以用这些问题来测试你的能力。
面试官使用策略性的Java Spring Boot问题来测试受访者在其指定角色中相关技能水平。因此,你需要准备相关问题并知道如何回答。
在直接进入面试问题及其对应答案之前,让我们先对Spring Boot是什么以及它对Java开发者有多么有帮助进行一个基本概述。
什么是Java Spring Boot?
这是一个由Pivotal团队于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 Beans和数据库事务等是其他有用的功能。
因此,现在你对Spring Boot有了一个基本的概述,让我们来考虑一些常见的Spring Boot面试问题和答案,这将帮助你为面试做好准备。
Spring Boot面试问题和答案
Spring Boot有哪些特点?
其中一些受欢迎的特点包括:
- Spring Boot CLI为编写Spring Boot应用程序提供了Groovy语言,从而避免了样板代码。
- Spring Boot提供了日志记录和安全功能,可以轻松保护应用程序免受潜在的威胁。
- 它为项目自动配置相关组件,从而避免了不必要的WAR文件的风险。
- 启动器初始化器为你提供了默认的项目内部结构,这样你就不必手动设置项目结构。
- Spring Boot的执行器功能可以在应用程序运行时访问洞察和指标。
- 当然,Spring Boot的一个关键特性Starter Dependency有助于聚合特定功能的常用依赖项。
什么是Spring Boot Starters?
Spring Boot Starters是包含一组依赖管理提供程序的依赖描述符,它们使应用程序的依赖关系能够自动解决。它们为框架提供了自动依赖解决方案。启动器可以增强简化和快速开发。
Spring Boot中的执行器是什么,它有什么优势?
执行器是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文件,并使用从控制器类传递的实际值替换index文件中可用的动态值。
之后,一旦Spring Boot应用程序运行,消息将在Web浏览器中呈现。
org.springframework.boot spring-boot-starter-thymeleaf
使用Spring Initializer创建Spring Boot项目的过程是什么?
Spring Initializr是一个Spring Web工具,它允许您通过提供项目的详细信息来创建Spring Boot项目。
- 访问Spring intializr并填写输入字段。
- 单击“生成”按钮将开始项目下载。
- 从zip文件中提取下载的项目,并从IDE中打开它。从IDE中,导航到“文件->新建->来自现有源->Spring-boot-app”,然后选择pom.xml文件。点击导入更改提示,以便项目同步。之后,记得打开application.properties文件并将server.port数字编辑为
server.port=7000
。 - 现在,从src->main->java->com.gfg.Spring.boot.app运行该应用程序
Spring Boot中的JPA是什么?
这是Java中的一个规范,它使用对象关系映射(ORM)来管理关系数据,并允许在Java对象或Java类和应用程序的关系数据库之间访问数据。
JPA使用Java持久化查询语言(JPQL),它是一个面向对象的查询语言,也是与平台无关的。
JPA允许使用它提供的实体管理器API对数据库进行查询处理和对象事务。
Spring Boot中的自动配置是什么?
自动配置旨在使用您添加到应用程序的jar依赖项自动配置Spring Boot应用程序。
根据应用程序Classpath中可用的依赖项,自动配置将声明Spring特定模块的内置对象,包括JPA和Spring Security等。
什么是Spring注解?
Spring注解是指提供有关程序片段的元数据的注解,并向该程序添加了补充数据。代码组件,包括类和方法,通常与注解相关联。
注解不会直接影响程序的操作或已编译代码的后续操作。
它们的语法以‘@’符号开头。
Spring Boot提供了六种主要的注解类型,包括:
- Spring核心注解
- Spring Data注解
- Spring Bean注解
- Spring Web注解
- Spring调度注解
- Spring Boot注解
Spring Data REST是什么意思?
Spring Data REST使用最少的代码公开围绕Spring Data资源的RESTful资源。
以下示例使用POST方法请求内容,URL为http://localhost/example,Header为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 DevTools是一组预定义工具,其属性应用于相应的开发环境,使开发更容易,节省开发时间。
每当您更改Spring Boot应用程序中的代码时,Spring Boot DevTools功能会自动重启。因此,它可以帮助您省去每次更改代码时手动重启应用程序的麻烦。
什么是Spring Data?
Spring Data旨在为开发人员提供对数据访问技术(如关系型和非关系型数据以及基于云的数据服务)的简单访问,同时保持底层数据存储的特殊特性。
如何告诉自动配置在存在bean时退出?
在这里,您将使用@ConditionalOnMissingBean注解,该注解包含以下名称和值属性。
- value属性存储要检查的bean类型
- name属性用于命名要检查的bean
如何在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 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文件,然后点击“确定”。
- 创建一个名为log4j.properties的新Java文件,并点击“完成”,将此文件添加到类路径中。
- 从类路径中选择高级选项,然后选择添加文件夹选项,记得点击“确定”。
- 现在可以搜索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文件:
4.0.0
com.javatpoint
spring-boot-example
0.0.1-SNAPSJavaTpoint Spring Boot Example
配置包括将父项添加到Maven项目。这将将Maven项目声明为父项目的子项目。
org.springframework.boot
spring-boot-starter-parent
1.4.2.RELEASE
第四步:接下来,将web依赖项spring-boot-starter-web添加到pom.xml中。
org.springframework.boot
spring-boot-starter-web
第五步:添加项目的Java版本。
1.8
步骤6:请注意,每次添加新的依赖项时,您需要更新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应用程序资源)文件,只能依赖于JAR(Java资源),它具有更小更简单的结构,因此对用户和开发人员更有用。
- Spring Boot还自动嵌入服务器(如Tomcat和Jetty);因此,开发人员无需像在Spring中那样手动设置服务器。
如何在Spring Boot中进行分页?
分页过程将数据分成部分以节省资源。它包括两个字段,即页面大小和页面号。
该过程涉及几个步骤,包括:
步骤1:初始设置
创建实体,我们将其命名为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 {
List findAllByPrice(double price, Pageable pageable);
}
步骤3:分页步骤
这里的第一步是创建一个PageRequest对象,通过传递页面号和页面大小来请求实现Pageable接口。
Pageable firstPageWithTwoElements = PageRequest.of(0,2);
Pageable secondPageWithThreeElements = PageRequest.of(1,3);
然后将这个PageRequest对象作为参数传递给存储库方法。
Page allProducts = personRepository.findAllByPrice(findPageWithTwoElements);
List 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应用程序启动时执行逻辑的过程。
引导初始化器将源语言编译成Spring Boot。这个过程节省了设备空间,也减少了应用程序的加载时间。
最后的话 👨💻
好了,本文涵盖了一些在面试中面试官可能会问到的Spring Boot问题以及帮助您自信应对的答案。我们希望您能获得那份梦寐以求的工作!
您可能还想从Java interview中了解一些相关问题的提示。
祝您好运!🙂