【助力2020面試】精心整理85道Java微服務面試題(含答案)

程式設計師追風發表於2020-02-11

微服務 面試題

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、什麼是微服務中的反應性擴充套件?
【助力2020面試】精心整理85道Java微服務面試題(含答案)

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

微服務,又稱微服務 架 構,是一種架構風格,它將應用程式構建為以業務領域為模型的小型自治服務集合 。
通俗地說,你必須看到蜜蜂如何通過對齊六角形蠟細胞來構建它們的蜂窩狀物。他們最初從使用各種材料的小部分開始,並繼續從中構建一個大型蜂箱。這些細胞形成圖案,產生堅固的結構,將蜂窩的特定部分固定在一起。這裡,每個細胞獨立於另一個細胞,但它也與其他細胞相關。這意味著對一個細胞的損害不會損害其他細胞,因此,蜜蜂可以在不影響完整蜂箱的情況下重建這些細胞。
【助力2020面試】精心整理85道Java微服務面試題(含答案)
圖 1:微服務的蜂窩表示 – 微服務訪談問題
請參考上圖。這裡,每個六邊形形狀代表單獨的服務元件。與蜜蜂的工作類似,每個敏捷團隊都使用可用的框架和所選的技術堆疊構建單獨的服務元件。就像在蜂箱中一樣,每個服務元件形成一個強大的微服務架構,以提供更好的可擴充套件性。此外,敏捷團隊可以單獨處理每個服務元件的問題,而對整個應用程式沒有影響或影響最小。

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

【助力2020面試】精心整理85道Java微服務面試題(含答案)
圖 2:微服務的 優點 – 微服務訪談問題
· 獨立開發 – 所有微服務都可以根據各自的功能輕鬆開發
· 獨立部署 – 基於其服務,可以在任何應用程式中單獨部署它們
· 故障隔離 – 即使應用程式的一項服務不起作用,系統仍可繼續執行
· 混合技術堆疊 – 可以使用不同的語言和技術來構建同一應用程式的不同服務
· 粒度縮放 – 單個元件可根據需要進行縮放,無需將所有元件縮放在一起

3、微服務有哪些特點?

【助力2020面試】精心整理85道Java微服務面試題(含答案)
圖 3:微服務的 特點 – 微服務訪談問題
· 解耦 – 系統內的服務很大程度上是分離的。因此,整個應用程式可以輕鬆構建,更改和擴充套件
· 元件化 – 微服務被視為可以輕鬆更換和升級的獨立元件
· 業務能力 – 微服務非常簡單,專注於單一功能
· 自治 – 開發人員和團隊可以彼此獨立工作,從而提高速度
· 持續交付 – 通過軟體建立,測試和批准的系統自動化,允許頻繁釋出軟體
· 責任 – 微服務不關注應用程式作為專案。相反,他們將應用程式視為他們負責的產品
· 分散治理 – 重點是使用正確的工具來做正確的工作。這意味著沒有標準化模式或任何技術模式。開發人員可以自由選擇最有用的工具來解決他們的問題
· 敏捷 – 微服務支援敏捷開發。任何新功能都可以快速開發並再次丟棄

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

以下是設計微服務的最佳實踐:
【助力2020面試】精心整理85道Java微服務面試題(含答案)
圖 4:設計微服務的最佳實踐 – 微服務訪談問題

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

微服務架構具有以下元件:
【助力2020面試】精心整理85道Java微服務面試題(含答案)
圖 5:微服務 架構 – 微服務面試問題
· 客戶端 – 來自不同裝置的不同使用者傳送請求。
· 身份提供商 – 驗證使用者或客戶身份並頒發安全令牌。
· API 閘道器 – 處理客戶端請求。
· 靜態內容 – 容納系統的所有內容。
· 管理 – 在節點上平衡服務並識別故障。
· 服務發現 – 查詢微服務之間通訊路徑的指南。
· 內容交付網路 – 代理伺服器及其資料中心的分散式網路。
· 遠端服務 – 啟用駐留在 IT 裝置網路上的遠端訪問資訊。

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

