spring第四次测试

1.要注册一个 bean 销毁回调,可以:(选择一项)C

A.配置 bean 实例,以使用"prototype"作用域

B.用@PostDestroy 注解回调方法

C.用@PreDestroy 注解回调方法

D.在 bean 配置中添加@Lazy 注解

2.默认情况下, Spring Boot 将自动在以下哪个地方查找属性文件?(选择一项)

A.与 Application 的主@Configuration 类名称相匹配的一个 properties 文件

B.application. properties 或 application.yml,通常位于根 classpath 中

C.config.properties 或 config.yml,通常位于根 classpath 中

D.Spring Boot 不会自动查找任何属性文件,除非特别指示(例如使用@PropertySource)

选B

3.以下哪个说法最能说明使用 Spring Framework 在单元测试方面的好处?(选择一项)

A.你的 Java 代码通常在 Spring Framework 类上有依赖项,这些类的设计是为了使单元测试的工作更容易

B.Spring Framework 鼓励你按接口编程,这样可以更容易地在代码中存根或模拟出依赖项

C.Spring Framework 框架鼓励你尽可能地在一个测试中结合单元测试和集成测试

D.Application Context 在初始化时进行了大量的运行时检查,使得传统的单元测试变得不那么重要

选B

Spring 团队发现正确使用控制反转 (IoC) 确实使单元和集成测试更容易(因为 setter 方法和类上适当的构造函数的存在使它们更容易在测试中连接在一起,而不必设置服务定位器注册表和类似结构)。

4.你希望应用一个 aspect 来阻止异常在堆栈中传播,并返回一个错误值。你会使用哪种类型的 advice?(选择一项) D

A."After Returning"

B."After Throwing"

C."After"

D."Around"

E."Before"

D:只有Around可以阻止异常传播

8考虑下面的方法签名。

@PutMapping("/accounts/{id}") public void update(...) {...}

以下哪种方法是检索账户 id 的有效方法?(选择一项)D

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 put请求,且参数为“id”

2.以下哪项是对@PropertySource 注解的最佳解释?(选择一项)B

A.用于方便地从某个外部属性文件中查找并返回单个属性值

B.用于从某个外部来源向 Spring Environment 添加一组额外的 name/value 对

C.用于指定 Spring Boot 应用程序中 application. properties 文件的位置

D.Spring 框架中没有这样的注解

application. properties不需要指定,会默认读取

@PropertySource是用于从某个外部来源向 Spring Environment 添加一组额外的 name/value 对 

从外部引入其他的配置文件,读取到某个信息(<k,v>)之中之后加入到Spring Environment中,读取进去之后可以使用@value获取

9.考虑以下来自 @Configuration 类的代码,并应用 Spring 的默认行为,选择正确答案(选择一项)


   
   
  1. @Configuration public class MyConfig {
  2. @Bean public AccountRepository accountRepository (){
  3. return new JdbcAccountRepository();
  4. }
  5. @Bean public TransferService transferService (){
  6. TransferServiceImpl service = new TransferServiceImpl();
  7. service.setAccountRepository(accountRepository());
  8. return service;
  9. }
  10. @Bean public AccountService accountService (){
  11. return new AccountServiceImpl(accountRepository());
  12. }
  13. }

A.两个 AccountRepository bean 将被实例化,因为 accountRepository()方法将被调用两次

B.三个 AccountRepository bean 将被实例化,因为 accountRepository()方法将被调用三次

C.一个 AccountRepository bean 将被实例化,因为默认的作用域是 Singleton

D.许多 AccountRepository bean 将被实例化取决于调用 accountRepository(),transferService()和 accountService()的频率

选C:Spring IoC 的底层是基于代理模式的,即带@Bean 注解的方法是被 Spring 代理的,不会反复创建对象。、

8.考虑下面的 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"?(选择一项)C

A.USER 或 ADMIN

B.不需要角色

C.USER

D.ADMIN

解析:特指优先,通配靠后,否则不生效,在执行到.antMatchers("/accounts/*").hasRole("USER")后不会再执行.antMatchers("/accounts/editAccount.htm").hasRole("ADMIN");所以仅仅User可以访问

