Skip to content

Microservices_Distributed 面试专题手册

💡 本章节共收录 2890 道面试真题,建议每天复习 10-20 题。


Q1: 分片出错了怎么办?

【核心解析】 检查分片键是否正确;使用一致性哈希减少重分布;采用故障转移机制(如副本分片);监控分片状态并手动修复;使用分布式事务保证数据一致性。


Q2: 分片怎么保证有序?

【核心解析】 使用范围分片(按有序字段如时间戳分片);在应用层排序;使用全局有序ID(如雪花算法);分片内有序,跨分片合并时排序。


Q3: 接口幂等和业务幂等怎么实现?分布式ID如何生成?

【核心解析】 接口幂等:通过唯一请求号(Token)、数据库唯一索引、状态机、乐观锁(版本号)实现;业务幂等:利用分布式ID(雪花算法、UUID、数据库自增、Redis incr)保证全局唯一;分布式ID需满足全局唯一、趋势递增、高可用。


Q4: 如何设计一个网关?有哪些关键问题和解决方案?

【核心解析】 网关设计包括路由、负载均衡、限流、熔断、鉴权、协议转换等;关键问题:高可用、扩展性、性能瓶颈;解决方案:无状态设计、集群部署、缓存、异步IO


Q5: 高并发场景下如何实现分布式事务?请对比 XA、TCC、Saga 等方案的原理和适用场景。

【核心解析】 XA:基于两阶段提交(2PC),由事务协调器协调资源管理器;优点:强一致性;缺点:性能差,阻塞时间长,不适合高并发;TCC:Try-Confirm-Cancel 模式,业务逻辑补偿;优点:性能较好,无锁;缺点:业务侵入性强,需实现 Try、Confirm、Cancel 接口;Saga:长事务分解为多个本地事务,通过补偿或重试保证最终一致性;优点:适合异步、高并发;缺点:隔离性弱,需处理补偿逻辑;选择:对一致性要求高用 XA,性能要求高用 TCC 或 Saga。


Q6: 微服务项目的RPC接口如何使用?

【核心解析】 定义接口和数据结构;服务端实现接口并注册;客户端通过代理调用;序列化协议(如Protobuf);注册中心发现服务;负载均衡;超时重试;熔断降级


Q7: 秒杀场景中如何保证幂等性(一人一单)?

【核心解析】 利用Redis或数据库的唯一索引防止重复下单;用户ID+商品ID+活动ID作为唯一键;下单前先检查是否已存在订单;使用分布式锁或乐观锁控制并发;最终通过数据库唯一约束兜底。


Q8: 秒杀中Redis扣减库存成功但响应未到JVM导致未发MQ消息,如何保证一致性?

【核心解析】 使用RocketMQ事务消息:先发送半消息,执行本地事务(扣减Redis),根据结果提交或回滚消息;如果本地事务执行成功但提交失败,MQ会定时回查本地事务状态;Redis中存储扣减标识用于回查;确保最终一致性。


Q9: 高并发下的分布式事务

【核心解析】 常见方案:两阶段提交(2PC)、TCC(Try-Confirm-Cancel)、Saga、本地消息表、最大努力通知;2PC强一致但性能差;TCC需业务实现补偿;Saga适用于长事务;本地消息表结合MQ实现最终一致;高并发下避免分布式事务,尽量通过业务设计或最终一致性。


Q10: MCP协议的主要工作流程

【核心解析】 MCP(Model Context Protocol)用于AI模型与外部工具交互;客户端发送请求,包含工具调用和上下文;服务端执行工具并返回结果;支持多轮对话和状态管理。


Q11: SDD(服务依赖图)是什么

【核心解析】 SDD(Service Dependency Diagram)表示微服务间的调用关系;用于故障定位、容量规划、架构优化;工具如Jaeger、Zipkin可生成依赖图。


Q12: 多智能体协作

【核心解析】 多智能体系统(MAS)中智能体通过通信协作完成任务;常见模式:主从模式、对等模式;通信协议:ACL(Agent Communication Language);协调机制:合同网、黑板模式。


Q13: 项目中遇到过内存泄漏或崩溃问题吗?请描述排查和解决过程。

