本文整理了Java后端开发面试的高频面试题,覆盖Java基础、Spring框架、SpringBoot、MySQL、Redis、MQ、Docker、微服务、项目实战等必考模块。

在学习过程中我们不能只关注于问题答案,对于技术一定要有自己的理解,我给出的答案也并非标准或完美的回答,大家更要关注的是这个问题背后的核心逻辑以及自己对这个技术的想法和见解。

1. Redis:什么是缓存雪崩?如何解决?

标准面试回答:缓存雪崩是指大量缓存Key在同一时间过期失效,或Redis集群宕机,导致大量并发请求直接穿透到MySQL数据库,造成数据库压力骤增,严重时会拖垮数据库、导致服务宕机。解决方案分为四层:第一,给缓存Key设置随机过期时间,避免批量过期;第二,对热点数据设置逻辑过期,不主动删除缓存;第三,搭建Redis主从+哨兵/集群架构,保证缓存高可用;第四,配合服务限流、熔断、降级机制,拦截无效请求,保护底层数据库。

核心考点:区分缓存雪崩、缓存穿透、缓存击穿;掌握缓存层高可用、业务层兜底降级两大解决思路,是Redis面试基础必考知识点。

2. Spring:简述IOC和AOP及核心作用

标准面试回答:IOC即控制反转,是Spring的核心思想。传统开发由开发者手动创建、管理对象,而IOC将对象的创建、初始化、销毁全权交给Spring容器管理,通过依赖注入为组件赋值,彻底实现业务代码解耦。AOP即面向切面编程,能够在不修改原有业务代码的前提下,对方法进行横向增强,统一封装通用逻辑。

核心考点:IOC核心是解耦、依赖注入;AOP核心是横向扩展、代码复用,常用于事务管理、日志打印、权限校验、限流、异常统一处理等场景。

3. SpringBoot:简述自动配置原理、核心注解和流程

标准面试回答:SpringBoot自动配置的核心注解是@SpringBootApplication,属于组合注解,整合了 @SpringBootConfiguration@EnableAutoConfiguration@ComponentScan。项目启动时,@EnableAutoConfiguration 会加载预设的自动配置文件,读取所有场景自动配置类,再通过 @Conditional 系列条件注解,根据项目当前依赖环境,按需自动创建Bean,无需手动编写XML和配置类,实现开箱即用。

核心考点:核心是条件化自动装配;目的是简化SSM繁琐的配置,实现零配置快速开发,是SpringBoot相较于SSM最大的优势。

4. MQ:如何保证消息不丢失(生产者、MQ、消费者三维度)

标准面试回答:消息丢失分为生产者、服务端、消费者三个场景,分层解决。生产者端:开启消息发送重试机制,采用同步发送方式,发送失败记录异常消息,落地数据库兜底。MQ服务端:开启刷盘机制,同步刷盘保证消息落盘,搭配主从集群数据同步,避免节点宕机丢失数据。消费者端:采用手动ACK确认机制,消费成功手动提交,消费失败触发重试,重试次数耗尽后将消息投递到死信队列,人工处理。

核心考点:全覆盖MQ消息可靠性方案,区分三个层级的丢失场景,死信队列兜底是高并发MQ项目的标准落地方案。

5. Docker:常用命令 + SpringBoot项目打包镜像部署流程

标准面试回答:日常常用Docker命令:pull拉取镜像、images查看本地镜像、ps查看运行容器、exec进入容器、run启动容器、rmi/rm删除镜像和容器。SpringBoot项目Docker部署流程:首先通过Maven/Gradle将项目打包为Jar包;其次编写Dockerfile文件定义运行环境;通过docker build命令构建自定义镜像;最后通过docker run启动容器,完成项目容器化部署。

核心考点:掌握基础容器操作、镜像构建流程,理解Docker容器化部署环境统一、部署便捷、隔离性强的优势。

6. Redis+Lua:为什么限流场景需要使用Lua脚本?

标准面试回答:在Redis限流场景中,使用Lua脚本主要有两大优势。第一,保证操作原子性,Lua脚本中的多条Redis命令会作为一个整体执行,不会被其他线程打断,避免并发下的数据不一致问题。第二,减少网络IO开销,多条命令一次性传输、执行,无需多次网络往返,大幅提升高并发限流接口的性能。

核心考点:原子性、减少网络开销;是Redis分布式限流、分布式锁续约的核心底层方案,适配秒杀、票务等高并发场景。

7. RAG项目:什么是向量数据库?为什么不用MySQL做相似度检索?

标准面试回答:向量数据库是专门用于存储和检索向量数据的数据库,会将文本、图片等原始数据通过AI模型转化为向量存储,通过余弦相似度算法计算向量相似度,实现语义检索。而MySQL是关系型数据库,仅支持精准匹配、模糊匹配,无法理解文本语义,不能实现相似度检索,无法满足RAG检索增强生成的业务需求。

核心考点:MySQL擅长结构化精准查询;向量数据库擅长语义相似度匹配,是RAG智能问答系统的核心组件。

8. 网关:Gateway和Nginx的区别、Gateway核心功能

标准面试回答:Nginx是服务器层面的外网网关,部署在最外层,主要负责反向代理、全局负载均衡、静态资源分发,主打高并发接入。Gateway是微服务业务网关,处于内网微服务集群入口,专注微服务治理。Gateway核心功能包含:动态路由、请求鉴权、参数校验、跨域处理、接口限流、日志监控、请求过滤等业务级操作。

核心考点:Nginx偏向底层接入、高性能转发;Gateway偏向业务治理、功能拓展,二者分层协作。

