10道面試官喜歡問的微服務面試題Spring Cloud+Spring Boot

前言
爲什麼要使用微服務?
隨着互聯網的快速發展,各行各業都在用互聯網。互聯網已經離不開人們的形形×××。隨着越來越多的用戶,業務場景也愈來愈複雜。
傳統的單體架構已經很難滿足互聯網技術發展的要求,代碼可維護性擴展性和可讀性降低,維護成本的提高都是驅動微服務的發展趨勢。
10道面試官喜歡問的微服務面試題Spring Cloud+Spring Boot

微服務哪些框架

Dubbo,是阿里巴巴服務化治理的核心框架,並被廣泛應用於阿里巴巴集團的各成員站
點。阿里巴巴近幾年對開源社區的貢獻不論在國內還是國外都是引人注目的,比如:
JStorm 捐贈給 Apache 並加入 Apache 基金會等,爲中國互聯網人爭足了面子,使得阿
裏巴巴在國人眼裏已經從電商升級爲一家科技公司了。
Spring Cloud,從命名我們就可以知道,它是 Spring Source 的產物,Spring 社區的強
大背書可以說是 Java 企業界最有影響力的組織了,除了 Spring Source 之外,還有
Pivotal 和 Netfix 是其強大的後盾與技術輸出。其中 Netflix 開源的整套微服務架構套件是
Spring Cloud 的核心。

說說 RPC 的實現原理

首先需要有處理網絡連接通訊的模塊,負責連接建立、管理和消息的傳輸。其次需要有編
解碼的模塊,因爲網絡通訊都是傳輸的字節碼,需要將我們使用的對象序列化和反序列
化。剩下的就是客戶端和服務器端的部分,服務器端暴露要開放的服務接口,客戶調用服
務接口的一個代理實現,這個代理實現負責收集數據、編碼並傳輸給服務器然後等待結果
返回。

說說 Dubbo 的實現原理

dubbo 作爲 rpc 框架,實現的效果就是調用遠程的方法就像在本地調用一樣。如何做到
呢?就是本地有對遠程方法的描述,包括方法名、參數、返回值,在 dubbo 中是遠程和本
地使用同樣的接口;然後呢,要有對網絡通信的封裝,要對調用方來說通信細節是完全不
可見的,網絡通信要做的就是將調用方法的屬性通過一定的協議(簡單來說就是消息格
式)傳遞到服務端;服務端按照協議解析出調用的信息;執行相應的方法;在將方法的返
回值通過協議傳遞給客戶端;客戶端再解析;在調用方式上又可以分爲同步調用和異步調
用;簡單來說基本就這個過程
10道面試官喜歡問的微服務面試題Spring Cloud+Spring Boot

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)中加載後續的應用程序屬性文件。
如何實現 Spring Boot 應用程序的安全性?
爲了實現 Spring Boot 的安全性,我們使用 spring-boot-starter-security 依賴項,並且必須添
加安全配置。它只需要很少的代碼。配置類將必須擴展 WebSecurityConfigurerAdapter 並覆
蓋其方法。
如何集成 Spring Boot 和 ActiveMQ?
對於集成 Spring Boot 和 ActiveMQ,我們使用
spring-boot-starter-activemq
依賴關係。 它只需要很少的配置,並且不需要樣板代碼。
什麼是 Swagger?你用 Spring Boot 實現了它嗎?
Swagger 廣泛用於可視化 API,使用 Swagger UI 爲前端開發人員提供在線沙箱。Swagger 是
用於生成 RESTful Web 服務的可視化表示的工具,規範和完整框架實現。它使文檔能夠以
與服務器相同的速度更新。當通過 Swagger 正確定義時,消費者可以使用最少量的實現邏
輯來理解遠程服務並與其進行交互。因此,Swagger 消除了調用服務時的猜測。
10道面試官喜歡問的微服務面試題Spring Cloud+Spring Boot

使用 Spring Cloud 有什麼優勢?

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

負載平衡的意義什麼?

在計算中,負載平衡可以改善跨計算機,計算機集羣,網絡鏈接,中央處理單元或磁盤驅動器等多種計算
資源的工作負載分佈。負載平衡旨在優化資源使用,最大化吞吐量,最小化響應時間並避免任何單一資源
的過載。使用多個組件進行負載平衡而不是單個組件可能會通過冗餘來提高可靠性和可用性。負載平衡通常涉及專用軟件或硬件,例如多層交換機或域名系統服務器進程。
什麼是 Netflix Feign?它的優點是什麼?
Feign 是受到 Retrofit,JAXRS-2.0 和 WebSocket 啓發的 java 客戶端聯編程序。Feign 的第一個目標
是將約束分母的複雜性統一到 http apis,而不考慮其穩定性。在 employee-consumer 的例子中,我們
使用了 employee-producer 使用 REST 模板公開的 REST 服務。
但是我們必須編寫大量代碼才能執行以下步驟
使用功能區進行負載平衡。
獲取服務實例,然後獲取基本 URL。
利用 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 默認也會負責負載平衡。

喜歡文章記得點個贊,感謝支持!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章