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

微服務 面試題

一、您對微服務有何瞭解?
二、微服務架構有哪些優點?
3。微服務有哪些特色?
四、設計微服務的最佳實踐是什麼?
五、微服務架構如何運做?
六、微服務架構的優缺點是什麼?
七、單片,SOA 和微服務架構有什麼區別?
八、在使用微服務架構時,您面臨哪些挑戰?
九、SOA 和微服務架構之間的主要區別是什麼?
十、微服務有什麼特色?
十一、什麼是領域驅動設計?
十二、爲何須要域驅動設計(DDD)?
1三、什麼是無所不在的語言?
1四、什麼是凝聚力?
1五、什麼是耦合?
1六、什麼是 REST / RESTful 以及它的用途是什麼?
1七、你對 Spring Boot 有什麼瞭解?
1八、什麼是 Spring 引導的執行器?
1九、什麼是 Spring Cloud?
20、Spring Cloud 解決了哪些問題?
2一、在 Spring MVC 應用程序中使用 WebMvcTest 註釋有什麼用處?
22。你可否給出關於休息和微服務的要點?
2三、什麼是不一樣類型的微服務測試?
2四、您對 Distributed Transaction 有何瞭解?
2五、什麼是 Idempotence 以及它在哪裏使用?
2六、什麼是有界上下文?
2七、什麼是雙因素身份驗證?
2八、雙因素身份驗證的憑據類型有哪些?
2九、什麼是客戶證書?
30、PACT 在微服務架構中的用途是什麼?
3一、什麼是 OAuth?
3二、康威定律是什麼?
3三、合同測試你懂什麼?
3四、什麼是端到端微服務測試?
3五、Container 在微服務中的用途是什麼?
3六、什麼是微服務架構中的 DRY?
3七、什麼是消費者驅動的合同(CDC)?
3八、Web,RESTful API 在微服務中的做用是什麼?
3九、您對微服務架構中的語義監控有何瞭解?
40、咱們如何進行跨功能測試?
4一、咱們如何在測試中消除非決定論?
4二、Mock 或 Stub 有什麼區別?
4三、您對 Mike Cohn 的測試金字塔瞭解多少?
4四、Docker 的目的是什麼?
4五、什麼是金絲雀釋放?
4六、什麼是持續集成(CI)?
4七、什麼是持續監測?
4八、架構師在微服務架構中的角色是什麼?
4九、咱們能夠用微服務建立狀態機嗎?
50、什麼是微服務中的反應性擴展?

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

微服務,又稱微服務 架 構,是一種架構風格,它將應用程序構建爲以業務領域爲模型的小型自治服務集合 。
通俗地說,你必須看到蜜蜂如何經過對齊六角形蠟細胞來構建它們的蜂窩狀物。他們最初從使用各類材料的小部分開始,並繼續從中構建一個大型蜂箱。這些細胞造成圖案,產生堅固的結構,將蜂窩的特定部分固定在一塊兒。這裏,每一個細胞獨立於另外一個細胞,但它也與其餘細胞相關。這意味着對一個細胞的損害不會損害其餘細胞,所以,蜜蜂能夠在不影響完整蜂箱的狀況下重建這些細胞。
圖 1:微服務的蜂窩表示 – 微服務訪談問題
請參考上圖。這裏,每一個六邊形形狀表明單獨的服務組件。與蜜蜂的工做相似,每一個敏捷團隊都使用可用的框架和所選的技術堆棧構建單獨的服務組件。就像在蜂箱中同樣,每一個服務組件造成一個強大的微服務架構,以提供更好的可擴展性。此外,敏捷團隊能夠單獨處理每一個服務組件的問題,而對整個應用程序沒有影響或影響最小。

二、微服務架構有哪些優點?

圖 2:微服務的 優勢 – 微服務訪談問題
· 獨立開發 – 全部微服務均可以根據各自的功能輕鬆開發
· 獨立部署 – 基於其服務,能夠在任何應用程序中單獨部署它們
· 故障隔離 – 即便應用程序的一項服務不起做用,系統仍可繼續運行
· 混合技術堆棧 – 可使用不一樣的語言和技術來構建同一應用程序的不一樣服務
· 粒度縮放 – 單個組件可根據須要進行縮放,無需將全部組件縮放在一塊兒

