文章開始前推薦一下我的專欄,裡面記錄了我的一些學習經驗和一些Java技術的分享,也有一些朋友(來自互聯網各個大廠)把他們的一些技術的面試總結分享在我的專欄里。歡迎大家關注也歡迎大家投稿!

Java架構經驗分享?

zhuanlan.zhihu.com
圖標

前言

為什麼要使用微服務?

隨著互聯網的快速發展,各行各業都在用互聯網。互聯網已經離不開人們的形形色色。隨著越來越多的用戶,業務場景也愈來愈複雜。

傳統的單體架構已經很難滿足互聯網技術發展的要求,代碼可維護性擴展性和可讀性降低,維護成本的提高都是驅動微服務的發展趨勢。

微服務哪些框架

Dubbo,是阿里巴巴服務化治理的核心框架,並被廣泛應用於阿里巴巴集團的各成員站

點。阿里巴巴近幾年對開源社區的貢獻不論在國內還是國外都是引人注目的,比如:

JStorm 捐贈給 Apache 並加入 Apache 基金會等,為中國互聯網人爭足了面子,使得阿

里巴巴在國人眼裡已經從電商升級為一家科技公司了。

Spring Cloud,從命名我們就可以知道,它是 Spring Source 的產物,Spring 社區的強

大背書可以說是 Java 企業界最有影響力的組織了,除了 Spring Source 之外,還有

Pivotal 和 Netfix 是其強大的後盾與技術輸出。其中 Netflix 開源的整套微服務架構套件是

Spring Cloud 的核心。

說說 RPC 的實現原理

首先需要有處理網路連接通訊的模塊,負責連接建立、管理和消息的傳輸。其次需要有編

解碼的模塊,因為網路通訊都是傳輸的位元組碼,需要將我們使用的對象序列化和反序列

化。剩下的就是客戶端和伺服器端的部分,伺服器端暴露要開放的服務介面,客戶調用服

務介面的一個代理實現,這個代理實現負責收集數據、編碼並傳輸給伺服器然後等待結果

返回。

說說 Dubbo 的實現原理

dubbo 作為 rpc 框架,實現的效果就是調用遠程的方法就像在本地調用一樣。如何做到

呢?就是本地有對遠程方法的描述,包括方法名、參數、返回值,在 dubbo 中是遠程和本

地使用同樣的介面;然後呢,要有對網路通信的封裝,要對調用方來說通信細節是完全不

可見的,網路通信要做的就是將調用方法的屬性通過一定的協議(簡單來說就是消息格

式)傳遞到服務端;服務端按照協議解析出調用的信息;執行相應的方法;在將方法的返

回值通過協議傳遞給客戶端;客戶端再解析;在調用方式上又可以分為同步調用和非同步調

用;簡單來說基本就這個過程

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 消除了調用服務時的猜測。

使用 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 默認也會負責負載平衡。


讀者福利、完整面試題【含答案】Java核心筆記,Java架構面試專題(pdf文檔)

資料獲取方式:關注後台私信【資料】免費獲取!


關於微服務,總結了一些學習經驗,分享給大家

還整理了一些Java面試題資料

喜歡文章記得關注我點贊喲,感謝支持!

推薦閱讀:

相关文章