SpringBoot+SpringCloud面試總結都在這裏

今天,我先說說目前最火最流行的SpringBoot、SpringCloud面試相關的知識,以便支持大家學習。

大家應該都知道,SpringBoot是目前最流行的微服務框架,SpringCloud也是目前最流行微服務治理框架。那大家對這兩個框架到底知道多少呢?下面是我整理的內容。

微服務

1,什麼是微服務?

微服務架構是一種架構模式或者說是一種架構風格,它提倡將單一應用程序劃分成一組小的服務,每個服務運行在其獨立的自己的進程中,服務之間互相協調、互相協調,最終對外提供服務。服務之間採用輕量級的通信機制互相溝通(通常是基於HTTP的RESTful API)。每個服務都圍繞着具體業務進行構建,並且能夠被獨立地部署到生產環境、類生產環境等。另外,應儘量避免統一的、集中式的服務管理機制,對具體的一個服務而言,應根據業務上下文,選擇合適的語言、工具對其進行構建,可以有一個非常輕量級的集中式管理來協調這些服務,可以使用不同的語言來編寫服務,也可以使用不同的數據存儲。

從技術維度來說:

微服務化的核心就是將傳統的一站式應用,根據業務拆分成一個一個的獨立服務,徹底地去耦合,每一個微服務提供單個業務功能的服務,一個服務做一件事,從技術角度看就是一種小而獨立的處理過程,類似進程概念,能夠單獨啓動或銷燬。

2、微服務之間是如何通信?

第一種:遠程過程調用,即RPC(Remote Procedure Invocation)

直接通過遠程過程調用來訪問別的service,如:REST、Apache。

第二種:消息

使用異步消息來做服務間通信。服務間通過消息管道來交換消息,從而通信。如:Apache Kafka、RabbitMQ

SpringBoot

1,什麼是 Spring Boot?

Spring Boot 是 Spring 開源組織下的子項目,是 Spring 組件一站式解決方案,主要是簡化了使用 Spring 的難度,簡省了繁重的配置,提供了各種啓動器,開發者能快速上手。

2,Spring Boot有哪些優點?

-快速創建獨立運行的spring項目與主流框架集成 
-使用嵌入式的servlet容器,應用無需打包成war包 
-starters自動依賴與版本控制 
-大量的自動配置,簡化開發,也可修改默認值 
-準生產環境的運行應用監控 
-與雲計算的天然集成

3、Spring Boot 的配置文件有哪幾種格式?

***.properties 和 ***.yml,它們的區別主要是書寫格式不同。

.yml是一種人類可讀的數據序列化語言。

properties 是屬性配置文件;

與屬性文件相比,如果我們想要在配置文件中添加複雜的屬性,yml文件就更加結構化,而且更少混淆。可以看出YAML具有分層配置數據。

.yml 格式不支持 @PropertySource 註解導入配置

4、Spring Boot 的核心註解是哪個?它主要由哪幾個註解組成的?

啓動類註解是@SpringBootApplication,它也是 Spring Boot 的核心註解 主要組合包含了以下 3 個註解:
1,@SpringBootConfiguration:組合了 @Configuration 註解,實現配置文件的功能。
2,@EnableAutoConfiguration:打開自動配置的功能,也可以關閉某個自動配置的選項,如關閉數據源自動配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
3,@ComponentScan:Spring組件掃描。

5,運行 Spring Boot 有哪幾種方式?

1),打包用命令或者放到容器中運行

2),用 Maven/ Gradle 插件運行

3),直接執行 main 方法運行

6,Spring Boot 支持的日誌框架?

Spring Boot 支持 Java Util Logging, Log4j2, Lockback 作爲日誌框架,如果你使用 Starters 啓動器,Spring Boot 將使用 Logback 作爲默認日誌框架。

7,SpringBoot 實現熱部署有哪幾種方式?

主要有兩種方式:

  • Spring Loaded

  • Spring-boot-devtools

8,Spring Boot 如何配置多環境?

提供多套配置文件:

applcation.yml
application-dev.yml
application-test.yml
application-pro.yml
通過改變applcation裏的profiles.active值來加載對應的環境。
spring:
  profiles:
    active: dev

SpringCloud

