【精选】64道题拿下Spring(第四篇)
46、spring MVC运行流程
-
用户发送请求 被 DispatcherServlet 截取进行url分析
-
得到url路径然后调用HandlerMapping获得Handler所有相关对象
-
DispatcherServlet 获得Handler选择合适的 HandlerAdapter 开始进行拦截
-
提取Request中数据填充Handler入参
-
Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象
-
根据放回的ModelandView选择 ViewResolver 返回给DispatcherServlet
-
ViewResolver 结合model和view渲染视图
-
将结果放回给用户
47、解释对象/关系映射集成模块。
Spring 通过提供 ORM 模块,支持我们在直接 JDBC之上使用一个对象/关系映射映射(ORM)工具,
Spring 支持集成主流的 ORM 框架,如Hiberate,JDO 和 iBATISSQL Maps。Spring 的事务管理同样支 持以上
所有 ORM 框架及 JDBC。
48、解释 WEB 模块。
Spring 的 WEB 模块是构建在 application context 模块基础之上,提供一个适合 web 应用的上下 文。
这个模块也包括支持多种面向 web 的任务,如透明地处理多个文件上传请求和程序级请求参数的 绑定到你
的业务对象。它也有对 Jakarta Struts 的支持。75、Spring 配置文件
Spring 配置文件是个 XML 文件,这个文件包含了类信息,描述了如何配置它们,以及如何相互调 用
49、Bean 工厂和 Application contexts 有什么区别?
Application contexts 提供一种方法处理文本消息,一个通常的做法是加载文件资源(比如镜 像),
它们可以向注册为监听器的 bean 发布事件。
另外,在容器或容器内的对象上执行的那些不得不由bean 工厂以程序化方式处理的操作,
可以在Application contexts 中以声明的方式处理。
Application contexts 实现了MessageSource 接口,该接口的实现以可插拔的方式提供获取本地化消息的方法。
50、一个 Spring Bean 定义 包含什么?
一个 Spring Bean 的定义包含容器必知的所有配置元数据,包括如何创建一个bean,它的生命周 期详
情及它的依赖。
51、如何给 Spring 容器提供配置元数据?
这里有三种重要的方法给 Spring 容器提供配置元数据。
-
XML 配置文件。
-
基于注解的配置。
-
基于 java 的配置。
52、JdbcTemplate
JdbcTemplate 类提供了很多便利的方法解决诸如把数据库数据转变成基本数据类型或对象,执行 写好
的或可调用的数据库操作语句,提供自定义的数据错误处理。
53、Spring 框架的事务管理有哪些优点?
它为不同的事务 API 如 JTA,JDBC,Hibernate,JPA和 JDO,提供一个不变的编程模式。
它为编程式事务管理提供了一套简单的 API 而不是一些复杂的事务 API
如
它支持声明式事务管理。它和 Spring 各种数据访问抽象层很好得集成。
54、你更倾向用那种事务管理类型?
大多数 Spring 框架的用户选择声明式事务管理,因为它对应用代码的影响最小,因此更符合一个 无侵
入的轻量级容器的思想。声明式事务管理要优于编程式事务管理,虽然比编程式事务管理(这种方 式允许你
通过代码控制事务)少了一点灵活性
55、通知
通知是个在方法执行前或执行后要做的动作,实际上是程序执行时要通过SpringAOP 框架触发的代码段。
Spring 切面可以应用五种类型的通知:
-
before:前置通知,在一个方法执行前被调用。
-
after: 在方法执行之后调用的通知,无论方法执行是否成功。
-
after-returning: 仅当方法成功完成后执行的通知。
-
after-throwing: 在方法抛出异常退出时执行的通知。
-
around: 在方法执行之前和之后调用的通知。
56、切点
切入点是一个或一组连接点,通知将在这些位置执行。可以通过表达式或匹配的方式指明切入点。
57、什么是引入?
引入允许我们在已存在的类中增加新的方法和属性。
58、什么是目标对象?
被一个或者多个切面所通知的对象。它通常是一个代理对象。也指被通知(advised)对象。
59、DispatcherServlet
Spring 的 MVC 框架是围绕 DispatcherServlet 来设计的,它用来处理所有的 HTTP请求和响应。
60、WebApplicationContext
WebApplicationContext 继承了 ApplicationContext 并增加了一些 WEB 应用必备的特有功能,它 不同
于一般的 ApplicationContext ,因为它能处理主题,并找到被关联的 servlet。
61、什么是 Spring MVC 框架的控制器?
控制器提供一个访问应用程序的行为,此行为通常通过服务接口实现。控制器解析用户输入并将其 转换
为一个由视图呈现给用户的模型。
Spring 用一个非常抽象的方式实现了一个控制层,允许用户创建多种用途的控制器。
62、@Controller 注解
该注解表明该类扮演控制器的角色,Spring 不需要你继承任何其他控制器基类或引用 Servlet API。
63、@RequestMapping 注解
该注解是用来映射一个 URL 到一个类或一个特定的方处理法上
64、Spring 框架中的单例 bean 是线程安全的吗?
Spring容器本身并没有提供Bean的线程安全策略,因此可以说Spring容器中的Bean本身不具备线程安全的特性,但是具体情况还是要结合Bean的作用域来讨论。
(1)对于prototype作用域的Bean,每次都创建一个新对象,也就是线程之间不存在Bean共享,因此不会有线程安全问题。
(2)对于singleton作用域的Bean,所有的线程都共享一个单例实例的Bean,因此是存在线程安全问题的。但是如果单例Bean是一个无状态Bean,也就是线程中的操作不会对Bean的成员执行查询以外的操作,那么这个单例Bean是线程安全的。比如Controller类、Service类和Dao等,这些Bean大多是无状态的,只关注于方法本身。
有状态Bean(Stateful Bean) :就是有实例变量的对象,可以保存数据,是非线程安全的。
无状态Bean(Stateless Bean):就是没有实例变量的对象,不能保存数据,是不变类,是线程安全的。
对于有状态的bean(比如Model和View),就需要自行保证线程安全,最浅显的解决办法就是将有状态的bean的作用域由“singleton”改为“prototype”。
也可以采用ThreadLocal解决线程安全问题,为每个线程提供一个独立的变量副本,不同线程只操作自己线程的副本变量。
ThreadLocal和线程同步机制都是为了解决多线程中相同变量的访问冲突问题。同步机制采用了“时间换空间”的方式,仅提供一份变量,不同的线程在访问前需要获取锁,没获得锁的线程则需要排队。而ThreadLocal采用了“空间换时间”的方式。ThreadLocal会为每一个线程提供一个独立的变量副本,从而隔离了多个线程对数据的访问冲突。因为每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步
#春招##秋招##面试##面试复盘##面经#宝剑锋从磨砺出,梅花香自苦寒来,我是小码哥为你圆梦大厂少走弯路,值得关注。