9.下列关于创建 bean 的说法,哪个说法是正确的(选择一项)B

A.当搜索依赖项时,@Autowired 会寻找个名称匹配的 bean。如果不成功,就会退回到基于类型的匹配

B.在创建时间用 Spring 代理替换@Configuration 类,以实现 singleton 作用域

C.当依赖项有两个类型匹配的候选者时,@Autowired 会随机选择一个

D.在@Configuration 类中,@Bean 方法必须不接受任何参数

10.对于配置 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 使用

11.在应用程序的初始化过程中,这些事件将以什么顺序发生?请选择最佳答案。(选择一项)D

1. Setter 依赖注入

2. Bean 构造函数

3. 调用 BeanFactoryPostProcessors

4. 调用 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

3最先,4最后,先BFPP构建模型,构造实例化,再注入,再BPP初始化

默认的 Bean id/name 是@Bean 方法名称,也可通过@Bean 注解的方法

12.已给出下面的 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:AOP支持使用注解作为载入点,在需要使用AOP的类或方法上使用创建的注解,会将创建的注解的标记的位置作为一个载入点

说法1:About Pointcuts: Spring AOP uses AspectJ’s pointcut expression language, Spring AOP supports a practical subset.说法3:在execution表达式中,如果是 *(..) 格式,可以通配所有包(含各级子包),如果指定了包名,仅用于选择指定的包,并不包含子包,如果指定包名且需要通配子级包,需要在包名处使用 .. 进行通配。

13.Spring RestTemplate 类:(选择一项)

A. 可以用来发送和接收使用Spring的RequestEntity的和ResponseEntity定义的数据

B.不能在服务端应用中使用

C.在使用前需要为其明确定义 HttpMessageConverters

D.只能用于与使用 Spring MVC 实现的服务器进行对话

选A

14.考虑下面的 Java 配置类,声明的 bean 的 id/名称是什么?(选择一项)B

@Configuration public class AppConfig{ @Bean public ClientService clientService(){ return new ClientServiceImpl(); } }

A.clientServiceImpl(以小写"c"开头)

B.clientService(以小写"c"开头)

C.ClientServiceImpl(以大写"C"开头)

D.ClientService(以大写"C"开头)

bean产生时,如果未指定id,则以方法名,变量名为准,首字母小写

关于 Spring和单元测试,以下哪个说法是正确的?(选择一项)

A.Spring提取了现有的Mock框架

B.Spring提供了一个内部的Mock框架,所以不需要第三方的Mock框架,如 Mockito或 EasyMock

C.前两个答案是正确的

D.前两个答案都不正确

选B

考虑下图中的事务性服务层类。你使用的是 Spring 事务,它内部使用 Spring AOP 调用 update1 方法时,发生了什么事情? (选择一项) C


   
   
  1. public class ClientServiceImpl implements ClientService{
  2. @Transactional (propagation=Propagation.REQUIRED)
  3. public void update1 (){
  4. update2();
  5. }
  6. @Transactional(propagation=Propagation.REQUIRES_NEW)
  7. public void update2 (){
  8. }
  9. }

A.只有一个事务,因为如果已经存在一个事务,REQUIRES_NEW 将使用一个活动事务

B.有 2 个事务,因为 REQUIRES_NEW 总是在一个新的事务中运行

C.只有一个事务,因为对 update2()的调用是内部的(不通过代理)

C 因为是内部类加载,不会创建代理,执行事务,

解决方法:可以通过注入自己,注入其他类,通过AopContent

Spring 管理事务是基于接口代理的,如果是内部调用,则不重新经过代理对象,则无事务的特性,即在“内部调用” 时,被调用的方法上的@Transactional 是无效的,注解参数更加没有任何意义。

17.当使用 Spring Boot 配置和运行 Web 应用程序时,你应包含哪个依赖项以在开发过程中更改代码时启用应用程序的自动重启?(选择一项)

A.spring-boot-starter-devtools

B.spring-boot-restart

C.spring-boot-devtools

D.spring-boot-initializr

选C


   
   
  1. <!-- 热部署 -->
  2. <dependency>
  3. <groupId>org.springframework.boot </groupId>
  4. <artifactId>spring-boot-devtools </artifactId>
  5. <optional>true </optional>
  6. <!-- 表示依赖不会传递,之后依赖该module的项目如需继续使用,则需要再次引入 -->
  7. </dependency>

