85道Java微服務面試題整理(助力2020面試)

微服務 面試題

1、您對微服務有何瞭解?

2、微服務架構有哪些優勢?

3。微服務有哪些特點?

4、設計微服務的最佳實踐是什麼?

5、微服務架構如何運作?

6、微服務架構的優缺點是什麼?

7、單片,SOA 和微服務架構有什麼區別?

8、在使用微服務架構時,您面臨哪些挑戰?

9、SOA 和微服務架構之間的主要區別是什麼?

10、微服務有什麼特點?

11、什麼是領域驅動設計?

12、爲什麼需要域驅動設計(DDD)?

13、什麼是無所不在的語言?

14、什麼是凝聚力?

15、什麼是耦合?

16、什麼是 REST / RESTful 以及它的用途是什麼?

17、你對 Spring Boot 有什麼瞭解?

18、什麼是 Spring 引導的執行器?

19、什麼是 Spring Cloud?

20、Spring Cloud 解決了哪些問題?

21、在 Spring MVC 應用程序中使用 WebMvcTest 註釋有什麼用處?

22。你能否給出關於休息和微服務的要點?

23、什麼是不同類型的微服務測試?

24、您對 Distributed Transaction 有何瞭解?

25、什麼是 Idempotence 以及它在哪裏使用?

26、什麼是有界上下文?

27、什麼是雙因素身份驗證?

28、雙因素身份驗證的憑據類型有哪些?

29、什麼是客戶證書?

30、PACT 在微服務架構中的用途是什麼?

31、什麼是 OAuth?

32、康威定律是什麼?

33、合同測試你懂什麼?

34、什麼是端到端微服務測試?

35、Container 在微服務中的用途是什麼?

36、什麼是微服務架構中的 DRY?

37、什麼是消費者驅動的合同(CDC)?

38、Web,RESTful API 在微服務中的作用是什麼?

39、您對微服務架構中的語義監控有何瞭解?

40、我們如何進行跨功能測試?

41、我們如何在測試中消除非決定論?

42、Mock 或 Stub 有什麼區別?

43、您對 Mike Cohn 的測試金字塔瞭解多少?

44、Docker 的目的是什麼?

45、什麼是金絲雀釋放?

46、什麼是持續集成(CI)?

47、什麼是持續監測?

48、架構師在微服務架構中的角色是什麼?

49、我們可以用微服務創建狀態機嗎?

50、什麼是微服務中的反應性擴展?

1、您對微服務有何瞭解?

微服務,又稱微服務 架 構,是一種架構風格,它將應用程序構建爲以業務領域爲模型的小型自治服務集合 。

通俗地說,你必須看到蜜蜂如何通過對齊六角形蠟細胞來構建它們的蜂窩狀物。他們最初從使用各種材料的小部分開始,並繼續從中構建一個大型蜂箱。這些細胞形成圖案,產生堅固的結構,將蜂窩的特定部分固定在一起。這裏,每個細胞獨立於另一個細胞,但它也與其他細胞相關。這意味着對一個細胞的損害不會損害其他細胞,因此,蜜蜂可以在不影響完整蜂箱的情況下重建這些細胞。

圖 1:微服務的蜂窩表示 – 微服務訪談問題

請參考上圖。這裏,每個六邊形形狀代表單獨的服務組件。與蜜蜂的工作類似,每個敏捷團隊都使用可用的框架和所選的技術堆棧構建單獨的服務組件。就像在蜂箱中一樣,每個服務組件形成一個強大的微服務架構,以提供更好的可擴展性。此外,敏捷團隊可以單獨處理每個服務組件的問題,而對整個應用程序沒有影響或影響最小。

2、微服務架構有哪些優勢?

圖 2:微服務的 優點 – 微服務訪談問題

· 獨立開發 – 所有微服務都可以根據各自的功能輕鬆開發

· 獨立部署 – 基於其服務,可以在任何應用程序中單獨部署它們

· 故障隔離 – 即使應用程序的一項服務不起作用,系統仍可繼續運行

· 混合技術堆棧 – 可以使用不同的語言和技術來構建同一應用程序的不同服務

· 粒度縮放 – 單個組件可根據需要進行縮放,無需將所有組件縮放在一起

3、微服務有哪些特點?

圖 3:微服務的 特點 – 微服務訪談問題

· 解耦 – 系統內的服務很大程度上是分離的。因此,整個應用程序可以輕鬆構建,更改和擴展

· 組件化 – 微服務被視爲可以輕鬆更換和升級的獨立組件

· 業務能力 – 微服務非常簡單,專注於單一功能

· 自治 – 開發人員和團隊可以彼此獨立工作,從而提高速度

· 持續交付 – 通過軟件創建,測試和批准的系統自動化,允許頻繁發佈軟件

· 責任 – 微服務不關注應用程序作爲項目。相反,他們將應用程序視爲他們負責的產品

· 分散治理 – 重點是使用正確的工具來做正確的工作。這意味着沒有標準化模式或任何技術模式。開發人員可以自由選擇最有用的工具來解決他們的問題

· 敏捷 – 微服務支持敏捷開發。任何新功能都可以快速開發並再次丟棄

