第一部分核心技术对比与概念解释简答题预测1. Spring、Spring Boot 和 Spring Cloud 的区别是什么【标准答案】Spring Framework (Spring):是核心基础框架提供了 IoC控制反转和 AOP面向切面编程容器。它解决了企业级开发的复杂性但配置繁琐XML或大量Java Config。Spring Boot:是基于 Spring 的快速开发脚手架。它的核心理念是“约定优于配置”通过自动配置Auto-configuration和起步依赖Starter简化了 Spring 应用的初始搭建和开发过程内置了 Tomcat可以直接运行。Spring Cloud:是一套微服务解决方案的集合不是单一框架。它基于 Spring Boot提供了分布式系统常用的组件如服务发现Nacos/Eureka、配置中心、网关Gateway、熔断器Sentinel/Hystrix等用于解决微服务架构下的治理问题。一句话总结Spring 是引擎Spring Boot 是整车简化驾驶Spring Cloud 是车队管理系统协同工作。2. RabbitMQ 和 Kafka 的区别是什么JD明确提到消息队列【标准答案】吞吐量Kafka 吞吐量极高百万级/秒适合大数据日志收集、流计算RabbitMQ 吞吐量中等万级/秒适合业务逻辑处理。时效性RabbitMQ 延迟极低微秒级实时性强Kafka 延迟较低毫秒级但在高负载下略逊于 RabbitMQ。可靠性RabbitMQ 支持复杂的路由和确认机制数据可靠性高不易丢失Kafka 在特定配置下如异步刷盘可能会丢失少量数据但通常通过副本机制保证高可用。功能特性RabbitMQ 支持复杂的路由规则Direct, Topic, FanoutKafka 主要是基于 Topic 的发布/订阅模式。选型建议企业的 DMS/SFA 系统涉及订单和库存对数据准确性要求高通常首选RabbitMQ如果是用户行为日志分析则选 Kafka。3. 请简述 JVM 的内存模型及垃圾回收机制GC。【标准答案】内存模型运行时数据区堆 (Heap)存储对象实例是 GC 的主要区域分为新生代Eden, Survivor和老年代。虚拟机栈 (Stack)存储局部变量表、操作数栈、动态链接等线程私有。方法区 (Method Area/Metaspace)存储类信息、常量、静态变量。程序计数器 本地方法栈。垃圾回收算法标记-清除产生碎片。标记-复制用于新生代Eden - Survivor无碎片但浪费空间。标记-整理用于老年代避免碎片。常见垃圾收集器CMS并发标记清除低停顿、G1分区收集可预测停顿JDK9默认。️ 第二部分JD 深度挖掘题Redis/MySQL/微服务根据 JD 中的“性能优化”、“索引优化”、“微服务架构”推导出的必考题。4. MySQL 索引失效的场景有哪些JD强调SQL优化【标准答案】违反最左前缀法则联合索引a,b,c查询条件跳过 a 直接用 b或跳过 a,b 用 c。索引列上做运算如WHERE YEAR(create_time) 2024会导致全表扫描。使用 ! 或 优化器通常会放弃索引走全表扫描。模糊查询以 % 开头如LIKE %abc。字符串不加单引号发生隐式类型转换导致索引失效。OR 连接条件如果 OR 两边的字段不都有索引会导致全表扫描。5. Redis 缓存穿透、击穿、雪崩的区别及解决方案【标准答案】缓存穿透查询不存在的数据请求直接打到数据库。解法布隆过滤器拦截、缓存空值设置短过期时间。缓存击穿热点 Key过期瞬间大量并发请求打穿到数据库。解法设置热点数据永不过期、加互斥锁Mutex Lock。缓存雪崩大量 Key 同时过期或 Redis 宕机数据库压力骤增。解法过期时间加随机值、构建 Redis 高可用集群Sentinel/Cluster、限流降级。6. Spring Cloud 中 Nacos 和 Eureka 的区别【标准答案】CAP原则Eureka 保证 AP可用性Nacos 支持 AP 和 CP一致性切换。健康检查Eureka 仅支持心跳Nacos 支持心跳、MySQL、TCP、Http 等多种检测方式。功能集成Nacos 集成了注册中心和配置中心Eureka 只是注册中心需配合 Config/Spring Cloud Bus 使用。维护状态Eureka 2.0 已闭源停止更新Nacos 是阿里开源社区活跃国内主流选择。 第三部分场景设计与业务理解题加分项外企面试非常喜欢问“为什么这么做”以及“结合业务的理解”。7. 【场景题】DMS系统中经销商下单时如何防止“超卖”【参考答案】这是一个典型的库存扣减问题需要保证高并发下的数据一致性。Redis 预扣减利用 Redis 的原子性Lua脚本或decr命令先扣减库存速度快抗并发。数据库乐观锁在更新数据库库存时使用UPDATE stock SET num num - 1 WHERE id xxx AND num 0利用数据库行锁保证最终一致性。消息队列削峰下单请求放入 RabbitMQ 异步处理防止瞬时流量冲垮数据库。防重机制使用唯一订单号作为幂等键防止网络抖动导致的重复扣减。完整串联整套 DMS 防超卖逻辑整合幂等 库存并发控制前端携带唯一幂等单号请求下单接口接口先查 Redis 幂等记录存在直接返回重复请求拦截不存在则执行Redis Lua 原子预扣库存无需分布式锁扣减失败返回库存不足扣减成功写入幂等标记发送下单消息到 MQMQ 异步消费执行数据库落单 数据库乐观锁更新真实库存数据库唯一索引兜底防止重复订单若 DB 更新失败乐观锁更新行数 0补偿回滚 Redis 库存。8. 【场景题】SFA系统在早会签到高峰期接口响应慢如何优化【参考答案】读写分离签到是写操作查询门店信息是读操作将读流量分发到从库或 Redis。异步处理签到成功后发送 MQ 消息异步记录日志、计算积分、推送通知主线程直接返回“签到成功”减少接口耗时。批量写入如果涉及批量上传照片或数据采用分批入库避免长事务占用连接。CDN加速图片/视频资源上传到 OSS 并使用 CDN 加速减轻应用服务器带宽压力。⚠️ 备考小贴士背诵策略上面的答案已经精简过建议先看加粗的关键词用自己的话串联起来不要死记硬背每一个字。结合项目如果面试官问“你用过 Redis 吗”不要只背上面的穿透/雪崩要说“我在之前的项目中用 Redis 做了xx缓存当时遇到了xx问题我是通过xx解决的。”