版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java五大主流框架面试题及详细答案(Spring、SpringMVC、MyBatis、SpringBoot、SpringCloud)一、Spring核心框架面试题1.说说Spring的核心思想和核心模块参考答案:Spring的核心思想主要是IoC(控制反转)和AOP(面向切面编程),同时依托依赖注入实现组件解耦,彻底解决传统Java开发中对象硬编码、耦合度高的问题。核心模块主要包含5个:1.SpringCore:核心容器,提供IoC容器、Bean工厂,是所有模块的基础,负责Bean的创建、管理、销毁。2.SpringBeans:Bean管理模块,定义Bean的配置、依赖注入规则,支撑对象的实例化与依赖绑定。3.SpringContext:上下文模块,基于Core和Beans扩展,提供企业级功能,比如国际化、事件发布、资源加载、事务管理。4.SpringAOP:面向切面编程模块,实现方法级别的增强,无需修改原有业务代码即可完成日志、权限、事务等通用功能。5.SpringJDBC/ORM:数据访问模块,简化JDBC操作,整合MyBatis、Hibernate等持久层框架,规避原生JDBC的冗余代码。2.详细解释IoC和DI,以及两者的区别与联系参考答案:IoC(控制反转):是一种设计思想,传统开发中,开发者主动new对象、管理对象依赖关系;IoC将对象的创建、依赖装配、生命周期管理的控制权,交给Spring容器,实现控制权的反转,从“开发者主动创建”变为“容器主动推送”。DI(依赖注入):是IoC思想的具体实现方式。容器在创建Bean时,自动将对象所需的依赖资源(其他Bean、参数)注入到当前对象中,无需开发者手动赋值。区别与联系:IoC是核心思想、设计理念,DI是落地实现手段;IoC依托DI完成解耦,没有依赖注入,控制反转就无法落地。常见的依赖注入方式:构造器注入、Set方法注入、注解注入(@Autowired、@Resource)。其中Spring官方推荐构造器注入,可以保证对象初始化时依赖完整,避免空指针问题。3.SpringBean的生命周期参考答案:SpringBean的完整生命周期分为8个核心步骤,单例Bean在容器启动时初始化,多例Bean在调用时创建:1.实例化:Spring容器扫描配置,通过反射创建Bean的原始实例,此时对象仅开辟内存空间,属性未赋值。2.属性填充(依赖注入):容器自动解析Bean的依赖,通过DI完成属性赋值、关联其他Bean。3.前置处理(BeanPostProcessor前置):执行Bean后置处理器的前置方法,对Bean进行预处理,比如修改属性、包装对象。4.初始化前置方法:执行Bean的前置初始化方法(@PostConstruct注解、afterPropertiesSet接口方法)。5.自定义初始化方法:执行配置文件或注解中指定的init-method自定义初始化逻辑。6.后置处理(BeanPostProcessor后置):执行后置处理器的后置方法,完成Bean的最终包装,AOP代理就是在此步骤实现。7.就绪使用:Bean初始化完成,存入单例池,供业务代码调用。8.销毁:容器关闭时,执行@PreDestroy注解、destroy-method指定的销毁方法,释放资源。4.SpringAOP的实现原理和常用注解参考答案:AOP核心原理:动态代理机制。SpringAOP针对不同场景选择代理方式:目标类实现接口时,使用JDK动态代理(基于接口代理);目标类没有实现接口时,使用CGLIB动态代理(基于子类继承代理),在不修改原有业务代码的前提下,对方法进行增强。核心场景:统一日志记录、权限校验、事务控制、性能监控、缓存处理等通用横向功能。常用核心注解:1.@Aspect:标识当前类为切面类;2.@Pointcut:定义切入点,指定需要拦截的方法范围;3.@Before:前置通知,目标方法执行前执行;4.@After:后置通知,目标方法执行完毕后执行(无论是否异常);5.@AfterReturning:返回通知,目标方法正常执行成功后执行;6.@AfterThrowing:异常通知,目标方法抛出异常时执行;7.@Around:环绕通知,可手动控制目标方法的执行时机,功能最全面。5.Spring事务传播机制和隔离级别参考答案:事务传播机制(7种,常用5种):用于解决多方法嵌套调用时的事务传递问题1.REQUIRED(默认):当前有事务则加入,无则新建事务;最常用,适配绝大多数业务场景。2.SUPPORTS:当前有事务则加入,无则以非事务方式运行。3.MANDATORY:必须在事务中运行,无事务直接抛出异常。4.REQUIRES_NEW:无论当前是否有事务,都新建独立事务,原有事务挂起。5.NESTED:嵌套事务,有父事务则嵌套执行,父事务回转子事务必回滚,子事务回滚不影响父事务;无父事务则新建事务。6.NOT_SUPPORTED:始终以非事务方式运行。7.NEVER:强制非事务环境,检测到事务直接报错。事务隔离级别(5种):解决并发事务的脏读、不可重复读、幻读问题1.READ_UNCOMMITTED:读未提交,允许读取未提交数据,存在脏读、不可重复读、幻读,基本不用。2.READ_COMMITTED(Oracle默认):读已提交,只能读取已提交数据,解决脏读,存在不可重复读、幻读。3.REPEATABLE_READ(MySQL默认):可重复读,同一事务多次读取数据一致,解决脏读、不可重复读,存在幻读。4.SERIALIZABLE:串行化,最高隔离级别,事务串行执行,解决所有并发问题,性能极低。5.DEFAULT:跟随数据库默认隔离级别。二、SpringMVC面试题1.SpringMVC的核心工作流程参考答案:SpringMVC是基于Servlet的MVC分层框架,核心核心控制器为DispatcherServlet,完整执行流程如下:1.请求接收:客户端发送HTTP请求,Tomcat服务器接收请求,转发给前端控制器DispatcherServlet。2.处理器映射:DispatcherServlet调用HandlerMapping,根据请求URL匹配对应的Controller处理器,返回处理器执行链。3.处理器适配:DispatcherServlet调用HandlerAdapter,适配对应的Controller方法,统一调用规则。4.业务执行:HandlerAdapter调用目标Controller的业务方法,执行业务逻辑,处理数据。5.视图解析:Controller执行完成后返回ModelAndView,ViewResolver视图解析器解析视图路径,渲染数据。6.响应返回:将渲染完成的视图/JSON数据封装为HTTP响应,返回给客户端。注:前后端分离项目中,无需视图渲染,直接返回JSON格式数据。2.DispatcherServlet的作用参考答案:DispatcherServlet是SpringMVC的核心前端控制器,整个请求的统一入口,所有HTTP请求都经过它统一调度,核心作用:1.统一接收、拦截所有客户端请求,作为请求入口;2.调度HandlerMapping、HandlerAdapter、ViewResolver等组件,协调整个请求流程;3.统一异常处理、请求参数绑定、数据封装、响应结果处理;4.整合Spring容器,实现Web层与Spring业务层的无缝衔接。3.@RequestMapping、@GetMapping、@PostMapping区别与使用场景参考答案:1.@RequestMapping:通用请求映射注解,不限制请求方式(GET/POST/PUT/DELETE均可),可通过method属性指定请求方式,通用性强但安全性、规范性较弱。2.@GetMapping:专门映射GET请求,用于查询类接口,参数拼接在URL中,明文传输,无请求体,适合查询数据。3.@PostMapping:专门映射POST请求,用于新增、提交类接口,参数放在请求体中,相对安全,支持传输大量数据。开发规范:日常开发优先使用专用请求注解,查询用GET、新增用POST、修改用PUT、删除用DELETE,Restful风格开发,避免滥用@RequestMapping。4.SpringMVC参数绑定原理,@RequestParam和@RequestBody区别参考答案:参数绑定原理:SpringMVC通过内置的参数解析器,自动解析HTTP请求中的参数(URL参数、请求体参数、路径参数),通过反射绑定到Controller方法的形参上,完成数据自动封装。核心区别:1.@RequestParam:用于获取URL拼接参数、表单参数(form-data、x-www-form-urlencoded),适用于GET、POST请求,只能绑定简单数据类型(字符串、数字、布尔),无法解析JSON。2.@RequestBody:用于获取请求体JSON数据,仅适用于POST/PUT等带请求体的请求,通过Jackson解析JSON,自动封装为实体类对象,前后端分离项目必备。5.SpringMVC统一异常处理的实现方式参考答案:开发中最常用的是全局统一异常处理,通过两个核心注解实现,替代传统的try-catch冗余代码:1.@ControllerAdvice:标识全局异常处理类,拦截所有Controller的请求异常;2.@ExceptionHandler:配置具体异常的处理方法,可精准捕获自定义异常、系统异常(空指针、参数异常、数据库异常等)。核心优势:统一异常返回格式、统一日志打印、避免代码冗余,让业务代码只关注业务逻辑。三、MyBatis面试题1.MyBatis的核心优势和核心组件参考答案:核心优势:1.轻量化持久层框架,封装原生JDBC,简化数据库操作,无需手动加载驱动、创建连接、关闭资源;2.SQL与代码分离,SQL写在XML/注解中,便于维护、优化、调试,不侵入Java代码;3.支持动态SQL,可根据条件灵活拼接查询、新增、修改语句;4.自动ORM映射,数据库字段与实体类属性自动绑定,无需手动封装数据;5.支持缓存、分页、插件扩展,适配绝大多数业务场景。核心五大组件:1.SqlSessionFactory:会话工厂,核心工厂类,用于创建SqlSession,全局唯一;2.SqlSession:数据库会话,负责执行SQL语句、操作数据库,线程不安全,单次请求有效;3.Mapper:数据访问接口,定义数据库操作方法;4.MapperXML:SQL映射文件,存放具体SQL语句,绑定Mapper接口方法;5.Executor:执行器,负责SQL的执行、缓存管理、事务调度。2.MyBatis的一级缓存和二级缓存参考答案:MyBatis缓存用于减少数据库查询次数,提升查询性能,分为两级缓存:一级缓存(默认开启):1.作用范围:SqlSession级别,单次数据库会话内有效;2.机制:同一SqlSession中,相同条件的查询,第一次查数据库,后续直接读缓存;3.失效场景:SqlSession关闭、执行增删改操作、手动清空缓存,缓存立即失效。二级缓存(手动开启):1.作用范围:Mapper命名空间级别,跨SqlSession、全局有效;2.开启方式:全局配置开启cacheEnabled,Mapper文件添加<cache/>标签,实体类实现序列化接口;3.机制:多个用户、多个会话查询相同数据,可共享缓存数据;4.失效场景:对应Mapper下执行增删改操作,该命名空间下缓存全部清空。3.#{}和${}的核心区别(高频必考)参考答案:1.解析方式不同:#{}是预编译占位符,底层生成PreparedStatement,参数以占位符形式传入;${}是字符串直接拼接,底层直接将参数拼接到SQL语句中。2.安全性不同:#{}彻底防止SQL注入;${}存在严重SQL注入风险,禁止用于普通参数查询。3.自动加引号:#{}会自动为字符串、日期类型参数添加单引号;${}不会自动加引号,需要手动拼接。4.使用场景:日常参数查询、条件筛选全部用#{};仅动态排序、动态表名、动态字段场景使用${}。4.MyBatis动态SQL常用标签及作用参考答案:动态SQL用于解决多条件模糊查询、可选参数拼接问题,避免重复编写SQL,常用标签:1.<if>:条件判断,参数非空时拼接对应SQL片段,最常用;2.<where>:自动处理查询条件的前缀and/or,自动去除多余前缀,简化条件拼接;3.<set>:用于更新语句,自动去除末尾多余逗号,避免SQL语法错误;4.<foreach>:遍历集合,用于in查询、批量新增/批量修改;5.<choose>、<when>、<otherwise>:多条件分支判断,类似if-elseif-else逻辑;6.<trim>:自定义截取前缀、后缀字符,灵活处理SQL多余符号。5.MyBatis分页原理,为什么不推荐使用物理分页插件?参考答案:MyBatis默认提供逻辑分页(RowBounds),原理是查询全部数据到内存,再截取分页数据,性能极差,大数据量场景禁止使用。企业开发统一使用PageHelper物理分页插件,原理:通过MyBatis拦截器,在SQL执行前自动拼接limit分页语句,只查询当前页数据,属于真正的物理分页,性能高效。不推荐自定义分页插件的原因:原生自定义插件需要手动拦截SQL、拼接分页语句,兼容性差、适配数据库有限、容易出现SQL语法错误,PageHelper适配主流数据库、开箱即用,稳定性更高。四、SpringBoot面试题1.SpringBoot的核心特性和自动配置原理参考答案:核心特性:简化Spring开发、快速构建独立可运行项目、无需繁琐XML配置、内嵌Tomcat容器、自动依赖管理、监控完善。自动配置核心原理(核心注解@EnableAutoConfiguration):1.项目启动时,SpringBoot通过SPI机制读取META-INF/spring.factories配置文件,加载所有自动配置类;2.自动配置类通过条件注解(@ConditionalOnClass、@ConditionalOnMissingBean)判断当前项目是否引入对应依赖、是否存在对应Bean;3.满足条件则自动创建Bean、自动装配组件,无需开发者手动配置;4.开发者可通过自定义Bean覆盖默认自动配置,实现个性化适配。2.@SpringBootApplication注解的底层组成参考答案:@SpringBootApplication是一个组合注解,整合了三个核心注解,简化启动类配置:1.@Configuration:标识当前类为配置类,可用于注册Bean;2.@EnableAutoConfiguration:开启SpringBoot自动配置功能,核心注解;3.@ComponentScan:自动扫描当前包及子包下所有标注@Component、@Controller、@Service、@Repository的组件,纳入Spring容器管理。3.SpringBoot配置文件优先级、yml和properties区别参考答案:配置文件优先级(从高到低,高优先级覆盖低优先级):1.项目根目录下config文件夹下的配置文件;2.项目根目录下的配置文件;3.resources/config文件夹下的配置文件;4.resources目录下的配置文件。同时,同一目录下properties优先级高于yml。yml和properties核心区别:1.语法不同:properties是键值对格式,层级靠点分隔;yml是缩进层级格式,结构更清晰;2.数据类型:yml支持数组、对象、集合等复杂数据类型,properties仅支持简单键值对;3.可读性:yml层级分明,更适合项目统一配置,企业开发主流使用yml。4.SpringBootStarter的作用参考答案:Starter是SpringBoot的核心依赖机制,本质是依赖组合包+自动配置类。传统Spring开发需要手动引入多个依赖、手动配置组件,SpringBoot将常用功能的所有依赖打包为一个Starter,比如spring-boot-starter-web、spring-boot-starter-mybatis。开发者只需引入对应Starter依赖,无需手动配置版本、无需编写XML,框架自动完成依赖导入、组件装配,极大简化项目搭建和开发流程。5.SpringBoot如何实现自定义全局异常、跨域配置参考答案:1.全局异常处理:新建全局异常处理类,添加@RestControllerAdvice注解,配合@ExceptionHandler捕获各类异常,统一返回标准化结果,适配前后端分离项目。2.全局跨域配置:实现WebMvcConfigurer接口,重写addCorsMappings方法,配置允许跨域的路径、请求方式、请求头、有效期,无需每个接口单独配置跨域注解,全局生效。五、SpringCloud微服务面试题1.SpringCloud核心组件及各自作用参考答案:SpringCloud是一套微服务生态解决方案,整合了微服务开发所需的注册发现、配置、网关、熔断、负载均衡等全套组件,核心常用组件:1.Nacos:服务注册与发现、统一配置中心,替代Eureka+Config,轻量高效,国内主流;2.Gateway:微服务网关,统一入口,负责路由转发、权限校验、限流、日志拦截,替代老旧的Zuul;3.OpenFeign:声明式远程调用,基于接口注解实现微服务之间的调用,简化HTTP请求编写;4.Ribbon:客户端负载均衡组件,实现服务调用的负载分发,默认轮询策略;5.Sentinel:流量控制组件,实现熔断、降级、限流、热点参数管控,保障微服务高可用;6.Seata:分布式事务组件,解决微服务跨服务事务不一致问题,保证数据一致性;7.SpringCloudConfig:分布式配置中心,统一管理所有微服务配置文件。2.Nacos的核心功能,注册中心原理参考答案:Nacos核心两大功能:服务注册发现、分布式配置管理。注册中心原理:1.所有微服务启动后,主动向Nacos服务端注册自身服务信息(服务名、IP、端口、健康状态);2.服务消费者定期从Nacos拉取服务注册列表,缓存到本地;3.服务通过心跳机制(默认5秒)向Nacos上报健康状态,Nacos检测到服务宕机、异常后,自动剔除故障服务;4.消费者基于本地服务列
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025上半年教资幼儿园综合素质真题及答案解析
- 2025消防安全知识培训试题及答案
- 2025医疗器械法律法规相关知识培训试题+答案
- 2025中医助理医师考试病例分析试题及答案
- 2025中小学生航空航天科普知识竞赛试题库及答案
- 2026年电子评标能力模拟题(含答案)
- 2026年人工智能培训师试题及答案
- 高中英语教资面试听力专项真题演练题库及解析
- 医疗服务模式创新与患者体验提升
- 西南农大研究生就业分析
- 市政道路工程监理实施细则
- 2026 年妇科宫腔镜手术围手术期护理课件
- 2026年北京市中考英语试卷真题及答案详解(精校打印版)
- 2026年家禽屠宰加工工协同作业考核试卷及答案
- 社会体育导论 课件全套 0社会体育导论课程介绍-10社会体育指导实践
- 2026年秋人美版(新教材)小学美术四年级上册(全册)教学设计(附目录p153)
- 2026年全科医生转岗培训考试(理论考核)题库及答案(辽宁省)
- 2026年中级消防设施操作员(监控方向)考试题库(附答案)
- 2026年平安岗前培训测试题及答案
- 电梯使用维护安全管理培训课件
- 高级职称晋升面审消化内科(副)主任医师答辩专业技术问答题
评论
0/150
提交评论