MyBatis+Spring+SpringMVC框架面试题整理(一)

article/2025/9/25 9:21:20

目录

SpringMVC 的工作原理 

谈谈你对SpringMVC的理解

SpringMVC 常用注解都有哪些?

Spring 的常用注解

如何开启注解处理器和适配器?

如何解决 get 和 post 乱码问题?

谈谈你对 Spring 的理解

Spring 中的设计模式(解释)

简单介绍一下 Spring bean 的生命周期(11步)

如何构建一个线程安全的SqlSession


SpringMVC 的工作原理 

https://img-my.csdn.net/uploads/201304/13/1365825529_4693.png

首先:读取配置文件

1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;

2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;

3. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)

4.  提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:

        HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息

        数据转换:对请求消息进行数据转换。如String转换成Integer、Double等

        数据格式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等

        数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中

5.  Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;

6.  根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;

7. ViewResolver 结合Model和View,来渲染视图

8. 将渲染结果返回给客户端。

谈谈你对SpringMVC的理解

1. 是一个基于MVC的web框架

2. SpringMVC是Spring的一个模块,是Spring的子容器,子容器可以拿父容器的东西,但是父容器不能拿子容器的东西

3. SpringMVC的前端控制器DispatcherServlet,用于分发请求,使开发变得简单

4. SpringMVC流程(重点)

5. SpringMVC三大组件

        1)HandlerMapping:处理器映射器

             用户请求路径到Controller方法的映射

        2)HandlerAdapter:处理器适配器

             根据handler(controlelr类)的开发方式(注解开发/其他开发) 方式的不同去寻找不同的处理器适配器

        3)ViewResolver:视图解析器

             可以解析JSP/freemarkerr/pdf等

SpringMVC 常用注解都有哪些?

1. @Controller,使用它标记的类就是一个SpringMVC Controller 对象

2. @RequestMapping,处理请求映射地址

3. @PathVariable,用于对应restful风格url中的参数

        @RequestMapping(value="/happy/{dayid}")  

        findPet(@PathVariable String dayid)

4. @RequestParam,将请求的参数绑定到方法中的参数上

        @RequestParam(value = "name", required = false) String name

5. @ResponseBody,将返回类型直接输入到http response body中

6. @RequestBody,方法参数直接被绑定到http request body中

7. @ModelAttribute和@SessionAttributes,用来传递和保存数据,有很多的坑,不建议使用

Spring 的常用注解

1. 控制反转

        @Component,标注为一个普通的bean

        @Service,@Repository

2. 依赖注入

        @Autowired

        @Qulifier

        @Resource

        @Value

3. 全局

        @Configuration,代替配置文件,相当于beans

        @ComponentScan,配置扫描包

        @Scope,配置bean的生命周期

如何开启注解处理器和适配器?

<mvc:annontation-driven/>

如何解决 get 和 post 乱码问题?

1. get乱码,手动转换

首先:

        String name = new String(xx.getBytes(“iso-8859-1”),”utf-8”);

不行的化,再:

        在server.xml中,修改编码和工程编码一致

2. post乱码,在web.xml中配置字符过滤的filter,采用的类是Spring的CharacterEncodingFilter

<filter><filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

原因

        使用注解@RequestBody和@ResponseBody时,request.setCharactorEncoding(“utf-8”),不起作用。

谈谈你对 Spring 的理解

1. 是一个容器框架

2. 非侵入式框架,框架不会影响或者改变我们原有的编码过程

3. 是一个轻量级框架,可以自由选择Spring框架的全部或一部分

4. 是一个一站式框架,提供了各种各样的模块,支持开发

5. 提供了对于持久层的支持

6. 提供了Web MVC框架

7. IOC/DI,控制反转/依赖注入(解释一下)

控制反转

        不是一种技术,而是一个面向对象编程的法则,“好莱坞法则”,即“don’t call us,we’ll call you”,“别找我,我回来找你”。

        控制反转是从容器的角度来说的,以前对象都是应用程序new出来的,对象之间的依赖也是应用程序自己创建的,从而导致类与类之间高耦合,难于测试。现在,由Spring管理bean的生命周期以及bean之间的关系,降低了业务对象替换的复杂性,提高了组件之间的解耦

        对资源进行集中管理,实现了资源的可配置和易管理;

        隐藏细节,不用自己组装,我们只负责调用。