1,什麼是SpringCloud?

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

2,SpringCloud有什麼優勢?

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

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

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

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

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

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

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

3,SpringCloud如何實現服務的註冊和發現?

服務在發佈時 指定對應的服務名(服務名包括了IP地址和端口) 將服務註冊到註冊中心(eureka)

這一過程是Springcloud自動實現 只需要在main方法添加@EnableDisscoveryClient  同一個服務修改端口就可以啓動多個實例

調用方法:傳遞服務名稱通過註冊中心獲取所有的可用實例 通過負載均衡策略調用(ribbon和feign)對應的服務

4,作爲服務註冊中心,Eureka比Zookeeper好在哪裏?

著名的CAP理論指出,一個分佈式系統不可能同時滿足C(一致性)、A(可用性)和P(分區容錯性)。由於分區容錯性P在是分佈式系統中必須要保證的,因此我們只能在A和C之間進行權衡。

因此,Zookeeper 保證的是CP, Eureka 則是AP。

5,什麼是ribbon和feign,他們的區別?

SpringCloud的Netflix中提供了兩個組件實現軟負載均衡調用:ribbon 和 feign。 

Ribbon和Feign都是用於調用其他服務的,不過方式不同

Ribbon使用@RibbonClient(value="服務名稱") 使用RestTemplate調用遠程服務對應的方法

Feign使用@FeignClient("指定服務名")調用提供方提供對外接口;

Ribbon和Feign的區別:

1),啓動類使用的註解不同,Ribbon用的是@RibbonClient,Feign用的是@EnableFeignClients。

2),服務的指定位置不同,Ribbon是在@RibbonClient註解上聲明,Feign則是在定義抽象方法的接口中使用@FeignClient聲明。

3),調用方式不同,Ribbon需要自己構建http請求,模擬http請求然後使用RestTemplate發送給其他服務,步驟相當繁瑣。

Feign則是在Ribbon的基礎上進行了一次改進,採用接口的方式,將需要調用的其他服務的方法定義成抽象方法即可

6,什麼是服務熔斷?什麼是服務降級?

服務直接的調用,比如在高併發情況下出現進程阻塞,導致當前線程不可用,慢慢的全部線程阻塞,導致服務器雪崩。

服務熔斷:相當於保險絲,出現某個異常,直接熔斷整個服務,而不是一直等到服務超時。通過維護一個自己的線程池,當線程到達閾值的時候就啓動服務降級,如果其他請求繼續訪問就直接返回fallback的默認值。

7,什麼是Hystrix(斷路器)?它如何實現容錯? 

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

在分佈式系統裏,許多依賴不可避免的會調用失敗,比如超時、異常等, Hystrix能夠保證在一個依賴出問題的情況下,不會導致整體服務失敗,避免級聯故障,以提高分佈式系統的彈性。

8,什麼是 zuul路由網關?

Zuul 包含了對請求的路由和過濾兩個最主要的功能:

其中路由功能負責將外部請求轉發到具體的微服務實例上,是實現外部訪問統一入口的基礎而過濾器功能則負責對請求的處理過程進行干預,是實現請求校驗、服務聚合等功能的基礎.Zuul和Eureka進行整合,將Zuul自身註冊爲Eureka服務治理下的應用,同時從Eureka中獲得其他微服務的消息,也即以後的訪問微服務都是通過Zuul跳轉後獲得。

注意:Zuul服務最終還是會註冊進Eureka

提供=代理+路由+過濾 三大功能

9,什麼是SpringCloud Config分佈式配置中心?

SpringCloud Config爲微服務架構中的微服務提供集中化的外部配置支持,配置服務器爲各個不同微服務應用的所有環境提供了一箇中心化的外部配置。

10、分佈式配置中心能幹嘛?

1),集中管理配置文件不同環境不同配置,動態化的配置更新,分環境部署比如dev/test/prod/beta/release

2),運行期間動態調整配置,不再需要在每個服務部署的機器上編寫配置文件,服務會向配置中心統一拉取配置自己的信息

3),當配置發生變動時,服務不需要重啓即可感知到配置的變化並應用新的配置將配置信息以REST接口的形式暴

掃碼關注公衆號,可獲取學習資料和實戰項目源碼