天天看點

Dubbo相關面試題

原文轉載至:https://blog.csdn.net/moakun/article/details/82919804

想往高處走,怎麼能不懂 Dubbo?

Dubbo是國内最出名的分布式服務架構,也是 Java 程式員必備的必會的架構之一。Dubbo 更是中進階面試過程中經常會問的技術,無論你是否用過,你都必須熟悉。

下面我為大家準備了一些 Dubbo 常見的的面試題,一些是我經常問别人的,一些是我過去面試遇到的一些問題,總結給大家,希望對大家能有所幫助。

1、Dubbo是什麼?

Dubbo是阿裡巴巴開源的基于 Java 的高性能 RPC 分布式服務架構,現已成為 Apache 基金會孵化項目。

面試官問你如果這個都不清楚,那下面的就沒必要問了。

官網:http://dubbo.apache.org

2、為什麼要用Dubbo?

因為是阿裡開源項目,國内很多網際網路公司都在用,已經經過很多線上考驗。内部使用了 Netty、Zookeeper,保證了高性能高可用性。

使用 Dubbo 可以将核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心,可用于提高業務複用靈活擴充,使前端應用能更快速的響應多變的市場需求。

下面這張圖可以很清楚的诠釋,最重要的一點是,分布式架構可以承受更大規模的并發流量。

Dubbo相關面試題

下面是 Dubbo 的服務治理圖。

Dubbo相關面試題

3、Dubbo 和 Spring Cloud 有什麼差別?

兩個沒關聯,如果硬要說差別,有以下幾點。

1)通信方式不同

Dubbo 使用的是 RPC 通信,而 Spring Cloud 使用的是 HTTP RESTFul 方式。

2)組成部分不同

Dubbo相關面試題

4、dubbo都支援什麼協定,推薦用哪種?

  • dubbo://(推薦)
  • rmi://
  • hessian://
  • http://
  • webservice://
  • thrift://
  • memcached://
  • redis://
  • rest://

5、Dubbo需要 Web 容器嗎?

不需要,如果硬要用 Web 容器,隻會增加複雜性,也浪費資源。

6、Dubbo内置了哪幾種服務容器?

  • Spring Container
  • Jetty Container
  • Log4j Container

Dubbo 的服務容器隻是一個簡單的 Main 方法,并加載一個簡單的 Spring 容器,用于暴露服務。

7、Dubbo裡面有哪幾種節點角色?

Dubbo相關面試題

8、畫一畫服務注冊與發現的流程圖

Dubbo相關面試題

該圖來自 Dubbo 官網,供你參考,如果你說你熟悉 Dubbo, 面試官經常會讓你畫這個圖,記好了。

9、Dubbo預設使用什麼注冊中心,還有别的選擇嗎?

推薦使用 Zookeeper 作為注冊中心,還有 Redis、Multicast、Simple 注冊中心,但不推薦。

10、Dubbo有哪幾種配置方式?

1)Spring 配置方式

2)Java API 配置方式

11、Dubbo 核心的配置有哪些?

我曾經面試就遇到過面試官讓你寫這些配置,我也是蒙逼。。

Dubbo相關面試題

配置之間的關系見下圖。

Dubbo相關面試題

12、在 Provider 上可以配置的 Consumer 端的屬性有哪些?

1)timeout:方法調用逾時

2)retries:失敗重試次數,預設重試 2 次

3)loadbalance:負載均衡算法,預設随機

4)actives 消費者端,最大并發調用限制

13、Dubbo啟動時如果依賴的服務不可用會怎樣?

Dubbo 預設會在啟動時檢查依賴的服務是否可用,不可用時會抛出異常,阻止 Spring 初始化完成,預設 check="true",可以通過 check="false" 關閉檢查。

14、Dubbo推薦使用什麼序列化架構,你知道的還有哪些?

推薦使用Hessian序列化,還有Duddo、FastJson、Java自帶序列化。

15、Dubbo預設使用的是什麼通信架構,還有别的選擇嗎?

Dubbo 預設使用 Netty 架構,也是推薦的選擇,另外内容還內建有Mina、Grizzly。

16、Dubbo有哪幾種叢集容錯方案,預設是哪種?

Dubbo相關面試題

17、Dubbo有哪幾種負載均衡政策,預設是哪種?

Dubbo相關面試題

18、注冊了多個同一樣的服務,如果測試指定的某一個服務呢?

可以配置環境點對點直連,繞過注冊中心,将以服務接口為機關,忽略注冊中心的提供者清單。

19、Dubbo支援服務多協定嗎?