4、設計微服務的最佳實踐是什麼?

以下是設計微服務的最佳實踐:

圖 4:設計微服務的最佳實踐 – 微服務訪談問題

5、微服務架構如何運作?

微服務架構具有以下組件:

圖 5:微服務 架構 – 微服務面試問題

· 客戶端 – 來自不同設備的不同用戶發送請求。

· 身份提供商 – 驗證用戶或客戶身份並頒發安全令牌。

· API 網關 – 處理客戶端請求。

· 靜態內容 – 容納系統的所有內容。

· 管理 – 在節點上平衡服務並識別故障。

· 服務發現 – 查找微服務之間通信路徑的指南。

· 內容交付網絡 – 代理服務器及其數據中心的分佈式網絡。

· 遠程服務 – 啓用駐留在 IT 設備網絡上的遠程訪問信息。

6、微服務架構的優缺點是什麼?

7、單片,SOA 和微服務架構有什麼區別?

圖 6: 單片 SOA 和微服務之間的比較 – 微服務訪談問題

· 單片架構類似於大容器,其中應用程序的所有軟件組件組裝在一起並緊密封裝。

· 一個面向服務的架構是一種相互通信服務的集合。通信可以涉及簡單的數據傳遞,也可以涉及兩個或多個協調某些活動的服務。

· 微服務架構是一種架構風格,它將應用程序構建爲以業務域爲模型的小型自治服務集合。

8、在使用微服務架構時,您面臨哪些挑戰?

開發一些較小的微服務聽起來很容易,但開發它們時經常遇到的挑戰如下。

· 自動化組件:難以自動化,因爲有許多較小的組件。因此,對於每個組件,我們必須遵循 Build,Deploy 和 Monitor 的各個階段。

· 易感性:將大量組件維護在一起變得難以部署,維護,監控和識別問題。它需要在所有組件周圍具有很好的感知能力。

· 配置管理:有時在各種環境中維護組件的配置變得困難。

· 調試:很難找到錯誤的每一項服務。維護集中式日誌記錄和儀表板以調試問題至關重要。

9、SOA 和微服務架構之間的主要區別是什麼?

SOA 和微服務之間的主要區別如下:

10、微服務有什麼特點?

您可以列出微服務的特徵,如下所示:

圖 7:微服務的特徵 – 微服務訪談問題

11、什麼是領域驅動設計?

圖 8: DDD 原理 – 微服務面試問題

12、爲什麼需要域驅動設計(DDD)?

圖 9:我們需要 DDD 的因素 – 微服務面試問題

13、什麼是無所不在的語言?

如果您必須定義泛在語言(UL),那麼它是特定域的開發人員和用戶使用的通用語言,通過該語言可以輕鬆解釋域。

無處不在的語言必須非常清晰,以便它將所有團隊成員放在同一頁面上,並以機器可以理解的方式進行翻譯。

14、什麼是凝聚力?

模塊內部元素所屬的程度被認爲是凝聚力。

15、什麼是耦合?

組件之間依賴關係強度的度量被認爲是耦合。一個好的設計總是被認爲具有高內聚力和低耦合性。

16、什麼是 REST / RESTful 以及它的用途是什麼?

Representational State Transfer(REST)/ RESTful Web 服務是一種幫助計算機系統通過 Internet 進行通信的架構風格。這使得微服務更容易理解和實現。

微服務可以使用或不使用 RESTful API 實現,但使用 RESTful API 構建鬆散耦合的微服務總是更容易。

17、你對 Spring Boot 有什麼瞭解?

事實上,隨着新功能的增加,彈簧變得越來越複雜。如果必須啓動新的 spring 項目,則必須添加構建路徑或添加 maven 依賴項,配置應用程序服務器,添加 spring配置。所以一切都必須從頭開始。

Spring Boot 是解決這個問題的方法。使用 spring boot 可以避免所有樣板代碼和配置。因此,基本上認爲自己就好像你正在烘烤蛋糕一樣,春天就像製作蛋糕所需的成分一樣,彈簧靴就是你手中的完整蛋糕。

圖 10: Spring Boot 的因素 – 微服務面試問題

18、什麼是 Spring 引導的執行器?

Spring Boot 執行程序提供了 restful Web 服務,以訪問生產環境中運行應用程序的當前狀態。在執行器的幫助下,您可以檢查各種指標並監控您的應用程序。

19、什麼是 Spring Cloud?

根據 Spring Cloud 的官方網站,Spring Cloud 爲開發人員提供了快速構建分佈式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智能路由,領導選舉,分佈式會話,集羣狀態)。

20、Spring Cloud 解決了哪些問題?

在使用 Spring Boot 開發分佈式微服務時,我們面臨的問題很少由 Spring Cloud解決。

· 與分佈式系統相關的複雜性 – 包括網絡問題,延遲開銷,帶寬問題,安全問題。

· 處理服務發現的能力 – 服務發現允許集羣中的進程和服務找到彼此並進行通信。

· 解決冗餘問題 – 冗餘問題經常發生在分佈式系統中。

· 負載平衡 – 改進跨多個計算資源(例如計算機集羣,網絡鏈接,中央處理單元)的工作負載分佈。

