1.springMVC运行过程
1.用户发起请求到前端控制器(Controller)
2.前端控制器没有处理业务逻辑的能力,需要找到具体的模型对象处理(Handler),
到处理器映射器(HandlerMapping)中查找Handler对象(Model)。
HandlerMapping返回执行链,包含了2部分内容: ① Handler对象、② 拦截器数组
3.前端处理器通过处理器适配器包装后执行Handler对象。
4.处理业务逻辑。
5.Handler处理完业务逻辑,返回ModelAndView对象,其中view是视图名称,不是真正的视图对象。
6.将ModelAndView返回给前端控制器。
7.视图解析器(ViewResolver)返回真正的视图对象(View)。
(此时前端控制器中既有视图又有Model对象数据)前端控制器根据模型数据和视图对象,进行视图渲染。
8.返回渲染后的视图(html/json/xml)返回。
9.给用户产生响应。
2.spring事务 隔离级别 5
ISOLATION_DEFAULT:默认隔离级别
ISOLATION_READ_UNCOMMITTED(未提交读):会出现幻读、脏读、不可重复读
ISOLATION_READ_COMMITTED(提交读):造成幻读、不可重复读
ISOLATION_REPEATABLE_READ(可重复读):但会出现幻读
ISOLATION_SERIALIZABLE(序列化):防止脏读、不可重复读、幻读
Mysql 默认:可重复读
Oracle 默认:读已提交
3.spring线程池的作用
threadPoolTaskExecutor
1.降低资源消耗
2.提高响应速度
3.提高线程的可管理性
4.spring事务 传播行为 7
PROPAGATION_REQUIRED:支持当前事务,如当前没有事务,则新建一个。
PROPAGATION_SUPPORTS:支持当前事务,如当前没有事务,则已非事务性执行。
PROPAGATION_MANDATORY:支持当前事务,如当前没有事务,则抛出异常。
PROPAGATION_REQUIRES_NEW:始终新建一个事务,如当前原来有事务,则把原事务挂起。
PROPAGATION_NOT_SUPPORTED:不支持当前事务,始终已非事务性方式执行,如当前事务存在,挂起该事务。
PROPAGATION_NEVER:不支持当前事务;如果当前事务存在,则引发异常。
PROPAGATION_NESTED:如果当前事务存在,则在嵌套事务中执行,如果当前没有事务,则执行与
PROPAGATION_REQUIRED 类似的操作。
5.spring boot和spring区别
1.约定大于配置
2.自带tomcat
3.自动配置
4.继承大量的第三方配置
6.springIOC三种注入方式
1.接口注入:如果采用接口注入一个Bean,那么通过注入的Bean就必须要实现这个接口(最差)
2.set方法注入:如果采用set注入一个Bean,那么只需要为Bean中所需要的一些组件提供set方法就可以,
通过set方法注入比较清晰,大家一看就知道(补充)
3.构造器注入:如果采用构造器注入方式,那么首先为这个Bean提供自定义的构造函数,
构造函数中需要的参数就是类中的组件实例。(最优)
7.spring是什么?spring的ioc和aop
spring是ioc和aop的轻量级容器
ioc:控制反转,用依赖注入(反射机制),将实例的初始化交给spring容器来管理,
ioc的反射机制允许我们不重新编译代码,因为它的对象是动态生成的。
aop是面向切面编程,是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,
便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。
用于权限、日志 (适配器模式)
6.springAOP代理模式
AOP基于动态代理,动态代理分为JDK动态代理和CGLIB动态代理,
1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP,可以强制使用CGLIB实现AOP
2、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换
JDK动态代理:被代理类必须实现了接口,
CGLIB动态代理:被代理类必须可以被继承
8.有没有看过spring源码
9.有没有看过mybatis源码
①、一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。
②、二级缓存是mapper级别的缓存,二级缓存是多个SqlSession共享的。多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。