【助力2020面試】精心整理85道Java微服務面試題(含答案)

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

【助力2020面試】精心整理85道Java微服務面試題(含答案)
圖 6: 單片 SOA 和微服務之間的比較 – 微服務訪談問題
· 單片架構類似於大容器,其中應用程式的所有軟體元件組裝在一起並緊密封裝。
· 一個面向服務的架構是一種相互通訊服務的集合。通訊可以涉及簡單的資料傳遞,也可以涉及兩個或多個協調某些活動的服務。
· 微服務架構是一種架構風格,它將應用程式構建為以業務域為模型的小型自治服務集合。

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

開發一些較小的微服務聽起來很容易,但開發它們時經常遇到的挑戰如下。
· 自動化元件:難以自動化,因為有許多較小的元件。因此,對於每個元件,我們必須遵循 Build,Deploy 和 Monitor 的各個階段。
· 易感性:將大量元件維護在一起變得難以部署,維護,監控和識別問題。它需要在所有元件周圍具有很好的感知能力。
· 配置管理:有時在各種環境中維護元件的配置變得困難。
· 除錯:很難找到錯誤的每一項服務。維護集中式日誌記錄和儀表板以除錯問題至關重要。

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

SOA 和微服務之間的主要區別如下:
【助力2020面試】精心整理85道Java微服務面試題(含答案)

10、微服務有什麼特點?

您可以列出微服務的特徵,如下所示:
【助力2020面試】精心整理85道Java微服務面試題(含答案)
圖 7:微服務的特徵 – 微服務訪談問題

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

【助力2020面試】精心整理85道Java微服務面試題(含答案)
圖 8: DDD 原理 – 微服務面試問題

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

【助力2020面試】精心整理85道Java微服務面試題(含答案)
圖 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 可以避免所有樣板程式碼和配置。因此,基本上認為自己就好像你正在烘烤蛋糕一樣,春天就像製作蛋糕所需的成分一樣,彈簧靴就是你手中的完整蛋糕。
【助力2020面試】精心整理85道Java微服務面試題(含答案)
圖 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 註釋有什麼用處?

【助力2020面試】精心整理85道Java微服務面試題(含答案)
在測試目標只關注 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、什麼是雙因素身份驗證?

雙因素身份驗證為帳戶登入過程啟用第二級身份驗證。
【助力2020面試】精心整理85道Java微服務面試題(含答案)
圖 11: 雙因素認證的表示 – 微服務訪談問題
因此,假設使用者必須只輸入使用者名稱和密碼,那麼這被認為是單因素身份驗證。

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

這三種憑證是:
【助力2020面試】精心整理85道Java微服務面試題(含答案)
圖 12: 雙因素認證的證照型別 – 微服務面試問題

29、什麼是客戶證照?

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

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

PACT 是一個開源工具,允許測試服務提供者和消費者之間的互動,與合同隔離,從而提高微服務整合的可靠性。
微服務中的用法
· 用於在微服務中實現消費者驅動的合同。
· 測試微服務的消費者和提供者之間的消費者驅動的合同。
檢視即將到來的批次

31、什麼是 OAuth?

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

32、康威定律是什麼?

“任 何 設 計 系 統 的 組 織 ( 廣 泛 定 義 ) 都 將 產 生 一 種 設 計 , 其 結 構 是 組 織 通 信 結 構的 副 本 。” – Mel Conway
【助力2020面試】精心整理85道Java微服務面試題(含答案)
圖 13: Conway 定律的表示 – 微服務訪談問題
該法律基本上試圖傳達這樣一個事實:為了使軟體模組起作用,整個團隊應該進行良好的溝通。因此,系統的結構反映了產生它的組織的社會邊界。

33、合同測試你懂什麼?

根據 Martin Flower 的說法,合同測試是在外部服務邊界進行的測試,用於驗證其是否符合消費服務預期的合同。
此外,合同測試不會深入測試服務的行為。更確切地說,它測試該服務呼叫的輸入&輸出包含所需的屬性和所述響應延遲,吞吐量是允許的限度內。

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