· 減少性能問題 – 減少因各種操作開銷導致的性能問題。

21、在 Spring MVC 應用程序中使用 WebMvcTest 註釋有什麼用處?

在測試目標只關注 Spring MVC 組件的情況下,WebMvcTest 註釋用於單元測試Spring MVC 應用程序。在上面顯示的快照中,我們只想啓動 ToTestController。執行此單元測試時,不會啓動所有其他控制器和映射。

22、你能否給出關於休息和微服務的要點?

雖然您可以通過多種方式實現微服務,但 REST over HTTP 是實現微服務的一種方式。REST 還可用於其他應用程序,如 Web 應用程序,API 設計和 MVC 應用程序,以提供業務數據。

微服務是一種體系結構,其中系統的所有組件都被放入單獨的組件中,這些組件可以單獨構建,部署和擴展。微服務的某些原則和最佳實踐有助於構建彈性應用程序。

簡而言之,您可以說 REST 是構建微服務的媒介。

23、什麼是不同類型的微服務測試?

在使用微服務時,由於有多個微服務協同工作,測試變得非常複雜。因此,測試分爲不同的級別。

· 在底層,我們有面向技術的測試,如單元測試和性能測試。這些是完全自動化的。

· 在中間層面,我們進行了諸如壓力測試和可用性測試之類的探索性測試。

· 在頂層, 我們的 驗收測試數量很少。這些驗收測試有助於利益相關者理解和驗證軟件功能。

24、您對 Distributed Transaction 有何瞭解?

分佈式事務是指單個事件導致兩個或多個不能以原子方式提交的單獨數據源的突變的任何情況。在微服務的世界中,它變得更加複雜,因爲每個服務都是一個工作單元,並且大多數時候多個服務必須協同工作才能使業務成功。

25、什麼是 Idempotence 以及它在哪裏使用?

冪等性是能夠以這樣的方式做兩次事情的特性,即最終結果將保持不變,即好像它只做了一次。

用法:在遠程服務或數據源中使用 Idempotence,這樣當它多次接收指令時,它只處理指令一次。

26、什麼是有界上下文?

有界上下文是域驅動設計的核心模式。DDD 戰略設計部門的重點是處理大型模型和團隊。DDD 通過將大型模型劃分爲不同的有界上下文並明確其相互關係來處理大型模型。

27、什麼是雙因素身份驗證?

雙因素身份驗證爲帳戶登錄過程啓用第二級身份驗證。

圖 11: 雙因素認證的表示 – 微服務訪談問題

因此,假設用戶必須只輸入用戶名和密碼,那麼這被認爲是單因素身份驗證。

28、雙因素身份驗證的憑據類型有哪些?

這三種憑證是:

圖 12: 雙因素認證的證書類型 – 微服務面試問題

29、什麼是客戶證書?

客戶端系統用於向遠程服務器發出經過身份驗證的請求的一種數字證書稱爲客戶端證書。客戶端證書在許多相互認證設計中起着非常重要的作用,爲請求者的身份提供了強有力的保證。

30、PACT 在微服務架構中的用途是什麼?

PACT 是一個開源工具,允許測試服務提供者和消費者之間的交互,與合同隔離,從而提高微服務集成的可靠性。

微服務中的用法

· 用於在微服務中實現消費者驅動的合同。

· 測試微服務的消費者和提供者之間的消費者驅動的合同。

查看即將到來的批次

31、什麼是 OAuth?

OAuth 代表開放授權協議。這允許通過在 HTTP 服務上啓用客戶端應用程序(例如第三方提供商 Facebook,GitHub 等)來訪問資源所有者的資源。因此,您可以在不使用其憑據的情況下與另一個站點共享存儲在一個站點上的資源。

32、康威定律是什麼?

“任 何 設 計 系 統 的 組 織 ( 廣 泛 定 義 ) 都 將 產 生 一 種 設 計 , 其 結 構 是 組 織 通 信 結 構的 副 本 。” – Mel Conway

圖 13: Conway 定律的表示 – 微服務訪談問題

該法律基本上試圖傳達這樣一個事實:爲了使軟件模塊起作用,整個團隊應該進行良好的溝通。因此,系統的結構反映了產生它的組織的社會邊界。

33、合同測試你懂什麼?

根據 Martin Flower 的說法,合同測試是在外部服務邊界進行的測試,用於驗證其是否符合消費服務預期的合同。

此外,合同測試不會深入測試服務的行爲。更確切地說,它測試該服務調用的輸入&輸出包含所需的屬性和所述響應延遲,吞吐量是允許的限度內。

34、什麼是端到端微服務測試?

端到端測試驗證了工作流中的每個流程都正常運行。這可確保系統作爲一個整體協同工作並滿足所有要求。

通俗地說,你可以說端到端測試是一種測試,在特定時期後測試所有東西。

圖 14:測試層次 – 微服務面試問題

35、Container 在微服務中的用途是什麼?

容器是管理基於微服務的應用程序以便單獨開發和部署它們的好方法。您可以將微服務封裝在容器映像及其依賴項中,然後可以使用它來滾動按需實例的微服務,而無需任何額外的工作。

