每日一句: To always face my adversity head on.面試
下面整理了一些面試的過程當中被問到的Spring相關的題目,只因簡歷上寫了熟練使用SpringBoot,SpringCloud。但願爲即將準備面試的胖友提供一些幫助,平時仍是要多關注一些細節的地方!redis
SpringBoot能夠快速一鍵搭建一個基於Spring的生產就緒的應用框架,簡化Spring應用的初始搭建以及開發過程:算法
SpringBoot自動配置自帶了不少了配置類,自動配置創建在spring條件化配置基礎之上的:spring
首先SpringBoot的主配置類上的@SpringBootApplication 開啓了自動配置功能@EnableAutoConfiguration後端
@EnableAutoConfiguration 利用AutoConfigurationImportSelector將META-INF/spring.factories裏面配置的全部xxxAutoConfiguration的配置類都加入容器中,用他們來作自動配置。spring-boot-autoconfiguration的jar 文件裏面包含了不少的配置類,好比jpa, mvc,redis,neo4j。用戶能夠本身選擇是否在程序裏面使用他們,這些配置類構成了Springboot的自動配置。緩存
儘管這些配置存在與應用程序的ClassPath中,可是在知足某些條件以前應用會忽略這個配置,好比:安全
Spring啓動的時候會作幾百次這樣的檢查,好比檢查Jdbctemplate是否是在Classpath裏面,若是是就會配置一個對應的jdbcTemplate的配置Bean。 全部的這些配置都是儘可能的不讓開發者本身去寫配置。網絡
服務提供者向服務註冊中心進行服務的註冊,並週期性的發送心跳來更新服務信息,服務消費者拉取服務註冊中心的服務列表並維護在本地,並從服務列表中拉取一個服務進行消費。架構
Eureka自己支持高可用,能夠經過集羣的方式部署,Eureka Server之間也能夠相互註冊,相互同步服務信息。併發
失效服務的剔除: 好比超過30s沒有心跳的服務,就會被Eureka標記爲不可用
自我保護機制:
當Eureka 與其它服務之間的心跳大面積失敗的時候,它會認爲多是本身的問題,好比本身網絡很差,就會把註冊的信息保護起來。這時若是有消費者來訪問,可能就會拿到真正過時的服務的狀況。
Zuul的原理: 經過一個統一的Servlet入口ZuulServlet攔截全部的請求,而後經過ZuulFilter鏈對請求作攔截和過濾處理。Zuul大部分功能都是經過過濾器來實現的,Zuul中定義了4種標準的過濾器,這些過濾器對應於請求的典型生命週期:
PRE: 請求路由到某個服務以前調用,能夠實現身份驗證等
ROUTING: 用於構建發送給微服務的請求,並經過HttpClient 或 Ribbon 請求微服務
POST: 在請求路由到微服務之後執行,能夠爲響應結果添加Http Header, 將結果發送給客戶端
ERROR: 在其它階段發生錯誤的時候執行該過濾器
微服務數量比較多的時候,配置管理就比較複雜了,SpringCloud Config經過分佈式配置中心來統一管理配置文件並能夠實時更新。Config Server用於配置屬性的存儲,Config Client用於服務屬性的讀取。
當配置文件須要動態更新的時候,能夠經過Bus在不關閉服務的狀況下更新咱們的配置。
Fegin 經過代理模式自動將全部的方法用Hystrix進行了包裝,目的是在調用方實施針對被調用微服務的熔斷邏輯,針對被調用服務設置超時時間,一旦超時就會進入熔斷邏輯,而這個故障指標信息也會返回給Hystrix組件,hystrix根據故障信息打開斷路器,以後全部針對該微服務的請求都會直接進入熔斷邏輯,直到故障恢復關閉斷路器爲止。
SpringCloud SpringBoot 這套技術棧,你們平時本身使用的過程,可能以爲比較簡單,不過了解其底層實現細節,對咱們寫出高性能的服務架構確定大有裨益。好比在瞭解原理後,咱們知道Hystrix在有大量的請求時,若是默認使用線程池可能會頻繁的線程切換,更加劇系統性能,這時候能夠考慮切換了。
最後歡迎你們關注「開發運維技術圈」公衆號,羣裏有阿里雲,螞蟻,口碑,字節的同窗,也有各類崗位內推哦!