【单选题】
考虑下面的方法签名。
@PutMapping("/accounts/{id}")
public void update(…) {…}
以下哪种方法是检索账户 id 的有效方法?(选择一项)
A.public void update(@PathVariable long accountId)
B.public void update(@RequestParam(“id”) String accountId)
C.public void update(@RequestParam long accountId)
D.public void update(@PathVariable(“id”) String accountId)
【正确答案】D
【答案解析】题干中的“检索”并不是数据库的检索,只是获取@PutMapping 参数里 id 的值。 如果要获取 URL 中占位符对应的参数值,需要使用@PathVariable 注解,如果设计的方法参数名称与 URL 中占位符名称 不同,则需要配置@PathVariable 注解参数。 对于 Spring 框架而言,只需要值可以填充,可以无视参数类型(Spring 会转换),例如请求中的存在某属性值为 100, 在设计方法参数时,使用 int / long / Integer / Long / String 等都是可以的。 所以,本题的方法参数可以设计为@PathVariable String id,或@PathVariable long id,或 @PathVariable(“id”) String xxx 等。
【单选题】
关于 Spring 对 JPA 的支持,以下哪个说法是正确的?(选择一项)
(1) Spring 支持结合本地或全局事务管理 JPA PersistenceContexts
(2) JPA 提供者是通过设置 EntityManagerFactoryBean 上的 vendor adapter 属性来指定的
(3) 在管理本地事务时,JpaTransactionManager 使用 JPA EntityManagers 来完成这项工作
A.第(1)、(2)种说法是正确的
B.所有的说法都是正确的
C.这些说法都不正确
D.第(2)、(3)种说法是正确的
E.第(1)、(3)种说法是正确的
【正确答案】B
【单选题】
考虑下图中的事务性服务层类。你使用的是 Spring 事务,它内部使用 Spring AOP 调用 update1 方法时,发生了什么事情?
(选择一项)
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
【答案解析】C:Spring 管理事务是基于接口代理的,如果是内部调用,则不重新经过代理对象,则无事务的特性,即在“内部调用” 时,被调用的方法上的@Transactional 是无效的,注解参数更加没有任何意义。
【单选题】
在应用程序的初始化过程中,这些事件将以什么顺序发生?请选择最佳答案。(选择一项)
- Setter 依赖注入
- Bean 构造函数
- 调用 BeanFactoryPostProcessors
- 调用 BeanPostProcessors
A.2,1,3,4
B.2,1,4,3
C.3,1,2,4
D.3,2,1,4
E.4,2,1,3
【正确答案】D
【答案解析】Configuration Lifecycle: Bean detection (read @Bean method signature / @Component scanning) --> BeanFactoryPostProcessor --> Bean instantiation and dependency injection (call @Bean method implementations / instantiation & @Autowired on constructor & Injection of @Autowired methods and fields) --> BeanPostProcessor
【单选题】
考虑以下来自 @Configuration 类的代码,并应用 Spring 的默认行为,选择正确答案(选择一项)
@Configuration
public class MyConfig {
@Bean
public AccountRepository accountRepository(){
return new JdbcAccountRepository();
}
@Bean
public TransferService transferService(){
TransferServiceImpl service = new TransferServiceImpl();
service.setAccountRepository(accountRepository());
return service;
}
@Bean
public AccountService accountService(){
return new AccountServiceImpl(accountRepository());
}
}
A.两个 AccountRepository bean 将被实例化,因为 accountRepository()方法将被调用两次
B.三个 AccountRepository bean 将被实例化,因为 accountRepository()方法将被调用三次
C.一个 AccountRepository bean 将被实例化,因为默认的作用域是 Singleton
D.许多 AccountRepository bean 将被实例化取决于调用 accountRepository(),transferService()和 accountService()的频率
【正确答案】C
【答案解析】C:Spring IoC 的底层是基于代理模式的,即带@Bean 注解的方法是被 Spring 代理的,不会反复创建对象。
【单选题】
当使用 Spring Boot 配置和运行 Web 应用程序时,你应包含哪个依赖项以在开发过程中更改代码时启用应用程序的自动重启?(选择一项)
A.spring-boot-starter-devtools
B.spring-boot-restart
C.spring-boot-devtools
D.spring-boot-initializr
【正确答案】C
【单选题】
关于 Spring和单元测试,以下哪个说法是正确的?(选择一项)
A.Spring提取了现有的Mock框架
B.Spring提供了一个内部的Mock框架,所以不需要第三方的Mock框架,如 Mockito或 EasyMock
C.前两个答案是正确的
D.前两个答案都不正确
【正确答案】B
【答案解析】本题选项可能因为随机打散导致理解困难。
【单选题】
考虑下面的代码示例。以下哪个说法是正确的?(选择一项)
public interface CustomerRepository extends CrudRepository {}
A.为了成功使用任何 Spring Data 实现(JPA、 MongoDB、 Gemfire 等), Customer 类上需要 JPA 注解
B.该类的实现可以由 Spring Data JPA 自动生成
C.实现 CustomerRepository 的类必须由开发者编码并声明为 Spring Bean
D.CustomerRepository 应该是一个类,而不是一个接口
【正确答案】B
【单选题】
在ApplicationContext中定义使用singleton作用域的两个MyBean类型的bean,id为"myBean"1和"myBean2"。getBean(String id)方法对每个bean被调用一次。关于返回的两个引用,哪个说法是正确的?(选择一项)
A.两个引用指向同一类型的不同实例
B.两个引用指向同一个bean实例
C.当ApplicationContext被初始化时,将抛出RuntimeException
D.其中一个引用将是null
【正确答案】A
【单选题】
如果你用@Component 来注解一个类,你应该做以下哪项才能让 Spring 自动检测到注解的类并将其加载为 bean?(选择一项)
A.确保为该类指定一个有效的@Scope
B.确保在 Java 配置中指定一个有效的@ComponentScan 注解
C.确保在@Component 注解中指定一个有效的 bean 名称
D.确保为类指定一个有效的@Bean
【正确答案】B
【答案解析】A:@Scope 用于指定作用域; C:Spring 管理 Bean 可以生成默认的名称,不一定需要显式的指定名称; D:@Bean 注解不是用于类的。
【单选题】
入门 POM 最恰当的描述是什么?(选择一项)
A.一个特定的 POM,你必须构建它来控制 Boot 的意见运行时
B.一种简单的方法,可以包含多个与特定技术相关的、协调的依赖项,如 web 或 JDBC
C.一种设置,用于指定你希望 Spring Boot 生成的代码
D.一个已有的模型项目,供你下载并作为项目的基础
【正确答案】B
【单选题】
考虑下面的配置示例。以下哪个说法是正确的?(选择一项)
@Configuration
public class ApplicationConfig {
@Bean
public RewardNetwork rewardNetwork() {
return new RewardNetworkImpl(accountRepository());
}
@Bean
public AccountRepository accountRepository() {
return new JdbcAccountRepository();
}
}
A.这种配置是正确的
B.这个配置是无效的,因为第一个 bean 应该有一个 id,可以使用@Bean(“rewardNetwork”)来设置它
C.这个配置是无效的,因为第二个 bean 应该有一个 id,可以使用@Bean(“accountRepository”)来设置它
D.这个配置是无效的,因为两个 bean 都应该有一个用@Bean 指定的 id
【正确答案】A
【答案解析】Spring 并不要求为每个 Bean 显式的指定 id/name,即使没有显式的指定,Spring 也会自动为 Bean 设置 id/name。
【单选题】
根据 REST 原则,更新编号为 1234 的 Order 的最佳方式是什么?(选择一项)
A.向/orders/1234 发送 PUT 请求
B.向/orders/1234 发送 POST 请求
C.向/order/edit?id=1234 发送一个 POST 请求
D.向/order/edit?id=1234 发送 PUT 请求
【正确答案】A
【答案解析】在 RESTful 风格中,简单的网络请求可以不将本意体现在 URL 中,只需要表明处理哪类数据、哪个数据等必要参数即可, 且根据请求方式进行区分操作类型,GET 用于获取数据,POST 用于新增数据,PUT 用于修改数据,DELETE 用于删除数 据。
【单选题】
以下哪个说法最能定义"aspect"?(选择一项)
A.程序执行中的一个点,如方法调用或字段分配
B.选择一个或多个 join point 的表达式
C.在被 pointcut 选中的 join point 上执行的代码
D.与 pointcut 结合的 advice 的囊括
【正确答案】D
【答案解析】Aspect: A module that encapsulates pointcuts and advice
【单选题】
哪个说法最能描述 Spring MVC 中的 REST 特性?(选择一项)
A.Spring MVC 的 REST 功能不依赖于 JAX-RS 标准
B.Spring MVC 提供其 JAX-RS 实现
C.Spring MVC 的 REST 功能可以依赖任何 JAX-RS 实现
【正确答案】C
【答案解析】JAX-RS is a Java EE 6 standard for building RESTful applications, Various implements : Jersey (RI), RESTEasy, Restlet, CXF, all implementations provide Spring support
【单选题】
以下哪项是对@PropertySource 注解的最佳解释?(选择一项)
A.用于方便地从某个外部属性文件中查找并返回单个属性值
B.用于从某个外部来源向 Spring Environment 添加一组额外的 name/value 对
C.用于指定 Spring Boot 应用程序中 application. properties 文件的位置
D.Spring 框架中没有这样的注解
【正确答案】B
【单选题】
以下哪个说法最能定义"pointcut"?(选择一项)
A.选择一个或多个 join point 的表达式
B.囊括 advice 的模块
C.程序执行中的点,如方法调用或字段分配
D.在每个选定的 join point 执行的代码
【正确答案】A
【答案解析】An expression that selects one or more Join Points
【单选题】
以下关于在 JUnit 集成测试中使用@Transactional 注解的说法中,哪项不是正确的的?(选择一项)
A.只有当 test 类或 test 方法被注解为@Commit(false)时,事务才会在测试后回滚出来
B.默认情况下,每次测试后,事务将自动回滚
C.用@Transactional 来注解 test 类,会使其所有的 test 方法在事务中运行
D.用@Transactional 来注解 test 方法,会使 test 方法在事务中运行
【正确答案】A
【答案解析】在单元测试方法上使用@Transactional 注解,会使得测试完成后自动回滚(即使无任何异常抛出),除非显式的在方法 上添加@Commit 注解。 另,@Commit 注解不可配置参数,即选项 A 中的代码片段是误
【单选题】
考虑下面的 Spring Security 配置
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.mvcMatchers("/accounts/").hasRole(“USER”)
.mvcMatchers("/accounts/editAccount.htm").hasRole(“ADMIN”);
}
or
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/accounts/").hasRole(“USER”)
.antMatchers("/accounts/editAccount.htm").hasRole(“ADMIN”);
}
请注意,上面的代码并没有遵循一个良好的实践,即更特别的匹配器应该放在次特别的匹配器之前。然而,按原样使用这代码哪个角
色可以访问"/accounts/editAccount. htm"?(选择一项)
A.USER 或 ADMIN
B.不需要角色
C.USER
D.ADMIN
【正确答案】C
【答案解析】题目中是 2 段代码,针对本题而言,效果是完全相同的; Recommended : Use mvcMatchers, uses same matching rules as @RequestMapping, newer API, less error-prone. Examples : — antMatchers("/admin").hasRole(“ADMIN”) --> Only matches /admin — mvcMatchers("/admin").hasRole(“ADMIN”) --> Matches /admin, /admin/, /admin.html, /admin.xxx 当使用 antMatchers()或 mvcMatchers()设置请求认证规则时,对于 URL 是第 1 匹配规则生效,后续再次设置的规则不 生效。
【单选题】
使用下面的图片,考虑遗留类。如何从这个遗留类创建 Spring bean?(选择一项)
public class LegacySingleton {
private static LegacySingleton instance;
private LegacySingleton() {
}
public static LegacySingleton getInstance() {
if(instance == null){
Instance = new LegacySingleton();
}
return instance;
}
}
A.从@Bean 方法返回一个 LegacySingleton 的实例, Spring 会自动调用 getInstance()
B.从@Bean 方法中调用 LegacySingleton.getInstance(),并返回实例
C.采用自动布线
D.不可能,构造函数必须是公共的
【正确答案】B
【答案解析】注意:本题题干中的“遗留类”指的就是代码中的 LagacySingleton 类,类名中的 Lagacy 的译义中有“遗留”的意思。 A:Spring 能自动调用的方法只有被 Spring 上下文加载的类中的@Bean 方法,以上代码中,LagacySingleton 不是被 Spring 上下文加载的类,所以不可能自动调用; C:自动布线(自动装配)是用于为属性注入值的; D:Spring 是基于反射的,无视访问权限。
【单选题】
考虑下面的 Java 配置类,声明的 bean 的 id/名称是什么?(选择一项)
@Configuration
public class AppConfig{
@Bean public ClientService clientService(){
return new ClientServiceImpl();
}
}
A.clientServiceImpl(以小写"c"开头)
B.clientService(以小写"c"开头)
C.ClientServiceImpl(以大写"C"开头)
D.ClientService(以大写"C"开头)
【正确答案】B
【答案解析】默认的 Bean id/name 是@Bean 方法名称,也可通过@Bean 注解的方法
【单选题】
以下哪个说法最能说明"After Returning" advice 类型?(选择一项)
A.通常用于防止任何由 advice 方法抛出的异常在调用栈中传播
B.“After Returning” advice 允许在方法返回后添加行为,即使它抛出了一个异常
C.该 advice 对方法的调用具有完全的控制权,它甚至可以完全阻止方法的调用
D.该 advice 只有在方法成功返回时才会被调用,如果该方法抛出异常则不会被调用
【正确答案】D
【答案解析】A:该 Advice 并不针对异常有特殊的处理; B:该 Advice 仅当方法返回了某个值之后才会执行,如果抛出异常,必然没有返回值; C:不在方法之前执行的 Advice 显然无法阻止方法的调用.
【单选题】
考虑下图中的事务服务层类。
@Transactional(timeout=60)
public class ClientServiceImpl implements ClientService {
@Transactional(timeout=30)
public void update1(){}
}
}
对事务的 update1 方法应用什么超时设置?(选择一项)
A.这将无法编译。不能在类级声明 timeout,propagation 以及 isolation 等属性
B.30
C.60
D.90
E.这将无法编译。不能在方法级声明 timeout,propagation 以及 isolation 等属性
【正确答案】B
【单选题】
关于 Spring 的 JUnit 4 或 JUnit 5 集成测试支持,以下哪个说法是正确的?(选择一项)
A.为每个测试方法初始化并创建一个新的 ApplicationContext
B.在一个应用程序中,你必须使用 JUnit 4 或 JUnit 5 进行所有的测试
C.你可以通过@ContextConfiguration 来说明测试类将使用哪些配置类
D.为了获取要测试的 Spring Bean 的引用,你需要在提供的 Application Context 上调用 getBean()
【正确答案】C
【单选题】
以下哪个说法最能说明使用 Spring Framework 在单元测试方面的好处?(选择一项)
A.你的 Java 代码通常在 Spring Framework 类上有依赖项,这些类的设计是为了使单元测试的工作更容易
B.Spring Framework 鼓励你按接口编程,这样可以更容易地在代码中存根或模拟出依赖项
C.Spring Framework 框架鼓励你尽可能地在一个测试中结合单元测试和集成测试
D.Application Context 在初始化时进行了大量的运行时检查,使得传统的单元测试变得不那么重要
【正确答案】B
【单选题】
Spring RestTemplate 类:(选择一项)
A.A. 可以用来发送和接收使用Spring的RequestEntity的和ResponseEntity定义的数据
B.不能在服务端应用中使用
C.在使用前需要为其明确定义 HttpMessageConverters
D.只能用于与使用 Spring MVC 实现的服务器进行对话
【正确答案】A
【单选题】
默认情况下, Spring Boot 将自动在以下哪个地方查找属性文件?(选择一项)
A.与 Application 的主@Configuration 类名称相匹配的一个 properties 文件
B.application. properties 或 application.yml,通常位于根 classpath 中
C.config.properties 或 config.yml,通常位于根 classpath 中
D.Spring Boot 不会自动查找任何属性文件,除非特别指示(例如使用@PropertySource)
【正确答案】B
【答案解析】Spring Boot looks for application.properties in these locations (in this order) : “/config” sub-directory of the working directory; The working directory; “config” package in the classpath; classpath root
【单选题】
已给出下面的 pointcut,下列哪些关于 Spring AOP 的说法是正确的?(选择一项)
execution(@com.mycomp.MyCustomAnnotation void *(…))
- Spring 不支持其 pointcut 表达式语言内部的注解
- 这将选择代表被@com.mycomp.MyCustomAnnotation 注解的 void 方法的 join point
- 这将选择代表只位于根包中的类的方法的 join point
- 这个 pointcut 将永远无法选择任何 join point
A.说法 2 和 3 是正确的
B.说法 2 是正确的
C.都是错误的
D.说法 4 是正确的
E.说法 1 是正确的
【正确答案】B
【答案解析】说法1:About Pointcuts: Spring AOP uses AspectJ’s pointcut expression language, Spring AOP supports a practical subset.说法3:在execution表达式中,如果是 *(…) 格式,可以通配所有包(含各级子包),如果指定了包名,仅用于选择指定的包,并不包含子包,如果指定包名且需要通配子级包,需要在包名处使用 … 进行通配。
【单选题】
关于以下代码,哪个说法是正确的?(选择一项)(选择一项)
ClientService service = applicationContext.getBean(ClientService.class);
A.这个语法是无效的,因为 getBean()方法调用的结果应该显式地投向 ClientService
B.这个语法是无效的,因为 bean id 必须被指定为方法参数
C.它返回名为"ClientService"的 bean
D.它返回的是一个类型为 ClientService 的 bean(不管它的 id 或名称是什么)
【正确答案】D
【答案解析】以上代码是从 Spring 容器中获取对象的代码,当使用类作为 getBean()参数时,会尝试从 Spring 容器中获取匹配类型 的对象,原题和各选项中没有说明其它前提条件,则视为获取成功,返回匹配类型的对象,对象的 Bean id/name 是默认 名,即将类名的首字母改为小写的名称(如果类/接口名的前 2 个字母均是大写的,则 Bean id/name 与类/接口名完全相 同)。 源码中的方法签名: public T getBean(Class requiredType) throws
【单选题】
对于配置 Spring Security 以拦截特定 URL,以下哪种策略是正确的?(选择一项)
A.可以通过配置指定的 URL(使用 authorizeRequests()与 antMatchers 或 mvcMatcher 方法),最特别的匹配在先,最不特别的匹配在后
B.可以通过配置指定的 URL(使用 authorizeRequests()和 antMatchers 或 mvcMatchers 方法),最不特别的匹配在先,最特别的匹配在后
C.URLs 必须在 web.xml 或你的 WebApplicationInitializer 实现中被指定为 Servlet 映射的一部分(如果使用 Servlet 3)
D.URL 是在一个特殊的属性文件中指定的,被 Spring Security 使用
【正确答案】A
【多选题】
以下哪些关于 BeanFactoryPostProcessors 的说法是正确的?(选择两项)
A.检测@PostConstruct 和@PreDestroy 注解,然后调用适当的行为
B.允许在实例化 Spring bean 之前转换 bean 定义
C.允许在实例化 Spring bean 后转换 bean
D.PropertySourcesPlaceholderConfigurer 是 BeanFactoryPostProcessor 接口的实现,用于读取 Spring Environment 中的属性值
【正确答案】B,D
【答案解析】BeanFactoryPostProcessor — Can modify the definition of any bean in the factory before any objects are created. — Applies transformations to bean definitions, before objects are actually created. — Most Common Example : Recall @Value and ${…} variables, use a PropertySourcesPlaceholderConfigurer to evaluate them, this is a BeanFactoryPostProcessor.
【多选题】
考虑以下 REST 风格 controller 的方法,通过其 id 来获取一个订单。关于下面的代码示例,以下哪些说法是真的?(选择两项)
@Controller
public class OrderController {
@PostMapping("/orders/{id}")
public Order fetchOrder(@PathVariable(“id”) long orderId) {
}
}
A.该方法应该用 @ResponseStatus(HttpStatus.CREATED)注解
B.REST 风格的数据获取请求应该使用@GetMapping 而不是@PostMapping
C.该方法应以 String 返回逻辑视图名称,而不是 Order 对象
D.Order 返回类型应该用@RequestBody 注解
E.Order 返回类型应该用@ReponseBody 注解
F.@PathVariable(“id”)注解不需要"id"参数
【正确答案】B,E
【答案解析】A:本题是获取订单,使用 HttpStatus.CREATED 不合适 C:REST 风格不返回视图名 D:@RequestBody 是用于请求对象的 F:配置的 URL 是"/orders/{id}",方法参数是 long orderId,当名称不同时必须指定@PathVariable 参数,当然,如果名称相同,确实可以不需要参数
【多选题】
以下哪些说法是 Spring Transaction Management 的特点?(选择三项)
A.它简化了向分布式事务的迁移
B.从本地事务切换到分布式事务,只需更改 Spring 配置就可以了
C.它提取了本地事务和分布式事务的区别
D.在本地事务和分布式事务的代码中事务失败的处理方式需要有所不同
【正确答案】A,B,C
【多选题】
关于 Spring Boot2.x Actuator Metrics,以下哪些说法是正确的?(选择两项)
A.创建一个指标时,必须有一个或多个标签
B.可使用 Counter、 Gauge、 Timer 和 DistributionSummary 等 Meter 基元测量自定义指标
C.你需要使用特定供应商的 Micrometer 库
D.Timer 既可以测量计时事件的数量,也可以测量所有计时事件的总时间
【正确答案】B,D
【答案解析】- Custom metrics can be measured using Micrometer classes such as Counter, Gauge, Timer and DistributionSummary. - Timer provides count, mean, max and total of its metrics.
【多选题】
关于 Spring Boot Testing,以下哪些说法是正确的?(选择两项)
A.在 Spring Boot 应用程序中,每个测试类都必须用@SpringBootTest 来注解
B.你不能指定配置类作为@SpringBootTest 的属性
C.@SpringBootTest 通常用于集成测试
D.用@SpringBootTest 注解的测试代码没有任何配置类,在应用程序中只有一个用@SpringBootConfiguration 注解的类
【正确答案】C,D
【多选题】
下图显示了一个创建 JdbcTemplate bean 的条件式@Bean 方法
@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
【答案解析】@ConditionalOnBean 的作用:仅当注解参数的 Bean 存在时,才会执行当前@Bean 方法。
【多选题】
关于 Spring Boot 自动配置,以下哪些说法是正确的?(选择两项)
A.当缺少 bean 时,可能会发生自动配置。但当存在 bean 时,不会发生自动配置
B.自动配置是通过处理 Spring Boot 提供的自动配置类列表来执行的,每个自动配置类都使用不同的条件集
C.只有在应用级配置完成后,才会出现自动配置的情况
D.自动配置发生在应用级配置之前和之后
【正确答案】B,C
【答案解析】Auto-configuration classes processed after explicitly created beans are defined.
【多选题】
关于"loggers"Actuator 端点,以下哪些说法是正确的?(选择两项)
A.你可以在不重启应用程序的情况下,通过发送一个 PUT 请求来改变包的日志级别
B.可以通过"loggers"端点访问的包的日志级别包括"configuredLevel"和"effectiveLevel"
C.为了使用"loggers"端点,你必须自己添加个 logger 实现依赖项
D.要获得名为"account.web"的包的日志级别,可以访问"./actuator/loggers/account.web"端点
【正确答案】B,D
【多选题】
关于基于 Spring Boot 的 Web 应用程序的"fat"jar,以下哪些说法是正确的?(选择两项)
A."fat"jar 必须是 JAR 文件,不能是 WAR 文件
B."fat"jar 可以包含多个嵌入式服务器
C."fat"jar 会被 Spring Boot Maven 插件或 Gradle 插件构建起来
D."fat"jar 可以在容器和云平台上轻松部署
【正确答案】C,D
【多选题】
以下哪些可以作为 controller 方法的参数?(选择三项)
A.Locale
B.Principal
C.HttpSession
D.Language
E.Session
【正确答案】A,B,C
【多选题】
以下哪种用例可以由方法级安全注解(如@PreAuthorize)来解决?(选择两项)
A.允许根据请求 URL 访问方法
B.允许根据 HTTP 方法访问方法
C.允许根据用户身份访问方法
D.允许根据角色对访问方法
【正确答案】C,D
【多选题】
以下哪些说法描述了 Spring 的 JdbcTemplate?(选择两项)
A.JdbcTemplate 提供了处理结果集的能力
B.所有的 JdbcTemplate 方法都会抛出你需要处理的 SQLExceptions
C.JdbcTemplate 提供了查询执行的方法
D.JdbcTemplate 为你生成 SQL 语句
【正确答案】A,C
【多选题】
下图显示了在"META-INF/spring.factories"文件中指定的自动配置类
@Configuration
@ConditionalOnClass(HelloService.class)
public class HelloAutoConfig{
@ConditionalOnMissingBean(HelloService.class)
@Bean
HelloService helloService(){
return new TypicalHelloService();
}
以下哪些说法是正确的?(选择两项)
A.只有当 ApplicationContext 中没有其他 HelloService bean 时,才会从 helloService()方法中创建一个新的 HelloService bean
B.只有当 HelloService.class 在 classpath 中时,才会使用这个自动配置类
C.从 helloService()方法中将创建一个新的 HelloService bean,如果 ApplicationContext 中已有一个 HelloService bean,它将替换现有的 HelloService bean
D.即使 HelloService.class 不在 classpath 中,也会从 helloService()方法中创建一个新的 HelloService bean
【正确答案】A,B
【答案解析】— @ConditionalOnClass:是 Spring Boot 实现自动配置的重要支撑之一。其用途是判断当前 classpath 下是否 存在指定类,若是则将当前的配置装载入 spring 容器; — @ConditionalOnMissingBean:在容器加载它作用的 bean 时,检查容器中是否存在目标类型 (ConditionalOnMissingBean 注解的 value 值)的 bean 了,如果存在跳过原始 bean 的 BeanDefinition 加载动 作
【多选题】
关于@Controller 注解类,以下哪些说法是正确的?(选择三项)
A.@Controller 注解是@Component 注解的一种类型
B.它们有资格在 Spring MVC 中处理请求
C.@Controller 与@ RestController 可以互换的,类里面的方法不需要额外的代码修改
D.可以通过组件扫描发现
E.不能注入依赖项
【正确答案】A,B,D
【多选题】
关于@RequestMapping 注解,以下哪些说法是真的?(选择三项)
A.利用 method 属性,它可以替代@GetMapping 或@PutMapping
B.你可以使用它在一个@Controller 注解的类中注解一个方法
C.它是一个将网络请求映射到 Controller 方法的注解
D.不支持 HEAD 方法
E.可用于将 Controller 方法映射到 View
【正确答案】A,B,C
【多选题】
Spring Environment(可以)从哪里获得获得它的属性源集?(选择所有适用的)
A.从通过@ PropertySource 注解指定的属性文件
B.从 JVM 系统属性
C.从应用程序定义的环境变量
D.从系统属性,如 os.name
【正确答案】A,B,C
【答案解析】Properties derived from various sources, in this order: –-- JVM System Properties - System.getProperty() –-- System Environment Variables - System.getenv()–-- Java Properties Files
【多选题】
JdbcTemplate 执行哪些操作:(选择三项)
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.
【多选题】
关于 Spring Data,以下哪些说法是正确的?(选择两项)
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 Boot2.x Actuator,以下哪些说法是正确的?(选择两项)
A.它提供了生产级的监控,而无需自己去实施
B.你可以使用 Spring Security 配置为端点提供访问控制
C.执行器端点不能用 Spring 属性自定义
D.对于 Spring Boot 应用程序来说,它是默认激活的,所以你不需要添加任何其他依赖项
【正确答案】A,B
【答案解析】The Actuator library adds many production-ready monitoring features.
【多选题】
假设一个 Spring Boot应用程序只有两个依赖项,如下所示。
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-jdbc
关于DataSource和JdbcTemplate和beans的自动配置,以下哪些说法是正确的?(选择两项)
A.将使用嵌入式数据库自动创建一个DataSource bean
B.如果classpath根目录下有data.sql和schema.sql文件,将自动创建DataSource bean
C.不会自动创建JdbcTemplate bean
D.如果你明确配置了自己的DataSource bean,则会自动创建一个JdbcTemplate bean
【正确答案】C,D
【多选题】
关于基于 Spring Boot 的 Spring MVC 应用程序,以下哪些说法是正确的?(选择两项)
A.Jetty 是默认的嵌入式 Web 服务器
B.Spring Boot 默认启动嵌入式 Web 服务器
C.你可以在运行时让两台嵌入式服务器共享同一个端口
D.你可以用你选择的服务器替换默认的嵌入式 Web 服务器
【正确答案】B,D
【多选题】
关于 HealthIndicator 状态,以下哪些说法是正确的?(选择两项)
A.你可以创建自己的状态值
B.内置的状态值按严重程度递减的顺序为 DOWN、OUT_OFSERVICE、 UNKNOWN、UP
C.将严重程度最低的状态作为最高级别状态
D.由于安全原因,不能改变严重程度顺序
【正确答案】A,B
【答案解析】— Custom states can also be created and used throughout the Spring Boot Health subsystem. — Severity order can be overridden using : management.endpoint.health.status.order=FATAL, DOWN, OUT_OF_SERVICE, UNKNOWN, UP
【多选题】
使用内置的标签,你可以通过哪些方式显示 "http.server.requests"指标?(选择两项)
A.显示 HTTP 方法为 POST 的 HTTP 请求的信息
B.显示响应时间低于某个阈值的 HTTP 请求信息
C.显示 HTTP "Accept"请求头值为"application/json"的 HTTP 请求信息
D.显示响应状态为 404 的 HTTP 请求的信息
【正确答案】A,D
【答案解析】显示指标的方式有 2 种,分别是 Hierarchical Metrics 和 Dimensional Metrics,这 2 种的语法略不同: — Hierarchical Metric:http.method…status. — --- 例如:http.method.get.status.200 — Dimensional Metrics:各 Metrics 均标签化,也简称为 Dimensional — --- 例如:http?tag=method:get&tag=status:200 无论是哪种语法,其关注的都是 method(示例中的 get 值的属性)和 status(示例中的 200),则建议答案为 A 和 D, 至于 B 选项,是指标结果中显示的,并不能预先设置“只显示响应时间低于 xx 的请求信息
【多选题】
考虑下图中的类。
@Entity
public class Customer {
@Id
private Long id;
private String name;
private Date orderDate;
private String email;
}
以下哪些 Repository 方法可以由 Spring Data JPA 自动实现?(选择两项)
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 …
【多选题】
关于 TestRestTemplate,以下哪些说法是正确的?(选择两项)
A.当使用 TestRestTemplate 的 getForObject(…)方法时,你需要提供完整的路径(就像你在 RestTemplate 中做的那样),而不是作为第一个参数的相对路径
B.它可以方便地替代 RestTemplate 进行集成测试
C.它是 RestTemplate 类的一个子类
D.当使用@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)时,预先配置的 TestRestTemplate 知道向哪个端口发送请求
【正确答案】B,D
【多选题】
关于 Spring AOP,以下哪些说法是正确的?(选择两项)
A.横切关注点的例子包括安全、缓存、事务
B.Spring AOP 不使用 AspectJ 的 pointcut 表达式语言
C.无论方法是否成功返回或抛出异常,都会调用"After"advice 类型
D.在 Spring AOP 中,一个 join point 代表一个方法执行或属性访问
【正确答案】A,C
【答案解析】A:Cross-Cutting Concerns:Logging and Tracing, Transaction Management, Security, Caching, Error Handling, Performance Monitoring, Custom Business Rules. C:Called regardless of whether an exception has been thrown by the target or not.
【多选题】
当 Spring 在基于 Spring Boot 的 Spring MVC 应用程序中找到"spring-boot-starter-web"依赖项时, Spring 会自动执行哪些任务?(选择三项)
A.设置了一个将被 Controller 或 Services 使用的 Persistent Provider
B.设置默认静态资源位置
C.设置默认信息转换器
D.设置一个 DispatcherServlet
E.为 Controller 设置一个 Actuator endpoint
【正确答案】B,C,D
【多选题】
以下哪项注入了"daily.limit"系统属性的值?(选择两项)
A.@Value("#{systemProperties.daily.limit}")
B.@value("${daily.limit}")
C.@value("#{daily. limit}")
D.@Value("#{systemProperties[‘daily.limit’]}")
【正确答案】B,D
【多选题】
以下哪些说法描述了 JdbcTemplate 的特性?(选择两项)
A.它提供了一种处理结果集的回调方法
B.开发者仍然负责从/到连接池获取和释放一个连接
C.它可以抛出 checked exceptions
D.它将根原因 checked exceptions 翻译成 Spring 的 DataAccessException 类型
【正确答案】A,D
【多选题】
以下哪些是@Transactional 注解的有效可选属性?(选择两项)
A.writeOnly
B.nestedTransaction
C.isolation
D.propagation
【正确答案】C,D
【多选题】
关于在 Spring Security 中存储用户详细信息,以下哪些说法是正确的?(选择两项)
A.你可以通过实现 UserDetailsService 接口,将用户详细信息存储在你的自定义存储中
B.当你定义自己的自定义 UserDetailsService 时, Spring Boot 仍然会创建默认的用户
C.你可以将用户详细信息存储在数据库、LDAP 或内存中
D.用户详细信息包括用户名和密码,但不包括角色
【正确答案】A,C
【多选题】
关于 Spring Security,以下哪些说法是正确的?(选择两项)
A.可以使用数据库和 LDAP 等各种不同的机制访问认证数据
B.它严格执行了 Java EE Security 规范
C.访问控制可以在方法层配置
D.在授权配置中,使用 permitAll()可以完全绕过 Spring Security
【正确答案】A,C
【答案解析】A:There are many storage options for credential and authority data, examples : in-memory (development), Database, LDAP
【多选题】
当多个 bean 与依赖项的类型相匹配时,以下是可能的自动布线机制。其中哪个是正确的?(选择两项)
A.只在 setter 方法中使用@Qualifier 注解(@Autowired 对于 setter 是可选的)
B.使用@Qualifier 和@Autowired 注解以及 setter 方法
C.在字段上同时使用@Qualifier 和@Autowired 注解
D.只在字段上使用@Qualifier 注解(@Autowired 对字段是可选的)
【正确答案】B,C
【答案解析】自动布线:Autowired,即自动装配。 本题考察如果有多个类型相同的 Bean 时,如何实现自动装配。 除了构造方法以外,无论是通过 Setter 还是字段注入,都必须使用@Autowired 注解,当存在多个类型相同的 Bean 时, 还必须配合@Qualifier 一起使用,即在同一处同时使用这 2 个注解
【多选题】
关于 Spring 的 JPA 支持,以下哪些说法是正确的?(选择两项)
A.Spring 可以使用@Transactional 注解将多个 JPA persistence 操作协调到一个事务中
B.在使用 JPA 时,Spring 需要一个 persistence.xml 配置文件,因为 JPA 规范中要求这个文件
C.Spring 允许将 EntityManagerFactory 配置为 Spring Bean
D.Spring 提供了自己的 JPA 实现
【正确答案】A,C
【多选题】
JdbcTemplate 可以用来查询哪些类型的对象?(选择三项)
A.Domain Objects
B.简单类型(int、long、 String 等)
C.JSONObject
D.Generic Maps
【正确答案】A,B,D
【多选题】
关于 RestTemplate,以下哪些说法是正确的?(选择两项)
A.它自动支持发送和接收 java 对象
B.无法通过 RestTemplate 用自定义数据头发送 HTTP 请求
C.它提供了编写 REST 服务的方便方法
D.它提供了编写 REST 客户端的方便方法
【正确答案】A,D
【多选题】
以下哪些是 controller 方法参数的有效注解?(选择四项)
A.@RequestBody
B.@ResponseBody
C.@ResponseStatus
D.@PathVariable
E.@RequestParam
F.@RequestHeader
【正确答案】A,D,E,F
【多选题】
关于构造函数注入,以下哪些说法是正确的?(选择两项)
A.使用构造函数注入可以实现不变性
B.如果只有一个构造函数,则不需要使用@Autowired 注解
C.在一个目标 bean 中,构造函数注入和字段注入不能同时使用
D.从测试的角度看,字段注入优于构造函数注入
【正确答案】A,B
【答案解析】A:不变性:Spring 不提倡使用字段注入(即声明依赖项属性并添加@Autowired),因为存在 NPE 的风险,主要表现为 在执行单元测试时(单元测试:无任何其它环境,包括 Spring 环境,如果测试时加载 Spring 或其它环境,则称之为集成 测试,甚至可能是系统测试),如果没有对依赖项属性赋值,则会因为依赖项属性值没有值而导致 NPE,所以 Spring 鼓励 使用构造方法注入,当使用构造方法注入时,不需要 Setter,对于类的外部而言,则没有了修改依赖项属性值的入口,从 而达成“不变性”,同时,也消除了 NPE 风险,除非你显式的传递一个 null 到构造方法的调用中。 B:Spring 会自动调用无参数构造方法(如果存在)来创建对象;如果缺失无参数构造方法,当仅 1 个构造方法时, Spring 也会自动调用;当存在多个构造方法时,Spring 仍会自动尝试调用无参数构造方法(如果存在),如果需要 Spring 调用特定的构造方法,需要在指定的构造方法上添加@Autowired 注解; C:错误,可以同时使用构造方法、Setter 方法和字段注入; D:同 A 的解析,使用字段注入存在 NPE 风险。
【多选题】
以下代码显示了一个将用于创建ClientService bean的Java配置类。对该类还需要做哪些工作?(选择两项)
public class AppConfig{
public ClientService clientService(){
return new ClientServiceImpl();
}
}
A.该方法应该用@Autowired 进行注解
B.该方法应该用@Bean 进行注解
C.该类应该用@Configuration 进行注解
D.该类应该用@ComponentScan 进行注解
【正确答案】B,C
【答案解析】如果要使得方法的返回对象被 Spring 管理,该方法必须添加@Bean 注解,且该方法所在的类必须被 Spring 上下文加载,例如该类添加@Configuration 作为配置类,或被其它类@Import 导入,甚至直接作为创建上下文对象时的参数。
【多选题】
Spring-boot-starter-test 提供了哪些依赖项?(选择三项)
A.Cucumber
B.spring-test
C.Hamcrest
D.JUnit
E.EasyMock
【正确答案】B,C,D
【多选题】
关于 BeanPostProcessor 扩展点,以下哪些说法是正确的?(选择两项)
A.BeanPostProcessors 在 bean 生命周期的 init 阶段被调用
B.可以实现自定义 BeanPostProcessor
C.在注入依赖项之前,BeanPostProcessors 就被调用
D.在 BeanFactoryPostProcessors 被调用之前, BeanPostProcessors 就被调用
【正确答案】A,B
【答案解析】— Bean Initialization Steps: Load Bean Definition --> Post Process Bean Definition --> Find/Create its Dependencies --> Instantiate Beans --> Perform Setter Injection --> BeanPostProcessor --> Initializer --> BeanPostProcessor --> Bean Ready For Use. — BeanPostProcessor is an interface, Spring provides several implementations, you can write you own (not common), typically implements the after initialization method. — Configuration Lifecycle: Bean detection (read @Bean method signature / @Component scanning) --> BeanFactoryPostProcessor --> Bean instantiation and dependency injection (call @Bean method implementations / instantiation & @Autowired on constructor & Injection of @Autowired methods and fields) --> BeanPostProcessor
【多选题】
Spring 应用程序可以使用以下哪种技术来定义 environment-specific 属性源?(选择两项)
A.environment-specific 属性源是一种反面模式, Spring 不支持这种属性源
B.在提供给属性源的字符串中使用一个占位符,例如: @PropertySource(“classpath:/com/acme/config/app-
E
N
V
.
p
r
o
p
e
r
t
i
e
s
“
)
C
.
使
用
@
P
r
o
p
e
r
t
y
S
o
u
r
c
e
注
解
中
的
"
e
n
v
"
属
性
来
指
定
要
加
载
的
文
件
,
例
如
@
P
r
o
p
e
r
t
y
S
o
u
r
c
e
(
e
n
v
=
"
d
e
v
"
,
v
a
l
u
e
=
"
c
l
a
s
s
p
a
t
h
:
/
c
o
m
/
a
c
m
e
/
c
o
n
f
i
g
/
a
p
p
−
{ENV}.properties“) C.使用@PropertySource 注解中的"env"属性来指定要加载的文件,例如 @PropertySource(env="dev",value="classpath:/com/acme/config/app-
ENV.properties“)C.使用@PropertySource注解中的"env"属性来指定要加载的文件,例如@PropertySource(env="dev",value="classpath:/com/acme/config/app−{env}.properties”)
D.使用@PropertySource 来注解一个用@Profile 注解的@Configuration 类
【正确答案】B,D
【多选题】
关于 Spring Boot 自动配置的自定义,以下哪些说法是正确的?(选择两项)
A.你可以通过将自动配置类子类化,明确地禁用一些自动配置
B.你可以通过在 application. properties 文件中设置一个属性或使用@EnableAutoConfiguration 注解上的 exclude 属性来明确地禁用一些自动配置
C.如果某些自动配置不适合你的需要,你可以明确地禁用它
D.你只能禁用所有的自动配置。即,你不能只禁用部分自动配置
【正确答案】B,C
【答案解析】AutoConfiguration can be controlled by : properties; explicit bean definition; disabling of auto configuration; altering dependency versions.
【多选题】
关于@SpringBootTest,以下哪些说法是正确的?(选择两项)
A.即使其他配置类被显式地指定,它也会搜索用@SpringBootConfiguration 注解的类
B.如果你使用 RANDOM_PORT、DEFINED_PORT 或 MOCK,服务器会被测试框架启动和停止
C.它自动配置了一个 TestRestTemplate bean
D.它支持不同的 webEnvironment 模式,如 RANDOM_PORT、DEFINED_PORT、MOCK 和 NONE
【正确答案】C,D
【多选题】
在 Spring Security 中,安全过滤器在下列哪种情况下使用到?(选择三项)
A.驱动认证
B.实施授权(访问控制)
C.提供登出功能
D.添加或删除用户名和密码
【正确答案】A,B,C
【答案解析】Spring Security Filter Chain : Always first filter in chain, this single proxy filter delegates to a chain of spring-managed filter to : drive authentication, enforce authorization, manage logout, maintain SecurityContext in HttpSession, and more.
【多选题】
当在一个类上使用@SpringBootApplication 时,以下哪些说法是正确的?(选择两项)
A.它使 Spring Boot 启用自动配置
B.由于该类不是一个@Configuration 类,所以在该类中不能有@Bean 方法
C.它使 Spring 从该类的包开始执行组件扫描
D.它使 Spring Boot 构建一个可执行的 JAR 应用程序
【正确答案】A,C
【多选题】
关于’info’Actuator 端点,以下哪些说法是正确的?(选两个)
A.它提供了配置选项,只有通过认证的用户才能显示应用信息
B.它可以用来改变正在运行的应用程序的属性值
C.它可以用来显示任意的应用信息
D.通常情况下,它是用来显示构建信息的
【正确答案】C,D
【多选题】
在 Spring 中使用事务需要以下哪些内容?(选择两项)
A.将@EnableTransactionManagement 添加到一个 Java 配置类中
B.写一个 Spring AOP advice 来实现事务性行为
C.用@Transactional 注解来注解一个需要事务的接口、类或单个方法
D.用@Service 和@Transactional 注解来注解一个类
【正确答案】A,C
【多选题】
关于 Spring MVC,以下哪些说法是正确的?(选择三项)
A.Controllers 通常可以委托给 service bean 的 business 方法,因为 service bean 可以注入到 Controller 中去了
B.用@Controller 注解的类可以通过组件扫描检测到,并以 Spring bean 的形式加载
C.数据可以通过使用特殊的 Model 参数从 Controller 传递到 View 中
D.你不能在 Controller 类上使用构造函数注入
E.Controllers 必须注入@Service bean 或@Repository bean
【正确答案】A,B,C
【答案解析】此题可用排除法
【多选题】
关于@DataJpaTest,以下哪些说法是真的?(选择两项)
A.它既可以用来测试JPA组件,也可以用来测试NoSQL组件
B.它使用一个内存数据库作为默认的数据源
C.它自动配置了一个TestEntityManager bean
D.TestEntityManager提供了Entity Manager所提供的所有方法,还有更多的方法
【正确答案】B,C
【多选题】
关于 application.properties或application.yml文件,以下哪些说法是正确的?(选择两项)
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
【答案解析】Spring Boot looks for application.properties in these locations (in this order) :"/config" sub-directory of the working directory; The working directory; “config” package in the classpath; classpath root.
【多选题】
以下哪种描述ApplicationContext对象的说法是正确的?(选择两项)
A.ApplicationContext对象可以在单元测试、Web应用和独立应用中创建
B.集成测试中不能创建ApplicationContext对象
C.ApplicationContext对象保持着Spring运行时实例化的所有bean
D.不能通过ApplicationContext对象访问Bean
【正确答案】A,C
【多选题】
关于@EnableAutoConfiguration 注解,以下哪些说法是正确的?(选择两项)
A.如果没有 application. properties 或 application.yml 文件,就不能使用它
B.它是由@SpringBootConfiguration 合成的注解的元注解
C.它是由@SpringBootApplication 合成的注解的元注解
D.它使 Spring Boot 自动创建它认为应用程序需要的 bean
【正确答案】C,D
【多选题】
关于 HealthIndicator,以下哪些说法是正确的?(选择两项)
A.Spring Boot 提供了许多即用的 HealthIndicator,如"CassandraHealthIndicator"
B.健康信息是需要被保护的,所以需要"spring-boot-starter-security"
C.健康信息是从您的 ApplicationContext 中的所有 HealthIndicator bean 收集的
D.当你实现自己的 HealthIndicator 时,你实现了 HealthIndicator 接口的 up()和 down()方法
【正确答案】A,C
【答案解析】— List of Auto-configured HealthIndicators: Disk Space, DataSource, Cassandra, Elasticsearch, InfluxDb, JMS, Mail, MongoDB, Neo4J, RabbitMQ, Redis, Solr… — Custom health checks can be added to the /actuator/health endpoint and will rolled up into the overall application health status : Create a class which implements HealthIndicator interface, override the health() method to return the stat
【多选题】
关于 CommandLineRunner 和 ApplicationRunner,以下哪些说法是正确的?(选择两项)
A.你在 Spring Boot 应用程序中只能有一个 CommandLineRunner 或一个 ApplicationRunner
B.如果你需要 ApplicationArgumentsiString 而不是原始数组你应该实现 ApplicationRunner 而不是 CommandLineRunner
C.不能将依赖项 bean 注入 CommandLineRunner 或 ApplicationRunner 中
D.需要将 CommandLineRunner 或 ApplicationRunner 创建为一个 bean
【正确答案】B,D
【答案解析】— CommandLineRunner : Offer run() method, handling arguments as an array; — ApplicationRunner : Offer run() method, handling arguments as ApplicationArguments, a more sophisticated argument handling mechanism.
【多选题】
给定一个 ApplicationContext 包含三个类型为"Foo"的 bean 定义,其 bean id 分别为 foo1、foo2 和 foo3,以下哪些@Autowired 方案是有效的,并允许 ApplicationContext 成功初始化?(选择三项)
A.@Autowired @Qualifier(“foo3”) Foo foo;
B.@Autowired public void setFoo(@Qualifier(“foo1”) Foo foo) {…}
C.@Autowired public void setFoo(Foo foo) {…}
D.@Autowired private Foo foo2;
E.@Autowired private Foo foo;
【正确答案】A,B,D
【答案解析】由于存在 3 个类型相同的 Spring Bean,在自动装配时,必须保证 Spring 框架知晓装配哪一个,选项 AB 使用了 @Qualifier 注解并显式的指定 Bean id,是正确的,选项 D 通过属性名匹配了其中 1 个 Bean id,也是可行的,而选项 C 和选项 E 都没有指定有效的 Bean id,按类型又无法装配,这样的代码会导致初始化 Spring 环境时的运行时错误。
【多选题】
关于 Spring Boot,以下哪些说法是正确的?(选择两项)
A.Spring Boot 会生成你的应用程序所需的所有应用程序级别的配置文件
B.Spring Boot 允许不同的打包选项,例如将 Tomcat 打包为应用程序 JAR 文件中的嵌入式容器
C.Spring Boot 是一个苛刻的运行时,它要求遵守规定的方法,不能有任何偏差
D.Spring Boot 试图让开发者摆脱最可预测的低级设置
【正确答案】B,D
【多选题】
图片显示的是一个 Java 配置类。哪些说法是正确的?(选择两项)
@Configuration
public class AppConfig {
@Bean
public ClientService clientService() {
ClientServiceImpl clientService = new ClientServiceImpl();
clientService.addClientDao(new ClientDao());
return clientService;
}
A.该 bean 不能使用以"add"开头的方法来注入依赖项
B.这个 Java 配置可以通过使用@Profile 注解来指定配置文件
C.该 bean 的类型为 ClientService
D.声明的 bean 默认是一个 prototype
【正确答案】B,C
【答案解析】A:对名称没有要求; D:只要没有显式的指定作用域,默认的就是 singleton。
【多选题】
关于创建 bean,以下哪些说法是正确的?(选择两项)
A.通过@Autowired 注解方法或字段,显式创建 Spring Bean
B.通过@Bean 注解类,并使用组件扫描器扫描它的包,隐式创建 Spring bean
C.使用@Component 注解类,并使用组件扫描器扫描它的包,隐式创建 Spring bean
D.在 Spring 配置文件中使用@Bean 注解方法,显式创建 Spring bean
【正确答案】C,D
【答案解析】当需要 Spring 管理某个类的对象时,可以:— 在类的声明之前添加组件注解(@Component、@Service 等),且类必须在组件扫描的包或其子孙包中; — 自定义方法返回类的对象,在方法上使用@Bean 注解,并确保该方法所在的类会被 Spring 上下文加载。
【多选题】
关于 Spring 和 Spring Boot Testing,以下哪些说法是正确的?(选择两项)
A.spring-boot-starter-test 依赖项提供了@Mock 和@MockBean 等注解
B.你可以使用@SpringBootTest 或@ContextConfiguration 来创建 Spring 应用上下文
C.它同时支持集成测试和分片单元测试
D.它支持即用的 EasyMock
【正确答案】B,C
【答案解析】— 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
【多选题】
关于 pointcut 表达式,以下哪些说法是正确的?(选择两项)
A.pointcut 表达式的方法名不能有通配符
B.pointcut 表达式可以包括以下运算符:&&(and)、ll(or)、!(not)
C.pointcut 表达式可以用来选择已被特定注解的 join point
D.pointcut 表达式不能指定参数的类型
【正确答案】B,C
【多选题】
关于 Spring Boot 2.x 外部监控系统,以下哪些说法是正确的?(选择两项)
A.每次只能使用一套外部监控系统
B.Actuator 端点可以将结果持久化,外部监控系统可以对其进行访问
C.外部监测系统可以对收集到的数据进行汇总和可视化处理
D.特定的外部监控系统的使用通常需要增加一个依赖项,而不是修改代码
【正确答案】B,C
【多选题】
下图显示了 Spring MVC Controller 类的一个方法。
@Controller
public class OrderController {
@RequestMapping(path="/orders/{orderId})", method=RequestMethod.PUT)
public void updateOrder(@PathVariable(“id”) long orderId, @RequestBody Order
modifiedorder){
}
}
关于上面的代码示例,以下哪些说法是正确的?(选择三项)
A.如果其他方法对"method"属性使用不同的值,可以使用相同的路径进行映射
B."/orders/{orderId}“中的 template 参数应该调用"id”,而不是"orderId",否则将无法正常工作
C.可以使用@ResponseStatus 注解来返回 204(“No Content”)而不是 200(“OK”)
D.modifiedOrder 参数应注解为@ResponseBody
E.method 参数"orderId"应该用@RequestParam 来注解,而不是@PathVariable
【正确答案】A,B,C
【多选题】
以下哪些会影响 Spring Boot 的自动配置?(选择三项)
A.classpath 的内容
B.特定 bean 的预先存在
C.你的应用程序的包结构
D.在 application.properties 或 application.yml 文件中设置的特定外部属性,如 spring.datasource.*属性等
E.无论你的应用是否是一个多模块对象
【正确答案】A,B,D
【答案解析】AutoConfiguration can be controlled by : properties; explicit bean definition; disabling of auto configuration; altering dependency versions.
【多选题】
如何访问 application. properties 或 application.yml 文件中定义的属性?(选择两项)
A.通过调用 ApplicationContext 对象的 getProperty(…)方法
B.通过自动创建的 Properties 对象
C.通过 Spring Environment 对象
D.通过一个@Value 注解的构造函数参数
【正确答案】C,D
【多选题】
关于 Spring 事务,以下哪些说法是正确的?(选择三项)
A.如果事务性方法抛出任何异常包括检查异常, Spring 将回滚事务
B.可以使用@EnableTransactionManagement 启用事务
C.可以把@Transactional 放在任何方法上,以表示它应该是事务性的
D.可以将@Transactional 放在任何接口上,以表示它的所有方法都应该是事务性的
【正确答案】B,C,D
【答案解析】A:检查异常 = Checked Exception,需要显式的 try…catch 或 throw 的异常,即非 RuntimeException,例如 IOException 等,Spring 管理事务时,默认的回滚规则是“Rollback if method throws a RuntimeException”,当然,也可以修改@Transactional 的 rollbackFor / noRollbackFor 属性进行控制。
【多选题】
关于"info" Actuator 端点,以下哪些说法是正确的?(选两个)
A.它提供了配置选项,只有通过认证的用户才能显示应用信息
B.它可以用来改变正在运行的应用程序的属性值
C.它可以用来显示任意的应用信息
D.通常情况下,它是用来显示构建信息的
【正确答案】C,D
【多选题】
关于@WebMvcTest,以下哪些说法是正确的?(选择两项)
A.当有一个依赖项 bean 要被模拟时,它通常会与@MockBean 结合使用
B.它通常与 JUnit4 中的@RunWith(MockitoJUnitRunner.class)或 JUnit5 中的@ExtendWith(MockitoExtension. class)一起使用
C.它自动配置了一个 MockMvc bean
D.它用于在运行中的服务器上测试 Spring MVC 组件,如@Controller
【正确答案】A,C
【多选题】
关于下面的 pointcut 表达式,下列哪些说法是正确的:(选择两项)execution(@javax.annotation.security.RolesAllowed * rewards.restaurant..(…))
A.类名可以被任意命名
B.目标方法可以有零个或多个参数
C.所有的方法参数都应该用@RolesAllowed 来注解
D.目标方法的返回类型是 RolesAllowed
【正确答案】A,B
【答案解析】A:表达式中倒数第 2 个星号即是通配类名的,则类名可以是任意名称; B:表达式末尾的括号中的 2 个小数点即是通配方法参数的,则方法的数量可以是 0~N 个; C / D:表达式中的@RolesAllowed 注解表示匹配的方法必须添加了该注解,而不是参数或返回值。
【多选题】
关于 Spring Boot2. Actuator 端点,以下哪些说法是正确的?(选择两项)
A.默认暴露的执行器 HTTP 端点是"health"和"info"端点
B.不能通过 JMX 协议访问执行器的 HTTP 端点
C.执行器的 HTTP"shutdown"端点默认是禁用的
D.执行器的 HTTP 端点支持 CORS,默认情况下是启用的
【正确答案】A,C
【答案解析】选项 A 和选项 C 是基本概念,正确。