版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SSM全套面试题及详细答案(真实面试版)一、基础概念类(必问基础)1、简单说一下什么是SSM?各自的作用是什么?SSM是Spring、SpringMVC、MyBatis三个框架的整合,是传统Java后端最主流的开发架构。三者分工非常清晰:Spring:核心容器,负责项目整体的对象管理、事务控制、依赖注入,统一管理所有Bean,整合其他所有框架,是整个项目的大管家。SpringMVC:Spring的web层框架,专门用来处理浏览器请求、接收参数、分发请求、响应结果,负责MVC分层中的视图和控制器逻辑。MyBatis:持久层框架,用来操作数据库,替代原生JDBC,简化数据库增删改查操作,支持SQL自定义、动态SQL,灵活性很高。2、SSM整体的执行流程是什么?1.客户端发起请求,访问后端接口;2.请求先被SpringMVC的核心控制器DispatcherServlet拦截;3.DispatcherServlet通过HandlerMapping找到对应的Controller控制器;4.调用Controller中的方法,接收前端参数,调用Service层;5.Service层处理业务逻辑,同时Spring负责事务管理,调用Mapper层;6.Mapper层通过MyBatis执行SQL,操作数据库,返回数据结果;7.数据逐层返回,Controller封装结果,通过ViewResolver视图解析器处理,最终响应给前端。3、简单区分Spring、SpringMVC、MyBatis的层级关系Spring是父容器,包含Service层、Dao层的Bean和事务配置;SpringMVC是Spring的子容器,只负责Controller层的Bean;MyBatis是持久层工具,交给Spring管理整合,负责数据库交互。层级从上到下:前端→SpringMVC(Controller)→Spring(Service)→MyBatis(Mapper)→数据库。二、Spring核心面试题1、Spring的核心两大特性是什么?详细说一下核心是IOC(控制反转)和AOP(面向切面编程)。IOC控制反转:传统开发是开发者手动new对象、管理对象依赖;IOC就是把对象的创建、销毁、依赖关系全部交给Spring容器管理。控制权从程序员代码反转给了容器,所以叫控制反转。好处是解耦,不用频繁new对象,方便统一管理,也方便后续测试和维护。AOP面向切面编程:在不修改原有业务代码的前提下,对方法进行增强。比如日志记录、事务控制、权限校验、性能统计,都可以通过切面统一处理。核心思想是把公共通用的代码抽离出来,实现业务代码和通用功能解耦。2、什么是依赖注入DI?有几种注入方式?依赖注入是IOC的具体实现,容器主动把需要的依赖对象注入到当前Bean中,不需要自己创建。三种注入方式:1.构造器注入:通过类的构造方法注入,Spring官方推荐,能保证对象初始化完成后依赖齐全,线程安全;2.setter方法注入:通过set方法赋值,适合可选依赖;3.注解注入:@Autowired、@Resource,开发中最常用,简洁高效。3、SpringBean的生命周期1.实例化:Spring容器启动,根据配置通过反射创建Bean实例;2.属性填充:完成依赖注入,给Bean的属性赋值;3.初始化:执行前置处理、初始化方法(init-method、InitializingBean);4.就绪可用:Bean初始化完成,交给容器管理,可以正常使用;5.销毁:容器关闭时,执行销毁方法(destroy-method)。4、SpringBean的作用域有哪些?常用的是哪个?1.singleton(单例):默认作用域,整个容器中只创建一个Bean实例,Spring默认使用;2.prototype(多例):每次获取Bean都会创建一个新对象;3.request:一次请求一个实例;4.session:一个会话一个实例;开发中绝大多数情况用singleton,只有需要频繁创建独立对象的场景才用prototype。5、Spring事务的传播机制和隔离级别隔离级别(解决并发事务问题):1.READ_UNCOMMITTED:读未提交,会出现脏读、不可重复读、幻读;2.READ_COMMITTED:读已提交,解决脏读,数据库默认级别;3.REPEATABLE_READ:可重复读,解决脏读、不可重复读,MySQL默认;4.SERIALIZABLE:串行化,最高级别,解决所有问题,性能最差。传播机制(常用):1.REQUIRED:默认,有事务就加入,没有就新建事务;2.SUPPORTS:有事务就运行在事务中,没有就非事务运行;3.REQUIRES_NEW:新建独立事务,暂停原有事务;4.NESTED:嵌套事务,依赖父事务,可单独回滚子事务。6、Spring事务失效的场景有哪些?(高频面试坑点)1.方法不是public修饰,事务无法生效;2.同类中方法内部调用(this.方法),AOP无法拦截,事务失效;3.异常类型不对,默认只捕获RuntimeException,普通Exception不会回滚;4.手动try-catch捕获了异常,Spring感知不到异常,不会回滚;5.数据库引擎不支持事务,比如MyISAM引擎;6.传播机制配置错误。三、SpringMVC核心面试题1、SpringMVC的核心组件有哪些?1.DispatcherServlet:核心中央控制器,所有请求入口,负责请求分发;2.HandlerMapping:处理器映射器,根据URL匹配对应的Controller方法;3.HandlerAdapter:处理器适配器,执行匹配到的Controller方法;4.ViewResolver:视图解析器,解析视图路径,跳转页面;5.Handler:自定义的Controller业务处理器。2、SpringMVC的完整执行流程1.用户发送请求,Tomcat接收请求,交给DispatcherServlet;2.DispatcherServlet调用HandlerMapping,根据请求地址找到对应Controller;3.通过HandlerAdapter适配并执行Controller中的业务方法;4.方法执行完成返回ModelAndView;5.视图解析器解析视图地址,渲染页面;6.最终将响应结果返回给浏览器。3、@RequestMapping、@GetMapping、@PostMapping区别@RequestMapping:默认支持所有请求方式(GET、POST、PUT、DELETE),通用性强;@GetMapping:只接收GET请求,用于查询数据;@PostMapping:只接收POST请求,用于新增、提交数据;开发中建议分开使用,规范接口,避免请求方式混乱。4、SpringMVC如何接收前端参数?1.直接接收普通参数:参数名和前端传参名一致即可;2.实体类接收:前端参数和实体类属性名对应,自动封装;3.@RequestParam:接收普通参数,可设置默认值、是否必传;4.@PathVariable:接收路径参数,多用于RESTful风格接口;5.@RequestBody:接收JSON格式参数,后端自动解析为对象。5、@ResponseBody的作用默认Controller方法返回值会被当成视图地址跳转页面;加上@ResponseBody后,会将返回的对象、集合、字符串自动转为JSON数据,直接响应给前端,不跳转页面。现在前后端分离项目基本所有接口都加这个注解。6、SpringMVC乱码问题怎么解决?在web.xml中配置Spring自带的编码过滤器,统一设置UTF-8编码,强制解决请求和响应乱码,这是SSM项目标准解决方案。四、MyBatis核心面试题1、MyBatis和JDBC、Hibernate的区别和原生JDBC比:JDBC代码冗余,需要手动创建连接、关闭连接、封装结果集;MyBatis自动管理连接、结果封装,简化代码,不用重复写模板代码。和Hibernate比:Hibernate是全自动化ORM,完全不用写SQL,灵活性差;MyBatis是半自动ORM,自己写SQL,优化空间大、适配复杂业务、性能更好,企业项目基本都用MyBatis。2、MyBatis的核心工作原理1.读取MyBatis全局配置文件和Mapper映射文件;2.通过SqlSessionFactoryBuilder创建SqlSessionFactory工厂;3.工厂生成SqlSession对象,相当于数据库会话;4.SqlSession获取Mapper代理对象;5.调用Mapper方法,执行自定义SQL,操作数据库;6.封装数据库返回结果,关闭会话。3、MyBatis中#{}和${}的区别?(超高频)1.#{}:预编译占位符会生成?占位符,底层是PreparedStatement,自动参数转义,防止SQL注入,安全性高,日常参数查询全部用#{}。2.${}:字符串直接拼接直接把参数拼接到SQL语句中,没有预编译,存在SQL注入风险。只能用于动态表名、排序字段这类无法使用占位符的场景。总结:能用#{}绝不使用${}。4、MyBatis动态SQL常用标签用于多条件动态查询,避免写大量冗余SQL:<if>:条件判断,非空才拼接SQL;<where>:自动去除多余的and/or,解决拼接语法错误;<choose><when>:多条件单选,类似switch;<foreach>:遍历集合,多用于in查询、批量新增;<set>:动态更新字段,自动去除多余逗号。5、MyBatis一级缓存、二级缓存区别一级缓存(默认开启):属于SqlSession级别,同一个会话中,相同查询只查一次数据库,数据缓存到本地。会话关闭后缓存清空。二级缓存(手动开启):属于Mapper级别,跨SqlSession共享缓存,多个会话可以共用缓存数据,提升查询性能。适合查询多、修改少的静态数据。6、MyBatis分页原理?为什么不用自带RowBounds?MyBatis自带RowBounds是内存分页,会把所有数据查出来再内存截取,数据量大时性能极差。企业开发统一使用PageHelper分页插件,底层是物理分页,自动拼接limit语句,只查询当前页数据,性能高效。五、SSM整合核心面试题(重点)1、SSM整合的核心配置有哪些?1.Spring核心配置:组件扫描、事务管理器、数据源配置;2.SpringMVC配置:视图解析器、静态资源放行、注解驱动、乱码过滤器;3.MyBatis整合配置:SqlSessionFactory、Mapper扫描、数据源关联;4.web.xml全局配置:加载Spring容器、注册DispatcherServlet。2、Spring如何整合MyBatis?1.在Spring配置文件中配置数据源DataSource;2.配置SqlSessionFactoryBean,绑定数据源和MyBatis配置文件;3.配置MapperScannerConfigurer,扫描Mapper接口,自动生成代理对象;4.Service层直接注入Mapper接口使用,不用手动创建SqlSession。3、SSM项目启动报错常见原因1.Mapper接口和Mapper.xml文件名、路径不一致;2.接口方法名和SQLid不对应;3.返回值类型、参数类型不匹配;4.缺少@Service、@Controller注解,类没有交给Spring管理;5.事务、注解驱动没有开启,功能失效。六、手写实操面试题(面试常问口述代码)1、说一下SSM分层开发规范
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学三年级劳动课“劳动过程要真干”实践教学设计
- 小学二年级心理健康教学设计:我是班级小主人
- 高三语文教学设计:高考作文“自我的修复与调节能力”深度解读与写作策略
- 2026年部编版高中生物高三上册第9章生物技术综合练习题及答案
- 2026年国能准能集团有限责任公司社会招聘考试备考试题及答案解析
- 2026年安徽交控集团所属酒店公司本部收益岗招聘考试模拟试题及答案解析
- 2026广西北海市涠洲岛旅游区医院招聘护士笔试模拟试题及答案解析
- 2026年菏泽郓城县妇幼保健院公开招聘工作人员(7人)考试备考试题及答案解析
- 2026宁波梧桐英才对外服务有限公司招聘1人考试参考题库及答案解析
- 2026江西中医药大学中西医结合学院行政助理招聘考试参考题库及答案解析
- 乙酸乙酯危险化学品安全周知卡培训课件
- 2026年中国电信校园招聘考试笔试试题及答案
- 2026年4月自考02160流体力学试题及答案含评分参考
- 自身免疫性溶血性贫血诊疗规范
- GB/T 47067-2026塑料模塑件公差和验收条件
- 2025年04月安徽国控资本有限公司所属子企业招考1名财务部负责人笔试历年典型考点题库附带答案详解试卷2套
- 2025年矿业权评估师(矿业权评估经济与法律专业能力)试题(含答案)
- 中学物理全套教材目录及说明
- 2025年交通事故统计
- GB/T 28159-2025电子级磷酸
- 2025 SMETA员工公平职业发展管理程序-SEDEX验厂专用文件(可编辑)
评论
0/150
提交评论