说一下SpringMVC支持的转发和重定向的写法(必会)
转发:在返回值类型前添加forward
重定向:在返回值前面添加redirect
谈一下SpringMVC统一异常处理的思想和实现方式(必会)
springmvc框架中的调用者是springmvc框架,所以代码中出现的异常最终会抛到springmvc框架,实现统一异常处理器的方式有2种,
1:新建一个类实现HandlerExceptionResolver接口,重写方法
2:新建一个类添加注解controlleradvice
在SpringMVC中, 如果想通过转发将数据传递到前台,有几种写法?(必会)
1、直接放到request
2、放到model中,再把model放到request中
3、放到modelmap,再把modelmap放到reques中
4、放到modelandview,再把modelandview放到request中
在SpringMVC中拦截器的使用步骤是什么样的?(必会)
新建一个类实现interceptorhandler接口并重写方法,然后在sprinvmvc配置中进行注册
在SpringMVC中文件上传的使用步骤是什么样的? 前台三要素是什么?(必会)
导入相关commons-fileupload依赖包
springmvc配置文件的文件上传解析器id必须是mutipartresolver
后端参数类型必须为mutipartmutipartfile,参数名跟前端的name一致
三要素:
1、表单提交方式post
2、enctype=””mutipart/form-data
3、必须有一个input属性为file,并且name等于后端的形参名字
谈一下你对SpringMVC框架的理解(了解)
springmvc是一个实现了mvc模型的web框架,目的是为了简化开发
SpringMVC主要组件(必会)
前端控制器(核心控制器)
处理器映射器
处理器适配器
处理器(controller)
视图解析器
视图
谈一下SpringMVC的执行流程以及各个组件的作用(必会)
1.用户发送请求到前端控制器(DispatcherServlet),前端控制器转发给处理器映射器;
2.处理器映射器根据请求找到具体的处理器,生成处理器对象和拦截器对象,返回给前端控制器;
3.前端控制器发送请求和处理器执行链给处理器适配器, 处理器适配器找到自定义的处理器并将执行结果返回给前端控制器;(处理器有很多种,使用适配器转换之后代码就统一了)
4.前端控制器将处理结果—->视图解析器;视图解析器将得到的modelAndView从逻辑视图转换为物理视图,—->前端控制器;
5.前端控制器调用视图实现将数据渲染到视图上;
SpringMVC的常用注解(必会)
@component
@controller
@requestmapping
@requestbody
@responsebody
@requestparam
@pathvariable
@restcontroller
@controlleradvice
@exceptionhandler
SpringMVC 中如何解决GET|POST请求中文乱码问题?(了解)
post请求:统一在过滤器中处理,使用characterencodingfilter设置全局字符集
get请求:2种方式,第一种是修改tomcat的字符集编码,第二种是以tomcat的编码去读,然后再转成我们自己需要的编码
Spring事务的实现方式和实现原理(必会)
Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。真正的数据库层的事务提交和回滚是通过binlog或者redo log实现的。
spring事务实现主要有两种方法
1、编程式,beginTransaction()、commit()、rollback()等事务管理相关的方法
2、声明式,利用注解Transactional 或者aop配置
你知道的Spring的通知类型有哪些,分别在什么时候执行?(了解)
1.@Before 前置通知:表示在目标方法前增加功能
2.@AfterReturning 后置通知:表示在目标方法之后执行,能够的到目标方法的返回值
3.@Around 环绕通知:相当于动态代理InvocationHandler,
可在目标方法前后都增加功能,且能控制目标方法的访问,以及修改目标方法的返回值。
4.AfterThrowing异常通知:在目标方法抛出异常后执行,相当于try (){}cath(输出:异常……)
5.@After 最终通知:总是会被执行的代码
6.@PointCut 定义和管理切入点辅助注解
Spring的事务传播行为(高薪常问)
propagation_传播
required必须的/ 有加入,没有创建
suppor支持/ 存在就加入,没有以非事务方式执行
mandatory 强制托管/ 存在事务就加入,不存在就抛出异常
requires-new 需要新建/ 无论如何创建新的事务
not -supported不支持/ 不支持事务
never从不/ 不支持事务,若存在抛异常
nested嵌套的 当前存在事务,则在嵌套事务内执行
Spring中的隔离级别 (高薪常问)
@Resource和@Autowired依赖注入的区别是什么? @Qualifier使用场景是什么?(了解)
@Resource是jdk自带的,默认先通过名字查找,找不到再通过类查找
@Autowired是spring的,默认通过类型查找,需要指定id才会根据名字查找
@Qualifier使用在需要注入指定名字的bean,需要与@Autowired综合使用
Spring框架中都用到了哪些设计模式?(必会)
工厂模式(spring容器中使用到)、单例模式(bean默认是单例)、代理模式(aop中切面就是通过代理实现的)、模版方法、观察者模式
Spring的常用注解(必会)
创建对象相关的:compoment、repository、service、controller、bean
事务相关的:transational
依赖注入相关的:autowired、value、qualifier、resource
Spring的两大核心是什么?谈一谈你对IOC的理解? 谈一谈你对DI的理解? 谈一谈你对AOP的理解?(必会)
ioc和di
ioc (控制反转): 将对象的创建,对象的赋值,对象的管理工作交给容器完成
能够实现解耦合,降低类与类之间的耦合性
di(依赖注入):将数据(对象)注入到某个类的成员变量中
aop:在原有的业务方法代码不改变的情况下,增加一些额外的扩展功能。
aop可以看作是实现动态代理的一种规范,
Spring的生命周期?(高薪常问)
Spring默认对bean采用的是单例设计模式,bean创建完毕的时候回调用init-method指定的方法,然后bean对象会进入到spring的容器中,如果bean配置有id或者是name那么该bean存储到spring容器的时候会使用id或者name作为对象标记。当spring容器销毁之前会调用destroy-method指定的方法。
1、通过applocationcontext.xml文件生成spring容器
2、如果bean上没有lazy-init=“true”的属性,将会创建并放到spring容器中,这一步就是ioc
3、接下来需要根据xml中配置的依赖关系进行依赖注入(di)
4、如果bean中配置了init-method和destory-method的话,在bean创建和销毁的时候会调用对应的方法
5、此时spring容器中已准备好应该加载的bean,可以通过spring容易getbean(“id”)获取对应的bean
Spring支持bean的作用域有几种吗? 每种作用域是什么样的?(必会)
5种
singleton:默认单例作用域,在多线程的情况下会存在并发访问的问题
prototype:多例作用域
request:一个用户的一次请求生效,完事后被回收
session:一个用户的多次请求生效,关闭会话后被回收
global-session:全局作用域,多个用户的多次请求生效,在服务器关闭的时候才会被回收
BeanFactory和ApplicationContext有什么区别(了解)
beanfactory:在启动时不会去创建bean,只在从容器中拿的时候才去创建
applicationcontext:在启动时就已经把所有bean创建完
Spring的对象默认是单例的还是多例的? 单例bean存不存在线程安全问题呢?
单例的,存在线程安全问题,多线程访问时,其中一个线程在做操作,其他线程不能操作该对象
解决方法:1、避免在单例对象中定义可变变量
2、定义一个theadlocal的成员变量用来保存需要操作的可变变量