依赖注入

        是从应用程序的角度来说的,即,应用程序依赖Spring管理的bean以及bean之间的关系。Spring容器中有很多bean的实例,它会将符合依赖关系的对象通过注入的方式进行关联,建立bean与bean之间的联系。

        常见注入方式有:属性注入,构造器注入,数组注入,集合注入

8. AOP,面向切面编程(解释一下)

        利用一种称为“横切”的技术,支持将公共业务提取出来(例如:安全/事务/日志)进行集中管理,面向核心业务编程,只需要关注业务本身,而不用去关注公共业务。使用AOP可以将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性

        Spring中实现AOP的方式有三种,分别为,基于AspectJ注解方式实现、基于Schema的xml配置、基于ProxyFactoryBean代理实现,但是底层都是基于动态代理实现的,动态代理有JDK动态代理和CGLIB动态代理,AOP默认使用的是JDK动态代理,当目标类没有接口时,使用CGLIB动态代理,也可以在配置文件中配置proxy-target-class=true,只使用CGLIB动态代理。

Spring 中的设计模式(解释)

Spring中共用到9种设计模式:

工厂模式,单例模式,代理模式,包装器模式,适配器模式,简单工厂模式,观察者模式,策略模式,模板方法模式

1. 工厂模式

        定义一个用于创建对象的接口,让子类决定实例化哪一个类。

        Spring中FactoryBean就是典型的工厂方法模式

        

2. 单例模式

        保证一个类只有一个实例,并提供一个访问它的全局访问点。

        Spring的单例模式完成了后半句化,即提供了全局的访问点BeanFactory

3. 包装器模式

        动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。

        Spring中用到的包装器模式在类名上有两种表现:一种是类名中含有Wrapper,另一种是类名中含有Decorator。基本上都是动态地给一个对象添加一些额外的职责。

4. 代理模式

        为其他对象提供一种代理以控制对这个对象的访问。

        Spring的Proxy模式在aop中有体现,比如JdkDynamicAopProxy和Cglib2AopProxy。

5. 适配器模式,HandlerAdapter

        将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

        Spring中在对于AOP的处理中有Adapter模式的例子,见如下图:

       

        由于Advisor链需要的是MethodInterceptor(拦截器)对象,所以每一个Advisor中的Advice都要适配成对应的MethodInterceptor对象。

6. 简单工厂模式

        简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。

        BeanFactory,根据传入一个唯一的标识来获得bean对象,但不属于23种GOF设计模式之一。

简单介绍一下 Spring bean 的生命周期(11步)

http://images.51cto.com/files/uploadimg/20110419/0930070.png

前提是实体类实现了相应的接口

spring上下文中的bean的生命周期:

1.实例化bean对象

2.注入bean的所有属性

3.设置bean的id

        调用BeanNameAware接口的setBeanName(String)方法

4.设置bean工厂

        调用BeanFactoryAware接口的setBeanFactory()方法

5.设置实例所在的上下文空间

        调用ApplicationContextAware接口的setApplicationContext()方法,传入Spring上下文

6.调用后置处理器的预初始化方法

        调用BeanPostProcessor接口的postProcessorBeforeInitialization()方法

7.执行InitializingBean的afterPropertiesSet()

8.调用使用init-method配置的自定义初始化方法

9.调用后置处理器的后初始化方法

        调用BeanPostProcessor接口的postProcessorAfterInitialization()方法

10.调用DisPosableBean接口的destory()方法

11.调用使用destroy-method配置的自定义销毁由方法

由BeanFactroy创建的bean

没有第五步

如何构建一个线程安全的SqlSession

请参看我的另外一篇博客:MyBatis面试题 如何构建一个线程安全的SqlSession_新新许愿树-CSDN博客_mybatis 线程安全


http://chatgpt.dhexx.cn/article/i1RUv8pt.shtml

相关文章

面试官:看你简历上写熟悉Spring框架,谈谈对Spring的理解

