更新時間:2023-01-04 11:19:36 來源:動力節點 瀏覽1207次
1.什么是 ZooKeeper?
答:ZooKeeper 是一個開源的分布式應用程序協調服務,是一個典型的分布式數據一致性解決方案。設計目的是將那些復雜且容易出錯的分布式一致性服務封裝起來,構成一個高效可靠的系統,并以一系列簡單易用的原子操作提供給用戶使用。
2.ZooKeeper 提供了哪些功能?
答:ZooKeeper 主要提供以下功能:
分布式服務注冊與訂閱:在分布式環境中,為了保證高可用性,通常同一個應用或同一個服務的提供方都會部署多份,達到對等服務。而消費者就須要在這些對等的服務器中選擇一個來執行相關的業務邏輯,比較典型的服務注冊與訂閱,如 Dubbo。
分布式配置中心:發布與訂閱模型,即所謂的配置中心,顧名思義就是發布者將數據發布到 ZooKeeper 節點上,供訂閱者獲取數據,實現配置信息的集中式管理和動態更新。
命名服務:在分布式系統中,通過命名服務客戶端應用能夠根據指定名字來獲取資源、服務地址和提供者等信息。
分布式鎖:這個主要得益于 ZooKeeper 為我們保證了數據的強一致性。
3.ZooKeeper 有幾種搭建模式?
答:ZooKeeper 通常有三種搭建模式:
單機模式:zoo.cfg 中只配置一個 server.id 就是單機模式了,此模式一般用在測試環境,如果當前主機宕機,那么所有依賴于當前 ZooKeeper 服務工作的其他服務器都不能進行正常工作;
偽分布式模式:在一臺機器啟動不同端口的 ZooKeeper,配置到 zoo.cfg 中,和單機模式相同,此模式一般用在測試環境;
分布式模式:多臺機器各自配置 zoo.cfg 文件,將各自互相加入服務器列表,上面搭建的集群就是這種完全分布式。
4.ZooKeeper 有哪些特性?
答: ZooKeeper 特性如下:
順序一致性(Sequential Consistency):來自相同客戶端提交的事務,ZooKeeper 將嚴格按照其提交順序依次執行;
原子性(Atomicity):于 ZooKeeper 集群中提交事務,事務將“全部完成”或“全部未完成”,不存在“部分完成”;
單一系統鏡像(Single System Image):客戶端連接到 ZooKeeper 集群的任意節點,其獲得的數據視圖都是相同的;
可靠性(Reliability):事務一旦完成,其產生的狀態變化將永久保留,直到其他事務進行覆蓋;
實時性(Timeliness):事務一旦完成,客戶端將于限定的時間段內,獲得最新的數據。
5.以下關于 ZooKeeper 描述錯誤的是?
A:所有的節點都具有穩定的存儲能力 B:ZooKeeper 任意節點之間都能夠進行通信(消息發送 & 接收) C:為了提高性能,ZooKeeper 允許同一份數據存在一部分節點寫成功,另一部分節點寫失敗 D:ZooKeeper 集群運行期間,只要半數以上節點存活,ZooKeeper 就能正常服務 答:C 題目解析:ZooKeeper 不允許同一份數據存在一部分節點寫成功,另一部分節點寫失敗的情況,這不符合 ZooKeeper“一致性”的原則。
6.ZooKeeper 如何實現分布式鎖?
答:ZooKeeper 實現分布式鎖的步驟如下:
客戶端連接 ZooKeeper,并在 /lock 下創建臨時的且有序的子節點,第一個客戶端對應的子節點為 /lock/lock-10000000001,第二個為 /lock/lock-10000000002,以此類推。
客戶端獲取 /lock 下的子節點列表,判斷自己創建的子節點是否為當前子節點列表中序號最小的子節點,如果是則認為獲得鎖,否則監聽剛好在自己之前一位的子節點刪除消息,獲得子節點變更通知后重復此步驟直至獲得鎖;
執行業務代碼;
完成業務流程后,刪除對應的子節點釋放鎖。
7.ZooKeeper 如何實現分布式事務?
答:ZooKeeper 實現分布式事務,類似于兩階段提交,總共分為以下 4 步:
客戶端先給 ZooKeeper 節點發送寫請求;
ZooKeeper 節點將寫請求轉發給 Leader 節點,Leader 廣播給集群要求投票,等待確認;
Leader 收到確認,統計投票,票數過半則提交事務;
事務提交成功后,ZooKeeper 節點告知客戶端。
8.集群中為什么要有主節點?
答:在分布式環境中,有些業務邏輯只需要集群中的某一臺機器進行執行,其他的機器可以共享這個結果,這樣可以大大減少重復計算,提高性能,這就是主節點存在的意義。
9.Dubbo 是什么?
答:Dubbo 是一款高性能、輕量級的開源 Java RPC 框架,它提供了三大核心能力:面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動注冊和發現。
10.Dubbo 有哪些特性?
答:Dubbo 特性如下:
面向接口代理的高性能 RPC 調用:提供高性能的基于代理的遠程調用能力,服務以接口為粒度,為開發者屏蔽遠程調用底層細節;
智能負載均衡:內置多種負載均衡策略,智能感知下游節點健康狀況,顯著減少調用延遲,提高系統吞吐量;
服務自動注冊與發現:支持多種注冊中心服務,服務實例上下線實時感知;
高度可擴展能力:遵循微內核+插件的設計原則,所有核心能力如 Protocol、Transport、Serialization 被設計為擴展點,平等對待內置實現和第三方實現;
運行期流量調度:內置條件、腳本等路由策略,通過配置不同的路由規則,輕松實現灰度發布,同機房優先等功能;
可視化的服務治理與運維:提供豐富服務治理、運維工具:隨時查詢服務元數據、服務健康狀態及調用統計,實時下發路由策略、調整配置參數。
以上就是“offer拿到手軟的指南,Java分布式面試題”,你能回答上來嗎?如果想要了解更多的Java面試題相關內容,可以關注動力節點Java官網。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習