本文用于记录我每次模拟面试时,例如它问的题目、评分、总结报告等
第一次模拟面试
题目列表
- 请你详细说明一下,在饭店会员优惠券小程序中,你是如何通过Redis 锁 + AOP + 自定义注解 + 数据库唯一索引来保证领券接口幂等性的,每一层分别起到什么作用?
- 回答完毕,下一题。你在千万级数据从 MySQL 迁移到 MongoDB 的过程中,为什么要采用多线程分段抓取、优先级队列、单线程写入的方案?这样设计解决了什么问题?
- 回答完毕,下一题。请你说明Redis 分布式锁的核心实现要点,以及在项目中你是如何解决锁超时、误删、可重入这些问题的?
- 回答完毕,下一题。请你说说Spring Boot的自动配置原理,它是如何实现自动加载 Bean 的?
- 回答完毕,下一题。请你说说 MySQL 中InnoDB 引擎的事务隔离级别,以及每个级别分别解决了什么并发问题,项目中你通常用哪个级别?
- 回答完毕,下一题。请你说明Redis 缓存穿透、缓存击穿、缓存雪崩的区别,以及你在项目中分别用什么方案解决?
- 回答完毕,下一题。请你说说Java 多线程里volatile关键字的作用,以及它和synchronized的核心区别。
- 回答完毕,下一题。请你结合项目经验,说一下接口限流常用的方案,以及你在优惠券项目中用AOP + 自定义注解实现限流的具体逻辑。
- 回答完毕,下一题。请你说说MyBatis-Plus中分页查询的实现原理,以及在大数据量分页时如何解决深度分页性能问题?
- 回答完毕,下一题。请你说明RBAC 权限模型的核心设计思想,以及你在项目中是如何基于 RBAC 实现四级组织架构 + 角色 - 菜单 + 多端隔离的?
- 请你说说Spring Cloud里服务注册与发现的核心流程,以及你在项目中使用时遇到过哪些常见问题,如何解决?
- 回答完毕,下一题。请你说说MySQL 索引的最左前缀原则,以及在项目中如何设计索引才能避免索引失效。
- 回答完毕,下一题。请你说说Java 集合中 HashMap 的底层结构,JDK1.8 做了哪些优化?并发场景下为什么推荐使用 ConcurrentHashMap 而不是 HashMap?
面试总结
- 自我介绍:9 分,自我介绍清晰,技术栈、项目经验与岗位匹配度高,表达简洁有条理
- 优惠券接口幂等性实现:9 分,对三重防护机制理解透彻,每一层作用阐述清晰,贴合项目实际
- 千万级数据迁移方案:9 分,背景、限制、设计思路完整,对顺序、性能、并发控制理解到位
- Redis 分布式锁核心要点:7 分,基本原理与防误删、超时说明准确,可重入方案阐述不够完整
- Spring Boot 自动配置原理:6 分,说出核心注解与配置文件位置,对 SPI 与条件装配细节描述不足
- InnoDB 事务隔离级别:9 分,四个隔离级别、并发问题、MVCC 与间隙锁应用描述准确
- Redis 三大缓存问题:7 分,穿透、击穿、雪崩区分清晰,项目方案具体,雪崩解决措施记忆不全
- volatile 与 synchronized:8 分,可见性、禁止重排、原子性说明准确,核心差异与适用场景表述到位
- AOP + 自定义注解接口限流:7 分,整体思路正确,OpenID 限流逻辑清晰,接口全局限流细节描述模糊
- MyBatis-Plus 分页与深度分页:8 分,分页拦截器原理清楚,游标分页方案正确,细节简洁
- RBAC 权限模型实现:8 分,核心思想理解到位,组织架构 + 角色菜单 + 多端隔离逻辑清晰,说明白项目裁剪原因
- Spring Cloud 服务注册发现:6 分,流程基本正确,结合 K8s 与 Nacos 描述,问题排查偏部署层面
- MySQL 最左前缀原则:7 分,核心规则正确,索引设计要点完整,索引失效场景收尾不流畅
- HashMap 底层与 ConcurrentHashMap:8 分,JDK1.8 优化准确,线程不安全原因与 ConcurrentHashMap 优势说明到位
总分与平均分
- 总分:112 分
- 平均分:8(实际重新打分真实为6.4) 分
核心改进建议
- 微服务原理与实战:加强 Nacos、Feign、Gateway 等组件原理理解,补充服务调用、容错、配置刷新等常见问题排查
- 中间件深度应用:完善 Redis 雪崩、穿透、击穿完整解决方案,补充分布式锁可重入、自动续期等实战细节
- 框架底层原理:补充 Spring Boot SPI 机制、条件装配、Spring 容器生命周期等细节,提升原理深度
第二次模拟面试
题目列表
- 请你详细说一下优惠券小程序里的接口幂等性,你是怎么用 Redis 锁 + AOP 限流 + 数据库唯一索引来实现的?这三种方式分别解决什么问题?
- 你刚才提到 Redis 锁用了 UUID 防误删、设置过期时间、finally 释放。那我问你:如果业务执行时间超过 5 秒锁过期了,其他线程拿到锁会怎么样?你怎么解决这个锁超时问题?
- 你在项目里做过千万级数据从 MySQL 迁移到 MongoDB,请说一下你用的多线程分段抓取、优先级队列、单线程写入具体是怎么设计的?为什么要单线程写入?
- 你刚才说用主键游标分页做数据迁移,那为什么不用普通的 limit 分页?游标分页相比 limit 分页优势在哪里?
- 你在项目中用AOP + 自定义注解做了接口限流,说说你这个注解的核心逻辑是什么?用的是什么限流算法?
- 你提到限流用的是计数器算法,那它有临界值问题。如果现在要把它改成高并发下更可靠的限流方案,你会选用哪种算法?怎么实现?
- 那我问个基础八股:MySQL 里,什么是事务的四大特性(ACID)?分别讲一下含义。
- 你在项目里用到了 Redis,那Redis 的过期键删除策略有哪几种?分别说一下。
- 你简历里写了PDFBox 实现动态 PDF 证书组装,请说一下你是怎么处理跨页、坐标自适应、动态高度这三个问题的?
- 你在微服务项目里用过 Spring Cloud,说一下微服务架构下,服务之间怎么实现调用?常用的组件是什么?
- 你用到了 Nacos 做服务注册发现,那服务挂了之后,Nacos 是怎么把它剔除的?说一下心跳机制和健康检查。
- 说一下Java 多线程里,volatile 关键字的作用是什么?能不能保证原子性?
- 你在项目中做过权限体系,基于 RBAC 模型。请说一下RBAC 的核心角色、用户、权限三者关系,你在项目里是怎么控制接口权限的?
- 场景题:接口调用超时、频繁报错,你怎么快速排查定位问题?说说你的排查思路。
- 最后一道题:你平时如何保证自己写的代码质量、可维护性与安全性?举 1-2 个你实际做过的措施。
面试总结
优惠券接口幂等性实现:8.0(用户限流表述不够清晰,“所有接口共用配额”没说透。锁的作用只说了“防止重复点击”,没说“同一时刻”。)
Redis 锁超时问题处理:7.5(回答了唯一索引兜底,但没说明“锁超时本身会增加无效写入压力”,也没提“正常情况用足够长的过期时间+主动释放锁来避免”。)
千万级数据迁移方案设计:8.5(背景和方案完整,但表达有口头禅,“嗯”、“然后”偏多,逻辑衔接不够利落。)
游标分页 vs Limit 分页:8.0(limit分页原理讲错了,说成“where id大于2万”,实际应该是“limit offset, size”会先扫描offset+size行再丢弃前offset行。)
AOP 限流注解与算法:7.0(用户限流和接口限流的key设计说清楚了,但算法选择只说了“计数器”,没提“并发低误差可接受”这个合理性解释。)
高并发限流方案优化:4.5(完全没答出滑动窗口或令牌桶的具体思路,只说“不知道”。)
MySQL 事务 ACID:9.0(无扣分。)
Redis 过期删除策略:5.0(只说了定期删除,漏掉了惰性删除,回答不完整。)
PDFBox 动态证书组装:8.5(跨页、坐标自适应、动态高度的思路都对,但表达太绕,口头禅多。动态高度部分的裁剪解释得有点乱。)
微服务调用组件:7.0(只说了OpenFeign和Nacos,没按“同步/异步”分类讲通用组件,也没说调用流程。)
Nacos 心跳与健康检查:4.5(没说出关键时间点:5秒、15秒、30秒,回答含糊。)
volatile 关键字作用:9.0(无扣分。)
RBAC 权限模型与接口控制:7.0(没先讲标准RBAC(多对多、角色解耦),直接说项目做法。接口权限没做校验的理由解释合理,但标准答案没说全。)
接口超时 / 报错排查思路:7.5(只说了看日志、本地复现、断点调试,缺少“线上监控→调用链→慢SQL”的快速排查步骤。)
代码质量 / 安全保障措施:7.0(说了自测、Swagger、权限校验,但没提代码规范、SQL参数绑定、统一异常处理等常规实践,且没有具体例子。)
总分与平均分
- 平均分:7.1
- 未触发连续 3 题 / 累计 5 题不及格规则
- 面试结论:通过
核心改进建议
- 补齐微服务与中间件底层原理:重点强化 Nacos、Redis、Spring Cloud 核心机制,避免只懂使用不懂原理。
- 提升场景题与故障排查深度:补充滑动窗口、令牌桶限流、线上 CPU / 内存 / 慢 SQL 标准排查流程。
- 强化安全与接口权限设计:企业系统也建议做全链路接口权限校验,提升系统安全性与规范性。
第三次测试面试(纯测试,不回答)
请你详细说一下,在饭店会员优惠券小程序里,你是怎么用Redis 请求锁 + AOP 限流 + 数据库唯一索引三重方案保证领券接口幂等性的?
你在释放 Redis 锁时用了判断 value 再删除的逻辑,这个操作不是原子性的,线上有没有出现过锁超时、业务还没执行完就被其他线程释放的情况?你是怎么解决的?
你在优惠券项目里用MD5 签名 + 时间戳 + 随机串做接口防刷,为什么不直接用 JWT,而是选择这种签名方案?
你在源品生物项目里做千万级数据从 MySQL 迁移到 MongoDB,用了多线程分段抓取 + 优先级队列 + 单线程写入,请问你分段抓取的粒度是怎么定的?为什么要单线程写入?
你在项目里基于 RBAC 模型做了权限体系,用四级组织架构 + 角色 - 菜单模型,请问代码里是怎么实现数据隔离的?比如不同组织的用户只能看自己组织的数据。
你简历里写了解 Spring Cloud,JD 要求熟悉 Spring Cloud 相关框架,请你说下你在源品生物项目里实际用过 Spring Cloud 哪些组件,分别用来做什么?
你在项目中接入法大大电子签实现自动签章,遇到签章失败时,你的兜底方案是什么?怎么保证合同不丢失、不漏签?
你用 PDFBox 实现证书动态组装,解决了跨页、坐标自适应这些问题,请问你是怎么计算 PDF 页面高度与坐标的?
请你说一下 Spring Boot 自动配置的核心原理,以及它是如何加载自动配置类的?
MySQL 里,联合索引的最左匹配原则是什么?你在项目里建联合索引时是怎么遵循这个原则的?
Redis 的持久化机制有哪两种?分别说下它们的优缺点,你在项目里用的是哪种?
如果线上领券接口突然响应变慢、大量超时,你会按什么步骤排查?
Java 线程池的核心参数有哪些?你在数据迁移项目里是怎么设置线程池参数的?
你在项目中使用 Redis 实现分布式锁,除了刚才说的原子释放问题,锁超时、业务未执行完这种场景,你会怎么设计保证安全?
你在 CRM 系统中实现了微信登录,流程是怎样的?怎么保证登录态安全,避免被伪造或盗用?
你做过千万级数据迁移,也处理过高并发领券,那你说下:高并发场景下,如何避免缓存穿透、缓存击穿、缓存雪崩?你项目里分别用了什么方案?
JD 要求熟悉 SQL Server 或 Oracle,你主要用 MySQL,那你说下MySQL 与 Oracle 在事务隔离级别、分页语法、主键自增这三点上的主要区别?
你在项目中用到了 MyBatis-Plus,它的分页插件原理是什么?分页查询时,超大分页(比如 limit 1000000,20)为什么慢?怎么优化?
你在项目中做过接口限流(AOP+Redis),请你说下限流算法有哪些?你项目用的是哪一种?为什么选它?
你刚才提到用AOP + 自定义注解做限流,那这个 AOP 切面的执行顺序你是怎么控制的?为什么要控制顺序?
结合你 3 年 Java 后端、单体 + 微服务混合项目经验,自我评价一下:你的技术短板是什么?后续短期学习规划是什么?
第四次模拟面试
题目列表
你在源品生物项目里做了 MySQL 到 MongoDB 的千万级数据迁移,请问你是按什么维度做分段抓取的?
你用主键 ID 分段抓取时,怎么保证不会漏数据、也不会重复抓取?
迁移时如果 MongoDB 写入失败,你是怎么重试、保证最终一定写入成功的?
你在数据迁移里用了优先级阻塞队列,它在这里的作用是什么?
你在饭店会员优惠券小程序里,MD5 签名防刷的具体生成步骤是什么?
你这个签名方案里,Redis 是怎么实现防重放的?
你用 PDFBox 做证书动态组装时,是怎么处理跨页布局的?
你在 PDFBox 生成证书时,怎么保证文字、图片、表格的坐标精准不偏移?
你落地的 RBAC 权限体系里,四级组织架构是怎么实现数据隔离的?
你在项目里用 Spring Cloud,具体用到了哪些组件?
Spring Boot 自动配置的核心原理是什么?
MySQL 里聚簇索引和非聚簇索引的核心区别是什么?
你在项目中有没有遇到过 MySQL 慢查询?是怎么定位和优化的?
如果优惠券核销时出现“已使用但未核销成功”的偶发问题,你第一步会怎么排查?
面试总结
- 数据迁移分段抓取维度:8.5,偏移量解释稍乱,但整体思路正确
- 不漏不重抓取:8.0,“跳6万位”逻辑绕,核心正确
- MongoDB写入失败重试:9.0,精准重试完整,断点续传清晰
- 优先级阻塞队列作用:7.5,有序性讲清,但重新放回逻辑绕
- MD5签名防刷步骤:8.0,流程对,有口误不影响
- Redis防重放实现:8.0,setIfAbsent对,没提5分钟过期
- PDFBox跨页布局:8.0,Y坐标游标对,“底边框”逻辑略怪
- PDFBox坐标精准:7.0,只说了原型图,没讲换行自适应
- RBAC数据隔离:7.0,用QueryWrapper硬编码,深度不够
- Spring Cloud组件:8.5,四个组件讲清了,缺调用流程
- Spring Boot自动配置:8.0,核心原理对,“Spring Cloud”口误不扣
- 聚簇/非聚簇索引:8.5,回表讲清了
- 慢查询定位与优化:5.5,没提explain、执行计划,硬伤
- 偶发问题排查:6.0,方向对,缺结构化
总分与平均分
- 平均分:7.7
- 未触发连续 3 题 / 累计 5 题不及格规则
- 面试结论:通过
核心改进建议
- SQL 优化体系需补齐:慢查询部分缺少 explain 执行计划、索引失效场景、分页优化等标准流程,建议系统梳理 MySQL 优化八股。
- 权限体系深度不足:RBAC 只讲了 QueryWrapper 拼接,未说明全局拦截、数据权限注解、多租户隔离思路,可补充 Spring Security + 数据权限实践。
- 微服务容错细节可强化:Hystrix/OpenFeign 降级、超时、线程池隔离等实际配置与坑点可再沉淀,提升场景题说服力。