今天只谈一下我们在面试中的如果面试官问到Spring&#xff0c;你应该怎么去回答&#xff0c;来获取面试官的青睐。在我的印象中&#xff0c;Spring框架可以说是Java世界里面最为成功的框架了&#xff0c;在企业的实际的应用里面&#xff0c;大部分的企业架构都是基于Spring框架…

说实话,面试这么问Spring框架的问题,我快扛不住了

面试官&#xff1a;Spring Framework有用过吧? 小小白&#xff1a;用过(有些心虚&#xff0c;因为Spring框架中内容太多了)。 面试官&#xff1a;在applicationgContext.xml文件中定义了一个bean&#xff0c;id为authService&#xff0c;通过ApplicationContext实例对象的getB…

【java面试】框架篇之Spring

1.你如何理解Spring? 具体来说Spring是一个轻量级的容器&#xff0c;用于管理业务相关对象的。核心功能主要为&#xff1a;IOC,AOP,MVC。 IOD&#xff1a;控制反转&#xff0c;将对象的创建过程交给容器&#xff0c;让容器管理对象的生命周期如创建&#xff0c;初始化&#…

spring框架-如何面试(四)

回顾&#xff1a; spring框架-认识spring框架&#xff08;一&#xff09; spring框架-认识IOC&#xff08;二&#xff09; spring框架-认识AOP&#xff08;三&#xff09; 面试官关于spring最喜欢、也是概率最大的提问 谈谈你对spring的理解 spring的官方定义&#xff1a;…

Spring框架面试题总结(面试必备)

1. spring 概述部分 1.1 什么是spring? 1.2 spring框架的核心? 1.3 spring框架的优缺点 1.4 spring5 的主要模块构成 1.5 Spring 框架中都用到了哪些设计模式&#xff1f; 1.6 讲解一下核心容器&#xff08;spring context应用上下文) 模块 2. spring的控制反转&#xff08…

cmos管宽长比,OC, OD门和线与逻辑,传输门,竞争冒险,三态门

https://blog.csdn.net/vivid117/article/details/100187137 pmos,nmos宽长比https://blog.csdn.net/qq_34070723/article/details/89291200 cmos宽长比&#xff1a; 1.CMOS的宽长比 关于COMS原理及结构图可以参考[1]COMS原理及门电路设计. 栅在源漏方向的长度称作栅的长L&…

OD门OC门

什么是集电极开路&#xff08;OC&#xff09;&#xff1f; % {0 V: X2 {1 I2 s E( y; n! S 我们先来说说集电极开路输出的结构。集电极开路输出的结构如图1所示&#xff0c;右边的那个三极管集电极什么都不接&#xff0c;所以叫做集电极开路&#xff08;左边的三极管为反相之用…

最强深入浅出上拉、OC门、OD门 —— 电子电路基础2

写在前面&#xff1a;对于本科阶段数电课程课时比较少的学校&#xff0c;这一块老师很可能就跳过了&#xff0c;对于这一块的知识来源&#xff0c;清华大学阎石的数电课本在第三章CMOS门电路和TTL门电路。 先看一些电路&#xff1b; &#xff08;1&#xff09;为什么有些时候单…

女朋友去应聘硬件工程师,面试官考她OC门、OD门和推挽输出!

硬件工程师的笔试题中经常会考OC门和OD门&#xff0c;有的放在面试中问&#xff0c;多个OC或者多个OD门能组成线与结构&#xff0c;线与结构考的更频繁&#xff0c;还有一个推挽输出&#xff0c;有一些单片机的GPIO用的就是这种结构&#xff0c;如最常见的STM32。 原创博主AirC…

OC门、OD门和推挽输出

1. OC门 OC意为集电极开路&#xff0c;结构如下&#xff1a; OC门电路 A0&#xff0c;①截止&#xff0c;②导通&#xff0c;相当于开关闭合&#xff0c;输出0V&#xff08;实际输出不是0V&#xff0c;因为三极管存在饱和压降&#xff09;。 A1&#xff0c;①导通&#xff0…

线与逻辑与OC门、OD门关系

