说一下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的执行流程以及各个组件的作用(必会)
    Snipaste_2022-06-21_14-43-00.png
    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中的隔离级别 (高薪常问)
    image.png

    @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的成员变量用来保存需要操作的可变变量