【核心解析】 常见原因:未释放动态分配内存、循环引用、野指针、越界访问;排查工具:Valgrind、AddressSanitizer、gdb、core dump分析;解决步骤:复现问题、使用工具定位泄漏点或崩溃位置、检查代码逻辑、修复后验证;预防措施:使用智能指针、RAII、代码审查、单元测试。


Q14: 介绍优惠券分发链路,包括延时队列的用处、实现方式及分布式场景下的问题。

【核心解析】 优惠券分发链路包括生成、发放、核销等环节;延时队列用于延迟发放或过期处理;实现方式:Redis的ZSET或消息队列的延迟消息;分布式问题:时钟同步、消息重复消费、数据一致性。


Q15: 服务终止时,幂等要怎么保证?

【核心解析】 使用唯一请求ID去重;数据库唯一索引;状态机校验;分布式锁;消息表记录处理状态;重试机制配合幂等性设计。


Q16: Canal监听高并发的表会不会存在瓶颈,顺序怎么保证?

【核心解析】 Canal通过解析MySQL binlog获取变更;高并发下可能产生延迟或数据积压;顺序保证:单线程消费同一分区的binlog;可配置多分区并行但需注意顺序一致性。


Q17: 如何基于数据库实现分布式锁?

【核心解析】 利用数据库唯一约束(如主键或唯一索引)实现排他锁;插入一条记录表示加锁,删除记录释放锁;需设置锁超时机制(如定时任务清理过期记录);考虑数据库单点故障和性能瓶颈;可基于乐观锁(版本号)或悲观锁(SELECT ... FOR UPDATE)实现;注意死锁和重入问题。


Q18: Raft协议中什么是脑裂?如何避免脑裂?

【核心解析】 脑裂指集群分裂成多个部分,各自选举出Leader;避免方法:随机选举超时、多数派原则(quorum)、Pre-Vote机制


Q19: 分布式事务中死锁如何产生?如何解决?

【核心解析】 多个事务互相等待资源形成循环;解决方法:超时回滚、死锁检测、顺序加锁、使用分布式事务协议(如TCC、Saga)


Q20: Spring Cloud微服务组件有哪些?

【核心解析】 Eureka(服务注册与发现)、Ribbon(负载均衡)、Feign(声明式HTTP客户端)、Hystrix(熔断器)、Gateway(网关)、Config(配置中心)


Q21: 你了解哪些RPC框架?请对比它们的核心特点(如Dubbo、gRPC、Thrift等)。

【核心解析】 Dubbo:基于Java,支持多种协议,服务治理完善;gRPC:基于HTTP/2,支持多语言,使用Protobuf;Thrift:跨语言,支持多种传输协议和序列化;核心对比:性能、生态、易用性、协议支持等。


Q22: 在项目中,你使用Redis Zset实现定时发布功能,为什么选择Zset而不是消息队列?请对比两种方案的优缺点。

【核心解析】 Zset:使用score存储时间戳,按时间排序,通过定时任务每秒扫描当前时间戳范围内的数据并更新状态;优点:实现简单,适合低QPS场景;缺点:轮询有延迟,不适合高并发;消息队列:如RabbitMQ延迟队列,优点:精确延时,高吞吐;缺点:引入额外组件,复杂度高;选择依据:实际QPS较低,Zset足够。


Q23: LangChain和LangGraph是什么?它们之间有什么区别?

【核心解析】 LangChain:用于构建LLM应用的框架,提供链、代理、记忆等组件;LangGraph:基于LangChain的图结构框架,支持有状态、多步工作流;LangGraph更灵活,适合复杂流程;LangChain更简单易用


Q24: 请介绍一个你最有成就感的项目模块,包括项目流程、架构设计,以及为什么选择这个项目?在分布式锁方面,除了你使用的方案,还考虑过哪些其他方案?

【核心解析】 项目背景与模块功能;架构设计(如微服务、数据库、缓存等);分布式锁方案对比(如Redis、ZooKeeper、数据库乐观锁);选择理由与权衡


Q25: 在取消和派单接口的并发场景下,如何保证数据一致性?该模块的规模如何?代码版本控制是如何管理的?

【核心解析】 并发控制:分布式锁、乐观锁、事务;数据一致性:最终一致性、补偿机制;模块规模:接口QPS、数据量;版本控制:Git分支策略、代码审查


