覆盖:Spring、微服务、Nacos、Sentinel、Dubbo、RabbitMQ、Redis、MyBatis、Druid、Netty、XXL-Job、Activiti、加密、Maven、日志、POI、CXF
一、Spring 核心进阶(1-15)
-
请说说 Spring Bean 循环依赖产生的条件?答:必须是单例 Bean、Setter / 字段注入、非 final 类,多例 Bean、构造器注入天然无法出现循环依赖问题。
-
Spring 中事务嵌套如何理解?答:内层事务根据传播规则依附或独立于外层,嵌套事务独立提交回滚,外层失败不影响内层已提交数据保存。
-
说说 Spring MVC 九大组件有哪些?答:包含处理器映射器、适配器、视图解析器、异常解析器等,各司其职,完整支撑请求接收、处理、响应全流程。
-
@Async 异步注解底层原理?答:基于 Spring 线程池 + AOP 动态代理实现,开启异步注解后,方法独立子线程执行,提升接口吞吐量与并发能力。
-
Spring 原型 Bean 存在什么问题?答:多例 Bean 每次获取都会新建对象,无法统一管理生命周期,频繁创建会增加 JVM 开销,一般业务极少大量使用。
-
什么是 Spring 上下文刷新机制?答:refresh () 是容器核心方法,完成 Bean 扫描、加载、初始化、后置处理、事件发布,是 Spring 容器启动的核心流程。
-
Spring 后置处理器有什么作用?答:BeanPostProcessor 可以在 Bean 初始化前后拦截修改对象,是 Spring 扩展、AOP 代理、动态修改 Bean 的核心入口。
-
全局异常和自定义异常怎么结合使用?答:自定义业务异常区分业务错误码,全局异常统一捕获封装返回,便于前端统一处理提示,规范项目错误体系。
-
Spring 事务只读模式有什么好处?答:开启只读事务可以优化数据库连接、减少事务日志、提升查询性能,适合纯查询业务,降低数据库额外开销。
-
解释一下 Spring 事件驱动模型?答:通过事件发布与监听解耦业务,如容器刷新、配置变更、业务消息,同步或异步监听,降低代码硬编码耦合。
-
SpringBoot 自动配置如何按需关闭?答:使用 exclude 排除指定自动配置类,或通过配置文件开关控制,按需禁用不必要组件,减少项目启动资源消耗。
-
构造器注入为什么是官方推荐方式?答:能够保证依赖不可为空、代码更简洁、方便单元测试、有效避免循环依赖,整体项目稳定性与规范性更强。
-
Spring 三级缓存各自存储的内容是什么?答:一级存完整单例 Bean,二级存早期 Bean 对象,三级存 Bean 工厂,层层隔离,安全解决单例循环依赖注入问题。
-
讲讲 Spring 事务失效的隐藏场景?答:事务方法被 final/private 修饰、静态方法、内部类调用、多线程调用,都会导致 AOP 代理失效,事务无法生效。
-
SpringBoot 整合第三方组件的通用流程?答:引入 starter 依赖、编写配置类、绑定配置参数、自动装配 Bean,遵循 SpringBoot 自动配置规范快速集成中间件。
二、SpringCloud Alibaba & 分布式(16-35)
-
微服务拆分过细会带来什么弊端?答:服务数量爆炸、调用链路变长、网络开销增大、运维复杂、分布式问题增多,极大提升项目排查问题难度。
-
Nacos 配置长轮询和短轮询区别?答:长轮询阻塞等待变更,实时性高、消耗小;短轮询定时频繁拉取,占用资源高,一般企业全部使用长轮询模式。
-
什么是服务实例健康探测?答:注册中心定时检测服务心跳与接口健康状态,自动剔除故障实例,保证消费者只调用健康可用的业务节点服务。
-
微服务调用链路过长怎么优化?答:合理聚合接口、合并远程调用、缓存中间结果、避免循环调用,缩短链路长度,减少网络延迟与异常概率。
-
Nacos 配置加密如何落地使用?答:搭配 Jasypt 对配置明文加密,yml 中写入密文,项目启动解密加载,防止数据库账号密码等敏感信息泄露风险。
-
微服务为什么要统一返回结果?答:标准化错误码、提示信息、数据格式,便于全局异常处理、前端统一解析、日志排查、接口维护与团队协作开发。
-
临时节点丢失会造成什么问题?答:Nacos 临时实例断网、重启后自动销毁,瞬间流量切换,短时出现服务抖动,核心服务建议使用持久化实例部署。
-
什么是配置中心共享配置?答:多个微服务共用同一套公共配置,例如数据库、Redis、MQ 参数,统一维护修改,减少重复配置、统一运维标准。
-
微服务异地多环境如何隔离?答:通过 Nacos 命名空间隔离环境,独立中间件集群、独立数据库,彻底隔离开发、测试、生产,避免数据互相污染。
-
SpringCloud 父子依赖管理优势?答:统一锁定中间件、框架版本,防止依赖版本混乱、冲突报错,规范项目依赖,提升微服务整体架构稳定性。
-
如何防止微服务重复注册?答:配置唯一服务名、IP + 端口标识、限制重复注册逻辑,避免同一服务多次注册,造成负载均衡分配异常问题。
-
分布式事务常见解决方案有哪些?答:Seata、TCC、SAGA、本地消息表、可靠消息最终一致性,根据业务并发、一致性要求选择合适方案落地使用。
-
服务上下线流量平滑过渡怎么做?答:灰度发布、权重调整、逐步下线节点,保证流量平稳切换,避免瞬间切换大量请求报错,保障业务平稳运行。
-
Nacos 元数据有什么实际用途?答:存储服务自定义标签、环境标识、版本信息,用于灰度路由、服务分组筛选、定制化负载均衡、流量精准控制。
-
微服务架构下如何统一日志收集?答:统一使用 Slf4j+Logback,规范日志格式、链路 ID 透传,配合日志收集组件,实现全链路日志追踪与问题排查。
-
什么是配置热更新的局限性?答:只能刷新 Spring 容器 Bean 内配置,静态变量、常量、本地缓存不会自动刷新,需要手动清理缓存重启功能模块。
-
注册中心数据一致性怎么保证?答:Nacos 集群数据同步复制,定时数据校对,保证各节点注册信息一致,防止集群节点数据不一致导致调用异常。
-
微服务接口版本控制有什么意义?答:接口迭代兼容旧版本,新旧服务并行运行,平滑升级迭代,避免一次性全量升级带来的线上大规模故障风险。
-
客户端负载均衡的实现流程?答:从注册中心拉取服务列表本地缓存,定时更新节点,本地算法筛选实例,直接发起调用,不依赖额外网关组件。
-
为什么微服务要禁用本地事务?答:跨服务业务无法保证数据一致,本地事务只能控制单库操作,分布式场景必须依靠分布式事务方案保障数据可靠。
三、Sentinel 流量防护(36-50)
-
Sentinel 白名单与黑名单区别?答:白名单放行指定 IP 与服务,黑名单直接拦截限制访问,多用于运维后台放行、恶意 IP 拦截、安全防护场景使用。
-
限流阈值设置依据是什么?答:根据服务器性能、接口压测 QPS、业务高峰期流量、集群节点数量综合计算,合理阈值保障服务稳定不崩溃。
-
慢调用熔断的判定标准是什么?答:统计单位时间内响应超时请求占比,超过设定比例自动熔断,拦截新请求,防止慢接口长期占用线程资源。
-
Sentinel 资源埋点的意义是什么?答:精准标记需要管控的接口、方法、RPC 调用,精准统计流量指标,实现精细化限流、熔断、降级差异化管控。
-
网关层限流和应用层限流区别?答:网关限流拦截全局流量,统一入口防护;应用层限流细化单个接口,两层防护结合,全方位保障微服务集群稳定。
-
限流拒绝策略一般有哪几种?答:直接拒绝、排队等待、预热限流、匀速排队,应对突发流量、秒杀场景、常规业务,适配不同流量控制需求。
-
如何实现自定义限流异常返回?答:实现 Sentinel 异常处理器,捕获限流熔断异常,自定义返回码与提示文案,友好展示给前端,提升用户体验。
-
关联限流主要解决什么问题?答:当核心依赖数据库、第三方接口过载时,主动限流自身业务,防止连锁压垮依赖资源,实现资源联动保护。
-
流量预热模式适用什么场景?答:秒杀、活动突发流量场景,缓慢提升限流阈值,避免瞬间高流量冲击,让服务平稳承接瞬时暴涨的并发请求。
-
Sentinel 控制台核心作用?答:可视化监控接口 QPS、异常率、线程状态,在线编辑流控熔断规则,动态下发生效,无需修改代码重启服务。
-
集群流控的实现原理?答:设置集群总阈值,客户端申请令牌,统一统计全局流量,公平分配每个节点配额,避免单机限流不公平现象。
-
接口降级后如何保障核心业务?答:关闭非核心功能、查询走缓存、返回固定兜底数据、简化复杂逻辑,集中资源保障核心交易、支付关键业务运行。
-
系统规则限制的核心指标?答:包含 CPU 使用率、系统负载、总 QPS、核心线程数、内存占用,从服务器整体维度防护,防止整机资源耗尽宕机。
-
链路限流如何防止恶意调用?答:限制指定调用来源、调用链路入口,拦截非法第三方、恶意爬虫、非正常链路访问,保护内部核心接口安全。
-
规则动态推送的优势?答:无需重启服务、实时修改规则、快速应急限流、线上故障紧急防护,运维人员可快速干预线上流量风险问题。
四、Dubbo / Feign / Netty 网络通信(51-65)
-
Dubbo 服务暴露的底层流程?答:扫描 @DubboService 注解、注册服务元数据、绑定 Netty 服务端口、注册到注册中心,等待消费者发起远程调用请求。
-
Dubbo 心跳检测机制作用?答:定时发送心跳包检测连接状态,断开无效长连接,及时释放资源,避免无效连接堆积占用服务网络与线程资源。
-
Feign 请求头丢失如何解决?答:通过自定义 Feign 拦截器,统一传递 Token、租户 ID、签名等请求头参数,保证远程调用上下文参数正常透传。
-
Netty 反应堆模型优势是什么?答:主从多线程模型,Boss 线程接收连接、Worker 线程处理 IO,分工明确,高并发场景下吞吐高、延迟低、性能强劲。
-
Dubbo 延迟注册有什么好处?答:服务启动完成、资源加载完毕后再注册,避免服务未就绪被调用,减少启动阶段接口报错、空指针等异常问题。
-
什么是 Dubbo 静默优雅关闭?答:下线前注销注册、拒绝新连接、等待旧请求处理完毕,再关闭容器,避免强行中断业务请求造成数据异常。
-
OpenFeign 日志级别如何配置?答:通过配置文件指定日志等级,可打印请求地址、参数、响应结果,方便排查远程调用参数错误、接口联调问题。
-
Netty 缓冲区机制有什么特点?答:采用池化缓冲区、内存复用、减少频繁创建回收,降低 GC 压力,是 Netty 高并发、高性能网络通信的重要保障。
-
Dubbo 容错策略有哪些?答:失败重试、快速失败、失败安全、失败忽略、并行调用,根据业务读写特性选择,保证 RPC 调用稳定性与容错性。
-
Zookeeper 临时节点有什么特点?答:会话失效自动删除,适合服务注册发现,实时感知服务上下线,简单高效,是传统 Dubbo 集群常用注册方案。
-
Feign 为什么需要结合负载均衡?答:原生 Feign 只负责 HTTP 调用,无服务选择能力,搭配 LoadBalancer 实现节点筛选,保证多实例服务均衡调用。
-
Dubbo 接口兼容升级怎么做?答:保持参数兼容、新增字段非必填、区分版本号,新旧版本服务共存,实现平滑升级,不影响线上正常业务运行。
-
什么是 TCP 粘包产生的根本原因?答:TCP 是流式协议,无天然报文边界,发送缓存与接收缓存合并数据,导致多条消息粘连,需要自定义拆包处理。
-
Curator 分布式锁实现原理?答:基于 Zookeeper 临时有序节点,抢占节点获取锁,断开自动释放,实现分布式互斥,保障集群定时任务防重复执行。
-
长连接空闲断开如何优化?答:配置心跳保活、空闲检测、定时心跳探测,防止防火墙、中间件主动断开长连接,保证 Dubbo、Redis 连接稳定。
五、Redis / MQ 缓存消息(66-80)
-
Redis 哈希压缩底层原理?答:字段较少、值较小时采用压缩存储结构,节省内存空间,适合存储用户信息、配置数据,提升内存利用率。
-
如何保证缓存和数据库最终一致?答:采用延时双删、定时同步、过期失效、异步更新,放弃强实时性,在高并发下换取系统高性能与高可用能力。
-
RabbitMQ 消息手动 ACK 优势?答:业务处理成功再手动确认,消费失败不删除消息,可重试或转入死信队列,最大程度保证消息消费可靠性。
-
Redis 持久化关闭会有什么问题?答:服务重启所有数据丢失,只适合纯缓存场景,不能存储业务数据、分布式锁、计数器等需要持久化的关键信息。
-
什么是缓存降级?答:数据库压力过大时,停止更新缓存、直接返回缓存旧数据,减轻数据库压力,牺牲少量一致性保障系统整体稳定。
-
RabbitMQ 镜像队列作用?答:队列数据同步至集群多个节点,节点宕机不丢失消息,实现 MQ 高可用,避免单点故障导致消息堆积与丢失问题。
-
Redis 本地缓存多级架构好处?答:本地缓存拦截大部分请求,减少 Redis 网络请求与压力,多级缓存组合大幅提升接口响应速度与并发承载能力。
-
如何解决 Redis 大 Key 问题?答:拆分大 Key、精简存储数据、过期清理、分批删除,避免大 Key 过期删除卡顿、内存占用过高、阻塞主线程问题。
-
MQ 消息顺序消费如何保证?答:单队列单消费者、消息分片路由、同一业务 Key 绑定同一队列,保证消息按照发送顺序依次消费处理业务逻辑。
-
Redis 事务和 Lua 脚本区别?答:Redis 事务有命令间隙、不保证原子;Lua 脚本整体执行、原子性强,是分布式锁、批量操作的最优实现方案。
-
消息积压后重启服务会怎样?答:未消费消息持久化保留,重启后消费者继续消费积压数据,不会丢失,但短时间会造成消费流量突增压垮服务。
-
Redis 线程多路复用怎么理解?答:单线程处理所有命令请求,通过 IO 多路复用监听多个连接,避免多线程竞争,既高效又保证命令串行执行安全。
-
死信队列的使用流程是什么?答:正常队列设置过期 / 重试上限,异常消息转入死信队列,定时监听死信,人工补偿或自动修复异常业务数据。
-
冷热数据分离缓存怎么做?答:热点数据常驻缓存,冷门数据短期过期,自动淘汰冷数据,合理利用内存,保证缓存高效且低成本运行。
-
Redis 哨兵集群核心作用?答:实现主从自动切换、故障检测、配置自动更新,保证 Redis 高可用,主节点宕机快速选举从节点接替服务。
六、数据库、中间件、工具、综合(81-100)
-
Druid 连接泄露如何排查解决?答:开启 Druid 监控、检测长时间未释放连接、代码保证连接关闭、配置回收机制,避免连接耗尽导致数据库访问失败。
-
MyBatis 批量插入优化方式?答:开启批量模式、合并 SQL、分批提交、关闭自动提交,减少数据库交互次数,大幅提升大批量数据插入性能。
-
数据库慢查询产生的常见原因?答:无索引、索引失效、关联查询过多、数据量大、limit 深分页、函数操作索引字段,都会造成 SQL 执行效率急剧下降。
-
连接池最大连接数设置原则?答:根据数据库最大连接上限、服务实例数量、业务并发综合设置,防止连接超限报错,同时避免连接闲置浪费资源。
-
XXL-Job 分片广播任务适用场景?答:大数据量批量处理、文件同步、数据巡检,集群机器分片分担压力,提升批量任务处理效率,缩短执行耗时。
-
Activiti 流程挂起和激活有什么作用?答:挂起暂停流程审批流转,暂停业务办理;激活后恢复正常流转,用于业务暂停、审核冻结、流程临时管控场景。
-
Jasypt 加密配置优缺点?答:简单易用、无缝整合 Spring,提升配置安全;缺点是密钥管理敏感,密钥泄露会导致所有加密配置全部被破解。
-
Maven 依赖依赖仲裁规则?答:就近原则、第一声明优先、版本统一锁定,自动选择 Jar 版本,容易隐性冲突,需要手动排除统一版本管理。
-
Logback 日志滚动策略有哪些?答:按文件大小、按日期分割日志,自动压缩归档、清理过期日志,防止日志文件过大、磁盘占满,规范线上日志管理。
-
Jackson 时间格式化如何全局统一?答:全局配置日期序列化规则,统一格式化 LocalDateTime、Date,避免接口时间格式混乱,规范前后端数据交互格式。
-
WebService CXF 接口调用流程?答:发布服务、生成 WSDL 描述文件,客户端解析 WSDL 生成调用代码,基于 SOAP 协议完成跨系统远程接口通信交互。
-
POI 导出大数据 Excel 常见问题?答:容易出现内存溢出、导出缓慢、文件损坏,需要使用流式导出、分批写入、及时释放资源保证导出服务稳定运行。
-
BouncyCastle 加密包实际业务用途?答:扩展国密算法、加解密、签名验签,满足等保安全要求,常用于接口加密、数据脱敏、隐私数据保护业务开发。
-
线程池拒绝策略适用场景?答:队列满、线程耗尽时触发,包含丢弃、报错、调用者执行、队列优先,根据业务容忍度选择策略防止任务堆积崩溃。
-
公共工具类 Hutool 优势是什么?答:API 简单、功能全面、封装常用工具方法,简化加密、文件、日期、集合操作,减少重复代码,提升开发效率。
-
Guava 本地缓存有什么特点?答:支持过期淘汰、容量限制、并发安全、自动回收,适合轻量级本地缓存场景,简单高效无需额外中间件依赖。
-
定时任务重复执行如何彻底解决?答:分布式锁、数据库任务标记、XXL-Job 集群防重复机制,保证集群环境下同一任务同一时间只会执行一次。
-
接口防刷限流常用组合方案?答:Sentinel 接口限流 + Redis 计数器 + IP 黑名单,多层防护,防止恶意频繁请求、爬虫攻击、接口恶意刷量行为。
-
企业项目漏洞修复常规手段?答:升级漏洞依赖版本、替换高危组件、关闭多余端口、权限管控、数据加密,定期依赖扫描,规避线上安全风险。
-
大型微服务项目整体优化方向?答:接口优化、缓存优化、异步解耦、线程池调优、中间件集群化、日志规范、监控告警,全方位提升系统稳定性性能。
1608



被折叠的 条评论
为什么被折叠?



