版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SSM框架高频面试题及详细答案(实战向)一、SSM框架基础综合题1、简单说说你对SSM框架的理解,以及各框架的作用?SSM是Spring、SpringMVC、MyBatis三个框架整合的Java后端主流开发架构,主要用于快速开发轻量级Web项目,分工明确、各司其职。1.Spring:核心容器框架,负责项目整体的对象管理、事务控制、依赖注入。主要解决项目中组件耦合度高、对象重复创建、事务管理混乱的问题,是整个架构的基础支撑。2.SpringMVC:Spring的Web层框架,专门负责接收前端请求、参数解析、请求分发、视图跳转、响应结果封装。替代了原生Servlet,简化了Web层的开发流程。3.MyBatis:持久层框架,用于操作数据库。封装了JDBC的繁琐代码,支持自定义SQL、参数映射、结果集封装,解决了JDBC代码冗余、数据库操作繁琐的问题,相比Hibernate更灵活、适配业务复杂的项目。2、SSM整体的执行流程是什么?1.前端发送HTTP请求,请求首先被SpringMVC的核心控制器DispatcherServlet拦截;2.DispatcherServlet调用HandlerMapping处理器映射器,根据请求URL匹配对应的Controller方法;3.匹配成功后,调用HandlerAdapter处理器适配器,执行对应的Controller业务方法;4.Controller层接收前端参数,调用Service层业务接口;5.Service层处理业务逻辑,通过Spring的事务机制控制事务,调用Dao层接口;6.Dao层通过MyBatis映射文件/注解执行SQL,操作数据库,获取返回结果;7.数据库结果逐层返回,Controller封装数据(JSON/视图),由DispatcherServlet响应给前端。二、Spring核心面试题1、Spring的IOC是什么?原理以及作用?IOC即控制反转,是Spring的核心思想之一。传统开发中,对象的创建、依赖赋值由开发者手动new完成,控制权在开发者手中;而IOC将对象的创建、管理、依赖注入的控制权交给Spring容器,实现控制权的反转。核心原理:通过XML配置或注解定义Bean,项目启动时Spring容器扫描配置,通过反射机制实例化对象,统一存入容器中管理,需要使用时直接从容器获取。主要作用:彻底解耦,降低组件之间的依赖关系,不需要手动管理对象生命周期,方便项目维护、测试和迭代,同时统一管理对象,避免重复创建对象造成的资源浪费。2、SpringDI依赖注入的几种方式?常用的是哪种?依赖注入就是Spring容器将Bean的依赖对象自动赋值给当前Bean,主要有三种方式:1.构造器注入:通过类的构造方法注入依赖,Spring官方推荐方式。优点是保证对象初始化时依赖完整,线程安全,不会出现空指针问题。2.setter方法注入:通过setXxx方法注入,适合可选依赖、后续需要动态修改的依赖。3.字段注入:通过@Autowired、@Resource注解直接注入字段,开发中最常用,代码简洁。缺点是容易导致类依赖过多,不利于代码解耦和单元测试。实际开发中,基础核心依赖用构造器注入,普通业务依赖用字段注入。3、SpringBean的作用域有哪些?默认是什么?SpringBean常用作用域共5种,默认是singleton(单例):1.singleton:单例,整个Spring容器中只创建一个Bean实例,全局共享,默认作用域。适合无状态的Bean(Controller、Service、Dao)。2.prototype:多例,每次从容器获取Bean都会创建一个新实例。适合有状态的Bean。3.request:每次HTTP请求创建一个新Bean,请求结束销毁。4.session:每个用户会话对应一个Bean,会话过期销毁。5.application:整个Web应用全局一个Bean,和Servlet生命周期一致。4、Spring的AOP是什么?应用场景有哪些?AOP即面向切面编程,是基于动态代理的编程思想,在不修改原有业务代码的前提下,对方法进行增强,实现业务逻辑与通用功能的分离。核心原理:通过JDK动态代理(接口代理)或CGLIB代理(类代理),在目标方法执行前后、异常、返回后切入通用逻辑。常用应用场景:日志记录、权限校验、事务控制、接口限流、性能监控、缓存处理、异常统一捕获。5、Spring事务的传播机制和隔离级别?事务传播机制(7种,常用5种):用于解决多层方法调用时事务的传递问题1.REQUIRED(默认):当前有事务就加入,没有就新建事务;2.SUPPORTS:当前有事务就加入,没有就非事务执行;3.MANDATORY:必须在事务中执行,否则报错;4.REQUIRES_NEW:新建独立事务,暂停当前事务;5.NOT_SUPPORTED:始终非事务执行,挂起当前事务;6.NEVER:强制非事务,存在事务则报错;7.NESTED:嵌套事务,依赖父事务,可独立回滚子事务。事务隔离级别(4种):解决并发事务的脏读、不可重复读、幻读问题1.READ_UNCOMMITTED:读未提交,存在三大并发问题,基本不用;2.READ_COMMITTED:读已提交,解决脏读,Oracle默认级别;3.REPEATABLE_READ:可重复读,解决脏读、不可重复读,MySQL默认级别;4.SERIALIZABLE:串行化,解决所有并发问题,性能最低。三、SpringMVC核心面试题1、SpringMVC的核心组件有哪些?各自作用?1.DispatcherServlet(核心控制器):整个SpringMVC的入口,统一拦截所有请求,调度所有组件,分发请求;2.HandlerMapping(处理器映射器):根据请求URL、请求方式,匹配对应的Controller处理器;3.HandlerAdapter(处理器适配器):适配不同类型的处理器,调用执行Controller的业务方法;4.ViewResolver(视图解析器):对方法返回的视图名称进行解析,拼接前后缀,找到对应视图页面;5.HandlerExceptionResolver(异常解析器):统一处理请求过程中出现的异常。2、SpringMVC参数接收的方式有哪些?1.基本类型参数:直接在Controller方法定义String、Integer等参数,参数名与前端传参名一致即可自动绑定;2.实体类参数:自定义实体类,前端参数名与实体类属性名对应,自动封装实体对象;3.@RequestParam接收:用于接收普通参数,可指定参数名、设置是否必传、默认值,适合参数名和前端不一致的场景;4.@PathVariable接收:接收URL路径中的参数,常用于RESTful风格接口;5.@RequestBody接收:接收前端JSON格式的请求体数据,自动封装为对象,前后端分离项目最常用;6.Servlet原生对象接收:直接使用HttpServletRequest、HttpServletResponse接收参数。3、@ResponseBody的作用?该注解作用于Controller方法上,核心作用是禁止视图跳转,直接将方法返回值转为JSON字符串响应给前端。不加该注解时,SpringMVC会默认将返回值当做视图名称,走视图解析流程跳转页面;添加后会通过Jackson工具将对象、集合、字符串转为JSON数据,适配前后端分离的开发模式。日常开发中@RestController注解就是@Controller+@ResponseBody的组合注解。4、SpringMVC拦截器和过滤器的区别?1.执行位置不同:过滤器是Tomcat原生组件,在Servlet执行前后生效;拦截器是SpringMVC组件,在Controller方法执行前后生效;2.依赖框架不同:过滤器不依赖Spring框架,任意Web项目都可使用;拦截器仅SpringMVC项目可用;3.拦截范围不同:过滤器拦截所有请求,包括静态资源、JSP;拦截器只拦截Controller的请求;4.使用场景不同:过滤器多用于编码过滤、跨域处理、静态资源放行;拦截器多用于权限校验、登录拦截、接口日志记录。四、MyBatis核心面试题1、MyBatis的优缺点是什么?优点:1.封装了JDBC冗余代码,简化数据库操作,代码简洁;2.SQL语句与Java代码分离,集中在XML文件中,方便维护、优化SQL;3.支持动态SQL,可根据业务条件灵活拼接查询、新增、修改语句;4.灵活度高,开发者可自主控制SQL,适配复杂业务查询、多表关联查询;5.自动完成参数映射和结果集封装,无需手动封装数据。缺点:1.需要手动编写SQL语句,相比MyBatis-Plus、JPA编码量更高;2.简单单表操作冗余,批量操作、分页需要手动实现;3.XML文件过多时,项目文件结构略显繁琐。2、MyBatis中#{}和${}的区别?1.#{}:预编译占位符会将参数当做字符串占位符,通过JDBC预编译机制赋值,可以防止SQL注入,安全性高;会自动给字符串类型参数加引号;支持参数类型自动适配。日常业务传参优先使用#{}。2.${}:字符串直接拼接直接将参数拼接进SQL语句中,无法防止SQL注入,安全性低;不会自动加引号。适用场景:仅用于动态表名、动态排序字段、动态分页字段这类无法使用预编译的场景。3、MyBatis的一级缓存和二级缓存?一级缓存(默认开启)属于SqlSession级别缓存,同一个SqlSession中,执行相同的SQL查询,第一次查询会存入缓存,后续重复查询直接读取缓存数据,减少数据库访问。失效场景:SqlSession关闭、执行增删改操作、手动清空缓存,一级缓存会立即失效。二级缓存(手动开启)属于Mapper级别缓存,全局共享,多个SqlSession可以共享缓存数据。需要在mapper.xml中手动开启,同时实体类需要实现序列化接口。适用场景:查询多、增删改少的静态数据(字典、分类数据),不适合频繁更新的业务数据。4、MyBatis动态SQL常用标签有哪些?1.<if>:条件判断,非空参数才拼接SQL,解决多条件模糊查询问题;2.<where>:自动去除多余的and/or,简化多条件拼接,避免语法错误;3.<set>:更新语句专用,自动去除末尾多余逗号,适配动态字段更新;4.<foreach>:遍历集合,多用于in查询、批量新增、批量删除;5.<choose>/<when>/<otherwise>:多条件分支选择,类似if-elseif-else逻辑;6.<trim>:自定义截取前后缀,灵活处理SQL多余字符。五、SSM整合与实战问题1、SSM整合的核心配置有哪些?1.Spring核心配置:开启组件扫描、配置数据源、配置事务管理器、开启事务注解支持;2.SpringMVC配置:开启MVC注解驱动、配置视图解析器、静态资源放行、配置拦截器、全局异常处理;3.MyBatis配置:配置SqlSessionFactory、Mapper扫描、MyBatis参数配置(驼峰命名、日志、缓存);4.web.xml配置:加载Spring容器、配置DispatcherServlet、编码过滤器、乱码处理。2、SSM项目中常见的乱码问题如何解决?1.页面乱码:页面设置UTF-8编码格式;2.请求乱码:web.xml配置Spring自带的CharacterEncodingFilter过滤器,统一设置请求、响应编码为UTF-8;3.数据库乱码:数据库、数据表、字段统一设置UTF-8编码;JDBC连接URL添加编码参数useUnicode=true&characterEncoding=utf-8;4.JSON响应乱码:SpringMVC配置消息转换器,指定UTF-8编码,避免Jackson序列化乱码。3、为什么Service层要加事务注解?不加会有什么问题?Service层是业务逻辑层,一个业务方法可能包含多个Dao层数据库操作,这些操作需要保证要么全部成功,要么全部回滚,避免数据不一致。如果不加事务注解,默认每条SQL都是独立事务。比如转账业务,扣款成功、收款失败,会出现数据错乱、资金丢失的问题,无法保证业务数据的一致性。4、SSM项目中Controller、Service、Dao层的职责划分?1.Controller(控制层):只负责接收前端参数、参数校验、调用Service业务方法、封装返回结果、处理请求响应,不写具体业务逻辑;2.Service(业务层):核心业务逻辑处理、事务控制、数据组装、业务规则校验,调用Dao层操作数据库,不直接对接请求和数据库;3.Dao(持久层):只负责单纯的数据库CRUD操作,不处理任何业务逻辑,专注数据读写。六、高频易错面试题1、Spring单例Bean是否线程安全?为什么?不安全。Spring的单例Bean是容器级单例,整个容器只有一个实例,多线程并发访问时,会共享Bean的成员变量。如果Bean中定义了成员变量,多线程同时读写会出现线程安全问题;日常开发中Controller、Service、Dao都不定义成员变量,只有局部变量,所以默认是安全的。解决方式:尽量使用局部变量、加锁、使用ThreadLocal。2、MyBatis分页的原理?为什么不推荐使用内存分页?MyBatis物理分页是通过PageHelper插件实现,基于拦截器原理,在SQL执行前拦截查询语句,自动拼接limit语句,实现数据库层面分页,只查询当前页数据,性能高。内存分页是查询所有数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026-2027学年初中数学七年级下册(新教材)人教版(五四制)(新教材)16.2 消元-解二元一次方程组课时检测卷
- 安全用筷子教学课件
- 安全与纪律的
- 高中二年级历史《第二次工业革命》教案
- 安全用电中职课件
- 甘肃省兰州市永登县部分学校2024-2025学年高一下学期第一次月考英语试题
- 江苏省南通市2026届高三下学期第一次调研测试数学试题
- 陕西汉中市仁德学校2025-2026学年高二下学期5月期中考试数学试题(教师版)
- 2026年考研数学一核心考点复习习题
- 高二生物选择性必修1细胞免疫及免疫协调配合教学设计
- 2026秋川教版(新教材)小学信息技术四年级上册(全册)教学设计(附目录p124)
- 2026-2030中国羧甲基纤维素市场供需调查及竞争格局研究报告
- 7.1 集体生活成就我课件(共27张)+内嵌视频
- 铁路集团综合管理岗社会招聘笔试参考题库 含答案
- 2026年河北工人技师考评(环境噪声监测工)自测试题及答案
- 宠物毛发护理技巧
- DB32-T 5388-2026 电动车充电基础设施建设技术规程 第2部分:电动汽车
- 2026年人工智能赋能机械设计的新路径
- 寺庙消防安全培训
- 福建金投集团招聘笔试题目
- 人教版2025-2026学年度七年级地理上册第二章第二节《地形图的判读》每课时学习任务单汇编(含两个任务单)
评论
0/150
提交评论