三、微服務有哪些特色?

圖 3:微服務的 特色 – 微服務訪談問題
· 解耦 – 系統內的服務很大程度上是分離的。所以,整個應用程序能夠輕鬆構建,更改和擴展
· 組件化 – 微服務被視爲能夠輕鬆更換和升級的獨立組件
· 業務能力 – 微服務很是簡單,專一於單一功能
· 自治 – 開發人員和團隊能夠彼此獨立工做,從而提升速度
· 持續交付 – 經過軟件建立,測試和批准的系統自動化,容許頻繁發佈軟件
· 責任 – 微服務不關注應用程序做爲項目。相反,他們將應用程序視爲他們負責的產品
· 分散治理 – 重點是使用正確的工具來作正確的工做。這意味着沒有標準化模式或任何技術模式。開發人員能夠自由選擇最有用的工具來解決他們的問題
· 敏捷 – 微服務支持敏捷開發。任何新功能均可以快速開發並再次丟棄

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

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

五、微服務架構如何運做?

微服務架構具備如下組件:
圖 5:微服務 架構 – 微服務面試問題
· 客戶端 – 來自不一樣設備的不一樣用戶發送請求。
· 身份提供商 – 驗證用戶或客戶身份並頒發安全令牌。
· API 網關 – 處理客戶端請求。
· 靜態內容 – 容納系統的全部內容。
· 管理 – 在節點上平衡服務並識別故障。
· 服務發現 – 查找微服務之間通訊路徑的指南。
· 內容交付網絡 – 代理服務器及其數據中心的分佈式網絡。
· 遠程服務 – 啓用駐留在 IT 設備網絡上的遠程訪問信息。

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

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

圖 6: 單片 SOA 和微服務之間的比較 – 微服務訪談問題
· 單片架構相似於大容器,其中應用程序的全部軟件組件組裝在一塊兒並緊密封裝。
· 一個面向服務的架構是一種相互通訊服務的集合。通訊能夠涉及簡單的數據傳遞,也能夠涉及兩個或多個協調某些活動的服務。
· 微服務架構是一種架構風格,它將應用程序構建爲以業務域爲模型的小型自治服務集合。

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

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

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

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

十、微服務有什麼特色?

您能夠列出微服務的特徵,以下所示:
圖 7:微服務的特徵 – 微服務訪談問題

十一、什麼是領域驅動設計?

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

十二、爲何須要域驅動設計(DDD)?

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

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

若是您必須定義泛在語言(UL),那麼它是特定域的開發人員和用戶使用的通用語言,經過該語言能夠輕鬆解釋域。
無處不在的語言必須很是清晰,以便它將全部團隊成員放在同一頁面上,並以機器能夠理解的方式進行翻譯。

1四、什麼是凝聚力?

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

1五、什麼是耦合?

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

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

Representational State Transfer(REST)/ RESTful Web 服務是一種幫助計算機系統經過 Internet 進行通訊的架構風格。這使得微服務更容易理解和實現。
微服務可使用或不使用 RESTful API 實現,但使用 RESTful API 構建鬆散耦合的微服務老是更容易。

1七、你對 Spring Boot 有什麼瞭解?

事實上,隨着新功能的增長,彈簧變得愈來愈複雜。若是必須啓動新的 spring 項目,則必須添加構建路徑或添加 maven 依賴項,配置應用程序服務器,添加 spring配置。因此一切都必須從頭開始。
Spring Boot 是解決這個問題的方法。使用 spring boot 能夠避免全部樣板代碼和配置。所以,基本上認爲本身就好像你正在烘烤蛋糕同樣,春天就像製做蛋糕所需的成分同樣,彈簧靴就是你手中的完整蛋糕。
圖 10: Spring Boot 的因素 – 微服務面試問題

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

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

1九、什麼是 Spring Cloud?

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

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