9. Java并发:volatile关键字的作用

标准面试回答:volatile是Java并发轻量级同步关键字,具备两大特性:第一,保证变量线程可见性,一个线程修改变量后,其他线程可立刻感知最新值;第二,禁止指令重排序,避免JVM优化导致的并发异常。但volatile不保证操作原子性,无法替代锁,不能保证线程安全。

核心考点:只保可见、禁重排,不保原子性、非线程安全,是并发面试高频易错点。

10. MySQL事务:ACID四大特性及底层实现

标准面试回答:MySQL事务四大特性:原子性、一致性、隔离性、持久性。原子性指事务所有操作要么全部成功,要么全部回滚,由undo log回滚日志实现;一致性指事务执行前后数据符合数据库约束、业务规则,由另外三大特性共同保障;隔离性指多事务并发执行互不干扰,由锁和MVCC多版本并发控制实现;持久性指事务提交后数据永久落地,不会丢失,由redo log重做日志实现。

核心考点:掌握四大特性定义,精准对应undo log、redo log、MVCC、锁四大底层实现机制。

11. 集合框架:ArrayList和LinkedList区别及使用场景

标准面试回答:ArrayList底层基于动态数组实现,支持随机访问,查询速度快,但新增、删除元素需要移动数组数据,效率较低,适合读多写少场景。LinkedList底层基于双向链表实现,不支持随机访问,查询效率低,但是头尾增删仅需修改指针,无需移动数据,写入效率高,适合写多读少、频繁增删场景。

核心考点:底层数据结构决定读写性能差异,根据业务读写比例选择对应集合。

12. 分布式锁:为什么用Redisson分布式锁?和synchronized区别

标准面试回答:synchronized是Java本地锁,仅作用于当前JVM进程,只能保证单体服务内的线程互斥,在微服务多集群、多服务器场景下会失效。Redisson分布式锁基于Redis实现,可跨进程、跨服务器、跨集群生效,能够保证分布式环境下并发操作的原子性,解决集群并发竞争问题。

核心考点:本地锁仅限单体项目,分布式锁适配微服务集群架构,是高并发项目必备解决方案。

13. 并发编程:线程的四种创建方式及区别

标准面试回答:Java线程四种创建方式:继承Thread类、实现Runnable接口、Callable+FutureTask、线程池创建。继承Thread和实现Runnable无返回值、无法抛出异常;Callable支持获取线程执行返回值、可抛出异常;线程池可以统一管理线程、复用线程资源,避免频繁创建销毁线程造成资源浪费,性能最优,是企业开发首选。

核心考点:区分有无返回值、异常机制,理解线程池资源复用、管控并发的核心优势。

14. RPA:什么是RPA?后端为什么要结合RPA?

标准面试回答:RPA即机器人流程自动化,通过脚本模拟人工操作网页、软件,自动完成重复、机械化的采集、点击、发布等操作。RPA擅长自动化模拟操作,但不具备业务处理、数据存储、接口服务能力;而后端负责封装核心业务逻辑、数据持久化、对外提供接口,二者结合可以低成本实现自动化业务流程,减少重复开发和人工操作。

核心考点:RPA负责自动化操作,后端负责业务治理与数据管理,分工互补。

15. MySQL索引:聚簇索引与非聚簇索引区别

标准面试回答:InnoDB中聚簇索引就是主键索引,B+树叶子节点存储整行数据,一张表有且仅有一个聚簇索引,无主键时数据库会自动生成隐藏主键。非聚簇索引也叫二级索引,叶子节点仅存储主键值,查询数据时需要先通过二级索引找到主键,再通过主键索引查询完整数据,这个过程称为回表。

核心考点:聚簇索引存整行数据,非聚簇索引存主键;理解回表查询原理,是索引优化的基础。

16. Java基础:重载和重写的区别

标准面试回答:重载发生在同一个类中,方法名相同,参数列表(个数、类型、顺序)不同,对返回值、权限修饰符无要求,属于编译时多态。重写发生在父子子类中,方法名、参数列表必须一致,返回值兼容,子类权限修饰符不能严于父类,抛出的异常范围不能大于父类,属于运行时多态。

核心考点:区分发生位置、语法规则、多态时机,是Java基础必考知识点。

17. Redis数据类型及项目实战场景

标准面试回答:Redis常用五种基础数据类型及业务场景:String适用于缓存数据、验证码、Token、计数器、限流统计;Hash适合存储用户信息、订单信息等对象数据,避免频繁序列化;List可实现简易消息队列、有序列表数据存储;Set自带去重特性,用于点赞、关注、数据去重、集合统计;ZSet有序集合,可自定义权重,用于热搜榜单、排行榜、延时任务。

核心考点:根据数据特性、业务场景匹配对应数据类型,是Redis项目落地的基础。

18. Spring事务:传播行为与隔离级别

标准面试回答:Spring事务有7种传播行为,用于控制方法之间事务的传递规则,常用的有REQUIRED、REQUIRES_NEW、NESTED等。事务隔离级别分为四级:读未提交、读已提交、可重复读、串行化。MySQL InnoDB默认采用可重复读隔离级别。隔离级别用于控制并发事务的数据可见性,平衡数据安全性与接口并发性能,解决脏读、不可重复读、幻读三大并发问题。

核心考点:传播行为管控事务传递,隔离级别管控并发数据安全,是Spring事务面试核心。

写在最后

所有面试的题目最终目的都是为了考验我们对于技术理解的深度和广度,大家一定要记住面试题目是背不完的,只有真正掌握和理解了这门技术,应对面试才可以游刃有余。

更多推荐