Dubbo 允許配置多協定,在不同服務上支援不同協定或者同一服務上同時支援多種協定。

20、當一個服務接口有多種實作時怎麼做?

當一個接口有多種實作時,可以用 group 屬性來分組,服務提供方和消費方都指定同一個 group 即可。

21、服務上線怎麼相容舊版本?

可以用版本号(version)過渡,多個不同版本的服務注冊到注冊中心,版本号不同的服務互相間不引用。這個和服務分組的概念有一點類似。

22、Dubbo可以對結果進行緩存嗎?

可以,Dubbo 提供了聲明式緩存,用于加速熱門資料的通路速度,以減少使用者加緩存的工作量。

23、Dubbo服務之間的調用是阻塞的嗎?

預設是同步等待結果阻塞的,支援異步調用。

Dubbo 是基于 NIO 的非阻塞實作并行調用,用戶端不需要啟動多線程即可完成并行調用多個遠端服務,相對多線程開銷較小,異步調用會傳回一個 Future 對象。

異步調用流程圖如下。

Dubbo相關面試題

24、Dubbo支援分布式事務嗎?

目前暫時不支援,後續可能采用基于 JTA/XA 規範實作,如以圖所示。

Dubbo相關面試題

25、Dubbo telnet 指令能做什麼?

dubbo 通過 telnet 指令來進行服務治理,具體使用看這篇文章《dubbo服務調試管理實用指令》。

telnet localhost 8090

26、Dubbo支援服務降級嗎?

Dubbo 2.2.0 以上版本支援。

27、Dubbo如何優雅停機?

Dubbo 是通過 JDK 的 ShutdownHook 來完成優雅停機的,是以如果使用 kill -9 PID 等強制關閉指令,是不會執行優雅停機的,隻有通過 kill PID 時,才會執行。

28、服務提供者能實作失效踢出是什麼原理?

服務失效踢出基于 Zookeeper 的臨時節點原理。

29、如何解決服務調用鍊過長的問題?

Dubbo 可以使用 Pinpoint 和 Apache Skywalking(Incubator) 實作分布式服務追蹤,當然還有其他很多方案。

30、服務讀寫推薦的容錯政策是怎樣的?

讀操作建議使用 Failover 失敗自動切換,預設重試兩次其他伺服器。

寫操作建議使用 Failfast 快速失敗,發一次調用失敗就立即報錯。

31、Dubbo必須依賴的包有哪些?

Dubbo 必須依賴 JDK,其他為可選。

32、Dubbo的管理控制台能做什麼?

管理控制台主要包含:路由規則,動态配置,服務降級,通路控制,權重調整,負載均衡,等管理功能。

33、說說 Dubbo 服務暴露的過程。

Dubbo 會在 Spring 執行個體化完 bean 之後,在重新整理容器最後一步釋出 ContextRefreshEvent 事件的時候,通知實作了 ApplicationListener 的 ServiceBean 類進行回調 onApplicationEvent 事件方法,Dubbo 會在這個方法中調用 ServiceBean 父類 ServiceConfig 的 export 方法,而該方法真正實作了服務的(異步或者非異步)釋出。

34、Dubbo 停止維護了嗎?

2014 年開始停止維護過幾年,17 年開始重新維護,并進入了 Apache 項目。

35、Dubbo 和 Dubbox 有什麼差別?

Dubbox 是繼 Dubbo 停止維護後,當當網基于 Dubbo 做的一個擴充項目,如加了服務可 Restful 調用,更新了開源元件等。

36、你還了解别的分布式架構嗎?

别的還有 Spring cloud、Facebook 的 Thrift、Twitter 的 Finagle 等。

37、Dubbo 能內建 Spring Boot 嗎?

可以的,項目位址如下。

https://github.com/apache/incubator-dubbo-spring-boot-project

38、在使用過程中都遇到了些什麼問題?

Dubbo 的設計目的是為了滿足高并發小資料量的 rpc 調用,在大資料量下的性能表現并不好,建議使用 rmi 或 http 協定。

39、你讀過 Dubbo 的源碼嗎?

要了解 Dubbo 就必須看其源碼,了解其原理,花點時間看下吧,網上也有很多教程,後續有時間我也會在公衆号上分享 Dubbo 的源碼。

40、你覺得用 Dubbo 好還是 Spring Cloud 好?

擴充性的問題,沒有好壞,隻有适合不适合,不過我好像更傾向于使用 Dubbo, Spring Cloud 版本更新太快,元件更新替換太頻繁,配置太繁瑣,還有很多我覺得是沒有 Dubbo 順手的地方……

繼續閱讀