圖 15: 容器的表示及其在微服務中的使用方式 – 微服務訪談問題

36、什麼是微服務架構中的 DRY?

DRY 代表不要重複自己。它基本上促進了重用代碼的概念。這導致開發和共享庫,這反過來導致緊密耦合。

37、什麼是消費者驅動的合同(CDC)?

這基本上是用於開發微服務的模式,以便它們可以被外部系統使用。當我們處理微服務時,有一個特定的提供者構建它,並且有一個或多個使用微服務的消費者。

通常,提供程序在 XML 文檔中指定接口。但在消費者驅動的合同中,每個服務消費者都傳達了提供商期望的接口。

38、Web,RESTful API 在微服務中的作用是什麼?

微服務架構基於一個概念,其中所有服務應該能夠彼此交互以構建業務功能。因此,要實現這一點,每個微服務必須具有接口。這使得 Web API 成爲微服務的一個非常重要的推動者。RESTful API 基於 Web 的開放網絡原則,爲構建微服務架構的各個組件之間的接口提供了最合理的模型。

39、您對微服務架構中的語義監控有何瞭解?

語義監控,也稱爲 綜合監控, 將自動化測試與監控應用程序相結合,以檢測業務失敗因素。

40、我們如何進行跨功能測試?

跨功能測試是對非功能性需求的驗證,即那些無法像普通功能那樣實現的需求。

41、我們如何在測試中消除非決定論?

非確定性測試(NDT)基本上是不可靠的測試。所以,有時可能會發生它們通過,顯然有時它們也可能會失敗。當它們失敗時,它們會重新運行通過。

從測試中刪除非確定性的一些方法如下:

1、 隔離

2、 異步

3、 遠程服務

4、 隔離

5、 時間

6、 資源泄漏

42、Mock 或 Stub 有什麼區別?

存根

· 一個有助於運行測試的虛擬對象。

· 在某些可以硬編碼的條件下提供固定行爲。

· 永遠不會測試存根的任何其他行爲。

例如,對於空堆棧,您可以創建一個只爲 empty()方法 返回 true 的存根。因此,這並不關心堆棧中是否存在元素。

嘲笑

· 一個虛擬對象,其中最初設置了某些屬性。

· 此對象的行爲取決於 set 屬性。

· 也可以測試對象的行爲。

例如,對於 Customer 對象,您可以通過設置名稱和年齡來模擬它。您可以將 age設置爲 12,然後測試 isAdult()方法,該方法將在年齡大於 18 時返回 true。因此,您的 Mock Customer 對象適用於指定的條件。

43、您對 Mike Cohn 的測試金字塔瞭解多少?

Mike Cohn 提供了一個名爲 Test Pyramid 的模型。這描述了軟件開發所需的自動化測試類型。

圖 16: Mike Cohn 的測試金字塔 – 微服務面試問題

根據金字塔,第一層的測試數量應該最高。在服務層,測試次數應小於單元測試級別,但應大於端到端級別。

44、Docker 的目的是什麼?

Docker 提供了一個可用於託管任何應用程序的容器環境。在此,軟件應用程序和支持它的依賴項緊密打包在一起。

因此,這個打包的產品被稱爲 Container,因爲它是由 Docker 完成的,所以它被稱爲 Docker 容器!

45、什麼是金絲雀釋放?

Canary Releasing 是一種降低在生產中引入新軟件版本的風險的技術。這是通過將變更緩慢地推廣到一小部分用戶,然後將其發佈到整個基礎架構,即將其提供給每個人來完成的。

46、什麼是持續集成(CI)?

持續集成(CI)是每次團隊成員提交版本控制更改時自動構建和測試代碼的過程。這鼓勵開發人員通過在每個小任務完成後將更改合併到共享版本控制存儲庫來共享代碼和單元測試。

47、什麼是持續監測?

持續監控深入監控覆蓋範圍,從瀏覽器內前端性能指標,到應用程序性能,再到主機虛擬化基礎架構指標。

48、架構師在微服務架構中的角色是什麼?

微服務架構中的架構師扮演以下角色:

· 決定整個軟件系統的佈局。

· 幫助確定組件的分區。因此,他們確保組件相互粘合,但不緊密耦合。

· 與開發人員共同編寫代碼,瞭解日常生活中面臨的挑戰。

· 爲開發微服務的團隊提供某些工具和技術的建議。

· 提供技術治理,以便技術開發團隊遵循微服務原則。

49、我們可以用微服務創建狀態機嗎?

我們知道擁有自己的數據庫的每個微服務都是一個可獨立部署的程序單元,這反過來又讓我們可以創建一個狀態機。因此,我們可以爲特定的微服務指定不同的狀態和事件。

例如,我們可以定義 Order 微服務。訂單可以具有不同的狀態。Order 狀態的轉換可以是 Order 微服務中的獨立事件。

50、什麼是微服務中的反應性擴展?

Reactive Extensions 也稱爲 Rx。這是一種設計方法,我們通過調用多個服務來收集結果,然後編譯組合響應。這些調用可以是同步或異步,阻塞或非阻塞。Rx是分佈式系統中非常流行的工具,與傳統流程相反。