在使用 Spring Boot 開發分佈式微服務時,咱們面臨的問題不多由 Spring Cloud解決。
· 與分佈式系統相關的複雜性 – 包括網絡問題,延遲開銷,帶寬問題,安全問題。
· 處理服務發現的能力 – 服務發現容許集羣中的進程和服務找到彼此並進行通訊。
· 解決冗餘問題 – 冗餘問題常常發生在分佈式系統中。
· 負載平衡 – 改進跨多個計算資源(例如計算機集羣,網絡連接,中央處理單元)的工做負載分佈。
· 減小性能問題 – 減小因各類操做開銷致使的性能問題。

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

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

2二、你可否給出關於休息和微服務的要點?

雖然您能夠經過多種方式實現微服務,但 REST over HTTP 是實現微服務的一種方式。REST 還可用於其餘應用程序,如 Web 應用程序,API 設計和 MVC 應用程序,以提供業務數據。
微服務是一種體系結構,其中系統的全部組件都被放入單獨的組件中,這些組件能夠單獨構建,部署和擴展。微服務的某些原則和最佳實踐有助於構建彈性應用程序。
簡而言之,您能夠說 REST 是構建微服務的媒介。

2三、什麼是不一樣類型的微服務測試?

在使用微服務時,因爲有多個微服務協同工做,測試變得很是複雜。所以,測試分爲不一樣的級別。
· 在底層,咱們有面向技術的測試,如單元測試和性能測試。這些是徹底自動化的。
· 在中間層面,咱們進行了諸如壓力測試和可用性測試之類的探索性測試。
· 在頂層, 咱們的 驗收測試數量不多。這些驗收測試有助於利益相關者理解和驗證軟件功能。

2四、您對 Distributed Transaction 有何瞭解?

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

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

冪等性是可以以這樣的方式作兩次事情的特性,即最終結果將保持不變,即好像它只作了一次。
用法:在遠程服務或數據源中使用 Idempotence,這樣當它屢次接收指令時,它只處理指令一次。

2六、什麼是有界上下文?

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

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

雙因素身份驗證爲賬戶登陸過程啓用第二級身份驗證。
圖 11: 雙因素認證的表示 – 微服務訪談問題
所以,假設用戶必須只輸入用戶名和密碼,那麼這被認爲是單因素身份驗證。

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

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

2九、什麼是客戶證書?

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

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

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

3一、什麼是 OAuth?

OAuth 表明開放受權協議。這容許經過在 HTTP 服務上啓用客戶端應用程序(例如第三方提供商 Facebook,GitHub 等)來訪問資源全部者的資源。所以,您能夠在不使用其憑據的狀況下與另外一個站點共享存儲在一個站點上的資源。

3二、康威定律是什麼?

「任 何 設 計 系 統 的 組 織 ( 廣 泛 定 義 ) 都 將 產 生 一 種 設 計 , 其 結 構 是 組 織 通 信 結 構的 副 本 。」 – Mel Conway
圖 13: Conway 定律的表示 – 微服務訪談問題
該法律基本上試圖傳達這樣一個事實:爲了使軟件模塊起做用,整個團隊應該進行良好的溝通。所以,系統的結構反映了產生它的組織的社會邊界。

3三、合同測試你懂什麼?

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

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

端到端測試驗證了工做流中的每一個流程都正常運行。這可確保系統做爲一個總體協同工做並知足全部要求。
通俗地說,你能夠說端到端測試是一種測試,在特定時期後測試全部東西。
圖 14:測試層次 – 微服務面試問題

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

容器是管理基於微服務的應用程序以便單獨開發和部署它們的好方法。您能夠將微服務封裝在容器映像及其依賴項中,而後可使用它來滾動按需實例的微服務,而無需任何額外的工做。
圖 15: 容器的表示及其在微服務中的使用方式 – 微服務訪談問題

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

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

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

這基本上是用於開發微服務的模式,以便它們能夠被外部系統使用。當咱們處理微服務時,有一個特定的提供者構建它,而且有一個或多個使用微服務的消費者。
一般,提供程序在 XML 文檔中指定接口。但在消費者驅動的合同中,每一個服務消費者都傳達了提供商指望的接口。

3八、Web,RESTful API 在微服務中的做用是什麼?

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

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

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

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

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

4一、咱們如何在測試中消除非決定論?