Q26: 数据一致性问题:为什么先更新数据库后删除缓存比先删缓存后更新数据库更好?解释延迟双删策略。

【核心解析】 先删缓存后更新数据库:并发读请求可能读到旧数据并回填缓存,导致缓存与数据库不一致;先更新数据库后删缓存:更新数据库后删除缓存,下次读请求会从数据库拉取最新数据;延迟双删:先删缓存,再更新数据库,延迟一段时间后再删一次缓存,解决并发问题


Q27: 什么是领域驱动设计(DDD)?

【核心解析】 DDD是一种软件设计方法,强调将业务逻辑映射到领域模型;核心概念:实体、值对象、聚合、领域事件、仓储;分层架构:用户接口层、应用层、领域层、基础设施层;战术模式:限界上下文、上下文映射;优势:应对复杂业务、提高可维护性。


Q28: 你们项目里是怎么保证高可用的?

【核心解析】 通过负载均衡、服务冗余、熔断降级、限流、超时重试、故障转移等机制;使用注册中心实现服务发现与健康检查;数据库主从复制、读写分离;缓存、消息队列削峰填谷;监控告警与自动恢复。


Q29: 在for循环中调用第三方接口发红包200次,如果超时了如何优化时间?

【核心解析】 使用线程池或异步调用;批量合并请求;设置合理的超时和重试策略;考虑使用消息队列削峰;优化网络连接如连接池;评估是否可并行处理;监控和调优第三方接口性能


Q30: 微服务架构的优缺点、划分原则以及为什么这样划分?

【核心解析】 优点:独立部署、技术异构、可扩展、容错;缺点:复杂性增加、网络开销、数据一致性、运维成本;划分原则:按业务领域、按功能模块、按团队组织;原因:高内聚低耦合、便于独立开发部署、适应业务变化


Q31: 如何做后端接口的鉴权?

【核心解析】 常见方式:Session-Cookie、JWT、OAuth2.0、Token+签名;JWT无状态,包含用户信息,需防篡改;OAuth2.0适用于第三方授权;鉴权中间件统一校验;考虑过期时间、刷新机制


Q32: 微服务相比单体服务有什么优势和劣势?

【核心解析】 优势:独立部署、技术异构、可扩展性高、故障隔离、团队自治;劣势:分布式复杂性(网络延迟、数据一致性)、运维成本高、服务间通信开销、调试困难、需要服务治理。


Q33: 分布式事务的二阶段提交和三阶段提交有什么区别?

【核心解析】 二阶段提交:准备阶段和提交阶段,存在阻塞和单点故障问题;三阶段提交:引入超时机制和预提交阶段,减少阻塞;三阶段提交在协调者故障时参与者可超时终止,但仍有数据不一致风险;二阶段提交实现简单,三阶段提交更复杂但更可靠。


Q34: 从Hive到MQ同步数据,为什么中间要用MQ,不能直接同步?

【核心解析】 MQ解耦生产者和消费者,Hive和下游系统无需直接依赖;MQ缓冲数据,应对下游处理速度波动;MQ支持异步处理,提高系统吞吐;MQ保证消息可靠传递,避免数据丢失;MQ便于扩展多个消费者。


Q35: 微服务的熔断和降级有了解吗?了解过哪些限流方法?

【核心解析】 熔断:当服务故障达到阈值(如错误率)时,直接拒绝请求,快速失败,防止级联故障;降级:主动关闭部分非核心功能,保证核心服务可用;限流方法:计数器、滑动窗口、漏桶、令牌桶;常见工具:Hystrix(熔断降级)、Sentinel(限流熔断)、RateLimiter(令牌桶)。


Q36: 在秒杀场景中,你是如何具体使用乐观锁和分布式锁的?请描述它们的应用场景和实现细节。

【核心解析】 乐观锁:通过版本号或CAS机制在数据库层面控制并发,适用于冲突较少的情况;分布式锁:使用Redis或ZooKeeper实现,确保同一时间只有一个线程操作共享资源;秒杀中通常先使用分布式锁扣减库存,再结合乐观锁校验数据一致性。


