考虑下面的 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
【答题时间】2021-10-24 03:26:42
【答案解析】题目中是 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 匹配规则生效,后续再次设置的规则不 生效
以下哪个说法最能定义"pointcut"?(选择一项)
A.选择一个或多个 join point 的表达式
B.囊括 advice 的模块
C.程序执行中的点,如方法调用或字段分配
D.在每个选定的 join point 执行的代码
【正确答案】A
【答题时间】2021-10-24 03:26:42
【答案解析】An expression that selects one or more Join Points
以下哪个说法最能说明使用 Spring Framework 在单元测试方面的好处?(选择一项)
A.你的 Java 代码通常在 Spring Framework 类上有依赖项,这些类的设计是为了使单元测试的工作更容易
B.Spring Framework 鼓励你按接口编程,这样可以更容易地在代码中存根或模拟出依赖项
C.Spring Framework 框架鼓励你尽可能地在一个测试中结合单元测试和集成测试
D.Application Context 在初始化时进行了大量的运行时检查,使得传统的单元测试变得不那么重要
【正确答案】B
【答题时间】2021-10-24 03:26:42
【答案解析】
应用程序初始化过程: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 MVC 中的 REST 特性?(选择一项)
A.Spring MVC 的 REST 功能不依赖于 JAX-RS 标准
B.Spring MVC 提供其 JAX-RS 实现
C.Spring MVC 的 REST 功能可以依赖任何 JAX-RS 实现
【正确答案】C
【答题时间】2021-10-24 03:26:42
【答案解析】JAX-RS is a Java EE 6 standard for building RESTful applications, Various implements : Jersey (RI), RESTEasy, Restlet, CXF, all implementations provide Spring support
关于 Spring和单元测试,以下哪个说法是正确的?(选择一项)
A.Spring提取了现有的Mock框架
B.Spring提供了一个内部的Mock框架,所以不需要第三方的Mock框架,如 Mockito或 EasyMock
C.前两个答案是正确的
D.前两个答案都不正确
【正确答案】B
【答题时间】2021-10-24 03:26:42
【答案解析】本题选项可能因为随机打散导致理解困难。
当使用 Spring Boot 配置和运行 Web 应用程序时,你应包含哪个依赖项以在开发过程中更改代码时启用应用程序的自动重启?(选择一项)
A.spring-boot-starter-devtools
B.spring-boot-restart
C.spring-boot-devtools
D.spring-boot-initializr
【正确答案】C
【答题时间】2021-10-24 03:26:42
【答案解析】
根据 REST 原则,更新编号为 1234 的 Order 的最佳方式是什么?(选择一项)
A.向/orders/1234 发送 PUT 请求
B.向/orders/1234 发送 POST 请求
C.向/order/edit?id=1234 发送一个 POST 请求
D.向/order/edit?id=1234 发送 PUT 请求
【正确答案】A
【答题时间】2021-10-24 03:26:42
【答案解析】在 RESTful 风格中,简单的网络请求可以不将本意体现在 URL 中,只需要表明处理哪类数据、哪个数据等必要参数即可, 且根据请求方式进行区分操作类型,GET 用于获取数据,POST 用于新增数据,PUT 用于修改数据,DELETE 用于删除数 据。
如何访问 application. properties 或 application.yml 文件中定义的属性?(选择两项)
A.通过调用 ApplicationContext 对象的 getProperty(…)方法
B.通过自动创建的 Properties 对象
C.通过 Spring Environment 对象
D.通过一个@Value 注解的构造函数参数
【正确答案】C,D
【答题时间】2021-10-24 03:26:42
【答案解析】
关于 Spring Boot Testing,以下哪些说法是正确的?(选择两项)
A.在 Spring Boot 应用程序中,每个测试类都必须用@SpringBootTest 来注解
B.你不能指定配置类作为@SpringBootTest 的属性
C.@SpringBootTest 通常用于集成测试
D.用@SpringBootTest 注解的测试代码没有任何配置类,在应用程序中只有一个用@SpringBootConfiguration 注解的类
【正确答案】C,D
【答题时间】2021-10-24 03:26:42
【答案解析】
考虑以下 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
【答题时间】2021-10-24 03:26:42
【答案解析】A:本题是获取订单,使用 HttpStatus.CREATED 不合适 C:REST 风格不返回视图名 D:@RequestBody 是用于请求对象的 F:配置的 URL 是"/orders/{id}",方法参数是 long orderId,当名称不同时必须指定@PathVariable 参数,当然,如果名称相同,确实可以不需要参数
关于’info’Actuator 端点,以下哪些说法是正确的?(选两个)
A.它提供了配置选项,只有通过认证的用户才能显示应用信息
B.它可以用来改变正在运行的应用程序的属性值
C.它可以用来显示任意的应用信息
D.通常情况下,它是用来显示构建信息的
【正确答案】C,D
【答题时间】2021-10-24 03:26:42
【答案解析】
在 Spring Security 中,安全过滤器在下列哪种情况下使用到?(选择三项)
A.驱动认证
B.实施授权(访问控制)
C.提供登出功能
D.添加或删除用户名和密码
【正确答案】A,B,C
【答题时间】2021-10-24 03:26:42
【答案解析】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.Spring安全筛选器链:始终是链中的第一个筛选器,此单个代理筛选器将委托给Spring托管筛选器链,以:驱动身份验证、强制授权、管理注销、在HttpSession中维护SecurityContext等。
关于@EnableAutoConfiguration 注解,以下哪些说法是正确的?(选择两项)
A.如果没有 application. properties 或 application.yml 文件,就不能使用它
B.它是由@SpringBootConfiguration 合成的注解的元注解
C.它是由@SpringBootApplication 合成的注解的元注解
D.它使 Spring Boot 自动创建它认为应用程序需要的 bean
【正确答案】C,D
【答题时间】2021-10-24 03:26:42
【答案解析】
关于 Spring Security,以下哪些说法是正确的?(选择两项)
A.可以使用数据库和 LDAP 等各种不同的机制访问认证数据
B.它严格执行了 Java EE Security 规范
C.访问控制可以在方法层配置
D.在授权配置中,使用 permitAll()可以完全绕过 Spring Security
【正确答案】A,C
【答题时间】2021-10-24 03:26:42
【答案解析】A:There are many storage options for credential and authority data, examples : in-memory (development), Database, LDAP
使用内置的标签,你可以通过哪些方式显示 “http.server.requests"指标?(选择两项)
A.显示 HTTP 方法为 POST 的 HTTP 请求的信息
B.显示响应时间低于某个阈值的 HTTP 请求信息
C.显示 HTTP “Accept"请求头值为"application/json"的 HTTP 请求信息
D.显示响应状态为 404 的 HTTP 请求的信息
【正确答案】A,D
【答题时间】2021-10-24 03:26:42
【答案解析】显示指标的方式有 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 的请求信息
Spring-boot-starter-test 提供了哪些依赖项?(选择三项)
A.Cucumber
B.spring-test
C.Hamcrest
D.JUnit
E.EasyMock
【正确答案】B,C,D
【答题时间】2021-10-24 03:26:42
【答案解析】
关于 RestTemplate,以下哪些说法是正确的?(选择两项)
A.它自动支持发送和接收 java 对象
B.无法通过 RestTemplate 用自定义数据头发送 HTTP 请求
C.它提供了编写 REST 服务的方便方法
D.它提供了编写 REST 客户端的方便方法
【正确答案】A,D
【答题时间】2021-10-24 03:26:42
【答案解析】
关于 TestRestTemplate,以下哪些说法是正确的?(选择两项)
A.当使用 TestRestTemplate 的 getForObject(…)方法时,你需要提供完整的路径(就像你在 RestTemplate 中做的那样),而不是作为第一个参数的相对路径
B.它可以方便地替代 RestTemplate 进行集成测试
C.它是 RestTemplate 类的一个子类
D.当使用@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)时,预先配置的 TestRestTemplate 知道向哪个端口发送请求
【正确答案】B,D
【答题时间】2021-10-24 03:26:42
【答案解析】
关于 HealthIndicator,以下哪些说法是正确的?(选择两项)
A.Spring Boot 提供了许多即用的 HealthIndicator,如"CassandraHealthIndicator”
B.健康信息是需要被保护的,所以需要"spring-boot-starter-security”
C.健康信息是从您的 ApplicationContext 中的所有 HealthIndicator bean 收集的
D.当你实现自己的 HealthIndicator 时,你实现了 HealthIndicator 接口的 up()和 down()方法
【正确答案】A,C
【答题时间】2021-10-24 03:26:42
【答案解析】— 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自动配置的HealthIndicators列表:磁盘空间、数据源、Cassandra、Elasticsearch、InfluxDb、JMS、Mail、MongoDB、Neo4J、RabbitMQ、Redis、Solr 自定义运行状况检查可以添加到/exactor/health端点,并将汇总到整个应用程序运行状况状态:创建一个实现HealthIndicator接口的类,重写health()方法以返回stat
假设一个 Spring Boot应用程序只有两个依赖项,如下所示。
<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>
关于DataSource和JdbcTemplate和beans的自动配置,以下哪些说法是正确的?(选择两项)
A.将使用嵌入式数据库自动创建一个DataSource bean
B.如果classpath根目录下有data.sql和schema.sql文件,将自动创建DataSource bean
C.不会自动创建JdbcTemplate bean
D.如果你明确配置了自己的DataSource bean,则会自动创建一个JdbcTemplate bean
【正确答案】C,D
【答题时间】2021-10-24 03:26:42
【答案解析】
关于构造函数注入,以下哪些说法是正确的?(选择两项)
A.使用构造函数注入可以实现不变性
B.如果只有一个构造函数,则不需要使用@Autowired 注解
C.在一个目标 bean 中,构造函数注入和字段注入不能同时使用
D.从测试的角度看,字段注入优于构造函数注入
【正确答案】A,B
【答题时间】2021-10-24 03:26:42
【答案解析】A:不变性:Spring 不提倡使用字段注入(即声明依赖项属性并添加@Autowired),因为存在 NPE 的风险,主要表现为 在执行单元测试时(单元测试:无任何其它环境,包括 Spring 环境,如果测试时加载 Spring 或其它环境,则称之为集成 测试,甚至可能是系统测试),如果没有对依赖项属性赋值,则会因为依赖项属性值没有值而导致 NPE,所以 Spring 鼓励 使用构造方法注入,当使用构造方法注入时,不需要 Setter,对于类的外部而言,则没有了修改依赖项属性值的入口,从 而达成“不变性”,同时,也消除了 NPE 风险,除非你显式的传递一个 null 到构造方法的调用中。 B:Spring 会自动调用无参数构造方法(如果存在)来创建对象;如果缺失无参数构造方法,当仅 1 个构造方法时, Spring 也会自动调用;当存在多个构造方法时,Spring 仍会自动尝试调用无参数构造方法(如果存在),如果需要 Spring 调用特定的构造方法,需要在指定的构造方法上添加@Autowired 注解; C:错误,可以同时使用构造方法、Setter 方法和字段注入; D:同 A 的解析,使用字段注入存在 NPE 风险。
关于 Spring AOP,以下哪些说法是正确的?(选择两项)
A.横切关注点的例子包括安全、缓存、事务
B.Spring AOP 不使用 AspectJ 的 pointcut 表达式语言
C.无论方法是否成功返回或抛出异常,都会调用"After"advice 类型
D.在 Spring AOP 中,一个 join point 代表一个方法执行或属性访问
【正确答案】A,C
【答题时间】2021-10-24 03:26:42
【答案解析】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.横切关注点:日志和跟踪、事务管理、安全性、缓存、错误处理、性能监控、自定义业务规则。C:无论目标是否抛出异常,都将调用。
Spring Environment(可以)从哪里获得获得它的属性源集?(选择所有适用的)
A.从通过@ PropertySource 注解指定的属性文件
B.从 JVM 系统属性
C.从应用程序定义的环境变量
D.从系统属性,如 os.name
【正确答案】A,B,C
【答题时间】2021-10-24 03:26:42
【答案解析】Properties derived from various sources, in this order: –-- JVM System Properties - System.getProperty() –-- System Environment Variables - System.getenv()–-- Java Properties Files 从各种源派生的属性,顺序如下:––JVM系统属性-System.getProperty()––System环境变量-System.getenv()––Java属性文件
关于下面的 pointcut 表达式,下列哪些说法是正确的:(选择两项)execution(@javax.annotation.security.RolesAllowed * rewards.restaurant..(…))
A.类名可以被任意命名
B.目标方法可以有零个或多个参数
C.所有的方法参数都应该用@RolesAllowed 来注解
D.目标方法的返回类型是 RolesAllowed
【正确答案】A,B
【答题时间】2021-10-24 03:26:42
【答案解析】A:表达式中倒数第 2 个星号即是通配类名的,则类名可以是任意名称; B:表达式末尾的括号中的 2 个小数点即是通配方法参数的,则方法的数量可以是 0~N 个; C / D:表达式中的@RolesAllowed 注解表示匹配的方法必须添加了该注解,而不是参数或返回值。
关于 Spring 和 Spring Boot Testing,以下哪些说法是正确的?(选择两项)
A.spring-boot-starter-test 依赖项提供了@Mock 和@MockBean 等注解
B.你可以使用@SpringBootTest 或@ContextConfiguration 来创建 Spring 应用上下文
C.它同时支持集成测试和分片单元测试
D.它支持即用的 EasyMock
【正确答案】B,C
【答题时间】2021-10-24 03:26:42
【答案解析】— 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 Spring Boot测试框架提供了一组用于测试的注释和实用程序:@SpringBootTest、@WebMvcTest、@WebFluxTest、@DataJpaTest、@DataJdbcTest、@JdbcTest、@DataMongoTest、@DataRedist、@MockBean。–使用@SpringBootTest进行集成测试:自动搜索@SpringBootConfiguration,它是@ContextConfiguration的替代品,用于创建用于测试的应用程序,使用@SpringBootTest进行集成测试,使用@ContextConfiguration进行切片测试
以下哪种用例可以由方法级安全注解(如@PreAuthorize)来解决?(选择两项)
A.允许根据请求 URL 访问方法
B.允许根据 HTTP 方法访问方法
C.允许根据用户身份访问方法
D.允许根据角色对访问方法
【正确答案】C,D
【答题时间】2021-10-24 03:26:42
【答案解析】
关于 Spring Boot2.x Actuator Metrics,以下哪些说法是正确的?(选择两项)
A.创建一个指标时,必须有一个或多个标签
B.可使用 Counter、 Gauge、 Timer 和 DistributionSummary 等 Meter 基元测量自定义指标
C.你需要使用特定供应商的 Micrometer 库
D.Timer 既可以测量计时事件的数量,也可以测量所有计时事件的总时间
【正确答案】B,D
【答题时间】2021-10-24 03:26:42
【答案解析】- 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
以下哪些是@Transactional 注解的有效可选属性?(选择两项)
A.writeOnly
B.nestedTransaction
C.isolation
D.propagation
【正确答案】C,D
【答题时间】2021-10-24 03:26:42
【答案解析】