非肯定性測試(NDT)基本上是不可靠的測試。因此,有時可能會發生它們經過,顯然有時它們也可能會失敗。當它們失敗時,它們會從新運行經過。
從測試中刪除非肯定性的一些方法以下:
一、 隔離
二、 異步
三、 遠程服務
四、 隔離
五、 時間
六、 資源泄漏

4二、Mock 或 Stub 有什麼區別?

存根
· 一個有助於運行測試的虛擬對象。
· 在某些能夠硬編碼的條件下提供固定行爲。
· 永遠不會測試存根的任何其餘行爲。
例如,對於空堆棧,您能夠建立一個只爲 empty()方法 返回 true 的存根。所以,這並不關心堆棧中是否存在元素。
嘲笑
· 一個虛擬對象,其中最初設置了某些屬性。
· 此對象的行爲取決於 set 屬性。
· 也能夠測試對象的行爲。
例如,對於 Customer 對象,您能夠經過設置名稱和年齡來模擬它。您能夠將 age設置爲 12,而後測試 isAdult()方法,該方法將在年齡大於 18 時返回 true。所以,您的 Mock Customer 對象適用於指定的條件。

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

Mike Cohn 提供了一個名爲 Test Pyramid 的模型。這描述了軟件開發所需的自動化測試類型。
圖 16: Mike Cohn 的測試金字塔 – 微服務面試問題
根據金字塔,第一層的測試數量應該最高。在服務層,測試次數應小於單元測試級別,但應大於端到端級別。

4四、Docker 的目的是什麼?

Docker 提供了一個可用於託管任何應用程序的容器環境。在此,軟件應用程序和支持它的依賴項緊密打包在一塊兒。
所以,這個打包的產品被稱爲 Container,由於它是由 Docker 完成的,因此它被稱爲 Docker 容器!

4五、什麼是金絲雀釋放?

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

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

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

4七、什麼是持續監測?

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

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

微服務架構中的架構師扮演如下角色:
· 決定整個軟件系統的佈局。
· 幫助肯定組件的分區。所以,他們確保組件相互粘合,但不緊密耦合。
· 與開發人員共同編寫代碼,瞭解平常生活中面臨的挑戰。
· 爲開發微服務的團隊提供某些工具和技術的建議。
· 提供技術治理,以便技術開發團隊遵循微服務原則。

4九、咱們能夠用微服務建立狀態機嗎?

咱們知道擁有本身的數據庫的每一個微服務都是一個可獨立部署的程序單元,這反過來又讓咱們能夠建立一個狀態機。所以,咱們能夠爲特定的微服務指定不一樣的狀態和事件。
例如,咱們能夠定義 Order 微服務。訂單能夠具備不一樣的狀態。Order 狀態的轉換能夠是 Order 微服務中的獨立事件。

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

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

SpringCloud面試題

一、什麼是 Spring Cloud?

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

二、使用 Spring Cloud 有什麼優點?

使用 Spring Boot 開發分佈式微服務時,咱們面臨如下問題
(1)與分佈式系統相關的複雜性-這種開銷包括網絡問題,延遲開銷,帶寬問題,安全問題。
(2)服務發現-服務發現工具管理羣集中的流程和服務如何查找和互相交談。它涉及一個服務目錄,在該目錄中註冊服務,而後可以查找並鏈接到該目錄中的服務。
(3)冗餘-分佈式系統中的冗餘問題。
(4)負載平衡 --負載平衡改善跨多個計算資源的工做負荷,諸如計算機,計算機集羣,網絡鏈路,中央處理單元,或磁盤驅動器的分佈。
(5)性能-問題 因爲各類運營開銷致使的性能問題。
(6)部署複雜性-Devops 技能的要求。

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

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

四、Spring Cloud 和dubbo區別?

(1)服務調用方式 dubbo是RPC springcloud Rest Api
(2)註冊中心,dubbo 是zookeeper springcloud是eureka,也能夠是zookeeper
(3)服務網關,dubbo自己沒有實現,只能經過其餘第三方技術整合,springcloud有Zuul路由網關,做爲路由服務器,進行消費者的請求分發,springcloud支持斷路器,與git完美集成配置文件支持版本控制,事物總線實現配置文件的更新與服務自動裝配等等一系列的微服務架構要素。

