Java框架面试真题(主流框架完整版)_第1页
Java框架面试真题(主流框架完整版)_第2页
Java框架面试真题(主流框架完整版)_第3页
Java框架面试真题(主流框架完整版)_第4页
Java框架面试真题(主流框架完整版)_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java框架面试真题(主流框架完整版)本套面试题贴合互联网、后端开发真实面试场景,覆盖Spring、SpringMVC、SpringBoot、MyBatis、MyBatis-Plus核心知识点,剔除书面化套话,侧重实际工作应用和底层原理考察,适合初中级Java后端岗位面试备考。一、Spring核心面试题(基础+进阶)1.简单说说你对SpringIoC的理解,它的实现原理是什么?参考答案:IoC就是控制反转,核心是把对象的创建、依赖管理、生命周期维护交给Spring容器,不再由开发者手动new对象。传统开发是开发者主动控制对象依赖,IoC是容器主动注入依赖,实现了对象解耦。底层核心实现是Bean工厂、配置解析、反射机制,容器启动时加载配置文件或注解,扫描Bean定义,通过反射实例化对象,存入单例池统一管理。2.SpringBean的作用域有哪些?日常开发最常用的是哪个?参考答案:Spring官方提供6种作用域,常用的有singleton(单例)、prototype(多例)、request、session、application、websocket。日常开发默认且最常用的是singleton,整个容器中仅创建一个Bean实例。多例模式每次获取Bean都会新建对象,不会交由容器缓存。需要注意单例Bean是容器级别单例,不是JVM单例。3.SpringBean的生命周期详细流程说一下?参考答案:核心流程分为7步:1.容器启动扫描Bean定义,加载配置信息;2.通过反射创建Bean实例;3.进行属性依赖注入;4.执行Bean前置处理(BeanPostProcessor前置方法);5.执行初始化方法(init-method、InitializingBean接口);6.执行Bean后置处理(BeanPostProcessor后置方法);7.容器关闭时执行销毁方法(destroy-method、DisposableBean接口)。单例Bean容器启动就初始化,多例Bean每次获取时初始化。4.什么是SpringAOP?应用场景有哪些?底层原理是什么?参考答案:AOP是面向切面编程,核心是在不修改原有业务代码的前提下,对方法进行增强,实现业务解耦。常见场景:日志记录、事务控制、权限校验、接口限流、异常统一处理、缓存操作。底层基于动态代理实现:目标类有接口则用JDK动态代理,无接口则用CGLIB字节码增强代理。AOP核心术语包括切面、切点、通知、连接点、引入。5.Spring中事务的传播属性有哪些?常用的几种区别是什么?参考答案:一共7种传播属性,日常常用5种:REQUIRED(默认,有事务加入,无则新建)、SUPPORTS(有事务加入,无则非事务运行)、MANDATORY(必须在事务内,否则报错)、REQUIRES_NEW(新建独立事务,挂起原有事务)、NESTED(嵌套事务,依赖父事务,可单独回滚)。核心区别主要是嵌套调用时事务的创建、挂起、回滚规则,实际开发中REQUIRED和REQUIRES_NEW用得最多。6.Spring事务的隔离级别有哪些?默认级别是什么?参考答案:共5种隔离级别,对应数据库事务隔离机制:DEFAULT(默认,跟随数据库隔离级别)、READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ、SERIALIZABLE。MySQL默认隔离级别是REPEATABLE_READ,能解决脏读、不可重复读问题,幻读问题Spring通过锁机制辅助解决。7.Spring中出现循环依赖的场景有哪些?怎么解决的?参考答案:循环依赖就是两个或多个Bean互相依赖注入。单例Bean的setter注入、字段注入可以解决循环依赖,底层依靠三级缓存:一级缓存存完整初始化的Bean,二级缓存存已实例化未注入的Bean,三级缓存存Bean工厂对象。构造器注入的循环依赖无法解决,因为实例化和注入同时进行,没有缓存缓冲空间。多例Bean不存在循环依赖解决机制。二、SpringMVC面试题1.SpringMVC的完整执行流程是什么?参考答案:1.客户端发起请求,前端控制器DispatcherServlet接收所有请求;2.DispatcherServlet调用HandlerMapping,根据URL匹配对应的处理器;3.获取处理器执行链,包含拦截器和处理器方法;4.调用HandlerAdapter适配处理器,执行Controller业务方法;5.控制器返回ModelAndView对象;6.视图解析器解析视图路径,渲染页面;7.响应结果返回客户端。前后端分离项目中,视图解析器一般不生效,直接返回JSON数据。2.@RequestMapping、@GetMapping、@PostMapping的区别和使用场景?参考答案:@RequestMapping是通用请求注解,支持所有请求方式,可作用在类和方法上。@GetMapping、@PostMapping是派生注解,分别只支持GET、POST请求,仅作用于方法。日常查询接口用GET,新增、修改、提交数据用POST,规范接口语义,避免请求方式混乱。3.SpringMVC参数绑定的方式有哪些?@RequestParam和@PathVariable区别?参考答案:常见参数绑定:普通参数绑定、实体类绑定、路径变量绑定、请求头绑定、JSON参数绑定。@RequestParam用于获取URL拼接参数、表单参数,适配?name=xxx格式;@PathVariable用于获取路径占位符参数,适配/user/123格式。前者是请求参数,后者是路径参数。4.全局异常处理器怎么实现?作用是什么?参考答案:通过@RestControllerAdvice+@ExceptionHandler实现全局异常处理。作用是统一捕获项目中所有Controller层异常,统一返回响应格式,避免前端接收杂乱报错信息,简化异常处理代码,不用每个接口单独try-catch。还可以自定义业务异常、参数校验异常、系统异常的差异化处理。三、SpringBoot核心面试题1.SpringBoot的核心优势是什么?为什么项目都用它替代原生Spring?参考答案:核心优势是自动配置、开箱即用、简化开发。原生Spring需要大量XML配置、手动整合各种框架、配置Tomcat服务器,搭建项目繁琐。SpringBoot通过自动配置机制,根据项目依赖自动加载配置,内置Tomcat、Jetty容器,无需手动部署,同时提供starter启动器,一键整合MyBatis、Redis、MQ等组件,大幅降低开发和部署成本。2.SpringBoot自动配置的底层原理是什么?参考答案:核心依赖@EnableAutoConfiguration注解,底层通过SPI机制读取META-INF/spring.factories配置文件,加载所有自动配置类。启动时根据项目引入的依赖,条件注解(@Conditional)判断是否生效,满足条件则自动创建Bean、完成框架整合配置,无需开发者手动配置。SpringBoot2.7之后优化了自动配置加载方式。3.application.yml和perties的区别?优先级谁更高?参考答案:两者都是SpringBoot配置文件,properties是键值对格式,语法简单,兼容性强;yml是树形格式,层级清晰,可读性更高,支持数组、对象配置。优先级上同级目录下properties优先级高于yml,相同配置会覆盖yml配置。日常开发优先用yml,结构更清晰。4.SpringBoot的starter原理是什么?自定义starter怎么做?参考答案:starter是SpringBoot的整合依赖包,分为autoconfigure自动配置包和starter依赖包,作用是封装框架配置和依赖,引入即可直接使用。自定义starter步骤:1.创建自动配置模块,编写配置类、属性绑定类;2.配置spring.factories文件,注册自动配置类;3.创建starter依赖模块,引入自动配置模块;4.打包发布,其他项目引入即可使用。5.SpringBoot如何实现热部署?生产环境需要开启吗?参考答案:通过引入spring-boot-devtools依赖实现热部署,修改代码、配置后自动重启容器,无需手动重启项目,提升开发效率。生产环境必须关闭,devtools会占用资源、影响服务稳定性,生产打包时会自动排除该依赖。6.SpringBoot拦截器、过滤器、监听器的区别和执行顺序?参考答案:过滤器(Filter)是Servlet原生组件,拦截所有请求,在容器层面执行;拦截器(Interceptor)是SpringMVC组件,仅拦截Controller请求;监听器(Listener)用于监听项目启动、销毁、请求创建等事件。执行顺序:监听器初始化→过滤器→拦截器→Controller→拦截器后置→过滤器后置。Filter适合统一编码、跨域处理,Interceptor适合权限校验、日志拦截。四、MyBatis&MyBatis-Plus面试题1.MyBatis的优缺点是什么?和JDBC、Hibernate对比有什么优势?参考答案:优点:轻量级、灵活、SQL可控、性能高、适配各种数据库,SQL和代码分离,便于维护;缺点:需要手动写SQL,简单CRUD需要重复编码。对比JDBC:简化了连接、参数设置、结果集封装的冗余代码;对比Hibernate:避免了ORM框架的过度封装,SQL可控,不会出现性能低下的问题,更适合互联网高并发项目。2.MyBatis的一级缓存和二级缓存区别?默认开启哪个?参考答案:一级缓存是SqlSession级别缓存,默认开启,同一个SqlSession两次相同查询会走缓存,会话关闭后缓存清空;二级缓存是Mapper级别缓存,需要手动开启,跨SqlSession生效,多个请求共享缓存。日常开发中一级缓存够用,二级缓存容易出现数据脏读,一般不推荐随意开启,分布式场景优先用Redis缓存。3.MyBatis中#{}和${}的核心区别?分别适用什么场景?参考答案:#{}是预编译参数,会自动拼接占位符,防止SQL注入,支持参数类型匹配,日常查询、新增、修改参数全部用#{};${}是字符串直接拼接,无预编译,存在SQL注入风险。仅适用于动态表名、动态排序字段等无法使用占位符的场景,使用时需要手动校验参数,规避安全问题。4.MyBatis分页的实现方式?为什么不推荐自己写limit分页?参考答案:常用方式:原生limit分页、PageHelper插件分页、MyBatis-Plus内置分页。原生limit分页需要手动写分页参数、统计总数,代码冗余;PageHelper只需一行代码开启分页,自动拦截SQL、统计总数、封装分页结果,简洁高效。实际开发统一用PageHelper或MP分页,减少重复代码。5.MyBatis-Plus的核心功能有哪些?解决了什么问题?参考答案:MP是MyBatis的增强工具,无侵入、只增强不修改。核心功能:自动CRUD接口、条件构造器查询、分页插件、主键自动生成、逻辑删除、字段自动填充、乐观锁、代码生成器。解决了原生MyBatis需要重复编写基础CRUDSQL的问题,大幅提升开发效率,适配日常业务的基础数据库操作。6.MP逻辑删除和乐观锁的实现原理?实际业务怎么用?参考答案:逻辑删除:通过配置全局删除字段,删除时自动修改字段状态,不真实删除数据,方便数据恢复和溯源;乐观锁:通过version版本字段,更新时校验版本号,版本一致则更新并自增,版本不一致则更新失败,解决并发更新数据覆盖问题。业务中订单、商品、用户数据常用逻辑删除,库存、金额、并发修改数据常用乐观锁。五、框架综合实操面试题(高频手撕/场景题)1.项目中事务失效的场景有哪些?怎么避免?参考答案:常见失效场景:1.方法非public修饰;2.同类中方法内部调用(AOP代理失效);3.事务传播属性配置错误;4.异常被try-catch捕获,未抛出;5.数据库引擎不支持事务(MyISAM);6.多线程中事务无法传递。避免方式:保证事务方法public、跨类调用事务方法、合理抛出异常、数据库使用InnoDB引擎、规范传播属性配置。2.SpringBoot项目启动报错常见原因有哪些?怎么排查?参考答案:常见问题:端口占用、配置文件参数错误、Bean冲突重复注入、依赖版本不兼容、数据库连接失败、Mapper扫描路径错误、循环依赖。排查方式:查看控制台异常日志、根据报错堆栈定位问题、检查配置参数、排除依赖冲突、核对Bean注入逻辑。3.接口返回乱

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论