版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SSM框架面试题及详细答案(真实面试版)一、SSM基础综合面试题1.简单说说你对SSM框架的理解,三者分别干什么?参考答案:SSM就是Spring、SpringMVC、MyBatis三个框架整合的Java后端开发架构,是传统企业级项目的主流架构,三者各司其职、互不冲突。Spring是核心容器,主要负责项目的整体管理,最核心的就是IOC容器和AOP,用来管理所有Java对象(Bean)、实现事务控制、解耦代码,整合其他所有框架。SpringMVC是Spring的Web层框架,专门用来处理前端请求,承接浏览器发来的参数、分发请求、控制视图跳转、返回数据,负责整个请求流程的调度。MyBatis是持久层框架,替代原生JDBC,用来操作数据库,简化SQL编写、结果集封装,灵活可控,比Hibernate轻量,日常开发更实用。简单总结:Spring管全局、SpringMVC管请求、MyBatis管数据库。2.SSM的整体执行流程是什么?(面试高频)参考答案:1.客户端浏览器发起HTTP请求,请求首先到达前端控制器DispatcherServlet;2.DispatcherServlet调用HandlerMapping,根据请求URL匹配对应的Controller处理器;3.调用HandlerAdapter适配对应的Controller方法,执行Controller业务代码;4.Controller调用Service层业务方法,Service层处理业务逻辑,同时Spring的事务管理器控制事务;5.Service层调用Mapper接口,MyBatis根据Mapper映射文件/注解执行对应SQL,操作数据库;6.数据库返回结果,MyBatis自动封装为Java实体对象,逐层返回给Controller;7.Controller处理完数据后,返回ModelAndView或JSON数据;8.ViewResolver视图解析器解析视图,DispatcherServlet渲染页面,最终响应给浏览器。二、Spring核心面试题(重点)1.说说Spring的IOC原理,什么是控制反转、依赖注入?参考答案:IOC全称控制反转,是Spring的核心思想。传统开发中,对象的创建、依赖关系的维护都是开发者自己new对象、手动赋值,控制权在开发者手里。而IOC就是把对象的创建、管理、依赖赋值的控制权交给Spring容器,由容器统一管理,这就是控制反转。依赖注入(DI)是IOC的实现方式。容器自动将对象需要的依赖组件注入进去,不用我们手动创建依赖对象。常见的注入方式三种:构造器注入、setter方法注入、注解注入(@Autowired)。最大好处就是解耦,代码不用硬编码依赖,方便维护、测试和扩展。2.SpringBean的生命周期?参考答案:1.实例化:Spring容器启动,根据配置扫描Bean,通过反射创建Bean实例;2.属性填充:容器自动完成依赖注入,给Bean的属性赋值;3.初始化前置处理:执行Bean的前置后置处理器(BeanPostProcessor)的前置方法;4.初始化:执行InitializingBean接口方法、自定义init-method初始化方法;5.初始化后置处理:执行Bean后置处理器的后置方法;6.就绪使用:Bean完成初始化,存入单例池,供项目调用;7.销毁:容器关闭时,执行DisposableBean接口或自定义destroy-method销毁方法。3.SpringBean的作用域有哪些?常用的是哪个?参考答案:一共6种,日常开发只用2种核心的:1.singleton(单例):默认作用域,整个Spring容器中只创建一个Bean实例,全局共享,性能高,绝大多数业务Bean都用这个;2.prototype(多例):每次获取Bean都会新建一个实例,适合有状态、线程不安全的对象;剩下的request、session、application、websocket都是web专属,传统SSM开发几乎不用。注意:单例Bean是线程共享的,所以绝对不能在Bean中定义成员变量,会出现线程安全问题。4.讲讲SpringAOP的原理和使用场景?参考答案:AOP是面向切面编程,核心就是在不修改原有业务代码的前提下,对方法进行增强,实现代码解耦。底层原理是动态代理:目标类有接口就用JDK动态代理,没有接口就用CGLIB字节码增强代理。核心术语:切点:需要被增强的方法;切面:封装的增强逻辑;通知:具体的增强动作(前置、后置、异常、环绕、最终通知)。常用场景:统一事务管理、日志记录、权限校验、接口限流、异常统一处理、性能监控。5.Spring的事务管理机制,事务失效的场景有哪些?(高频大坑)参考答案:Spring事务基于AOP动态代理实现,通过@Transactional注解开启,支持声明式事务和编程式事务,日常都是用注解式。常见事务失效场景(面试必问):1.方法不是public修饰,事务直接失效;2.同类中方法内部调用(this.方法),绕过了代理对象,事务不生效;3.异常被try-catch捕获,没有抛出异常,Spring无法感知,不会回滚;4.数据库引擎不支持事务(比如MyISAM,必须用InnoDB);5.传播属性配置错误,比如REQUIRES_NEW使用不当导致事务嵌套失效。三、SpringMVC核心面试题1.SpringMVC的核心组件有哪些?各自作用?参考答案:1.DispatcherServlet(前端控制器):核心入口,统一接收所有请求,分发调度,相当于总调度员;2.HandlerMapping(处理器映射器):根据请求URL查找对应的Controller方法;3.HandlerAdapter(处理器适配器):适配不同类型的Controller,执行目标方法;4.Handler(处理器):就是我们自己写的Controller业务方法;5.ViewResolver(视图解析器):解析视图路径,拼接前后缀,找到对应页面;6.View:视图对象,负责页面渲染。2.SpringMVC参数接收的方式有哪些?常见问题?参考答案:常用四种接收方式:1.直接接收普通参数:适配简单表单参数;2.实体类接收参数:自动封装前端传的同名参数,最常用;3.@RequestParam:接收普通参数,可设置是否必传、默认值;4.@RequestBody:接收JSON格式参数,前后端分离项目必备。常见问题:前端传JSON后台接收不到,大概率是没加@RequestBody注解;参数名不一致可以用@Param指定映射。3.@RequestMapping、@GetMapping、@PostMapping区别?参考答案:@RequestMapping是通用请求注解,不指定method时,GET、POST请求都能接收,通用性强但不安全。@GetMapping、@PostMapping是专属注解,只能接收对应类型请求,规范项目接口风格,企业开发优先使用,方便接口统一管理。4.SpringMVC拦截器和过滤器的区别?(高频对比题)参考答案:1.归属不同:过滤器是Servlet原生组件,属于web容器;拦截器是SpringMVC自带组件,由Spring管理;2.执行时机不同:过滤器在请求进入DispatcherServlet之前执行;拦截器在Controller方法执行前后执行;3.拦截范围不同:过滤器拦截所有web请求,包括静态资源;拦截器只拦截Controller接口请求;4.使用场景不同:过滤器适合编码过滤、跨域处理;拦截器适合登录校验、权限拦截、接口日志记录。四、MyBatis核心面试题1.MyBatis相比原生JDBC有什么优势?参考答案:1.省去大量重复代码:不用手动加载驱动、创建连接、关闭资源、封装结果集;2.SQL与代码分离:SQL写在XML文件中,便于维护、修改,不用改Java代码;3.自动ORM映射:数据库字段和实体类属性自动映射,无需手动封装;4.支持动态SQL:可以根据条件拼接SQL,避免硬编码,适配复杂查询场景;5.轻量灵活:没有Hibernate那么重,SQL可控,优化方便,性能更好。2.MyBatis的#{}和${}的区别?(必考题)参考答案:1.#{}:预编译占位符会生成预编译SQL,自动对参数加引号,可以防止SQL注入,安全性高,日常传参全部用#{}。2.${}:字符串直接拼接直接把参数拼接到SQL语句中,不会预编译,存在SQL注入风险。唯一使用场景:动态排序、动态分页、动态表名,这类必须用${},使用时要手动校验参数,防止注入。3.MyBatis一级缓存和二级缓存?参考答案:一级缓存(默认开启)属于SqlSession级别,同一个会话中,相同的查询只会查一次数据库,后续直接读缓存。会话关闭、提交事务、更新操作后,缓存自动清空。二级缓存(手动开启)属于Mapper级别,全局共享,多个SqlSession可以共用缓存。需要手动配置开启,适合查询多、修改少的静态数据,能有效减少数据库查询压力。4.MyBatis动态SQL常用标签及作用?参考答案:1.if:条件判断,非空拼接查询条件;2.where:自动去掉多余的and/or,解决拼接语法错误;3.set:更新语句专用,自动去掉末尾多余逗号;4.foreach:遍历集合,用于in查询、批量新增/删除;5.choose-when-otherwise:多条件分支判断,类似switch。5.Mapper接口和XML文件的绑定原理?参考答案:1.Mapper接口的全限定类名,和XML文件的namespace必须一致;2.接口中的方法名,必须和XML中SQL语句的id一致;3.MyBatis启动时会扫描所有Mapper文件,通过动态代理为Mapper接口生成代理对象;4.调用接口方法时,代理对象根据方法名匹配对应的SQL并执行。所以Mapper接口不需要写实现类,MyBatis自动代理实现。五、SSM整合面试题(实战高频)1.SSM整合的核心配置有哪些?参考答案:1.Spring核心配置:扫描Service、开启AOP、配置事务管理器、数据源、整合MyBatis;2.SpringMVC配置:扫描Controller、开启注解驱动、配置视图解析器、静态资源放行、拦截器;3.MyBatis配置:别名配置、日志配置、映射文件扫描;4.web.xml配置:加载Spring容器、配置DispatcherServlet、编码过滤器、监听器。2.SSM整合常见报错及解决思路?参考答案:1.404:视图路径错误、Controller请求地址不匹配、静态资源没放行;2.500空指针:Service、Mapper没有注入成功,注解没加、扫描范围不对;3.SQL绑定异常:Mapper接口方法名和XMLi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高频电感器制造工班组协作考核试卷含答案
- 催化裂化工诚信品质水平考核试卷含答案
- 柠檬酸充填封装工岗前责任制考核试卷含答案
- 2026年金属加工机械制造行业产业洞察报告及未来五至十年需求升级与结构演变
- 2026年瑞声科技培训笔试题目及答案
- 江苏版高二生物下学期期末测试卷2025-2026
- 安全展示教学课件
- 2026年霍邱中考题目及答案语文
- 2025-2026江西版小学六年级语文下学期卷
- 安全知识播报
- 2025国家基层糖尿病防治管理指南解读课件
- 林木居间协议合同范本
- 现浇梁蒸养棚施工方案
- 地下室顶板加固施工方案范本
- 智能停车场道闸系统维护与保养服务策略及实施方案
- 金融服务基金尽职调查报告范文
- 英语二必考500词
- 工程地质及水文地质课件
- 初三差生班会课件
- C++解析wav文件方法介绍
- 《土木工程智能施工》课程教学大纲
评论
0/150
提交评论