线与逻辑:两个或多个输出信号连接在一起可以实现逻辑“与”的功能。 以下图为例: 当与非门G1和G2输出都为1时,输出L才为1;只要有一个输出为0,则输出L为0。 在硬件上,要用OC门(三极管,集电极开路)或OD门(NMOS,漏极开路)来实现。另外,为了防止灌电流过大,在输出端…

数字电路基础知识——CMOS门电路 (与非门、或非、非门、OD门、传输门、三态门)

数字电路基础知识——CMOS门电路 (非门、或非门、与非门、或门、与门、与或非门、异或门、OD门、传输门、三态门) 先了解二极管门电路逻辑&#xff0c;再次介绍CMOS门电路&#xff0c;也是IC中用的最广泛的门电路。 主要了解与非门、或非门以及相同面积的cmos与非门和或非门哪个…

CMOS门电路(OD门、传输门、双向模拟开关、三态门)

文章目录 【 1. MOS管】【 2. CMOS电路】电路结构拉电流灌电流 【 3. 多余输入端的处理】【 4. 扇出系数】【 5. 输入噪声容限】提高噪声容限的方法 【 6. 电压、电流的传输特性】【 7. 静态输入、输出特性】静态输入特性静态输出特性 【 8. 动态特性】①传输延迟时间②交流噪声…

OC门与OD门以及线与逻辑

OC&#xff08;Open Collector&#xff09;门又叫集电极开路门&#xff0c;主要针对的是BJT电路&#xff08;从上往下依次是基极&#xff0c;集电极&#xff0c;发射极&#xff09;OD&#xff08;Open Drain&#xff09;门又叫漏极开路门&#xff0c;主要针对的是MOS管&#xf…

OC门电路和OD门电路的区别

OC门电路和OD门电路的区别 一、OC门电路是什么&#xff1f;二、OD门电路是什么&#xff1f;三、总结 一、OC门电路是什么&#xff1f; OC门电路&#xff1a;集电极开路&#xff08;open collector&#xff09; OC门电路的工作原理&#xff1a; 1&#xff09;当INPUT输入高电平…

CMOS搭建反相器、与非门和或非门以及OD和三态门

文章目录 基本概念1. N沟道增强型MOS管2. P沟道增强新MOS管 反相器与非门或非门OD门和三态门1.OD门2.三态门 基本概念 CMOS&#xff08;互补对称式金属-氧化物-半导体电路&#xff09;&#xff0c;具有源极&#xff08;S&#xff09;、栅极&#xff08;G&#xff09;和漏极&am…

OC门、OD门与推挽输出

硬件工程师的笔试题中经常会考OC门和OD门&#xff0c;有的放在面试中问&#xff0c;多个OC或者多个OD门能组成线与结构&#xff0c;线与结构考的更频繁&#xff0c;还有一个推挽输出&#xff0c;有一些单片机的GPIO用的就是这种结构&#xff0c;如最常见的STM32。 原创博主&…

OD OC 门

在电路中常会遇到漏极开路&#xff08;Open Drain&#xff09;和集电极开路&#xff08;Open Collector&#xff09;两种情形。漏极开路电路概念中提到的“漏”是指 MOSFET的漏极。同理&#xff0c;集电极开路电路中的“集”就是指三极管的集电极。在数字电路中&#xff0c;分别…

数字电路2. OC门、OD门、三态门

数字电路2. OC门、OD门、三态门 一、OC门——集电集开路门1. 基本概念2. 作用3. 使用要点4. OC门的简单实现 二、OD门——漏极开路门四、三态门1. 概念2. 三态门的作用3. 简单仿真&#xff08;1&#xff09;1使能高电平&#xff08;2&#xff09;1使能低电平 一、OC门——集电集…

OC, OD门和线与逻辑

OC&#xff08;Open Collector&#xff09;门&#xff0c;又称集电极开路&#xff0c;OD&#xff08;Open Drain&#xff09;漏极开路&#xff0c;通过名称就可以判断&#xff0c;OC门是针对三极管来说的&#xff0c;而OD门是针对MOS管而言的&#xff0c;csdn上有很多人把OC门就…