Q37: 分布式锁在秒杀方案中的性能瓶颈是什么?有哪些优化手段?除了调整RedLock,还有哪些优化锁粒度或性能的方法?

【核心解析】 性能瓶颈:锁竞争导致请求排队、网络开销、锁持有时间过长;优化手段:分段锁(将库存分成多个段)、减少锁粒度(如按商品ID分片)、使用本地锁+分布式锁结合、异步化处理;除RedLock外,可考虑使用ZooKeeper临时顺序节点、Redis Redisson的公平锁或读写锁。


Q38: 在采用令牌桶限流的基础上,任务具有不同优先级,如何处理?

【核心解析】 为不同优先级分配不同令牌桶;高优先级桶容量大或速率高;支持优先级队列;任务排队时按优先级调度;结合权重分配令牌


Q39: 再增加一个租户维度(多业务),如何处理?

【核心解析】 为每个租户独立限流;使用令牌桶+租户ID;支持动态配置;隔离资源;防止租户间互相影响


Q40: 视频生成后的链路关注过吗?最终视频是否满足预期?

【核心解析】 视频生成后处理:转码、审核、分发;质量检测:分辨率、帧率、时长;内容审核:合规性;用户反馈收集;A/B测试


Q41: LangChain、LangGraph三个系统都涉及DAG,区别是什么?

【核心解析】 LangChain:链式调用,线性或简单DAG;LangGraph:有向图,支持复杂流程;Coze:可视化编排;执行引擎差异;解耦方式不同


Q42: Coze的执行引擎能否支撑你的系统?

【核心解析】 评估性能、扩展性、稳定性;对比自研引擎;考虑定制化需求;测试基准;权衡成本与收益


Q43: 系统利用编排实现解耦,还有没有其他提升空间?

【核心解析】 异步解耦;事件驱动;服务网格;领域驱动设计;微服务拆分;API网关;消息队列


Q44: 请解释WebSocket的原理,并对比其他连接方式(如HTTP长轮询、SSE)。

【核心解析】 WebSocket是全双工通信协议,基于TCP,通过HTTP升级握手建立连接;支持服务端主动推送;对比:HTTP长轮询是半双工,客户端不断请求;SSE是单向服务端推送,基于HTTP;WebSocket适合实时交互场景。


Q45: 请解释OAuth鉴权流程、服务注册发现与配置管理,以及高并发下网关的扩展和治理。

【核心解析】 OAuth 2.0流程:客户端请求授权,用户授权,获取授权码,换取令牌,使用令牌访问资源;服务注册发现:服务启动时注册到注册中心(如Consul),客户端通过注册中心发现服务;配置管理:集中管理配置,支持动态刷新;高并发网关扩展:水平扩展、负载均衡、限流熔断;治理:监控、日志、链路追踪。


Q46: 请解释项目中事务的处理方式,以及大量调用失败时的排查方法。

【核心解析】 事务处理:本地事务(ACID)、分布式事务(两阶段提交、TCC、Saga);排查大量调用失败:检查日志、监控指标(错误率、延迟)、链路追踪、服务依赖、资源瓶颈(CPU、内存、连接池)。


Q47: 为什么使用etcd进行持久化存储?

【核心解析】 etcd基于Raft协议保证强一致性;支持分布式锁和配置管理;数据持久化到磁盘,可靠性高;提供Watch机制监听变更;适用于服务发现、分布式协调场景。


Q48: 不同粒度的容灾机制有哪些?

【核心解析】 容灾粒度包括进程级、服务级、机房级、地域级;进程级通过健康检查和重启;服务级通过熔断降级和限流;机房级通过多活或主备;地域级通过异地多活。


Q49: 针对需要不断接入新模型的平台,做了哪些优化?

【核心解析】 模型接入标准化接口;配置化注册新模型;动态加载模型;模型版本管理;灰度发布和回滚机制。


Q50: 请介绍常见的RPC框架及其特点,以及序列化协议的选择与对比。

【核心解析】 RPC框架如Dubbo、gRPC、Thrift等,各有优缺点;序列化协议如JSON、Protobuf、Thrift等,影响性能与兼容性;需考虑跨语言、性能、可读性等因素。


Q51: 你怎么理解微服务?微服务之间通常用什么协议调用?请描述OpenFeign的底层流程。