五、SpringBoot和SpringCloud的區別?

SpringBoot專一於快速方便的開發單個個體微服務。
SpringCloud是關注全局的微服務協調整理治理框架,它將SpringBoot開發的一個個單體微服務整合並管理起來,
爲各個微服務之間提供,配置管理、服務發現、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分佈式會話等等集成服務
SpringBoot能夠離開SpringCloud獨立使用開發項目, 可是SpringCloud離不開SpringBoot ,屬於依賴的關係.
SpringBoot專一於快速、方便的開發單個微服務個體,SpringCloud關注全局的服務治理框架。

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

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

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

Hystrix 是一個延遲和容錯庫,旨在隔離遠程系統,服務和第三方庫的訪問點,當出現故障是不可避免的故障時,中止級聯故障並在複雜的分佈式系統中實現彈性。
一般對於使用微服務架構開發的系統,涉及到許多微服務。這些微服務彼此協做。
思考如下微服務
假設若是上圖中的微服務 9 失敗了,那麼使用傳統方法咱們將傳播一個異常。但這仍然會致使整個系統崩潰。
隨着微服務數量的增長,這個問題變得更加複雜。微服務的數量能夠高達 1000.這是 hystrix 出現的地方 咱們將使用 Hystrix 在這種狀況下的 Fallback 方法功能。咱們有兩個服務 employee-consumer 使用由 employee-consumer 公開的服務。
簡化圖以下所示
如今假設因爲某種緣由,employee-producer 公開的服務會拋出異常。咱們在這種狀況下使用 Hystrix 定義了一個回退方法。這種後備方法應該具備與公開服務相同的返回類型。若是暴露服務中出現異常,則回退方法將返回一些值。

八、什麼是 Hystrix 斷路器?咱們須要它嗎?

因爲某些緣由,employee-consumer 公開服務會引起異常。在這種狀況下使用Hystrix 咱們定義了一個回退方法。若是在公開服務中發生異常,則回退方法返回一些默認值。
若是 firstPage method() 中的異常繼續發生,則 Hystrix 電路將中斷,而且員工使用者將一塊兒跳過 firtsPage 方法,並直接調用回退方法。 斷路器的目的是給第一頁方法或第一頁方法可能調用的其餘方法留出時間,並致使異常恢復。可能發生的狀況是,在負載較小的狀況下,致使異常的問題有更好的恢復機會 。

九、什麼是 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 默認也會負責負載平衡。

十、什麼是 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斷路器的做用

當一個服務調用另外一個服務因爲網絡緣由或自身緣由出現問題,調用者就會等待被調用者的響應 當更多的服務請求到這些資源致使更多的請求等待,發生連鎖效應(雪崩效應)
斷路器有徹底打開狀態:一段時間內 達到必定的次數沒法調用 而且屢次監測沒有恢復的跡象 斷路器徹底打開 那麼下次請求就不會請求到該服務
半開:短期內 有恢復跡象 斷路器會將部分請求發給該服務,正常調用時 斷路器關閉
關閉:當服務一直處於正常狀態 能正常調用

十二、什麼是SpringCloudConfig?

在分佈式系統中,因爲服務數量巨多,爲了方便服務配置文件統一管理,實時更新,因此須要分佈式配置中心組件。在Spring Cloud中,有分佈式配置中心組件spring cloud config ,它支持配置服務放在配置服務的內存中(即本地),也支持放在遠程Git倉庫中。在spring cloud config 組件中,分兩個角色,一是config server,二是config client。
使用:
(1)添加pom依賴
(2)配置文件添加相關配置
(3)啓動類添加註解@EnableConfigServer

1三、Spring Cloud Gateway?

Spring Cloud Gateway是Spring Cloud官方推出的第二代網關框架,取代Zuul網關。網關做爲流量的,在微服務系統中有着很是做用,網關常見的功能有路由轉發、權限校驗、限流控制等做用。
使用了一個RouteLocatorBuilder的bean去建立路由,除了建立路由RouteLocatorBuilder可讓你添加各類predicates和filters,predicates斷言的意思,顧名思義就是根據具體的請求的規則,由具體的route去處理,filters是各類過濾器,用來對請求作各類判斷和修改。