18.考虑下面的代码示例。以下哪个说法是正确的?(选择一项) public interface CustomerRepository extends CrudRepository {}

A.为了成功使用任何 Spring Data 实现(JPA、 MongoDB、 Gemfire 等), Customer 类上需要 JPA 注解

B.该类的实现可以由Spring Data JPA自动生成

C.实现 CustomerRepository 的类必须由开发者编码并声明为 Spring Bean

D.CustomerRepository 应该是一个类,而不是一个接口

选B

19.以下哪个说法最能说明"After Returning" advice 类型?(选择一项)

A.通常用于防止任何由 advice 方法抛出的异常在调用栈中传播

B."After Returning" advice 允许在方法返回后添加行为,即使它抛出了一个异常

C.该 advice 对方法的调用具有完全的控制权,它甚至可以完全阻止方法的调用

D.该 advice 只有在方法成功返回时才会被调用,如果该方法抛出异常则不会被调用

 选D

A:该 Advice 并不针对异常有特殊的处理; B:该 Advice 仅当方法返回了某个值之后才会执行,如果抛出异常,必然没有返回值; C:不在方法之前执行的 Advice 显然无法阻止方法的调用.

20.关于 Spring 对 JPA 的支持,以下哪个说法是正确的?(选择一项)

(1) Spring 支持结合本地或全局事务管理 JPA PersistenceContexts

(2) JPA 提供者是通过设置 EntityManagerFactoryBean 上的 vendor adapter 属性来指定的

(3) 在管理本地事务时,JpaTransactionManager 使用 JPA EntityManagers 来完成这项工作

B

21.以下关于在 JUnit 集成测试中使用@Transactional 注解的说法中,哪项不是正确的的?(选择一项)

A.只有当 test 类或 test 方法被注解为@Commit(false)时,事务才会在测试后回滚出来

B.默认情况下,每次测试后,事务将自动回滚

C.用@Transactional 来注解 test 类,会使其所有的 test 方法在事务中运行

D.用@Transactional 来注解 test 方法,会使 test 方法在事务中运行

选A  

21.以下关于在 JUnit 集成测试中使用@Transactional 注解的说法中,哪项不是正确的的?(选择一项)


   
   
  1. @Configuration
  2. public class ApplicationConfig {
  3. @Bean
  4. public RewardNetwork rewardNetwork () {
  5. return new RewardNetworkImpl(accountRepository());
  6. }
  7. @Bean
  8. public AccountRepository accountRepository () {
  9. return new JdbcAccountRepository();
  10. }
  11. }

A.这种配置是正确的

B.这个配置是无效的,因为第一个 bean 应该有一个 id,可以使用@Bean("rewardNetwork")来设置它

C.这个配置是无效的,因为第二个 bean 应该有一个 id,可以使用@Bean("accountRepository")来设置它

D.这个配置是无效的,因为两个 bean 都应该有一个用@Bean 指定的 id

A是有效的可以这么使用

22.Spring 并不要求为每个 Bean 显式的指定 id/name,即使没有显式的指定,Spring 也会自动为 Bean 设置 id/name。

考虑下面的配置示例。以下哪个说法是正确的?(选择一项) 


   
   
  1. @Configuration
  2. public class ApplicationConfig {
  3. @Bean
  4. public RewardNetwork rewardNetwork () {
  5. return new RewardNetworkImpl(accountRepository());
  6. }
  7. @Bean
  8. public AccountRepository accountRepository () {
  9. return new JdbcAccountRepository();
  10. }
  11. }

A.这种配置是正确的

B.这个配置是无效的,因为第一个 bean 应该有一个 id,可以使用@Bean("rewardNetwork")来设置它

C.这个配置是无效的,因为第二个 bean 应该有一个 id,可以使用@Bean("accountRepository")来设置它

D.这个配置是无效的,因为两个 bean 都应该有一个用@Bean 指定的 id

A是有效的可以这么使用

Spring 并不要求为每个 Bean 显式的指定 id/name,即使没有显式的指定,Spring 也会自动为 Bean 设置 id/name。