端到端測試驗證了工作流中的每個流程都正常執行。這可確保系統作為一個整體協同工作並滿足所有要求。
通俗地說,你可以說端到端測試是一種測試,在特定時期後測試所有東西。
【助力2020面試】精心整理85道Java微服務面試題(含答案)
圖 14:測試層次 – 微服務面試問題

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

容器是管理基於微服務的應用程式以便單獨開發和部署它們的好方法。您可以將微服務封裝在容器映像及其依賴項中,然後可以使用它來滾動按需例項的微服務,而無需任何額外的工作。
【助力2020面試】精心整理85道Java微服務面試題(含答案)
圖 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 的模型。這描述了軟體開發所需的自動化測試型別。
【助力2020面試】精心整理85道Java微服務面試題(含答案)
圖 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是分散式系統中非常流行的工具,與傳統流程相反。
【助力2020面試】精心整理85道Java微服務面試題(含答案)

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 是一個延遲和容錯庫,旨在隔離遠端系統,服務和第三方庫的訪問點,當出現故障是不可避免的故障時,停止級聯故障並在複雜的分散式系統中實現彈性。
通常對於使用微服務架構開發的系統,涉及到許多微服務。這些微服務彼此協作。
思考以下微服務
【助力2020面試】精心整理85道Java微服務面試題(含答案)
假設如果上圖中的微服務 9 失敗了,那麼使用傳統方法我們將傳播一個異常。但這仍然會導致整個系統崩潰。
隨著微服務數量的增加,這個問題變得更加複雜。微服務的數量可以高達 1000.這是 hystrix 出現的地方 我們將使用 Hystrix 在這種情況下的 Fallback 方法功能。我們有兩個服務 employee-consumer 使用由 employee-consumer 公開的服務。
簡化圖如下所示
【助力2020面試】精心整理85道Java微服務面試題(含答案)
現在假設由於某種原因,employee-producer 公開的服務會丟擲異常。我們在這種情況下使用 Hystrix 定義了一個回退方法。這種後備方法應該具有與公開服務相同的返回型別。如果暴露服務中出現異常,則回退方法將返回一些值。

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

由於某些原因,employee-consumer 公開服務會引發異常。在這種情況下使用Hystrix 我們定義了一個回退方法。如果在公開服務中發生異常,則回退方法返回一些預設值。
【助力2020面試】精心整理85道Java微服務面試題(含答案)
如果 firstPage method() 中的異常繼續發生,則 Hystrix 電路將中斷,並且員工使用者將一起跳過 firtsPage 方法,並直接呼叫回退方法。 斷路器的目的是給第一頁方法或第一頁方法可能呼叫的其他方法留出時間,並導致異常恢復。可能發生的情況是,在負載較小的情況下,導致異常的問題有更好的恢復機會 。
【助力2020面試】精心整理85道Java微服務面試題(含答案)

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 註冊的財產。
【助力2020面試】精心整理85道Java微服務面試題(含答案)
如果假設 GIT 中的 Eureka 註冊屬性更改為指向另一臺 Eureka 伺服器,會發生什麼情況。在這種情況下,我們將不得不重新啟動服務以獲取更新的屬性。
還有另一種使用執行器端點/重新整理的方式。但是我們將不得不為每個模組單獨呼叫這個 url。例如,如果 Employee Producer1 部署在埠 8080 上,則呼叫 http:// localhost:8080 / refresh。同樣對於 Employee Producer2 http://localhost:8081 / refresh 等等。這又很麻煩。這就是 Spring Cloud Bus 發揮作用的地方。
【助力2020面試】精心整理85道Java微服務面試題(含答案)
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是各種過濾器,用來對請求做各種判斷和修改。
【助力2020面試】精心整理85道Java微服務面試題(含答案)

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文件,歡迎關注我的公眾號:程式設計師追風,領取這些整理的資料!

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


相關文章