本文用于记录我每次模拟面试时,例如它问的题目、评分、总结报告等
第一次模拟面试
题目列表
- 请你详细说明一下,在饭店会员优惠券小程序中,你是如何通过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 降级、超时、线程池隔离等实际配置与坑点可再沉淀,提升场景题说服力。
第五次模拟面试
题目列表
一、自我介绍
1. 请先做一个简短的自我介绍,重点说明你的工作经验和技术栈。
二、项目深挖(饭店会员优惠券小程序)
2. 你在饭店会员优惠券小程序项目中提到的MD5签名防恶意请求方案,具体是怎么设计的?
3. 这个优惠券小程序上线后,有多少门店在使用?并发量大概多大?
4. 如果优惠券被用户重复领取或者同一张券被重复核销,你会怎么防止?
三、项目深挖(源品生物-细胞药品消费服务平台)
5. 你在源品生物项目中负责法大大电子签的接入,请描述一下整个签署流程的时序设计。
6. 你提到基于PDFBox实现动态证书组装,跨页布局和坐标自适应的难点具体是怎么解决的?
7. 参考RBAC实现的权限体系,你们四级组织架构具体是哪四级?数据隔离是怎么做的?
四、八股文
8. 说一下HashMap的底层结构,以及它线程不安全的体现是什么?
9. Redis中RDB和AOF两种持久化方式的区别和适用场景是什么?
10. 你了解Spring Cloud,说一下服务熔断和服务降级的区别?
11. MySQL中使用索引时,什么情况下会索引失效?请举例说明。
五、场景/排查题
12. 如果你的接口在生产环境突然变慢,你从哪些方面排查?
13. 有一个定时任务每天凌晨批量处理数据,但某天任务执行到一半服务器重启了,你怎么保证数据不丢不重复?
六、其他
14. 你上一份工作为什么只做了6个月(2025年8月到2026年2月)就离职了?
15. 你对未来3年的职业规划是什么?
面试总结
| 题号 | 题目 | 得分 | 扣分点 |
|---|---|---|---|
| 1 | 自我介绍 | 8.0 | 内容完整但“天鹅共盈”口误,流畅度可提升 |
| 2 | MD5签名防刷设计 | 8.5 | 流程完整,逻辑清晰,细节到位 |
| 3 | 门店数和并发量 | 7.0 | QPS数字合理但未解释测算依据,回答偏短 |
| 4 | 防重复领取/核销 | 8.5 | 区分领券和核销场景很好,领券三层防护讲得透 |
| 5 | 法大大时序设计 | 9.0 | 全场最高。流程完整,手动签/自动签区分明确 |
| 6 | PDFBox跨页与坐标自适应 | 8.5 | 游标递减思路正确,跨页判断清楚,“换行重算Y”说得不够细 |
| 7 | RBAC四级架构与数据隔离 | 8.0 | 四级说清,经典方案vs项目实际对比好,但最后一句表述稍乱 |
| 8 | HashMap底层与线程不安全 | 8.5 | 1.7/1.8区别清楚,头插尾插正确,漏了ConcurrentHashMap对比 |
| 9 | RDB vs AOF | 0.0 | 跳题(你说“还没了解到”) |
| 10 | 熔断 vs 降级 | 8.0 | 核心区别说对了,举例可以更具体 |
| 11 | 索引失效场景 | 8.0 | 说了6个偏多,挑3-4个最核心的说效果更好 |
| 12 | 接口变慢排查 | 7.5 | 思路正确但“浏览器拿参数”步骤不规范,漏了监控告警、硬件资源 |
| 13 | 定时任务重启保证不丢不重 | 7.0 | “回看日志”不严谨,缺少状态记录和幂等设计的工程表述 |
| 14 | 6个月离职原因 | 9.0 | 完美。逻辑自洽,态度坦诚,有细节,无扣分 |
| 15 | 3年职业规划 | 8.0 | 诚恳,但“短板”表达偏多略显不自信,可以更正面一些 |
总分与平均分
及格线:6.0分
总得分 = 8.0 + 8.5 + 7.0 + 8.5 + 9.0 + 8.5 + 8.0 + 8.5 + 0 + 8.0 + 8.0 + 7.5 + 7.0 + 9.0 + 8.0 = 105.5
题目总数 = 15
平均分 = 105.5 ÷ 15 = 7.03
核心改进建议
1. 绝对不要跳题(第9题)
你说“这题我确实还没了解到,跳过吧”,在真实面试里这句话就是一面否决。你要换一种回应方式:“RDB和AOF这块我之前主要关注使用,底层细节没有深入,面试结束后我会马上补上。”你总分控得很好,跳题依然是重大硬伤。
2. 概率性场景的答案需要更“工程化”(第3/12/13题)
- 并发量:不要说“就二三十”,可以说“上线初期高峰QPS约30-40,系统轻松支撑,后续扩展已预留”更好。
- 排查接口变慢:不要直接从“浏览器拿参数”开始,你的第一步应该看监控告警、看资源占用。
- 定时任务:不要回答“去日志平台查日志”,容灾靠的是状态设计,不是人力翻日志。