前言
Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的開發便利性巧妙地簡化了分佈式系統基礎設施的開發,如服務發現註冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,均可以用 Spring Boot 的開發風格作到一鍵啓動和部署。Spring Cloud 並無重複製造輪子,它只是將目前各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,經過 Spring Boot 風格進行再封裝屏蔽掉了複雜的配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分佈式系統開發工具包。
前端
小編分享的這份金三銀四Java後端開發面試總結包含了JavaOOP、Java集合容器、Java異常、併發編程、Java反射、Java序列化、JVM、Redis、Spring MVC、MyBatis、MySQL數據庫、消息中間件MQ、Dubbo、Linux、ZooKeeper、 分佈式&數據結構與算法等26個專題技術點,都是小編在各個大廠總結出來的面試真題,已經有不少粉絲靠這份PDF拿下衆多大廠的offer,今天在這裏總結分享給到你們!【持續更新中!】java
完整版Java面試題地址:2021最新面試題合集集錦。git
1、 什麼是微服務架構
1. 什麼是微服務架構
微服務架構就是將單體的應用程序分紅多個應用程序,這多個應用程序就成爲微服務,每一個微服務運行在本身的進程中,並使用輕量級的機制通訊。這些服務圍繞業務能力來劃分,並經過自動化部署機制來獨立部署。這些服務可使用不一樣的編程語言,不一樣數據庫,以保證最低限度的集中式管理。 程序員
2. 爲何須要學習Spring Cloud
- 首先springcloud基於spingboot的優雅簡潔,可還記得咱們被無數xml支配的恐懼?可還記得 springmvc,mybatis錯綜複雜的配置,有了spingboot,這些東西都不須要了,spingboot好處不 再贅訴,springcloud就基於SpringBoot把市場上優秀的服務框架組合起來,經過Spring Boot風格進行再封裝屏蔽掉了複雜的配置和實現原理
- 什麼叫作開箱即用?即便是當年的黃金搭檔dubbo+zookeeper下載配置起來也是頗費心神的!而springcloud完成這些只須要一個jar的依賴就能夠了!
- springcloud大多數子模塊都是直擊痛點,像zuul解決的跨域,fegin解決的負載均衡,hystrix的熔斷機制等等等等
3. Spring Cloud 是什麼
- Spring Cloud是一系列框架的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分佈式系統基礎設施的開發,如服務發現註冊、配置中心、智能路由、消息總線、負載均衡、斷路器、數據監控等,均可以用Spring Boot的開發風格作到一鍵啓動和部署。
- Spring Cloud並無重複製造輪子,它只是將各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,經過Spring Boot風格進行再封裝屏蔽掉了複雜的配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分佈式系統開發工具包。
4. SpringCloud的優缺點
優勢:web
1.耦合度比較低。不會影響其餘模塊的開發。 面試
2.減輕團隊的成本,能夠並行開發,不用關注其餘人怎麼開發,先關注本身的開發。 算法
3.配置比較簡單,基本用註解就能實現,不用使用過多的配置文件。 spring
4.微服務跨平臺的,能夠用任何一種語言開發。 數據庫
5.每一個微服務能夠有本身的獨立的數據庫也有用公共的數據庫。 編程
6.直接寫後端的代碼,不用關注前端怎麼開發,直接寫本身的後端代碼便可,而後暴露接口,經過組件進行服務通訊。
缺點:
1.部署比較麻煩,給運維工程師帶來必定的麻煩。
2.針對數據的管理比麻煩,由於微服務能夠每一個微服務使用一個數據庫。
3.系統集成測試比較麻煩
4.性能的監控比較麻煩。【最好開發一個大屏監控系統】
- 總的來講優勢大過於缺點,目前看來Spring Cloud是一套很是完善的分佈式框架,目前不少企業開始用微服務、Spring Cloud的優點是顯而易見的。所以對於想研究微服務架構的同窗來講,學習Spring Cloud是一個不錯的選擇。
5. SpringBoot和SpringCloud的區別?
- SpringBoot專一於快速方便的開發單個個體微服務。
- SpringCloud是關注全局的微服務協調整理治理框架,它將SpringBoot開發的一個個單體微服務整合並管理起來,
- 爲各個微服務之間提供,配置管理、服務發現、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分佈式會話等等集成服務
- SpringBoot能夠離開SpringCloud獨立使用開發項目, 可是SpringCloud離不開SpringBoot ,屬於依賴的關係
- SpringBoot專一於快速、方便的開發單個微服務個體,SpringCloud關注全局的服務治理框架。
6. Spring Cloud和SpringBoot版本對應關係
7. SpringCloud由什麼組成
- 這就有不少了,我講幾個開發中最重要的
- Spring Cloud Eureka:服務註冊與發現
- Spring Cloud Zuul:服務網關
- Spring Cloud Ribbon:客戶端負載均衡
- Spring Cloud Feign:聲明性的Web服務客戶端
- Spring Cloud Hystrix:斷路器
- Spring Cloud Confifig:分佈式統一配置管理
- 等20幾個框架,開源一直在更新
8. 使用 Spring Boot 開發分佈式微服務時,咱們面臨什麼問題
- (1)與分佈式系統相關的複雜性-這種開銷包括網絡問題,延遲開銷,帶寬問題,安全問題。
- (2)服務發現-服務發現工具管理羣集中的流程和服務如何查找和互相交談。它涉及一個服務目錄,在該目錄中註冊服務,而後可以查找並鏈接到該目錄中的服務。
- (3)冗餘-分佈式系統中的冗餘問題。
- (4)負載平衡 --負載平衡改善跨多個計算資源的工做負荷,諸如計算機,計算機集羣,網絡鏈路,中央處理單元,或磁盤驅動器的分佈。
- (5)性能-問題 因爲各類運營開銷致使的性能問題。
9. Spring Cloud 和dubbo區別?
- (1)服務調用方式:dubbo是RPC springcloud Rest Api
- (2)註冊中心:dubbo 是zookeeper springcloud是eureka,也能夠是zookeeper
- (3)服務網關,dubbo自己沒有實現,只能經過其餘第三方技術整合,springcloud有Zuul路由網關,做爲路由服務器,進行消費者的請求分發,springcloud支持斷路器,與git完美集成配置文件支持版本控制,事物總線實現配置文件的更新與服務自動裝配等等一系列的微服務架構要素。
2、Eureka
10. 服務註冊和發現是什麼意思?Spring Cloud 如何實現?
11. 什麼是Eureka
- Eureka做爲SpringCloud的服務註冊功能服務器,他是服務註冊中心,系統中的其餘服務使用Eureka的客戶端將其鏈接到Eureka Service中,而且保持心跳,這樣工做人員能夠經過EurekaService來監控各個微服務是否運行正常。
12. Eureka怎麼實現高可用
- 集羣吧,註冊多臺Eureka,而後把SpringCloud服務互相註冊,客戶端從Eureka獲取信息時,按照Eureka的順序來訪問。
13. 什麼是Eureka的自我保護模式,
- 默認狀況下,若是Eureka Service在必定時間內沒有接收到某個微服務的心跳,Eureka Service會進入自我保護模式,在該模式下Eureka Service會保護服務註冊表中的信息,不在刪除註冊表中的數據,當網絡故障恢復後,Eureka Servic 節點會自動退出自我保護模式
14. DiscoveryClient的做用
- 能夠從註冊中心中根據服務別名獲取註冊的服務器信息。
15. Eureka和ZooKeeper均可以提供服務註冊與發現的功能,請說說兩個的區別
- ZooKeeper中的節點服務掛了就要選舉 在選舉期間註冊服務癱瘓,雖然服務最終會恢復,可是選舉期間不可用的, 選舉就是改微服務作了集羣,必須有一臺主其餘的都是從
- Eureka各個節點是平等關係,服務器掛了不要緊,只要有一臺Eureka就能夠保證服務可用,數據都是最新的。 若是查詢到的數據並非最新的,就是由於Eureka的自我保護模式致使的
- Eureka本質上是一個工程,而ZooKeeper只是一個進程
- Eureka能夠很好的應對因網絡故障致使部分節點失去聯繫的狀況,而不會像ZooKeeper 同樣使得整個註冊系統癱瘓
- ZooKeeper保證的是CP,Eureka保證的是AP
CAP: C:一致性>Consistency; 取捨:(強一致性、單調一致性、會話一致性、最終一致性、弱一致性) A:可用性>Availability; P:分區容錯性>Partition tolerance;
3、Zuul
16. 什麼是網關?
- 網關至關於一個網絡服務架構的入口,全部網絡請求必須經過網關轉發到具體的服務。
17. 網關的做用是什麼
- 統一管理微服務請求,權限控制、負載均衡、路由轉發、監控、安全控制黑名單和白名單等
18. 什麼是Spring Cloud Zuul(服務網關)
19. 網關與過濾器有什麼區別
- 網關是對全部服務的請求進行分析過濾,過濾器是對單個服務而言。
20. 經常使用網關框架有那些?
21. Zuul與Nginx有什麼區別?
- Zuul是java語言實現的,主要爲java服務提供網關服務,尤爲在微服務架構中能夠更加靈活的對網關進行操做。Nginx是使用C語言實現,性能高於Zuul,可是實現自定義操做須要熟悉lua語言,對程序員要求較高,可使用Nginx作Zuul集羣。
22. 既然Nginx能夠實現網關?爲何還須要使用Zuul框架
- Zuul是SpringCloud集成的網關,使用Java語言編寫,能夠對SpringCloud架構提供更靈活的服務。
23. 如何設計一套API接口
- 考慮到API接口的分類能夠將API接口分爲開發API接口和內網API接口,內網API接口用於局域網,爲內部服務器提供服務。開放API接口用於對外部合做單位提供接口調用,須要遵循Oauth2.0權限認證協議。同時還須要考慮安全性、冪等性等問題。
24. ZuulFilter經常使用有那些方法
- Run():過濾器的具體業務邏輯
- shouldFilter():判斷過濾器是否有效
- fifilterOrder():過濾器執行順序
- fifilterType():過濾器攔截位置
25. 如何實現動態Zuul網關路由轉發
- 經過path配置攔截請求,經過ServiceId到配置中心獲取轉發的服務列表,Zuul內部使用Ribbon實現本地負載均衡和轉發。
26. Zuul網關如何搭建集羣
- 使用Nginx的upstream設置Zuul服務集羣,經過location攔截請求並轉發到upstream,默認使用輪詢機制對Zuul集羣發送請求。
4、Ribbon
27. 負載平衡的意義什麼?
28. Ribbon是什麼?
29. Nginx與Ribbon的區別
30. Ribbon底層實現原理
- Ribbon使用discoveryClient從註冊中心讀取目標服務信息,對同一接口請求進行計數,使用%取餘算法獲取目標服務集羣索引,返回獲取到的目標服務信息。
@LoadBalanced註解的做用
5、Hystrix
31. 什麼是斷路器
32. 什麼是 Hystrix?
33. 談談服務雪崩效應
34. 在微服務中,如何保護服務?
35. 服務雪崩效應產生的緣由
- 由於Tomcat默認狀況下只有一個線程池來維護客戶端發送的全部的請求,這時候某一接口在某一時刻被大量訪問就會佔據tomcat線程池中的全部線程,其餘請求處於等待狀態,沒法鏈接到服務接口。
36. 談談服務降級、熔斷、服務隔離
37. 服務降級底層是如何實現的?
- Hystrix實現服務降級的功能是經過重寫HystrixCommand中的getFallback()方法,當Hystrix的run方法或construct執行發生錯誤時轉而執行getFallback()方法。
6、Feign
38. 什麼是Feign?
- Feign 是一個聲明web服務客戶端,這使得編寫web服務客戶端更容易
- 他將咱們須要調用的服務方法定義成抽象方法保存在本地就能夠了,不須要本身構建Http請求了,直接調用接口就好了,不過要注意,調用方法要和本地抽象方法的簽名徹底一致。
39. SpringCloud有幾種調用接口方式
40. Ribbon和Feign調用服務的區別
7、Bus
41. 什麼是 Spring Cloud Bus?
8、Config
42. 什麼是Spring Cloud Config?
43. 分佈式配置中心有那些框架?
- Apollo、zookeeper、springcloud confifig。
44. 分佈式配置中心的做用?
45. SpringCloud Config 能夠實現實時刷新嗎?
- springcloud confifig實時刷新採用SpringCloud Bus消息總線。
9、Gateway
46. 什麼是Spring Cloud Gateway?
10、 SpringCloud主要項目
47. SpringCloud主要項目
- Spring Cloud的子項目,大體可分紅兩類,一類是對現有成熟框架"Spring Boot化"的封裝和抽象,也是數量最多的項目;第二類是開發了一部分分佈式系統的基礎設施的實現,如Spring CloudStream扮演的就是kafka, ActiveMQ這樣的角色。
Spring Cloud Config
Spring Cloud Netflix(重點,這些組件用的最多)
Spring Cloud Bus
Spring Cloud Consul
Spring Cloud Security
Spring Cloud Sleuth
Spring Cloud Stream
- 輕量級事件驅動微服務框架,可使用簡單的聲明式模型來發送及接收消息,主要實現爲Apache Kafka及RabbitMQ。
Spring Cloud Task
- Spring Cloud Task的目標是爲Spring Boot應用程序提供建立短運行期微服務的功能。在Spring Cloud Task中,咱們能夠靈活地動態運行任何任務,按需分配資源並在任務完成後檢索結果。 Tasks是Spring Cloud Data Flow中的一個基礎項目,容許用戶將幾乎任何Spring Boot應用程序做爲一個短時間任務執行。
Spring Cloud Zookeeper
- SpringCloud支持三種註冊方式Eureka, Consul(go語言編寫),zookeeper
- Spring Cloud Zookeeper是基於Apache Zookeeper的服務治理組件。
Spring Cloud Gateway
Spring Cloud OpenFeign
- Feign是一個聲明性的Web服務客戶端。它使編寫Web服務客戶端變得更容易。要使用Feign,咱們能夠將調用的服務方法定義成抽象方法保存在本地添加一點點註解就能夠了,不須要本身構建Http請求了,直接調用接口就好了,不過要注意,調用方法要和本地抽象方法的簽名徹底一致。
Spring Cloud的版本關係
48. Spring Cloud和SpringBoot版本對應關係
49. Spring Cloud和各子項目版本對應關係