【核心解析】 微服务是将单体应用拆分为多个独立部署的小服务,每个服务围绕业务能力构建,通过轻量级通信机制协作;常用HTTP/REST或gRPC协议;OpenFeign底层基于JDK动态代理生成接口代理,通过Decoder、Encoder等组件序列化请求,使用HTTP客户端(如HttpURLConnection或Apache HttpClient)发送请求,并集成负载均衡(如Ribbon)和服务发现(如Nacos)。


Q52: TCC分布式事务中空回滚的产生原因及解决方案是什么?

【核心解析】 空回滚指Try未执行但Cancel执行;原因:网络超时或服务宕机;解决方案:Try阶段预留资源并记录日志;Cancel阶段检查Try是否成功;使用事务日志或状态机;幂等性设计


Q53: 自研复合分库分表分片算法的逻辑是什么?为什么不自用现成框架?

【核心解析】 复合分片:多字段组合计算分片键;自定义算法:支持业务特殊路由;避免热点;自研原因:现成框架不满足复杂业务;灵活性高;可优化性能;便于扩展


Q54: 分布式锁中如何保证幂等性和处理死锁风险?

【核心解析】 使用唯一标识(如请求ID)去重;锁设置过期时间防止死锁;使用Redisson看门狗续期;数据库乐观锁或Redis Lua脚本保证原子性。


Q55: 分布式系统的强一致性和最终一致性怎么实现?

【核心解析】 强一致性通过两阶段提交(2PC)、三阶段提交(3PC)或Paxos/Raft等共识算法实现;最终一致性通过异步复制、补偿机制(如TCC)、事件驱动(如消息队列)实现;强一致性牺牲可用性,最终一致性提高可用性;实际场景中常用BASE理论


Q56: 服务注册与发现是如何实现的?

【核心解析】 服务启动时向注册中心注册自身信息(IP、端口、服务名);注册中心维护服务列表,并提供心跳检测;消费者从注册中心获取服务列表,进行负载均衡调用;常见注册中心:Eureka、Consul、Nacos、Zookeeper;健康检查机制剔除不可用实例


Q57: 微服务之间是怎么调用的?

【核心解析】 同步调用:HTTP/REST(如Feign)、RPC(如Dubbo、gRPC);异步调用:消息队列(如Kafka、RabbitMQ);服务间通信需考虑序列化、负载均衡、熔断降级(如Hystrix、Sentinel);通常通过API网关统一入口


Q58: 你们微服务是怎么做拆分的?

【核心解析】 按业务领域拆分(如用户、订单、支付);按功能模块拆分;按数据边界拆分,每个服务拥有独立数据库;考虑团队结构(康威定律);拆分原则:高内聚低耦合、单一职责、避免循环依赖;拆分粒度不宜过细,避免分布式事务复杂


Q59: 如何设计中间件?包括谁释放内存、怎么共享、怎么零拷贝。

【核心解析】 设计中间件需考虑内存管理:谁分配谁释放;共享内存通过mmap或共享内存段;零拷贝技术包括sendfile、splice、DMA等。


Q60: 动态库的数据段和代码段都是怎么映射的?如果不是一样的话有什么区别?堆和栈分别怎么映射?

【核心解析】 代码段映射为只读可执行,数据段映射为读写;区别在于权限和共享性;堆通过brk/mmap映射,栈由内核自动映射。


Q61: 分布式锁如何实现?Redis分布式锁解决缓存击穿是什么场景?

【核心解析】 分布式锁常用Redis SETNX、Redisson;缓存击穿场景:热点key过期,大量请求同时访问数据库;Redisson通过锁机制保证只有一个线程重建缓存。


Q62: 消息队列丢数据怎么办?Kafka重复消费怎么解决?消费堆积怎么解决?

【核心解析】 丢数据:生产者确认机制、消费者手动提交、副本机制;重复消费:幂等性设计、唯一ID去重;消费堆积:增加消费者、优化处理速度、扩容分区。


Q63: Kafka rebalance场景有哪些?分区数与消费者组消费者数的关系?

【核心解析】 Rebalance场景:消费者加入/离开、分区数变化;关系:一个分区只能被一个消费者消费,消费者数可多于分区数,多余消费者闲置。


