Spring Certified Professional 2022 的认证考试Spring Professional Develop (2V0-72.22) 是 60道题目,按照等级分方法获得 300 分即为及格。考生有 130 分钟完成考试,其中包括足够的时间让非英语母语人士去完成考试。
考生建议至少有6到12个月的经验。考生既要有很强的概念理解能力,又有使用 Spring 框架的编程经验。需要了解 Spring 和 Spring Boot 的主要特性,包括用配置、数据访问,REST,AOP,自动配置,执行器,安全性和 Spring 测试框架来构建企业和 微服务应用程序。
Spring Core
数据管理
Spring MVC
测试
测试Spring应用程序
使用 SpringBoot 和 MockMVC 进行高级测试
安全
Spring Boot
Spring Boot 特 性 介 绍
Spring Boot 属性和自动配置
Spring Boot 执 行 器
| 名称 | 版本 | 文档 |
|---|---|---|
| Spring Framework Documentation | Spring Framework 5.3 | https://docs.spring.io/spring-framework/docs/current/reference/html/ |
| Spring Core Technologies | Spring Framework 5.3 | https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#spring-core |
| Spring Data Access | Spring Framework 5.3 | https://docs.spring.io/spring-framework/docs/current/reference/html/data-access.html#spring-data-tier |
| Spring Framework Testing | Spring Framework 5.3 | https://docs.spring.io/spring-framework/docs/current/reference/html/testing.html#testing |
| Spring Framework Mvc | Spring Framework 5.3 | https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#spring-web |
| Spring Security | Spring Framework 5.3 | https://docs.spring.io/spring-security/reference/ |
| Spring Data Jpa | Spring Data 2021.0 | https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#reference |
| Using Spring Boot | Spring Boot 2.5 | https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using |
| Spring Boot Futures | Spring Boot 2.5 | https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features |
| Spring Boot Actuator | Spring Boot 2.5 | https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator |
| Spring Boot Build Tools Plugins | Spring Boot 2.5 | https://docs.spring.io/spring-boot/docs/current/reference/html/build-tool-plugins.html#build-tool-plugins |
A.如果存在活动事务,则在嵌套事务中运行;如果没有活动事务,则抛出一个异常
B.如果已经存在事务,则支持该事务;如果没有活动事务,则抛出一个异常
C.总是启动新事务;如果已经存在活动事务,则暂停该事务
D.总是启动新事务;如果已经存在活动事务,则抛出一个异常
【正确答案】C
A.第(1)、(2)种说法是正确的
B.所有的说法都是正确的
C.这些说法都不正确
D.第(2)、(3)种说法是正确的
E.第(1)、(3)种说法是正确的
【正确答案】B
A.用于方便地从某个外部属性文件中查找并返回单个属性值
B.用于从某个外部来源向 Spring Environment 添加一组额外的 name/value 对
C.用于指定 Spring Boot 应用程序中 application. properties 文件的位置
D.Spring 框架中没有这样的注解
【正确答案】B
A.只有当 test 类或 test 方法被注解为@Commit(false)时,事务才会在测试后回滚出来
B.默认情况下,每次测试后,事务将自动回滚
C.用@Transactional 来注解 test 类,会使其所有的 test 方法在事务中运行
D.用@Transactional 来注解 test 方法,会使 test 方法在事务中运行
【正确答案】A
A.这将无法编译。不能在类级声明 timeout,propagation 以及 isolation 等属性
B.30
C.60
D.90
E.这将无法编译。不能在方法级声明 timeout,propagation 以及 isolation 等属性
【正确答案】B
A.Spring提取了现有的Mock框架
B.Spring提供了一个内部的Mock框架,所以不需要第三方的Mock框架,如 Mockito或 EasyMock
C.前两个答案是正确的
D.前两个答案都不正确
【正确答案】B
A.你的 Java 代码通常在 Spring Framework 类上有依赖项,这些类的设计是为了使单元测试的工作更容易
B.Spring Framework 鼓励你按接口编程,这样可以更容易地在代码中存根或模拟出依赖项
C.Spring Framework 框架鼓励你尽可能地在一个测试中结合单元测试和集成测试
D.Application Context 在初始化时进行了大量的运行时检查,使得传统的单元测试变得不那么重要
【正确答案】B
A.与 Application 的主@Configuration 类名称相匹配的一个 properties 文件
B.application. properties 或 application.yml,通常位于根 classpath 中
C.config.properties 或 config.yml,通常位于根 classpath 中
D.Spring Boot 不会自动查找任何属性文件,除非特别指示(例如使用@PropertySource)
【正确答案】B
A.如果存在活动事务,则在嵌套事务中执行;如果没有事务,则启动一个新的事务
B.如果已经存在事务,则在该事务中执行;如果没有事务,则在没有事务上下文的情况下执行
C.如果已经存在事务,则在该事务中执行;如果没有事务,则启动一个新的事务
D.如果已经存在事务,则在该事务中执行;如果没有活动事务,则抛出一个异常
【正确答案】C
public class ClientServiceImpl implements ClientService{
@Transactional (propagation=Propagation.REQUIRED)
public void update1() { update2(); }
@Transactional(propagation=Propagation.REQUIRES_NEW)
public void update2(){ } }
A.只有一个事务,因为如果已经存在一个事务,REQUIRES_NEW 将使用一个活动事务
B.有 2 个事务,因为 REQUIRES_NEW 总是在一个新的事务中运行
C.只有一个事务,因为对 update2()的调用是内部的(不通过代理)
【正确答案】C
Spring 将每个 bean 实例放在一个作用域中。默认的作用域是什么?(选择一项)
A.request
B.session
C.prototype
D.singleton
【正确答案】D
public interface CustomerRepository extends CrudRepository {}
A.为了成功使用任何 Spring Data 实现(JPA、 MongoDB、 Gemfire 等), Customer 类上需要 JPA 注解
B.该类的实现可以由 Spring Data JPA 自动生成
C.实现 CustomerRepository 的类必须由开发者编码并声明为 Spring Bean
D.CustomerRepository 应该是一个类,而不是一个接口
【正确答案】B
@Configuration
public class AppConfig{
@Bean
public ClientService clientService(){ return new ClientServiceImpl(); }
}
A.clientServiceImpl(以小写"c"开头)
B.clientService(以小写"c"开头)
C.ClientServiceImpl(以大写"C"开头)
D.ClientService(以大写"C"开头)
【正确答案】B
当使用 Spring Boot 配置和运行 Web 应用程序时,你应包含哪个依赖项以在开发过程中更改代码时启用应用程序的自动重启?(选择一项)
A.spring-boot-starter-devtools
B.spring-boot-restart
C.spring-boot-devtools
D.spring-boot-initializr
【正确答案】C
A.为每个测试方法初始化并创建一个新的 ApplicationContext
B.在一个应用程序中,你必须使用 JUnit 4 或 JUnit 5 进行所有的测试
C.你可以通过@ContextConfiguration 来说明测试类将使用哪些配置类
D.为了获取要测试的 Spring Bean 的引用,你需要在提供的 Application Context 上调用 getBean()
【正确答案】C
A.一个特定的 POM,你必须构建它来控制 Boot 的意见运行时
B.一种简单的方法,可以包含多个与特定技术相关的、协调的依赖项,如 web 或 JDBC
C.一种设置,用于指定你希望 Spring Boot 生成的代码
D.一个已有的模型项目,供你下载并作为项目的基础
【正确答案】B
A.如果事务性方法抛出任何异常包括检查异常, Spring 将回滚事务
B.可以使用@EnableTransactionManagement 启用事务
C.可以把@Transactional 放在任何方法上,以表示它应该是事务性的
D.可以将@Transactional 放在任何接口上,以表示它的所有方法都应该是事务性的
【正确答案】B,C,D
这个题感觉有点问题,@Transactional 再加 private 方法上是无效的,但是这里 C 选项说的是“表示是事务性的”。感觉有点玩文字游戏。
A.你在 Spring Boot 应用程序中只能有一个 CommandLineRunner 或一个 ApplicationRunner
B.如果你需要 ApplicationArgumentsiString 而不是原始数组你应该实现 ApplicationRunner 而不是 CommandLineRunner
C.不能将依赖项 bean 注入 CommandLineRunner 或 ApplicationRunner 中
D.需要将 CommandLineRunner 或 ApplicationRunner 创建为一个 bean
【正确答案】B,D
CommandLineRunner是一个接口,用来处理程序启动时传入的参数,比如java -jar demo.jar hello world。
ApplicationRunner是一个接口,用来处理程序启动时传入的参数,与CommandLineRunner不同的是它的入参是被封装的参数类型ApplicationArguments。
CommandLineRunner和ApplicationRunner都在 spring boot 程序启动过程中被调用。
A.将@EnableTransactionManagement 添加到一个 Java 配置类中
B.写一个 Spring AOP advice 来实现事务性行为
C.用@Transactional 注解来注解一个需要事务的接口、类或单个方法
D.用@Service 和@Transactional 注解来注解一个类
【正确答案】A,C
A.在 Spring Boot 应用程序中,每个测试类都必须用@SpringBootTest 来注解
B.你不能指定配置类作为@SpringBootTest 的属性
C.@SpringBootTest 通常用于集成测试
D.用@SpringBootTest 注解的测试代码没有任何配置类,在应用程序中只有一个用@SpringBootConfiguration 注解的类
【正确答案】C,D
C 选项,集成测试指的是将所有涉及的组件(类)放在一起一块进行测试,相当于我们平时用 postman 直接请求接口这样测试,@SpringBootTest 注解中是可以指定 webEnvironment 属性的。
D 选项的意思是用 @SpringBootTest 注解的类不需要再提供一个对
ApplicationContext进行配置。框架会去自动寻找被 @ContextConfiguration , @Configuration , @SpringBootConfiguration 注解的配置类。
A.即使其他配置类被显式地指定,它也会搜索用@SpringBootConfiguration 注解的类
B.如果你使用 RANDOM_PORT、DEFINED_PORT 或 MOCK,服务器会被测试框架启动和停止
C.它自动配置了一个 TestRestTemplate bean
D.它支持不同的 webEnvironment 模式,如 RANDOM_PORT、DEFINED_PORT、MOCK 和 NONE
【正确答案】C,D
RANDOM_PORT、DEFINED_PORT 或 MOCK 不会去启动服务器,只会创建 web application context .
TestRestTemplate 是
spring-boot-test.jar包中的类,为了方便进行测试。webEnvironment NONE 模式下,不会创建 web application context ,只会创建 application context.
Spring-boot-starter-test 提供了哪些依赖项?(选择三项)
A.Cucumber
B.spring-test
C.Hamcrest
D.JUnit
E.EasyMock
【正确答案】B,C,D
JdbcTemplate 可以用来查询哪些类型的对象?(选择三项)
A.Domain Objects
B.简单类型(int、long、 String 等)
C.JSONObject
D.Generic Maps
【正确答案】A,B,D
A.通过调用 ApplicationContext 对象的 getProperty(...)方法
B.通过自动创建的 Properties 对象
C.通过 Spring Environment 对象
D.通过一个@Value 注解的构造函数参数
【正确答案】C,D
A.获得连接
B.执行语句
C.定义数据源
D.生成 SQL 语句
E.解除连接
【正确答案】A,B,E
Spring handle : Acquisition of the connection; participation in the transaction; execution of the statement; processing of the result set; handling exceptions; release of the connection.
A.当有一个依赖项 bean 要被模拟时,它通常会与@MockBean 结合使用
B.它通常与 JUnit4 中的@RunWith(MockitoJUnitRunner.class)或 JUnit5 中的@ExtendWith(MockitoExtension. class)一起使用
C.它自动配置了一个 MockMvc bean
D.它用于在运行中的服务器上测试 Spring MVC 组件,如@Controller
【正确答案】A,C
A.它简化了向分布式事务的迁移
B.从本地事务切换到分布式事务,只需更改 Spring 配置就可以了
C.它提取了本地事务和分布式事务的区别
D.在本地事务和分布式事务的代码中事务失败的处理方式需要有所不同
【正确答案】A,B,C
A.你可以通过将自动配置类子类化,明确地禁用一些自动配置
B.你可以通过在 application. properties 文件中设置一个属性或使用@EnableAutoConfiguration 注解上的 exclude 属性来明确地禁用一些自动配置
C.如果某些自动配置不适合你的需要,你可以明确地禁用它
D.你只能禁用所有的自动配置。即,你不能只禁用部分自动配置
【正确答案】B,C
在 application. properties 配置文件中禁用自动配置
A.它使 Spring Boot 启用自动配置
B.由于该类不是一个@Configuration 类,所以在该类中不能有@Bean 方法
C.它使 Spring 从该类的包开始执行组件扫描
D.它使 Spring Boot 构建一个可执行的 JAR 应用程序
【正确答案】A,C
@Bean
@ConditionalOnBean(name = "dataSource")
public JdbcTemplate jdbcTemplate(DataSource dataSource){ return new JdbcTemplate(dataSource); }
A.该代码存在语法错误
B.当已经创建了一个名为"dataSource"的 bean 时,将创一个 JdbcTemplate bean
C.应将@ConditionalOnBean(name = "dataSource")替换为@ConditionalOnBean(DataSource.class).以提高灵活性
D.当 DataSource 类在 classpath 中,但不存在 DataSource bean 时,将创建一个 JdbcTemplate bean
【正确答案】B,C
A.writeOnly
B.nestedTransaction
C.isolation
D.propagation
【正确答案】C,D
A.Spring 可以使用@Transactional 注解将多个 JPA persistence 操作协调到一个事务中
B.在使用 JPA 时,Spring 需要一个 persistence.xml 配置文件,因为 JPA 规范中要求这个文件
C.Spring 允许将 EntityManagerFactory 配置为 Spring Bean
D.Spring 提供了自己的 JPA 实现
【正确答案】A,C
A."fat"jar 必须是 JAR 文件,不能是 WAR 文件
B."fat"jar 可以包含多个嵌入式服务器
C."fat"jar 会被 Spring Boot Maven 插件或 Gradle 插件构建起来
D."fat"jar 可以在容器和云平台上轻松部署
【正确答案】C,D
A.JdbcTemplate 提供了处理结果集的能力
B.所有的 JdbcTemplate 方法都会抛出你需要处理的 SQLExceptions
C.JdbcTemplate 提供了查询执行的方法
D.JdbcTemplate 为你生成 SQL 语句
【正确答案】A,C
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependencies>
A.将使用嵌入式数据库自动创建一个DataSource bean
B.如果classpath根目录下有data.sql和schema.sql文件,将自动创建DataSource bean
C.不会自动创建JdbcTemplate bean
D.如果你明确配置了自己的DataSource bean,则会自动创建一个JdbcTemplate bean
【正确答案】C,D
A.当使用 TestRestTemplate 的 getForObject(..)方法时,你需要提供完整的路径(就像你在 RestTemplate 中做的那样),而不是作为第一个参数的相对路径
B.它可以方便地替代 RestTemplate 进行集成测试
C.它是 RestTemplate 类的一个子类
D.当使用@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)时,预先配置的 TestRestTemplate 知道向哪个端口发送请求
【正确答案】B,D
TestRestTemplate不是RestTemplate的子类,它内部含有一个RestTemplate实例。
A.它既可以用来测试JPA组件,也可以用来测试NoSQL组件
B.它使用一个内存数据库作为默认的数据源
C.它自动配置了一个TestEntityManager bean
D.TestEntityManager提供了Entity Manager所提供的所有方法,还有更多的方法
【正确答案】B,C
A.只在 setter 方法中使用@Qualifier 注解(@Autowired 对于 setter 是可选的)
B.使用@Qualifier 和@Autowired 注解以及 setter 方法
C.在字段上同时使用@Qualifier 和@Autowired 注解
D.只在字段上使用@Qualifier 注解(@Autowired 对字段是可选的)
【正确答案】B,C
A.Spring Boot 会生成你的应用程序所需的所有应用程序级别的配置文件
B.Spring Boot 允许不同的打包选项,例如将 Tomcat 打包为应用程序 JAR 文件中的嵌入式容器
C.Spring Boot 是一个苛刻的运行时,它要求遵守规定的方法,不能有任何偏差
D.Spring Boot 试图让开发者摆脱最可预测的低级设置
【正确答案】B,D
A.可以使用 Autowired 将多个参数注入到一个方法中
B.默认情况下,如果一个依赖项不能用@Autowired 来满足, Spring 会抛出一个 RuntimeException
C.它不能用来注解字段,只能用来注解构造函数和方法
D.如果在一个类上使用了@Autowired,则会自动对所有的依赖项进行字段注入
【正确答案】A,B
A.你只能用它定义 Spring Boot 属性,你必须将你的属性放在不同的文件中
B.如果它们位于当前目录的"/config"子目录下, Spring Boot 会找到它们
C.即使在环境中或使用命令行参数定义属性,application. properties 或 application.yml 中的属性总是覆盖其他的属性
D.在特别的属性文件中定义的属性,如 application-production.properties 或 application-production.yml,将覆盖在application. properties 或 application.yml 文件中定义的属性
【正确答案】B,D
A.spring-boot-starter-test 依赖项提供了@Mock 和@MockBean 等注解
B.你可以使用@SpringBootTest 或@ContextConfiguration 来创建 Spring 应用上下文
C.它同时支持集成测试和分片单元测试
D.它支持即用的 EasyMock
【正确答案】B,C
@Mock 注解是
mockito库中的,spring-boot-stater-test 中依赖了mockito没有依赖EasyMock.
Spring Boot Testing Framework provides a set of annotations and utilities for testing: @SpringBootTest, @WebMvcTest, @WebFluxTest, @DataJpaTest, @DataJdbcTest, @JdbcTest, @DataMongoTest, @DataRedisTest, @MockBean. --- Integration Testing with @SpringBootTest : Automatically searches for @SpringBootConfiguration, it is an alternative to @ContextConfiguration for creating application for testing, Use @SpringBootTest for integration testing and use @ContextConfiguration for slice
A.classpath 的内容
B.特定 bean 的预先存在
C.你的应用程序的包结构
D.在 application.properties 或 application.yml 文件中设置的特定外部属性,如 spring.datasource.*属性等
E.无论你的应用是否是一个多模块对象
【正确答案】A,B,D
Spring Boot 会在 classpath 下寻找
META-INF/spring.factories配置文件包含了自动配置相关配置项。@ConditionalOnBean,@ConditionalOnProperty用来控制自动配置 。
A.如果没有 application. properties 或 application.yml 文件,就不能使用它
B.它是由@SpringBootConfiguration 合成的注解的元注解
C.它是由@SpringBootApplication 合成的注解的元注解
D.它使 Spring Boot 自动创建它认为应用程序需要的 bean
【正确答案】C,D
这个题答案部分感觉翻译的有问题。
A.它提供了一种处理结果集的回调方法
B.开发者仍然负责从/到连接池获取和释放一个连接
C.它可以抛出 checked exceptions
D.它将根原因 checked exceptions 翻译成 Spring 的 DataAccessException 类型
【正确答案】A,D
A.@SpringBootConfiguration
B.@Autowired
C.@SpringApplication
D.@ComponentScan
【正确答案】A,D
A.应用组件之间的依赖项可以在组件本身的外部进行管理
B.配置可以外部化并集中在一小组文件中
C.测试变得更容易,因为在单元测试时,可以很容易地将 mock dependency 对象注入到依赖对象中
D.依赖注入帮助 IDE 生成一些代码
E.依赖注入可以减少应用程序的启动时间
【正确答案】A,B,C
@Entity
public class Customer {
@Id
private Long id;
private String name;
private Date orderDate;
private String email;
}
A.public Customer getSingle(Long id);
B.public Customer findFirstByOrderDateBetween(Date d1, Date d2);
C.public Customer findFirstOrderDateMax();
D.public Customer findByEmail(String email);
【正确答案】B,D
JPA Repository : Auto-generated finders obey naming convention : find(First)By, can be GreaterThan / NotEquals / Between / Like
A.当缺少 bean 时,可能会发生自动配置。但当存在 bean 时,不会发生自动配置
B.自动配置是通过处理 Spring Boot 提供的自动配置类列表来执行的,每个自动配置类都使用不同的条件集
C.只有在应用级配置完成后,才会出现自动配置的情况
D.自动配置发生在应用级配置之前和之后
【正确答案】B,C
Auto-configuration classes processed after explicitly created beans are defined.
A.Spring Data 将 JPA 编程模型和 JPA 注解应用于 MongoDB、Neo4j 和 Redis 等非关系型数据存储中
B.Spring Data 是专门为 JPA 和关系型数据库访问而设计的
C.许多数据存储类型都有 Spring Data 实现,如 MongoDB、Neo4j 和 Redis
D.Spring Data 可以极大地减少数据访问所需的"boilerplate"(样板)代码量
【正确答案】C,D

关于 Spring Certified Professional 考试题目本篇只整理了一部分,后续会继续整理更多的题目。
DevX 会持续有趣的技术和见闻,如果你觉得本文对你有帮助希望你可以分享给更多的朋友看到。该文章会同步在微信公众号 【DevXJava】, 方便在微信客户端阅读。之后可能会制作一些视频讲解 spring 的源码,不过这都取决于忙不忙有没有更多空闲的时间,简单来说就是随缘的心态 : ) Hahaha . 昨天我路过 KFC 想去买个圣代吃,走进去我犹豫了几秒又忍住了,自言自语说哎别他妈吃了,好像人越胖就越喜欢吃甜的东西,话说有谁不爱吃甜甜的东西呢。
DevX 不止于技术

原文作者:DevXTalk;如有侵权,请联系管理员删除。