Score %0 (0 correct0 incorrect20 unanswered)
Q1. Spring Web中如何使用过滤器?
- 在请求到达DispatcherServlet之前会调用过滤器。它们允许对Web请求进行拦截式、链式处理,用于安全性、超时等目的。
- 使用带有校验和算法的过滤器,该算法会过滤掉字节流请求体中的无效字节,并允许从DispatcherRequestServlet处理HTTP请求。
- 使用带有校验和算法的过滤器,该算法会过滤掉多部分上传的字节流中的无效字节,并允许对WebDispatcherServlet请求进行链式处理。
- 使用过滤器验证字节流请求体中的请求参数,并允许从DispatcherRequestServlet处理请求。
Spring MVC中的HandlerInterceptors和Filters。另外,在Spring中不存在DispatcherRequestServlet。
Q2. 在REST服务的背景下,资源是如何定义的?
- 资源是实际的字符串文字,构成了可以在RESTful Web服务上访问的URI。
- 它是一个抽象概念,表示一种类型化的对象、数据、关系以及一组在URI上操作它的方法。
- REST服务具有资源池,由内存分配组成,允许处理请求。
- REST服务的资源是将线程或CPU周期明确分配给允许处理请求的资源。
Spring中的Rest服务
Q3. 以下哪个是有效的Advice注解?
- @AfterError
- @AfterReturning
- @AfterException
- @AfterExecution
Spring Advice类型注解
Q4. ViewResolver的作用是什么?
- 它通过检测用户的区域设置来支持Web应用的国际化。
- 它通过将控制器方法返回的逻辑视图名称映射到视图技术来生成视图。
- 它通过创建一个唯一的视图来确定用户的浏览器类型,支持跨浏览器兼容性。
- 它将自定义参数映射到数据库中的SQL视图,允许在响应中创建动态内容。
Spring MVC中的视图解析
Q5. Spring Data存储库在运行时是如何由Spring实现的?
- Spring根据您的YAML配置自动生成代码,该配置定义了一个MethodInterceptor链,拦截对实例的调用,并动态计算SQL。
- 创建了一个JDK代理实例,该实例支持存储库接口,并且一个MethodInterceptor拦截器拦截对实例的调用,并根据需要进行路由。
- Spring JDK代理创建了一个单独的运行时进程,充当数据库和Web服务器之间的中介,并拦截对实例的调用并处理请求。
- Spring根据您的XML配置文件自动生成代码,该文件定义了一个SpringMethodAutoGeneration工厂,该工厂拦截对实例的调用,并创建动态方法,动态计算SQL。
解释了的问答
Q6. 什么是SpEL,它在Spring中如何使用?
- SpEL(Spring Expression Language)在JVM中运行,并可以作为Groovy或其他语言的替代品。
- SpEL(Spring Expression Language)支持布尔和关系运算符以及正则表达式,并用于在运行时查询对象图。
- SpEL(Spring Expression Language)允许您构建、配置和执行任务,如构建构件和下载对象依赖项。
- SpEL(Spring Expression Language)本地将一种JVM语言转译为另一种语言,从而实现更大的灵活性。
Spring表达式文档
Q7. 将切面与其他对象链接以创建通知对象的过程称为
Q8. 在Spring中,JDK动态代理和CGLIB代理是如何使用的?
- JDK动态代理只能代理接口,因此如果目标实现至少一个接口,则会使用它。CGLIB代理可以通过子类化创建代理,并且如果目标不实现接口,则会使用它。
- 在Spring Bean生命周期中只使用JDK动态代理。CGLIB代理仅用于与其他框架集成。
- 在Spring Bean生命周期中只使用CGLIB代理。JDK动态代理仅用于与其他框架集成。
- JDK动态代理只能使用目标类扩展的抽象类。CGLIB代理可以通过字节码交织创建代理,如果目标类没有扩展抽象类,则会使用它。
Q9. 在JoinPoint接口上哪个不是有效的方法?
- getArgs()
- getExceptions()
- getSignature()
- getTarget()
Q10. @PostConstruct注解的方法、init-method参数方法和afterPropertiesSet()方法的执行顺序是什么?
- 1. afterPropertiesSet() 2. init-method 3. @PostConstruct
- 1. @PostConstruct 2. afterPropertiesSet() 3. init-method
- 1. init-method 2. afterPropertiesSet() 3. @
PostConstruct
Q11. @Transactional注解在类级别的功能是什么?
- 它是由
spring.security.transactions.xml
配置文件配置的事务属性,使用了Spring的事务实现和验证代码。
- 这是一个必须由事务的字节码主动验证的事务,使用了Spring的
TransactionBytecodeValidator
类。默认的事务行为在验证异常时回滚,但在正确验证时提交。
- 它创建一个代理,实现与注解类相同的接口,允许Spring将行为注入到被代理的对象中,在方法调用之前、之后或之间。
- 这是一个必须由Spring的
TransactionValidator
类使用Spring的事务验证代码主动验证的事务。默认的事务行为在验证异常时回滚。
Q12. 这段代码的有效输出示例是什么(忽略日志语句)?
@SpringBootApplication
public class App {
public static void main(String args[]) {
SpringApplication.run(App.class, args);
System.out.println("startup");
}
}
public class Print implements InitializingBean {
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("init");
}
}
- 什么都不会打印
- startup
init
- init
- startup
解释:SpringApplication.run方法返回创建的上下文,所以main方法会继续运行并打印“startup”。Print类不是Spring Bean,因为它没有用@Component注解,所以它不会被初始化。
Q13. 如果要停止此代码抛出空指针异常,哪个println语句会删除?
@Component
public class Test implements InitializingBean {
@Autowired
ApplicationContext context;
@Autowired
static SimpleDateFormat formatter;
@Override
public void afterPropertiesSet() throws Exception {
System.out.println(context.containsBean("formatter") + " ");
System.out.println(context.getBean("formatter").getClass());
System.out.println(formatter.getClass());
System.out.println(context.getClass());
}
}
@Configuration
class TestConfig {
@Bean
public SimpleDateFormat formatter() {
return new SimpleDateFormat();
}
}
- formatter.getClass()
- context.getClass()
- context.getBean("formatter").getClass()
- context.containsBean("formatter")
Q14. 用于访问Spring bean容器的根接口是什么?
- SpringInitContainer
- ResourceLoader
- ApplicationEventPublisher
- BeanFactory
Q15. 在Spring Security中,哪个注解可以用于应用方法级别的安全性?
- @Secured
- @RequiresRole
- @RestrictedTo
- @SecurePath
Q16. 使用HTTP请求GET localhost:8080/map?foo=foo&bar=bar 调用map控制器方法的结果是什么?
@RestController
public class SampleController {
@RequestMapping("/map")
public String map(@RequestParam("bar") String foo, @RequestParam("foo") String bar) {
return bar + foo;
}
}
- 在运行时抛出InvalidParameterNameMappingException异常。
- barfoo
- foobar
- 返回400 Bad Request的状态码。
Q17. @Lazy注解的目的是什么,为什么要使用它?
- 它防止一个bean被创建和注入,直到您运行特定的CLI命令。它减少了应用程序中的复杂性。
- 它可以应用于一个bean,以便该bean不会被持久化在数据库中。它减少了数据库操作的次数。
- 它可以应用于一个bean,以便该bean在需要时才被创建和注入。它可以帮助加快应用程序的启动时间。
- 它防止一个bean被创建和注入,直到它接收到针对回调钩子的HTTP请求。它减少了磁盘空间的占用。
Q18. 什么是依赖注入?
- 一种方法,对象定义它们需要的依赖项作为抽象,这允许框架在运行时在一个中心位置实例化和配置它们。
- 一种范式,其中依赖的代码被注入到Java应用程序的字节码中,在远程服务器上。
- 一种将远程依赖项注入到预打包的JAR文件中的方法,来自文件系统。
- 一种将远程依赖项注入到预打包的WAR文件中的方法,来自文件系统。
Q19. 什么是RESTful Web服务?
- Reactive Enterprise Status Transfer是一种Web服务,包括一组用于监视和警报一组关键任务资源的指南和技术约束的Web服务。
- Representational State Transfer是一种用于创建Web服务的架构风格,包括客户端-服务器架构、无状态性、可缓存性、分层系统和统一接口。
- Redundant Enumerated State Transfer是一种Web服务,提供了在失败情况下的冗余,并概述了对资源具有访问权限的Web服务的技术约束。
- Reactive Enterprise State Transfer是一种Web服务,包括一组用于访问资源并异步处理的Web服务的指南和技术约束。
Q20. 当一个类被@Controller注解时会发生什么?
- 在Servlet的WebApplicationContext中定义了一个控制器bean定义。该类被标记为web组件,您可以将请求映射到控制器方法。
- 在Web上下文中定义了一个控制器bean定义,Web Servlet被标记为从XML配置文件读取映射的控制器请求的组件
。
- 在Tomcat上下文中定义了一个控制器bean定义,控制器Servlet被标记为从YAML配置文件读取映射的控制器请求的组件。
- 在Servlet上下文中定义了一个控制器bean定义,控制器Servlet被标记为从XML配置文件读取映射的控制器请求的组件。