Q64: 如何保证Caffeine命中率?Caffeine参数怎么设置的?

【核心解析】 设置合理容量、过期策略、基于W-TinyLFU算法;参数包括maximumSize、expireAfterWrite、recordStats等;命中率可通过统计监控调整。


Q65: Caffeine + Redis + 数据库的三级缓存会出现缓存击穿吗?怎么解决?

【核心解析】 可能出现缓存击穿;解决:使用互斥锁、热点key永不过期、布隆过滤器。


Q66: 滑动窗口限流用的Redis哪个数据结构?key怎么设置?如果高并发请求怎么办?

【核心解析】 使用有序集合(ZSET);key按时间窗口命名,成员为请求ID,分数为时间戳;高并发下可考虑Lua脚本原子操作、本地限流+Redis降级。


Q67: 常见限流算法有哪些?Lua脚本能保证原子性吗?

【核心解析】 常见算法:令牌桶、漏桶、滑动窗口、计数器;Lua脚本在Redis中原子执行,但需注意脚本超时和错误处理。


Q68: 在分布式系统中,如何保证消息的幂等性?请列举常见的实现方案。

【核心解析】 幂等性定义:多次执行结果相同;常见方案:全局唯一ID(如雪花算法)+去重表、数据库乐观锁(版本号)、状态机、Token机制、业务层幂等校验(如支付订单状态)。


Q69: 在微服务架构中,如何设计超时降级方案?请结合具体场景说明。

【核心解析】 超时降级:设置合理的超时时间(如连接超时、读取超时);降级策略:返回默认值、缓存数据、熔断(如Hystrix)、限流(如Sentinel);场景:下游服务故障时,快速失败并返回兜底数据。


Q70: 请解释服务降级、服务熔断和限流机制的原理及实际应用场景。

【核心解析】 服务降级是在系统负载过高时主动关闭部分非核心功能以保证核心功能可用;服务熔断是当某个服务故障率达到阈值时,暂时切断对该服务的调用,防止级联故障;限流是控制请求速率,防止系统过载。实际应用中,降级常用于电商大促时关闭评论、推荐等非核心服务;熔断常用Hystrix或Sentinel实现;限流常用令牌桶、漏桶算法,如Nginx限流、Guava RateLimiter。


Q71: 请描述你们自研的定时任务调度框架的架构(调度层、执行层、治理层)和流程,以及如何实现数据分片和冷热数据分离?为什么不用时间轮算法?

【核心解析】 架构三层:调度层创建任务表,执行层抢占分布式锁获取任务,治理层管理;数据分片:时间+桶二维分片,冷热数据分离;不用时间轮:时间轮优势在层级存储,但分布式架构不易实现,自研框架架构清晰、易维护。


Q72: 在分布式锁中,锁的是什么?一个任务类型一张表吗?不同任务在不同表?如何实现定制化开发回调接口?

【核心解析】 分布式锁锁的是任务类型;不同任务类型可能在不同表;定制化回调:通过topic或partition分发,业务方订阅相应topic。


Q73: Nacos 是 CP 还是 AP 系统?请解释其服务发现与注册的原理,包括心跳检测和故障剔除机制。

【核心解析】 Nacos 默认是 AP 系统,但支持切换为 CP 模式;服务注册时,实例向 Nacos 发送心跳,Nacos 定期检查心跳,超过一定时间未收到则剔除实例;服务发现时,客户端从 Nacos 拉取服务列表,Nacos 支持长轮询推送变更;AP 模式下保证可用性和分区容错性,CP 模式下保证一致性和分区容错性。


Q74: 如何设计一个支持AI实时过滤与个性化折叠的智能评论系统?

【核心解析】 集成AI实时过滤服务,对新增评论进行涉黄、涉政、辱骂等识别,需在50ms内返回结果;个性化折叠基于用户历史行为,折叠可能不感兴趣的评论;AI中台以微服务形式集成到核心链路,支持低延迟调用;多目标排序算法(如MMR、Bandit)平衡热度、时效性、用户偏好;用户画像与实时特征工程支撑个性化排序;架构上采用异步计算+定期更新模式,避免实时计算崩溃;系统需具备亿级用户扩展能力。