SpringCloud面試

1、什麼是 Spring Cloud?

Spring cloud 流應用程序啓動器是基於 Spring Boot 的 Spring 集成應用程序,提供與外部系統的集成。Spring cloud Task,一個生命週期短暫的微服務框架,用於快速構建執行有限數據處理的應用程序。

2、使用 Spring Cloud 有什麼優勢?

使用 Spring Boot 開發分佈式微服務時,我們面臨以下問題

(1)與分佈式系統相關的複雜性-這種開銷包括網絡問題,延遲開銷,帶寬問題,安全問題。

(2)服務發現-服務發現工具管理羣集中的流程和服務如何查找和互相交談。它涉及一個服務目錄,在該目錄中註冊服務,然後能夠查找並連接到該目錄中的服務。

(3)冗餘-分佈式系統中的冗餘問題。

(4)負載平衡 --負載平衡改善跨多個計算資源的工作負荷,諸如計算機,計算機集羣,網絡鏈路,中央處理單元,或磁盤驅動器的分佈。

(5)性能-問題 由於各種運營開銷導致的性能問題。

(6)部署複雜性-Devops 技能的要求。

3、服務註冊和發現是什麼意思?Spring Cloud 如何實現?

當我們開始一個項目時,我們通常在屬性文件中進行所有的配置。隨着越來越多的服務開發和部署,添加和修改這些屬性變得更加複雜。有些服務可能會下降,而某些位置可能會發生變化。手動更改屬性可能會產生問題。 Eureka 服務註冊和發現可以在這種情況下提供幫助。由於所有服務都在 Eureka 服務器上註冊並通過調用 Eureka 服務器完成查找,因此無需處理服務地點的任何更改和處理。

4、Spring Cloud 和dubbo區別?

(1)服務調用方式 dubbo是RPC springcloud Rest Api

(2)註冊中心,dubbo 是zookeeper springcloud是eureka,也可以是zookeeper

(3)服務網關,dubbo本身沒有實現,只能通過其他第三方技術整合,springcloud有Zuul路由網關,作爲路由服務器,進行消費者的請求分發,springcloud支持斷路器,與git完美集成配置文件支持版本控制,事物總線實現配置文件的更新與服務自動裝配等等一系列的微服務架構要素。

5、SpringBoot和SpringCloud的區別?

SpringBoot專注於快速方便的開發單個個體微服務。

SpringCloud是關注全局的微服務協調整理治理框架,它將SpringBoot開發的一個個單體微服務整合並管理起來,

爲各個微服務之間提供,配置管理、服務發現、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分佈式會話等等集成服務

SpringBoot可以離開SpringCloud獨立使用開發項目, 但是SpringCloud離不開SpringBoot ,屬於依賴的關係.

SpringBoot專注於快速、方便的開發單個微服務個體,SpringCloud關注全局的服務治理框架。

6、負載平衡的意義什麼?

在計算中,負載平衡可以改善跨計算機,計算機集羣,網絡鏈接,中央處理單元或磁盤驅動器等多種計算資源的工作負載分佈。負載平衡旨在優化資源使用,最大化吞吐量,最小化響應時間並避免任何單一資源的過載。使用多個組件進行負載平衡而不是單個組件可能會通過冗餘來提高可靠性和可用性。負載平衡通常涉及專用軟件或硬件,例如多層交換機或域名系統服務器進程。

7、什麼是 Hystrix?它如何實現容錯?

Hystrix 是一個延遲和容錯庫,旨在隔離遠程系統,服務和第三方庫的訪問點,當出現故障是不可避免的故障時,停止級聯故障並在複雜的分佈式系統中實現彈性。

通常對於使用微服務架構開發的系統,涉及到許多微服務。這些微服務彼此協作。

思考以下微服務

假設如果上圖中的微服務 9 失敗了,那麼使用傳統方法我們將傳播一個異常。但這仍然會導致整個系統崩潰。

隨着微服務數量的增加,這個問題變得更加複雜。微服務的數量可以高達 1000.這是 hystrix 出現的地方 我們將使用 Hystrix 在這種情況下的 Fallback 方法功能。我們有兩個服務 employee-consumer 使用由 employee-consumer 公開的服務。

簡化圖如下所示

現在假設由於某種原因,employee-producer 公開的服務會拋出異常。我們在這種情況下使用 Hystrix 定義了一個回退方法。這種後備方法應該具有與公開服務相同的返回類型。如果暴露服務中出現異常,則回退方法將返回一些值。

8、什麼是 Hystrix 斷路器?我們需要它嗎?

由於某些原因,employee-consumer 公開服務會引發異常。在這種情況下使用Hystrix 我們定義了一個回退方法。如果在公開服務中發生異常,則回退方法返回一些默認值。

如果 firstPage method() 中的異常繼續發生,則 Hystrix 電路將中斷,並且員工使用者將一起跳過 firtsPage 方法,並直接調用回退方法。 斷路器的目的是給第一頁方法或第一頁方法可能調用的其他方法留出時間,並導致異常恢復。可能發生的情況是,在負載較小的情況下,導致異常的問題有更好的恢復機會 。

