RPC 框架
候选人小王面试美团L7岗位,简历上写着"熟悉 Dubbo"。
面试官问:"Dubbo 的负载均衡策略有哪些?"
小王说:"轮询、随机、加权……还有一个一致性哈希。"
面试官追问:"一致性哈希的虚拟节点是什么?为什么需要虚拟节点?"
小王愣了一下:"好像是为了解决数据倾斜问题……"
面试官继续追问:"那 Dubbo 的一致性哈希负载均衡用的是哪个 hash 算法?CRC32、MD5 还是 MurmurHash?"
小王彻底说不出话了。
【面试官心理】
我问他 Dubbo,其实不是在考他知道多少种负载均衡策略。我是想知道他有没有去看过 Dubbo 的源码实现。一致性哈希用的 MurmurHash,这个点没看过源码的根本不知道。
一、内容版图
本模块覆盖 RPC 框架的面试核心点:
二、高频面试题地图
2.1 RPC 原理 🔴
序列化协议的选择是 P6/P7 常问的权衡问题。能说清楚"性能 vs 可读性 vs 跨语言"这个三角关系的,基本都能过这一关。
2.2 Dubbo 架构 🔴
很多人说"Dubbo 比 Spring Cloud 快",但说不清楚为什么快。这个问题的本质是协议层和连接管理的差异,不理解这个只能说还在背八股。
【面试官心理】
Dubbo 架构是基础,连这个都说不清楚的可以直接淘汰。但能说清楚架构的人很多,能说出"Dubbo 为什么快"的才是真正理解的。
2.3 服务注册与发现 🟡
2.4 负载均衡策略 🔴
📖 点击展开 Dubbo 负载均衡源码
一致性哈希用 MurmurHash 而不是 MD5,是因为 MurmurHash 计算更快,且分布更均匀。
2.5 容错机制 🟡
【面试官心理】
容错机制这个问题,我通常用来试探候选人有没有做过高可用架构设计。只知道"失败重试"的是入门水平,能说清楚"重试风暴"和"幂等性保证"的才是有实战经验的。
2.6 泛化调用 🟢
2.7 gRPC 🟢
三、生产避坑指南
3.1 Dubbo 常见翻车点
3.2 服务超时与重试
3.3 序列化坑点
📖 点击展开序列化性能对比
性能差距:JSON 序列化是 Protobuf 的 100 倍慢
四、学习路径指引
4.1 P5 层级:会用 RPC
- 知道 RPC 的基本概念和作用
- 会使用 Dubbo 进行服务调用
- 能配置服务暴露和引用
期望回答:能讲清楚 RPC 调用的大致流程,知道 Provider 和 Consumer 的关系。
4.2 P6 层级:懂原理
- 能说清楚 Dubbo 的架构和负载均衡策略
- 知道服务注册与发现的过程
- 有处理超时、重试、容错配置的经验
期望回答:能回答追问,不怵细节,有生产配置经验。
4.3 P7 层级:能选型、能架构
- 能根据业务场景做 RPC 框架选型
- 知道 Dubbo 和 gRPC 的取舍
- 有服务治理、流量控制、熔断设计经验
- 了解注册中心的 CAP 权衡
期望回答:有全局视野,能说清楚取舍,能讲清楚一个完整的微服务治理方案。
五、导航指引
- RPC 原理 — RPC 通信原理、序列化协议
- Dubbo 架构原理 — 四大组件、服务注册发现
- Dubbo 服务暴露与引用 — 动态代理、服务导出
- Dubbo 负载均衡 — 四种策略、虚拟节点
- Dubbo 容错机制 — 六种容错策略、重试机制
- Dubbo 泛化调用 — 泛化调用原理与实践
- gRPC 原理 — HTTP/2、ProtoBuf
- gRPC 调用模式 — 四种调用模式
- RPC 框架对比 — Dubbo vs gRPC vs Feign
- Zookeeper 原理 — Watch 机制、分布式协调
- ZAB 协议 — Leader 选举、数据一致性
- Nacos 注册中心 — 注册中心原理
- 注册中心对比 — Zookeeper vs Nacos vs Eureka
RPC 面试的进阶路径:先搞懂"Dubbo 为什么快"和"负载均衡策略",再准备"容错机制和重试"的生产案例,最后能说清楚 Dubbo 和 gRPC 的取舍。做到这三点,P7 面试稳了。