今天,我先說說目前最火最流行的SpringBoot、SpringCloud面試相關的知識,以便支持你們學習。面試
你們應該都知道,SpringBoot是目前最流行的微服務框架,SpringCloud也是目前最流行微服務治理框架。那你們對這兩個框架到底知道多少呢?下面是我整理的內容。spring
微服務安全
1,什麼是微服務?服務器
微服務架構是一種架構模式或者說是一種架構風格,它提倡將單一應用程序劃分紅一組小的服務,每一個服務運行在其獨立的本身的進程中,服務之間互相協調、互相協調,最終對外提供服務。服務之間採用輕量級的通訊機制互相溝通(一般是基於HTTP的RESTful API)。每一個服務都圍繞着具體業務進行構建,而且可以被獨立地部署到生產環境、類生產環境等。另外,應儘可能避免統一的、集中式的服務管理機制,對具體的一個服務而言,應根據業務上下文,選擇合適的語言、工具對其進行構建,能夠有一個很是輕量級的集中式管理來協調這些服務,可使用不一樣的語言來編寫服務,也可使用不一樣的數據存儲。網絡
從技術維度來講:架構
微服務化的核心就是將傳統的一站式應用,根據業務拆分紅一個一個的獨立服務,完全地去耦合,每個微服務提供單個業務功能的服務,一個服務作一件事,從技術角度看就是一種小而獨立的處理過程,相似進程概念,可以單獨啓動或銷燬。併發
二、微服務之間是如何通訊?app
第一種:遠程過程調用,即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自動依賴與版本控制
-大量的自動配置,簡化開發,也可修改默認值
-準生產環境的運行應用監控
-與雲計算的自然集成
三、Spring Boot 的配置文件有哪幾種格式?
***.properties 和 ***.yml,它們的區別主要是書寫格式不一樣。
.yml是一種人類可讀的數據序列化語言。
properties 是屬性配置文件;
與屬性文件相比,若是咱們想要在配置文件中添加複雜的屬性,yml文件就更加結構化,並且更少混淆。能夠看出YAML具備分層配置數據。
.yml 格式不支持 @PropertySource 註解導入配置
四、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開發分佈式微服務時,咱們面臨如下問題
一、與分佈式系統相關的複雜性-這種開銷包括網絡問題,延遲開銷,帶寬問題,安全問題。
二、服務發現-服務發現工具管理羣集中的流程和服務如何查找和互相交談。它涉及一個服務目錄,在該目錄中註冊服務,而後可以查找並鏈接到該目錄中的服務。
三、冗餘-分佈式系統中的冗餘問題。
四、負載平衡 --負載平衡改善跨多個計算資源的工做負荷,諸如計算機,計算機集羣,網絡鏈路,中央處理單元,或磁盤驅動器的分佈。
五、性能-問題 因爲各類運營開銷致使的性能問題。
六、部署複雜性-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爲微服務架構中的微服務提供集中化的外部配置支持,配置服務器爲各個不一樣微服務應用的全部環境提供了一箇中心化的外部配置。
十、分佈式配置中心能幹嗎?
1),集中管理配置文件不一樣環境不一樣配置,動態化的配置更新,分環境部署好比dev/test/prod/beta/release
2),運行期間動態調整配置,再也不須要在每一個服務部署的機器上編寫配置文件,服務會向配置中心統一拉取配置本身的信息
3),當配置發生變更時,服務不須要重啓便可感知到配置的變化並應用新的配置將配置信息以REST接口的形式暴