简介这份PDF面向准备Java后端面试的求职者与初中级开发者聚焦Spring体系与数据库优化两大高频考点帮助读者在有限时间内系统梳理核心知识脉络。内容围绕Spring Bean生命周期、Spring MVC执行流程、Spring Boot自动装配原理展开并延伸至SQL执行计划解读、常见优化技巧、MySQL索引类型与B树底层结构同时补充线程池种类及核心参数等并发知识点条理清晰、便于速查。资源包共1个PDF文件大小约396KB轻量便携适合手机或电脑随时翻阅。目前已有180人学习可作为面试前的冲刺提纲也可用于日常开发中对照排查配置与SQL性能问题快速定位薄弱环节并针对性补强。1. 从一道“Bean 生命周期”题看这场面试的给分逻辑很多人背 Spring Bean 生命周期背到“实例化、属性赋值、初始化、销毁”就停了面试官追问一句“afterPropertiesSet和init-method谁先执行”当场卡壳。这类题不是考你记没记住四个阶段而是考你有没有真正跟过容器启动这条链路。这份 Java 高频面试题资料的价值就在这里它把 Spring Bean 生命周期、Spring MVC 执行流程、Spring Boot 自动装配、SQL 执行计划与索引优化、线程池七大参数、HashMap 底层结构、事务失效场景、循环依赖三级缓存这些高频考点按“能直接背、能直接答”的方式串了起来。整场面试的给分逻辑很清楚——基础概念占一部分底层原理和场景判断占大头能不能把“是什么”讲到“为什么这么设计、出问题怎么排查”决定了你是及格还是拉开差距。适合已经写过 Spring 项目、但一被追问底层就发虚的备考者。2. Spring 高频考点Bean 生命周期与循环依赖的三级缓存2.1 Bean 生命周期四个阶段与两个扩展点Spring Bean 生命周期是这份资料里出现频率最高的考点几乎每场中高级 Java 面试都会问。标准答法按四段走实例化、依赖注入、初始化、销毁。实例化阶段有两种常见方式反射创建和工厂方法创建依赖注入阶段完成属性值注入和其他 Bean 的依赖注入初始化阶段有两个扩展点实现InitializingBean接口会调用afterPropertiesSet()配置init-method会调用指定方法销毁阶段对应DisposableBean的destroy()和配置的destroy-method。面试官最想听的不是这四个词而是执行顺序。afterPropertiesSet()先于init-method执行因为前者是接口回调后者是配置指定的方法容器在调用完所有BeanPostProcessor的postProcessBeforeInitialization之后先触发接口方法再触发自定义初始化方法。能主动说出这个顺序基本就说明你不是死记硬背。提示答生命周期题时把BeanPostProcessor的前置和后置处理带一句面试官会认为你理解的是容器扩展机制而不是四个孤立阶段。2.2 循环依赖构造注入为什么救不了循环依赖是 Bean 生命周期的高频延伸题。资料里把场景分得很清楚字段注入和 setter 注入造成的循环依赖Spring 能自动处理构造注入造成的循环依赖Spring 无法自动处理。原因在于构造注入要求对象在实例化时就把依赖全部准备好而循环依赖的双方互相等待对方先完成实例化形成死结。解决思路有三条重构代码消除循环依赖这是最彻底但改动范围不可控的方案改用字段注入或 setter 注入加Lazy注解延迟加载。三级缓存是自动处理循环依赖的核心机制一级缓存singletonObjects存完整单例 Bean二级缓存earlySingletonObjects存实例化完成但未完成属性注入的半成品三级缓存singletonFactories存 Bean 的创建工厂。查找顺序是一级、二级、三级从三级拿到对象后放入二级并从三级移除。面试题Spring 为什么要用三级缓存两级不够吗答题思路分三层。第一层说结论三级缓存是为了在需要时生成代理对象两级缓存无法在提前暴露引用时决定是否要代理。第二层说流程Bean 实例化后先把创建工厂放入三级缓存发生循环依赖时通过工厂拿到早期引用如果这个 Bean 需要 AOP 代理工厂返回的就是代理对象。第三层说取舍如果只用两级缓存直接放原始对象后续代理对象和原始对象会不一致所以必须留一个工厂层做延迟决策。这样答面试官会认为你读过源码逻辑而不是只背了三个 Map 的名字。2.3 Spring MVC 执行流程一条请求链上的九个节点Spring MVC 执行流程是另一道必考题资料里拆得很细。客户端发出 HTTP 请求后前端控制器DispatcherServlet拦截所有请求它是整个流程的核心接着HandlerMapping把请求 URL 与处理器方法建立映射HandlerAdapter负责调用控制器方法Controller执行业务逻辑、准备模型数据ViewResolver找到实际视图视图渲染生成 HTML最后由前端控制器响应客户端。资料特别强调除了控制器处理请求、视图渲染和响应客户端其余环节都要把结果返回给前端控制器。面试题DispatcherServlet 在流程中到底做了什么答题思路先定位角色它是统一入口和调度中心不执行业务逻辑再讲它做了三件事接收请求、按映射找处理器、把各组件结果串起来最后补一句异常处理也归它管HandlerExceptionResolver在流程中兜底。这样答比流水账式背九个步骤更有层次。2.4 Spring Boot 自动装配三个注解和条件生效自动装配考的是SpringBootApplication的拆解。它包含三个核心注解SpringBootConfiguration说明当前类是配置类ComponentScan默认扫描启动类所在包及子包EnableAutoConfiguration开启自动配置。底层通过Import导入AutoConfigurationImportSelector调用getAutoConfigurationEntry()读取候选配置类配置类中用Bean定义方法并配合Conditional系列注解条件满足才把方法返回值注册进 IOC 容器。面试题自动装配的“自动”体现在哪答题思路不要说“帮我配好了”要说“按约定加载候选配置再按条件筛选生效”。约定来自类路径下的配置元数据筛选靠Conditional最终注册靠Bean方法。能讲出“候选—筛选—注册”三步这道题就稳了。3. 数据库与并发考点SQL 优化、索引失效与线程池参数3.1 执行计划explain 每一列看什么SQL 优化题几乎必问执行计划。资料里明确MySQL 中用explain加在查询语句前查看执行计划重点看这些列id是查询序列号相同则从上到下执行不同则值大的优先级高select_type是查询类型table是涉及的表type是访问类型性能从好到坏依次为system、const、eq_ref、ref、range、index、allpossible_keys是可能用到的索引为空说明没有相关索引key是实际使用的索引为 null 表示没走索引key_len是索引宽度不损失精度时越短越好ref显示哪个列或常数与索引一起筛选rows是估计检查的行数Extra是执行状态说明。面试题一条慢 SQL 你怎么优化答题思路按四步走先用explain看type和key判断有没有走索引、走的是不是预期索引再看rows和Extra判断扫描行数和是否出现额外排序、临时表然后对照索引失效规则排查比如函数运算、!、or、前置%模糊查询最后才考虑改写 SQL比如明确字段代替select *、in值不宜过多、能用inner join不用left join、用union all代替union。面试官想听的是排查顺序不是一上来就说“加索引”。3.2 索引失效五条高频规则与 BTree 底层索引失效是 SQL 题里最容易翻车的地方。资料列出的失效场景包括使用函数或表达式查询、使用NOT或!操作符、使用or操作符、对索引列进行运算、like前置%、多个索引查询只有第一个有效。这些规则背后是 BTree 的结构决定的BTree 是多路平衡查找树所有数据存在叶子节点叶子节点之间用指针连成链表便于范围查询非叶子节点只存索引不存数据。一个非叶子节点约 16KB一个 key 约 8 字节、指针约 6 字节所以一个节点大约能存 1000 条索引两层可到百万级三层可到千万级一般树高 2 到 4 层。面试题为什么 like %xx 用不上索引答题思路BTree 的查找依赖索引值的有序性从根节点逐层比较定位。前置%意味着匹配串开头不确定无法在树中做有序比较只能全表扫描。答完补一句“后置%可以走索引范围扫描”体现你分得清两种模糊查询的差别。3.3 线程池七个参数、四种拒绝策略和五种状态线程池是并发模块的必考项。资料里给出四种常见线程池newFixedThreadPool固定大小、newCachedThreadPool动态调整适合大量短任务、newSingleThreadExecutor保证顺序执行、newScheduledThreadPool支持定时和周期任务。核心参数七个corePoolSize核心线程数、maximumPoolSize最大线程数、keepAliveTime救急线程生存时间、unit时间单位、workQueue排队队列、threadFactory线程工厂、handler拒绝策略。四种拒绝策略要能区分AbortPolicy直接抛异常是默认策略CallerRunsPolicy用调用者线程执行DiscardOldestPolicy丢弃队列最前面的任务再执行当前任务DiscardPolicy直接丢弃。线程池状态有五种running 正常接受任务、shutdown 不接受新任务但处理完队列、stop 不接受新任务并尝试中断执行中任务、tidying 任务执行完正在回收资源、terminated 完全终止。面试题核心线程数怎么定答题思路不要说固定数字要说判断依据。CPU 密集型任务线程数接近核数加一IO 密集型任务可以适当放大因为线程大部分时间在等待。再补一句“最终要靠压测验证”面试官会认为你有工程意识。3.4 多线程三大特性与死锁预防原子性、可见性、有序性是并发题的基础。原子性指操作要么全完成要么全不完成i这种复合操作不是原子的可见性指一个线程修改后其他线程能立即看到有序性指程序按代码顺序执行但编译器和 CPU 可能重排序。解决手段原子性用synchronized或Lock可见性用volatile或锁有序性用锁或volatile的写读顺序保证。死锁预防资料给了五条避免循环依赖、统一获取锁的顺序、设置超时时间、使用资源分配图检测环路、引入抢占机制。答题时优先说“统一锁顺序”和“设置超时”这两条最可落地。4. 易错点五个一答就露怯的高频失分题4.1 易错点一把afterPropertiesSet和init-method顺序说反错在哪很多考生答“先执行init-method再执行afterPropertiesSet”或者干脆说“两个一样”。为什么错没理解接口回调和配置方法的触发时机容器先处理接口回调再处理自定义方法。怎么答对明确说afterPropertiesSet()在前init-method在后并补一句两者都在属性注入完成后执行。4.2 易错点二认为构造注入循环依赖也能靠三级缓存解决错在哪把“Spring 能处理循环依赖”当成万能结论。为什么错构造注入要求实例化时依赖已就绪对象还没创建出来三级缓存里根本没有可暴露的早期引用。怎么答对先分类字段注入和 setter 注入能自动处理构造注入不能再说解决方式改注入方式、加Lazy或重构。4.3 易错点三事务失效只背“非 public 方法”错在哪只记住一条就以为答全了。为什么错事务失效场景很多资料里列了静态方法、非 public 方法、异常类型不匹配、异常被 try-catch 吞掉、传播行为配置不当、final 修饰、方法内部调用、多线程环境、表不支持事务、方法未被 AOP 代理。怎么答对按“代理是否生效、异常是否抛出、传播行为是否合理”三类归纳每类举一两个例子比零散罗列更有说服力。4.4 易错点四索引失效规则背了但不会结合执行计划说错在哪张口就是“函数、!、or、前置%”但问“怎么确认失效”就答不上来。为什么错规则是结论执行计划才是证据。怎么答对先说用explain看key是否为 null、type是否退化成all再对应到具体失效规则形成“现象—原因—改法”的闭环。4.5 易错点五线程池拒绝策略只记名字不记行为错在哪能说出四个英文名但说不清哪个是默认、哪个用调用者线程执行。为什么错没结合实际提交场景理解。怎么答对AbortPolicy默认抛异常CallerRunsPolicy由提交任务的线程自己跑DiscardOldestPolicy丢最老的再执行当前DiscardPolicy静默丢弃。答的时候各配一句适用场景印象分立刻不一样。5. 答题节奏把高频题练成条件反射的三步法面试现场最怕的不是不会而是会但说不清。这份资料覆盖的考点密度很高从 Spring 到 SQL 再到并发如果逐条死背考场上很容易在追问第二层时断掉。我的建议是把每道高频题练成“结论—机制—场景”三段式第一句给结论让面试官知道你答到点上了第二段讲机制把底层流程或参数说清楚第三段落到场景说明什么时候会出问题、怎么排查。比如循环依赖结论是构造注入不能自动解决机制是三级缓存依赖提前暴露引用场景是字段注入和 setter 注入才能靠缓存兜底。练习时按模块做自测表每个考点只写三个关键词逼自己用口语展开。下面这张表可以直接拿来当复习清单模块必答关键词追问方向Bean 生命周期实例化、注入、初始化、销毁两个初始化扩展点的顺序循环依赖三级缓存、构造注入、Lazy为什么需要工厂层Spring MVCDispatcherServlet、映射、适配、视图哪些环节要回传前端控制器自动装配三个注解、候选配置、条件生效Conditional 的作用SQL 优化explain、type、key、rows索引失效怎么确认线程池七个参数、四种拒绝策略、五种状态核心线程数怎么定事务ACID、隔离级别、传播行为失效场景归类还有一个小技巧遇到“谈谈你的理解”这类开放题先给一句总判断再分两点展开最后收在“实际项目中我会怎么验证”。面试官不怕你答得短怕你答得散。把这份题库里的题按模块过两遍第一遍求说全第二遍求说短第三遍只留关键词即兴展开基本就能做到被追问时不慌。从那以后我每次带人练面试都强制走一遍“结论—机制—场景”三段式哪怕题再熟也不跳步因为翻车的往往不是不会而是第一句就没说到点上。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?