Q75: 在B2B业务中,如何保证国外接口调用的高可用和事务一致性?涉及转账场景,对代码要求很高,请结合长连接、WebSocket、消息队列等技术给出方案。

【核心解析】 使用长连接+WebSocket实现实时通信,减少调用延迟;消息队列用于异步解耦和削峰填谷;分布式事务(如TCC、Saga)保证转账一致性;幂等性设计防止重复扣款;监控和熔断机制(如Hystrix)保障接口稳定性。


Q76: 什么是幂等性?在分布式系统中如何实现幂等性?

【核心解析】 幂等性指多次执行同一操作结果一致;实现方案包括:唯一索引、乐观锁、去重表、分布式锁、状态机、Token机制等。


Q77: 分布式事务有哪些常见方案?

【核心解析】 2PC(强一致性,性能差,阻塞);TCC(一致性高,开发成本高,适合支付、账户);事务消息和本地消息表(最终一致性,适合大部分互联网业务);Saga(流程长、步骤多,需要补偿);选型依据:核心资金类业务偏向TCC,订单、积分、通知类偏向事务消息或本地消息表。


Q78: 请对比MySQL行锁、乐观锁与Redis分布式锁在分布式任务抢占场景下的优劣,并说明Redis分布式锁的实现方案。

【核心解析】 行锁性能低但主从可用;乐观锁通过版本号更新,可能部分失败;Redis分布式锁保证一批任务原子性,全部成功或全部失败;实现方案:使用SET NX EX命令或Redlock算法;需考虑锁超时、续期、可重入性;对比场景:高并发任务抢占时Redis锁更合适。


Q79: Spring Cloud组件有哪些?熔断和降级是什么?

【核心解析】 组件:Eureka/Nacos(注册中心)、Ribbon(负载均衡)、Feign(远程调用)、Hystrix/Sentinel(熔断降级)、Gateway(网关);熔断:当服务故障时快速失败;降级:提供降级处理逻辑


Q80: 分布式锁有哪些实现方式?讲一下Redisson底层原理。

【核心解析】 实现方式:基于数据库、Redis、Zookeeper;Redisson基于Redis的SETNX+Lua脚本实现可重入锁,通过看门狗机制自动续期


Q81: 请做一个自我介绍,并重点介绍一个你参与最深的项目模块。

【核心解析】 个人背景:毕业时间、工作年限、当前技术栈;项目背景:解决什么业务问题,面向谁;自己负责的模块:明确到具体模块如订单、库存等;技术细节:使用的中间件、数据库、缓存、消息队列;难点和结果:遇到的问题、解决方案、指标提升。


Q82: 文档处理的分片策略是什么?

【核心解析】 按文档大小或数量分片;使用一致性哈希分配分片;考虑文档关联性避免跨分片查询;支持动态扩缩容;记录分片元数据;处理分片失败重试;保证分片内事务一致性。


Q83: MCP和function calling有什么作用?

【核心解析】 MCP(模型上下文协议)用于标准化AI模型与外部工具/数据的交互;function calling允许模型调用预定义函数以执行具体操作;两者结合可扩展AI能力,实现复杂任务自动化。


Q84: 在“一人一单”场景中,为什么同时使用Lua脚本和Redisson分布式锁?

【核心解析】 Lua脚本保证原子性操作,减少网络开销;Redisson分布式锁防止并发冲突;两者结合可确保高并发下数据一致性;Lua脚本处理库存扣减,锁控制并发访问。


Q85: 在高并发场景下,对请求做了哪些前置拦截?

【核心解析】 使用限流(如令牌桶、漏桶算法)控制流量;使用布隆过滤器拦截无效请求;使用缓存(如Redis)减轻数据库压力;使用消息队列削峰填谷。


Q86: 如何用消费者组做消息隔离?不同业务消息发到同一个 topic 时,消费者组如何保证隔离?

【核心解析】 消费者组天然支持隔离:不同消费者组消费同一个 topic 互不影响;但若不同业务共用同一个 topic,所有消费者组都会收到所有消息,无法按业务隔离;解决方案:为每个业务分配独立 topic,或使用消息路由、过滤机制(如消息标签)。


Q87: MQ事务与分布式事务如何实现?