23.哪个说法最能描述 Spring MVC 中的 REST 特性?(选择一项)B

A.Spring MVC 的 REST 功能不依赖于 JAX-RS 标准

B.Spring MVC 提供其 JAX-RS 实现

C.Spring MVC 的 REST 功能可以依赖任何 JAX-RS 实现

JAX-RS是java的,SpringMVC没有其实现,但是Spring MVC 的 REST 功能可以依赖任何 JAX-RS 实现

25.使用下面的图片,考虑遗留类。如何从这个遗留类创建 Spring bean?(选择一项)


   
   
  1. public class LegacySingleton {
  2. private static LegacySingleton instance;
  3. private LegacySingleton () {
  4. }
  5. public static LegacySingleton getInstance () {
  6. if(instance == null){
  7. Instance = new LegacySingleton();
  8. }
  9. return instance;
  10. }
  11. }

A.从@Bean 方法返回一个 LegacySingleton 的实例, Spring 会自动调用 getInstance() 

B.从@Bean 方法中调用 LegacySingleton.getInstance(),并返回实例 

C.采用自动布线 

D.不可能,构造函数必须是公共的 

【正确答案】B

26.以下哪个说法最能定义"pointcut"?(选择一项)

A.选择一个或多个 join point 的表达式 

B.囊括 advice 的模块 

C.程序执行中的点,如方法调用或字段分配 

D.在每个选定的 join point 执行的代码 

【正确答案】A

27.以下哪个说法最能定义"aspect"?(选择一项)

A.程序执行中的一个点,如方法调用或字段分配 

B.选择一个或多个 join point 的表达式 

C.在被 pointcut 选中的 join point 上执行的代码 

D.与 pointcut 结合的 advice 的囊括 

【正确答案】D

60.关于 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 属性进行控制。

64.关于 Spring Boot2.x Actuator Metrics,以下哪些说法是正确的?(选择两项)

A.创建一个指标时,必须有一个或多个标签 

B.可使用 Counter、 Gauge、 Timer 和 DistributionSummary 等 Meter 基元测量自定义指标 

C.你需要使用特定供应商的 Micrometer 库 

D.Timer 既可以测量计时事件的数量,也可以测量所有计时事件的总时间 

【正确答案】B,D

72.关于 CommandLineRunner 和 ApplicationRunner,以下哪些说法是正确的?(选择两项)

A.你在 Spring Boot 应用程序中只能有一个 CommandLineRunner 或一个 ApplicationRunner 

B.如果你需要 ApplicationArgumentsiString 而不是原始数组你应该实现 ApplicationRunner 而不是 CommandLineRunner 

C.不能将依赖项 bean 注入 CommandLineRunner 或 ApplicationRunner 中 

D.需要将 CommandLineRunner 或 ApplicationRunner 创建为一个 bean 

【正确答案】B,D

81.关于 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

如何访问 application. properties 或 application.yml 文件中定义的属性?(选择两项)

A.通过调用 ApplicationContext 对象的 getProperty(...)方法 

B.通过自动创建的 Properties 对象 

C.通过 Spring Environment 对象 

D.通过一个@Value 注解的构造函数参数 

【正确答案】C,D

90.关于 Spring Boot2. Actuator 端点,以下哪些说法是正确的?(选择两项)

A.默认暴露的执行器 HTTP 端点是"health"和"info"端点 

B.不能通过 JMX 协议访问执行器的 HTTP 端点 

C.执行器的 HTTP"shutdown"端点默认是禁用的 

D.执行器的 HTTP 端点支持 CORS,默认情况下是启用的 

【正确答案】A,C

91.关于 HealthIndicator,以下哪些说法是正确的?(选择两项)

A.Spring Boot 提供了许多即用的 HealthIndicator,如"CassandraHealthIndicator" 

B.健康信息是需要被保护的,所以需要"spring-boot-starter-security" 

C.健康信息是从您的 ApplicationContext 中的所有 HealthIndicator bean 收集的 

D.当你实现自己的 HealthIndicator 时,你实现了 HealthIndicator 接口的 up()和 down()方法 

【正确答案】A,C

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值