作者:yanglbme,來源:
https://dwz.cn/ZE2O4lHu1)dubbo 支援哪些通信協定?
2)支援哪些序列化協定?
3)說一下 Hessian 的資料結構?
4)PB 知道嗎?
5)為什麼 PB 的效率是最高的?
面試官心理分析
上一個問題,說說 dubbo 的基本工作原理,那是你必須知道的,至少要知道 dubbo 分成哪些層,然後平時怎麼發起 rpc 請求的,注冊、發現、調用,這些是基本的。
接着就可以針對底層進行深入的問問了,比如第一步就可以先問問序列化協定這塊,就是平時 RPC 的時候怎麼走的?
面試題剖析
序列化,就是把資料結構或者是一些對象,轉換為二進制串的過程,而反序列化是将在序列化過程中所生成的二進制串轉換成資料結構或者對象的過程。
dubbo 支援不同的通信協定
1、dubbo 協定
預設就是走 dubbo 協定,單一長連接配接,進行的是 NIO 異步通信,基于 hessian 作為序列化協定。使用的場景是:傳輸資料量小(每次請求在 100kb 以内),但是并發量很高。
為了要支援高并發場景,一般是服務提供者就幾台機器,但是服務消費者有上百台,可能每天調用量達到上億次!此時用長連接配接是最合适的,就是跟每個服務消費者維持一個長連接配接就可以,可能總共就 100 個連接配接。然後後面直接基于長連接配接 NIO 異步通信,可以支撐高并發請求。
長連接配接,通俗點說,就是建立連接配接過後可以持續發送請求,無須再建立連接配接。
2、rmi 協定
走 Java 二進制序列化,多個短連接配接,适合消費者和提供者數量差不多的情況,适用于檔案的傳輸,一般較少用。
3、hessian 協定
走 hessian 序列化協定,多個短連接配接,适用于提供者數量比消費者數量還多的情況,适用于檔案的傳輸,一般較少用。
4、http 協定
走 json 序列化。
5、webservice
走 SOAP 文本
dubbo 支援的序列化協定?
dubbo 支援 hession、Java 二進制序列化、json、SOAP 文本序列化多種序列化協定。但是 hessian 是其預設的序列化協定。
說一下 Hessian 的資料結構?
Hessian 的對象序列化機制有 8 種原始類型:
原始二進制資料
boolean
64-bit date(64 位毫秒值的日期)
64-bit double
32-bit int
64-bit long
null
UTF-8 編碼的 string
另外還包括 3 種遞歸類型:
list for lists and arrays
map for maps and dictionaries
object for objects
還有一種特殊的類型:
ref:用來表示對共享對象的引用。
為什麼 PB 的效率是最高的?
可能有一些同學比較習慣于 JSON or XML 資料存儲格式,對于 Protocol Buffer 還比較陌生。
Protocol Buffer 其實是 Google 出品的一種輕量并且高效的結構化資料存儲格式,性能比 JSON、XML 要高很多。
其實 PB 之是以性能如此好,主要得益于兩個:
第一,它使用 proto 編譯器,自動進行序列化和反序列化,速度非常快,應該比 XML 和 JSON 快上了 20~100 倍;
第二,它的資料壓縮效果好,就是說它序列化後的資料量體積小。因為體積小,傳輸起來帶寬和速度上會有優化。
推薦去我的部落格閱讀更多:
1.Java JVM、集合、多線程、新特性系列教程
2.Spring MVC、Spring Boot、Spring Cloud 系列教程
3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程
4.Java、後端、架構、阿裡巴巴等大廠最新面試題
生活很美好,明天見~