9、什麼是 Netflix Feign?它的優點是什麼?

Feign 是受到 Retrofit,JAXRS-2.0 和 WebSocket 啓發的 java 客戶端聯編程序。

Feign 的第一個目標是將約束分母的複雜性統一到 http apis,而不考慮其穩定性。

在 employee-consumer 的例子中,我們使用了 employee-producer 使用 REST模板公開的 REST 服務。

但是我們必須編寫大量代碼才能執行以下步驟

(1)使用功能區進行負載平衡。

(2)獲取服務實例,然後獲取基本 URL。

(3)利用 REST 模板來使用服務。 前面的代碼如下

@Controller
public class ConsumerControllerClient {
    @Autowired
    private LoadBalancerClient loadBalancer;
    public void getEmployee() throws RestClientException, IOException {
        ServiceInstance serviceInstance=loadBalancer.choose("employee-producer");
        System.out.println(serviceInstance.getUri());
        String baseUrl=serviceInstance.getUri().toString();
        baseUrl=baseUrl+"/employee";
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<String> response=null;
        try{
            response=restTemplate.exchange(baseUrl,
                        HttpMethod.GET, getHeaders(),String.class);
        }
        catch (Exception ex)
            {
            System.out.println(ex);
        }
        System.out.println(response.getBody());
    }

之前的代碼,有像 NullPointer 這樣的例外的機會,並不是最優的。我們將看到如何使用 Netflix Feign 使呼叫變得更加輕鬆和清潔。如果 Netflix Ribbon 依賴關係也在類路徑中,那麼 Feign 默認也會負責負載平衡。

10、什麼是 Spring Cloud Bus?我們需要它嗎?

考慮以下情況:我們有多個應用程序使用 Spring Cloud Config 讀取屬性,而Spring Cloud Config 從 GIT 讀取這些屬性。

下面的例子中多個員工生產者模塊從 Employee Config Module 獲取 Eureka 註冊的財產。

如果假設 GIT 中的 Eureka 註冊屬性更改爲指向另一臺 Eureka 服務器,會發生什麼情況。在這種情況下,我們將不得不重新啓動服務以獲取更新的屬性。

還有另一種使用執行器端點/刷新的方式。但是我們將不得不爲每個模塊單獨調用這個 url。例如,如果 Employee Producer1 部署在端口 8080 上,則調用 http:// localhost:8080 / refresh。同樣對於 Employee Producer2 http://localhost:8081 / refresh 等等。這又很麻煩。這就是 Spring Cloud Bus 發揮作用的地方。

Spring Cloud Bus 提供了跨多個實例刷新配置的功能。因此,在上面的示例中,如果我們刷新 Employee Producer1,則會自動刷新所有其他必需的模塊。如果我們有多個微服務啓動並運行,這特別有用。這是通過將所有微服務連接到單個消息代理來實現的。無論何時刷新實例,此事件都會訂閱到偵聽此代理的所有微服務,並且它們也會刷新。可以通過使用端點/總線/刷新來實現對任何單個實例的刷新。

11.springcloud斷路器的作用

當一個服務調用另一個服務由於網絡原因或自身原因出現問題,調用者就會等待被調用者的響應 當更多的服務請求到這些資源導致更多的請求等待,發生連鎖效應(雪崩效應)

斷路器有完全打開狀態:一段時間內 達到一定的次數無法調用 並且多次監測沒有恢復的跡象 斷路器完全打開 那麼下次請求就不會請求到該服務

半開:短時間內 有恢復跡象 斷路器會將部分請求發給該服務,正常調用時 斷路器關閉

關閉:當服務一直處於正常狀態 能正常調用

12、什麼是SpringCloudConfig?

在分佈式系統中,由於服務數量巨多,爲了方便服務配置文件統一管理,實時更新,所以需要分佈式配置中心組件。在Spring Cloud中,有分佈式配置中心組件spring cloud config ,它支持配置服務放在配置服務的內存中(即本地),也支持放在遠程Git倉庫中。在spring cloud config 組件中,分兩個角色,一是config server,二是config client。

使用:

(1)添加pom依賴

(2)配置文件添加相關配置

(3)啓動類添加註解@EnableConfigServer

13、Spring Cloud Gateway?

Spring Cloud Gateway是Spring Cloud官方推出的第二代網關框架,取代Zuul網關。網關作爲流量的,在微服務系統中有着非常作用,網關常見的功能有路由轉發、權限校驗、限流控制等作用。

使用了一個RouteLocatorBuilder的bean去創建路由,除了創建路由RouteLocatorBuilder可以讓你添加各種predicates和filters,predicates斷言的意思,顧名思義就是根據具體的請求的規則,由具體的route去處理,filters是各種過濾器,用來對請求做各種判斷和修改。

Spring Boot面試題

1、什麼是 Spring Boot?

多年來,隨着新功能的增加,spring 變得越來越複雜。訪問spring官網頁面,我們就會看到可以在我們的應用程序中使用的所有 Spring 項目的不同功能。如果必須啓動一個新的 Spring 項目,我們必須添加構建路徑或添加 Maven 依賴關係,配置應用程序服務器,添加 spring 配置。因此,開始一個新的 spring 項目需要很多努力,因爲我們現在必須從頭開始做所有事情。

Spring Boot 是解決這個問題的方法。Spring Boot 已經建立在現有 spring 框架之上。使用 spring 啓動,我們避免了之前我們必須做的所有樣板代碼和配置。因此,Spring Boot 可以幫助我們以最少的工作量,更加健壯地使用現有的 Spring功能。

2、Spring Boot 有哪些優點?

Spring Boot 的優點有:

1、減少開發,測試時間和努力。

2、使用 JavaConfig 有助於避免使用 XML。

3、避免大量的 Maven 導入和各種版本衝突。

4、提供意見發展方法。

5、通過提供默認值快速開始開發。

6、沒有單獨的 Web 服務器需要。這意味着你不再需要啓動 Tomcat,Glassfish或其他任何東西。

7、需要更少的配置 因爲沒有 web.xml 文件。只需添加用@ Configuration 註釋的類,然後添加用@Bean 註釋的方法,Spring 將自動加載對象並像以前一樣對其進行管理。您甚至可以將@Autowired 添加到 bean 方法中,以使 Spring 自動裝入需要的依賴關係中。

8、基於環境的配置 使用這些屬性,您可以將您正在使用的環境傳遞到應用程序:-Dspring.profiles.active = {enviornment}。在加載主應用程序屬性文件後,Spring 將在(application{environment} .properties)中加載後續的應用程序屬性文件。

3、什麼是 JavaConfig?

Spring JavaConfig 是 Spring 社區的產品,它提供了配置 Spring IoC 容器的純Java 方法。因此它有助於避免使用 XML 配置。使用 JavaConfig 的優點在於:

(1)面向對象的配置。由於配置被定義爲 JavaConfig 中的類,因此用戶可以充分利用 Java 中的面向對象功能。一個配置類可以繼承另一個,重寫它的@Bean 方法等。

(2)減少或消除 XML 配置。基於依賴注入原則的外化配置的好處已被證明。但是,許多開發人員不希望在 XML 和 Java 之間來回切換。JavaConfig 爲開發人員提供了一種純 Java 方法來配置與 XML 配置概念相似的 Spring 容器。從技術角度來講,只使用 JavaConfig 配置類來配置容器是可行的,但實際上很多人認爲將JavaConfig 與 XML 混合匹配是理想的。

(3)類型安全和重構友好。JavaConfig 提供了一種類型安全的方法來配置 Spring容器。由於 Java 5.0 對泛型的支持,現在可以按類型而不是按名稱檢索 bean,不需要任何強制轉換或基於字符串的查找。

4、如何重新加載 Spring Boot 上的更改,而無需重新啓動服務器?

這可以使用 DEV 工具來實現。通過這種依賴關係,您可以節省任何更改,嵌入式tomcat 將重新啓動。Spring Boot 有一個開發工具(DevTools)模塊,它有助於提高開發人員的生產力。Java 開發人員面臨的一個主要挑戰是將文件更改自動部署到服務器並自動重啓服務器。開發人員可以重新加載 Spring Boot 上的更改,而無需重新啓動服務器。這將消除每次手動部署更改的需要。Spring Boot 在發佈它的第一個版本時沒有這個功能。這是開發人員最需要的功能。DevTools 模塊完全滿足開發人員的需求。該模塊將在生產環境中被禁用。它還提供 H2 數據庫控制檯以更好地測試應用程序。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>

5、Spring Boot 中的監視器是什麼?

Spring boot actuator 是 spring 啓動框架中的重要功能之一。Spring boot 監視器可幫助您訪問生產環境中正在運行的應用程序的當前狀態。有幾個指標必須在生產環境中進行檢查和監控。即使一些外部應用程序可能正在使用這些服務來向相關人員觸發警報消息。監視器模塊公開了一組可直接作爲 HTTP URL 訪問的REST 端點來檢查狀態。

6、如何在 Spring Boot 中禁用 Actuator 端點安全性?

默認情況下,所有敏感的 HTTP 端點都是安全的,只有具有 ACTUATOR 角色的用戶才能訪問它們。安全性是使用標準的 HttpServletRequest.isUserInRole 方法實施的。 我們可以使用來禁用安全性。只有在執行機構端點在防火牆後訪問時,才建議禁用安全性。

7、如何在自定義端口上運行 Spring Boot 應用程序?

爲了在自定義端口上運行 Spring Boot 應用程序,您可以在application.properties 中指定端口。server.port = 8090

8、什麼是 YAML?

YAML 是一種人類可讀的數據序列化語言。它通常用於配置文件。與屬性文件相比,如果我們想要在配置文件中添加複雜的屬性,YAML 文件就更加結構化,而且更少混淆。可以看出 YAML 具有分層配置數據。

9、如何實現 Spring Boot 應用程序的安全性?

爲了實現 Spring Boot 的安全性,我們使用 spring-boot-starter-security 依賴項,並且必須添加安全配置。它只需要很少的代碼。配置類將必須擴展WebSecurityConfigurerAdapter 並覆蓋其方法。

10、如何集成 Spring Boot 和 ActiveMQ?

對於集成 Spring Boot 和 ActiveMQ,我們使用依賴關係。 它只需要很少的配置,並且不需要樣板代碼。

11、如何使用 Spring Boot 實現分頁和排序?

使用 Spring Boot 實現分頁非常簡單。使用 Spring Data-JPA 可以實現將可分頁的傳遞給存儲庫方法。

12、什麼是 Swagger?你用 Spring Boot 實現了它嗎?

Swagger 廣泛用於可視化 API,使用 Swagger UI 爲前端開發人員提供在線沙箱。Swagger 是用於生成 RESTful Web 服務的可視化表示的工具,規範和完整框架實現。它使文檔能夠以與服務器相同的速度更新。當通過 Swagger 正確定義時,消費者可以使用最少量的實現邏輯來理解遠程服務並與其進行交互。因此,Swagger消除了調用服務時的猜測。

13、什麼是 Spring Profiles?

Spring Profiles 允許用戶根據配置文件(dev,test,prod 等)來註冊 bean。因此,當應用程序在開發中運行時,只有某些 bean 可以加載,而在 PRODUCTION中,某些其他 bean 可以加載。假設我們的要求是 Swagger 文檔僅適用於 QA 環境,並且禁用所有其他文檔。這可以使用配置文件來完成。Spring Boot 使得使用配置文件非常簡單。

14、什麼是 Spring Batch?

Spring Boot Batch 提供可重用的函數,這些函數在處理大量記錄時非常重要,包括日誌/跟蹤,事務管理,作業處理統計信息,作業重新啓動,跳過和資源管理。它還提供了更先進的技術服務和功能,通過優化和分區技術,可以實現極高批量和高性能批處理作業。簡單以及複雜的大批量批處理作業可以高度可擴展的方式利用框架處理重要大量的信息。

15、什麼是 FreeMarker 模板?

FreeMarker 是一個基於 Java 的模板引擎,最初專注於使用 MVC 軟件架構進行動態網頁生成。使用 Freemarker 的主要優點是表示層和業務層的完全分離。程序員可以處理應用程序代碼,而設計人員可以處理 html 頁面設計。最後使用freemarker 可以將這些結合起來,給出最終的輸出頁面。

16、如何使用 Spring Boot 實現異常處理?

Spring 提供了一種使用 ControllerAdvice 處理異常的非常有用的方法。 我們通過實現一個 ControlerAdvice 類,來處理控制器類拋出的所有異常。

17、您使用了哪些 starter maven 依賴項?

使用了下面的一些依賴項

spring-boot-starter-activemq

spring-boot-starter-security

這有助於增加更少的依賴關係,並減少版本的衝突。

18、什麼是 CSRF 攻擊?

CSRF 代表跨站請求僞造。這是一種攻擊,迫使最終用戶在當前通過身份驗證的Web 應用程序上執行不需要的操作。CSRF 攻擊專門針對狀態改變請求,而不是數據竊取,因爲攻擊者無法查看對僞造請求的響應。

19、什麼是 WebSockets?

WebSocket 是一種計算機通信協議,通過單個 TCP 連接提供全雙工通信信道。

1、WebSocket 是雙向的 -使用 WebSocket 客戶端或服務器可以發起消息發送。

2、WebSocket 是全雙工的 -客戶端和服務器通信是相互獨立的。

3、單個 TCP 連接 -初始連接使用 HTTP,然後將此連接升級到基於套接字的連接。然後這個單一連接用於所有未來的通信

4、Light -與 http 相比,WebSocket 消息數據交換要輕得多。

20、什麼是 AOP?

在軟件開發過程中,跨越應用程序多個點的功能稱爲交叉問題。這些交叉問題與應用程序的主要業務邏輯不同。因此,將這些橫切關注與業務邏輯分開是面向方面編程(AOP)的地方。

21、什麼是 Apache Kafka?

Apache Kafka 是一個分佈式發佈 - 訂閱消息系統。它是一個可擴展的,容錯的發佈 - 訂閱消息系統,它使我們能夠構建分佈式應用程序。這是一個 Apache 頂級項目。Kafka 適合離線和在線消息消費。

22、我們如何監視所有 Spring Boot 微服務?

Spring Boot 提供監視器端點以監控各個微服務的度量。這些端點對於獲取有關應用程序的信息(如它們是否已啓動)以及它們的組件(如數據庫等)是否正常運行很有幫助。但是,使用監視器的一個主要缺點或困難是,我們必須單獨打開應用程序的知識點以瞭解其狀態或健康狀況。想象一下涉及 50 個應用程序的微服務,管理員將不得不擊中所有 50 個應用程序的執行終端。爲了幫助我們處理這種情況,我們將使用位於的開源項目。 它建立在 Spring Boot Actuator 之上,它提供了一個 Web UI,使我們能夠可視化多個應用程序的度量。

最後

2019年常見的Java面試題總結了一份將近500頁的pdf文檔,歡迎關注我的公衆號:程序員追風,領取這些整理的資料!

喜歡文章記得關注我點個贊喲,感謝支持!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章