Spring Boot面試題

一、什麼是 Spring Boot?

多年來,隨着新功能的增長,spring 變得愈來愈複雜。訪問spring官網頁面,咱們就會看到能夠在咱們的應用程序中使用的全部 Spring 項目的不一樣功能。若是必須啓動一個新的 Spring 項目,咱們必須添加構建路徑或添加 Maven 依賴關係,配置應用程序服務器,添加 spring 配置。所以,開始一個新的 spring 項目須要不少努力,由於咱們如今必須從頭開始作全部事情。
Spring Boot 是解決這個問題的方法。Spring Boot 已經創建在現有 spring 框架之上。使用 spring 啓動,咱們避免了以前咱們必須作的全部樣板代碼和配置。所以,Spring Boot 能夠幫助咱們以最少的工做量,更加健壯地使用現有的 Spring功能。

二、Spring Boot 有哪些優勢?

Spring Boot 的優勢有:
一、減小開發,測試時間和努力。
二、使用 JavaConfig 有助於避免使用 XML。
三、避免大量的 Maven 導入和各類版本衝突。
四、提供意見發展方法。
五、經過提供默認值快速開始開發。
六、沒有單獨的 Web 服務器須要。這意味着你再也不須要啓動 Tomcat,Glassfish或其餘任何東西。
七、須要更少的配置 由於沒有 web.xml 文件。只需添加用@ Configuration 註釋的類,而後添加用@Bean 註釋的方法,Spring 將自動加載對象並像之前同樣對其進行管理。您甚至能夠將@Autowired 添加到 bean 方法中,以使 Spring 自動裝入須要的依賴關係中。
八、基於環境的配置 使用這些屬性,您能夠將您正在使用的環境傳遞到應用程序:-Dspring.profiles.active = {enviornment}。在加載主應用程序屬性文件後,Spring 將在(application{environment} .properties)中加載後續的應用程序屬性文件。

三、什麼是 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,不須要任何強制轉換或基於字符串的查找。

四、如何從新加載 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>複製代碼

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

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

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

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

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

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

八、什麼是 YAML?

YAML 是一種人類可讀的數據序列化語言。它一般用於配置文件。與屬性文件相比,若是咱們想要在配置文件中添加複雜的屬性,YAML 文件就更加結構化,並且更少混淆。能夠看出 YAML 具備分層配置數據。

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

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

十、如何集成 Spring Boot 和 ActiveMQ?

對於集成 Spring Boot 和 ActiveMQ,咱們使用依賴關係。 它只須要不多的配置,而且不須要樣板代碼。

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

使用 Spring Boot 實現分頁很是簡單。使用 Spring Data-JPA 能夠實現將可分頁的傳遞給存儲庫方法。

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

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

1三、什麼是 Spring Profiles?

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

1四、什麼是 Spring Batch?

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

1五、什麼是 FreeMarker 模板?

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

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

Spring 提供了一種使用 ControllerAdvice 處理異常的很是有用的方法。 咱們經過實現一個 ControlerAdvice 類,來處理控制器類拋出的全部異常。

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

使用了下面的一些依賴項
spring-boot-starter-activemq
spring-boot-starter-security
這有助於增長更少的依賴關係,並減小版本的衝突。

1八、什麼是 CSRF 攻擊?

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

1九、什麼是 WebSockets?

WebSocket 是一種計算機通訊協議,經過單個 TCP 鏈接提供全雙工通訊信道。
一、WebSocket 是雙向的 -使用 WebSocket 客戶端或服務器能夠發起消息發送。
二、WebSocket 是全雙工的 -客戶端和服務器通訊是相互獨立的。
三、單個 TCP 鏈接 -初始鏈接使用 HTTP,而後將此鏈接升級到基於套接字的鏈接。而後這個單一鏈接用於全部將來的通訊
四、Light -與 http 相比,WebSocket 消息數據交換要輕得多。

20、什麼是 AOP?

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

2一、什麼是 Apache Kafka?

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

2二、咱們如何監視全部 Spring Boot 微服務?

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

最後

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

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