
Dubbo 作为国内 Java 微服务生态中最核心的 RPC 框架面试考察点已经从简单的“怎么用”全面转向了“原理、协议、容错、SPI 扩展以及与 Spring Cloud 的对比选型”。结合你的银行核心背景和之前的知识点我梳理了 10 个高频 Dubbo 面试题从架构原理到生产落地逐一讲透。1. 什么是 Dubbo它在微服务架构中扮演什么角色答Dubbo 是阿里巴巴开源的一款高性能 Java RPC 框架核心解决分布式系统中服务间的透明化远程调用。它不仅仅是通讯框架更是一套完整的服务治理方案涵盖了服务注册与发现Registry远程调用RPC负载均衡集群容错服务路由与降级在银行微服务中我们把核心交易线如存取款、转账下沉到 Dubbo利用其毫秒级延迟和高吞吐特性对外 API 网关才用 HTTP。2. Dubbo 的核心调用流程是怎样的答Dubbo 一次调用涉及Provider、Consumer、Registry、Monitor四个角色Provider 启动时向注册中心如 Zookeeper/Nacos注册自己提供的服务接口。Consumer 启动时向注册中心订阅所需的服务拉取 Provider 地址列表并缓存本地。Consumer 通过动态代理调用接口内部将方法名、参数序列化通过 Netty 发送给 Provider。Provider 反序列化请求执行本地实现将结果序列化返回。监控中心Monitor统计调用次数、耗时等。银行案例存款服务Consumer调贷款服务Provider查询额度走的就是这个流程。3. Dubbo 的负载均衡策略有哪些默认是什么答Dubbo 提供 4 种内置负载均衡策略可在DubboReference(loadbalancexxx)配置Random默认加权随机按权重随机概率均匀适合实例性能相近。RoundRobin加权轮询平滑加权轮询避免突刺适合同规格实例。LeastActive最小活跃数选当前处理请求最少的实例避免慢节点堆积适合耗时差异大的场景如调征信。ConsistentHash一致性哈希相同参数如账号ID总发同一实例适合有状态缓存如客户信息缓存。银行实践核心查询用加权轮询耗时接口用最小活跃数灰度发布时自定义基于元数据的路由。4. Dubbo 的集群容错模式有哪些默认是什么答Dubbo 提供了 6 种容错策略Failfast默认快速失败立即报错用于非幂等写操作。Failsafe忽略异常记录日志用于旁路通知。Failback失败后异步重试用于最终一致性的操作。Forking并行调用多个实例取最先返回的结果用于低延迟要求但耗资源。Broadcast广播调用所有实例逐台确认用于缓存更新通知。Failover失败自动切换重试其他实例通常用于读操作。银行实践对于资金转账这类关键写操作我们使用Failfast禁止重试防止重复扣款对于非关键查询使用Failover并限制重试次数。5. Dubbo 支持的协议有哪些如何选择答Dubbo 支持多种协议最常用dubbo 协议默认单一长连接 NIO 异步通讯基于 Netty。适合小数据量高并发的服务间调用但传输大文件慢。hessian基于 HTTP 的二进制协议适合跨语言。rest标准 HTTP JSON适合对外开放。grpc基于 HTTP/2适合流式或跨语言高性能场景。银行实践核心交易线用dubbo://协议压榨性能对接外部系统可能用rest://或grpc://。6. Dubbo 的服务治理能力体现在哪些方面答除了负载均衡和容错Dubbo 还提供了动态路由通过控制台实时调整路由规则如灰度发布、读写分离。权重动态调整不停机上下线双十一期间可临时为某批实例降权。服务降级mock机制在服务不可用时强制返回 mock 数据。参数回调Consumer 向 Provider 注册回调实现异步通知。本地存根在消费端执行预处理或校验。银行实践我们通过配置中心下发路由规则将黑名单用户的流量切到专用实例实现业务隔离。7. Dubbo 的 SPI 机制是什么为什么很重要答Dubbo 的扩展点几乎全部通过微内核 SPI实现。Java 原生 SPI 会一次性实例化所有扩展而 Dubbo 改进了 SPI支持按需加载只有用到的扩展才实例化。IOC/AOP扩展点可以注入其他扩展支持包装类增强。自适应扩展Adaptive注解动态选择实现如根据 URL 参数选协议。示例Protocol接口是 SPI 扩展点dubbo、hessian、rest是不同实现运行时根据 URL 的前缀自动选中。8. Dubbo 和 Spring Cloud 全家桶如何对比选型答Dubbo定位为高性能 RPC 框架强于服务治理自定义二进制协议延迟低、吞吐高。适合纯 Java 内部服务间调用。Spring Cloud定位为微服务一站式解决方案生态完整网关、配置中心、熔断、链路追踪等。基于 HTTP 协议普适性好但性能低于 Dubbo。选型决策需要极致性能且同构 Java 服务 → Dubbo。需要多语言、或者要整体解决方案 → Spring Cloud。银行实践内部核心交易走 Dubbo外部 OpenAPI 走 Spring Cloud Gateway。9. Dubbo 服务的发布与引用有几种方式答XML 配置传统 Spring 项目使用dubbo:service和dubbo:reference标签。注解DubboService暴露服务DubboReference引用服务常用。API 方式手动构建ServiceConfig和ReferenceConfig不依赖 Spring。现代项目基本都用注解方式简洁且与 Spring Boot 深度集成。10. Dubbo 服务暴露的延迟与优雅上下线如何处理答延迟暴露delay-1或delay5000在 Spring 容器初始化完成后再暴露服务避免启动期间被调用而失败。优雅下线服务提供者先调用ServiceBean#unexport()从注册中心撤销然后等待已进入请求处理完毕。结合 Dubbo 3.x 的“应用级服务发现”可做到秒级摘除。容器环境K8s配合preStop钩子先通知 Dubbo 摘除再等待流量排干。银行实践我们通过自定义 HealthCheck 接口与 Dubbo 摘除联动确保发版时交易损失为零。面试模板话术“Dubbo 方面我主要从 RPC 调用、负载均衡、容错机制和 SPI 扩展这几个维度掌握。一次完整调用是 Provider 注册、Consumer 发现、代理发起 Netty 通讯。负载均衡默认加权随机我们银行核心根据接口特性灵活选用最小活跃或一致性哈希。容错上资金类写操作用 Failfast 防止重复扣款查询类用 Failover 切换。关于协议内部全用 dubbo 协议长连接外部才用 HTTP。服务治理上我们通过控制台动态调权、灰度发布并自研健康检查工具联动 Dubbo 摘除做到优雅上下线。Dubbo 就像我们内部 RPC 的核心骨骼保障了毫秒级的交易体验。”