Skip to content

面试速答(先看这里)

**一句话结论:**Dubbo是RPC框架,需要远程调用,那么就需要把请求和响应做序列化和反序列化。

60秒标准回答:

Dubbo是RPC框架,需要远程调用,那么就需要把请求和响应做序列化和反序列化。Dubbo目前支持多种序列化协议

在 Dubbo 3.0 中,内置了3种序列化协议

这里面,hessian2是默认的,主要是因为他的性能是最好的,并且它支持跨语言

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**在 Dubbo 3.0 中,内置了3种序列化协议:
  • **要点2:**这里面,hessian2是默认的,主要是因为他的性能是最好的,并且它支持跨语言。
  • **要点3:**而这几年,各种序列化框架层出不穷,今天出了一个号称速度快,明天出一个号称跨语言。
  • **要点4:**其中包括了avro、fastjson、fst、fury、gson、Jackson、kryo、msgpack、protobuf和protostuff等。
  • **要点5:**这里面很多框架其实性能都比较好,大有代替Hession的势头,比如Kryo、FST、fury等。

**记忆锚点:**Dubbo → hessian → Java → fury → fastjson2 → Hessian2

关键取舍:

  • 但这里实际不是原生的hessian2序列化,而是阿里修改过的hessian lite,它是dubbo RPC默认启用的序列化方式 Java :标准的Java序列化协议,易于使用但性能相对较低。
  • fastjson2 :轻量级的数据交换格式,适用于简单的数据结构,易于阅读和调试。
  • 这里面,hessian2是默认的,主要是因为他的性能是最好的,并且它支持跨语言。

追问准备:

  • 围绕「Dubbo」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「hessian」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「Java」:底层原理是什么?使用时有哪些边界和常见坑?
  • 如果线上出现异常,你会如何定位、验证并规避?

典型回答 ​

Dubbo是RPC框架,需要远程调用,那么就需要把请求和响应做序列化和反序列化。Dubbo目前支持多种序列化协议。

在Dubbo 3.0 中,内置了3种序列化协议:

image.png

比较常见的有:

  1. Hessian2:hessian是一种跨语言的高效二进制序列化方式。但这里实际不是原生的hessian2序列化,而是阿里修改过的hessian lite,它是dubbo RPC默认启用的序列化方式
  2. Java:标准的Java序列化协议,易于使用但性能相对较低。
  3. fastjson2:轻量级的数据交换格式,适用于简单的数据结构,易于阅读和调试。

这里面,hessian2是默认的,主要是因为他的性能是最好的,并且它支持跨语言。

而这几年,各种序列化框架层出不穷,今天出了一个号称速度快,明天出一个号称跨语言。总之有很多,于是在Dubbo的扩展中,就增加支持很多其他的序列化协议:

image.png

其中包括了avro、fastjson、fst、fury、gson、Jackson、kryo、msgpack、protobuf和protostuff等。

这里面很多框架其实性能都比较好,大有代替Hession的势头,比如Kryo、FST、fury等。

比如蚂蚁出的fury框架,号称比hessian快100倍,以下是他的一个整体介绍。详见:https://developer.aliyun.com/article/992485