【核心解析】 MQ事务:半消息机制、本地事务表、消息回查;分布式事务:两阶段提交(2PC)、三阶段提交(3PC)、TCC、Saga模式;最终一致性方案;可靠消息最终一致性;最大努力通知


Q88: 项目中的Redis分布式锁是如何实现的?如何避免死锁问题?

【核心解析】 使用SETNX命令加锁,设置过期时间防止死锁;使用Redisson等客户端实现自动续期;释放锁时使用Lua脚本保证原子性;考虑主从切换导致的锁丢失问题,可使用Redlock算法


Q89: Spring Cloud 微服务需要学到什么程度?

【核心解析】 掌握服务注册与发现(Eureka/Nacos);配置中心(Spring Cloud Config);负载均衡(Ribbon/LoadBalancer);服务调用(Feign/OpenFeign);熔断降级(Hystrix/Sentinel);网关(Zuul/Gateway);分布式事务(Seata);链路追踪(Sleuth+Zipkin)


Q90: 除了限流,常态下如何避免一个用户打挂所有实例?

【核心解析】 用户级隔离;资源配额;熔断降级;负载均衡策略;限流与降级结合;监控与告警;弹性伸缩


Q91: 介绍一下你认为最值得说的一个项目。

【核心解析】 项目背景与目标;技术选型与架构;核心难点与解决方案;量化指标与成果;个人贡献与反思


Q92: 介绍一下你的MinIO的纠删码机制。

【核心解析】 纠删码原理;数据分片与冗余;恢复能力;性能影响;配置参数;与副本对比


Q93: MinIO的集群是怎么做的扩容?

【核心解析】 水平扩展;无状态设计;数据再平衡;扩容步骤;对读写影响;监控与运维


Q94: 简单介绍一下你对微服务架构的理解。

【核心解析】 微服务架构将单体应用拆分为多个独立服务;每个服务独立部署、扩展和运维;服务间通过轻量级通信(如HTTP/RPC);优点:灵活性、可扩展性、技术多样性;挑战:分布式事务、服务治理、监控复杂度。


Q95: 如果微服务中一个核心模块宕机了,有什么缓解方式?

【核心解析】 使用熔断器(如Hystrix)快速失败;服务降级,返回默认值或缓存数据;限流防止雪崩;多副本部署,负载均衡;异步调用和消息队列解耦;监控告警,自动恢复。


Q96: 如何平衡维护存量系统与接触高并发场景

【核心解析】 存量系统可进行微服务改造;引入消息队列解耦;逐步重构关键模块;利用缓存和读写分离提升性能;参与新项目时应用高并发经验;主动承担性能优化任务;与团队沟通技术债务


Q97: RAG接口如何与Agent打通?请描述接口对接的技术方案。

【核心解析】 定义RAG接口规范(如RESTful API);Agent通过HTTP/GRPC调用RAG服务;处理异步请求与回调;考虑认证与权限控制;实现请求重试与熔断机制;数据格式统一(如JSON);日志与监控集成。


Q98: 分布式事务有哪些实现方案?各自的优缺点是什么?

【核心解析】 2PC(强一致,阻塞,协调者单点);3PC(减少阻塞,引入超时,仍可能不一致);TCC(补偿模式,业务侵入性强);本地消息表(最终一致,需重试);MQ事务消息(RocketMQ支持,可靠投递);Seata AT(自动补偿,性能较好);Saga(长事务,补偿复杂)。


Q99: Seata AT模式与Kafka加本地消息表方案在分布式事务中如何对比?

【核心解析】 Seata AT:自动生成反向SQL,无业务侵入;依赖全局锁,性能受限于锁冲突;适合短事务。Kafka+本地消息表:业务方需实现本地事务和消息发送;最终一致性,适合长事务;需处理消息重复消费;无全局锁,吞吐量高;实现复杂度较高。


Q100: 在微服务架构中,网关调用应该放在代码结构的哪一层?

【核心解析】 网关通常作为微服务架构的入口层,负责路由、鉴权、限流、日志等;在代码结构中,网关调用应放在服务调用层(如Feign客户端)或API层,避免业务逻辑耦合;网关不应包含业务逻辑,仅做请求转发和预处理;推荐使用独立网关服务(如Spring Cloud Gateway、Kong)。