??大家好,我是陳哈哈,北漂五年,相信大家和我一樣,
都有一個大廠夢,作為一名資深Java選手,深知面試重要性,接下來我準備用100天時間,基于Java崗面試中的高頻面試題,以每日3題的形式,帶你過一遍熱門面試題及恰如其分的解答,
??一路走來,隨著問題加深,發現不會的也愈來愈多,但底氣著實足了不少,相信不少朋友和我一樣,榷訓月累才是最有效的學習方式!想起高三時一個同學的座右銘:只有沉下去,才能浮上來,共勉(juan),

坐標:外灘 萬國大廈
來源:唐伯虎點香煙
車票
- 面試題1:說說你對RPC框架的理解?
- 追問1:RPC框架實作原理是什么樣的
- 面試題2:常見的RPC框架有哪些?
- 面試題3:說說RPC和SOA、SOAP、REST的區別吧
- 每日小結
??本欄目Java開發崗高頻面試題主要出自以下各技術堆疊:Java基礎知識、集合容器、并發編程、JVM、Spring全家桶、MyBatis等ORMapping框架、MySQL資料庫、Redis快取、RabbitMQ訊息佇列、Linux操作技巧等,
面試題1:說說你對RPC框架的理解?
??RPC (Remote Procedure Call)即
遠程程序呼叫,是分布式系統常見的一種通信方法,它允許程式呼叫另一個地址空間(通常是共享網路的另一臺機器上)的程序或函式,而不用程式員顯式編碼這個遠程呼叫的細節,
??除 RPC 之外,常見的多系統資料互動方案還有分布式訊息佇列、HTTP 請求呼叫、資料庫和分布式快取等,
??其中 RPC 和 HTTP 呼叫是沒有經過中間件的,它們是端到端系統的直接資料互動,
通俗點說
- RPC就是從一臺機器(客戶端)上通過引數傳遞的方式呼叫另一臺機器(服務器)上的一個函式或方法(可以統稱為服務)并得到回傳的結果,
RPC會隱藏底層的通訊細節(不需要直接處理Socket通訊或Http通訊),- 客戶端發起請求,服務器回傳回應(
類似于Http的作業方式)RPC在使用形式上像呼叫本地函式(或方法)一樣去呼叫遠程的函式(或方法),
追問1:RPC框架實作原理是什么樣的
??在RPC框架中主要有三個角色:提供者、消費者和注冊中心,如下圖所示:

- 提供者: 暴露服務的服務提供方,
- 提供者: 呼叫遠程服務的服務消費方,
- 注冊中心: 服務注冊與發現的注冊中心,

??原理圖如上,也就是說兩臺服務器A,B,一個應用部署在A服務器上,想要呼叫B服務器上應用提供的函式/方法,由于不在一個記憶體空間,不能直接呼叫,需要通過網路來表達呼叫的語意和傳達呼叫的資料,
??比如說,A服務器想呼叫B服務器上的一個方法:Employee getEmployeeByName(String fullName)
RPC整個呼叫程序,主要經歷如下幾個步驟:
1、建立通信
??首先要解決通訊的問題:即A機器想要呼叫B機器,首先得建立起通信連接,
??主要是通過在客戶端和服務器之間建立TCP連接,遠程程序呼叫的所有交換的資料都在這個連接里傳輸,連接可以是按需連接,呼叫結束后就斷掉,也可以是長連接,多個遠程程序呼叫共享同一個連接,
2、服務尋址
??要解決尋址的問題,也就是說,A服務器上的應用怎么告訴底層的RPC框架,如何連接到B服務器(如主機或IP地址)以及特定的埠,方法的名稱名稱是什么,
??通常情況下我們需要提供B機器(主機名或IP地址)以及特定的埠,然后指定呼叫的方法或者函式的名稱以及入參出參等資訊,這樣才能完成服務的一個呼叫,
??可靠的尋址方式(主要是提供服務的發現)是RPC的實作基石,比如可以采用redis或者zookeeper來注冊服務等等,

- 從服務提供者的角度看:
當提供者服務啟動時,需要自動向注冊中心注冊服務; - 當提供者服務停止時,需要向注冊中心注銷服務;
提供者需要定時向注冊中心發送心跳,一段時間未收到來自提供者的心跳后,認為提供者已經停止服務,從注冊中心上摘取掉對應的服務,- 從呼叫者的角度看:呼叫者啟動時訂閱注冊中心的訊息并從注冊中心獲取提供者的地址;
- 當有提供者上線或者下線時,注冊中心會告知到呼叫者;
呼叫者下線時,取消訂閱,
3、網路傳輸
序列化
??當A機器上的應用發起一個RPC呼叫時,呼叫方法和其入參等資訊需要通過底層的網路協議如TCP傳輸到B機器,由于網路協議是基于二進制的,所有我們傳輸的引數資料都需要先進行序列化(Serialize)或者編組(marshal)成二進制的形式才能在網路中進行傳輸,然后通過尋址操作和網路傳輸將序列化或者編組之后的二進制資料發送給B機器,
反序列化
??當B機器接收到A機器的應用發來的請求之后,又需要對接收到的引數等資訊進行反序列化操作(序列化的逆操作),即將二進制資訊恢復為記憶體中的表達方式,然后再找到對應的方法(尋址的一部分)進行本地呼叫(一般是通過生成代理Proxy去呼叫,
??通常會有JDK動態代理、CGLIB動態代理、Javassist生成位元組碼技術等),之后得到呼叫的回傳值,
4、服務呼叫
??B機器進行本地呼叫(通過代理Proxy)之后得到了回傳值,此時還需要再把回傳值發送回A機器,同樣也需要經過序列化操作,然后再經過網路傳輸將二進制資料發送回A機器,而當A機器接收到這些回傳值之后,則再次進行反序列化操作,恢復為記憶體中的表達方式,最后再交給A機器上的應用進行相關處理(一般是業務邏輯處理操作),

課間休息,又來秀一下來自咱們群里同學的搬磚工地,坐標:北京 西北旺,
作者:陳哈哈
面試題2:常見的RPC框架有哪些?
-
Thrift:thrift是一個軟體框架,用來進行可擴展且跨語言的服務的開發,它結合了功能強大的軟體堆疊和代碼生成引擎,以構建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 這些編程語言間無縫結合的、高效的服務, -
Dubbo:Dubbo是一個分布式服務框架,以及SOA治理方案,其功能主要包括:高性能NIO通訊及多協議集成,服務動態尋址與路由,軟負載均衡與容錯,依賴分析與降級等, Dubbo是阿里巴巴內部的SOA服務化治理方案的核心框架,Dubbo自2011年開源后,已被許多非阿里系公司使用, -
Spring Cloud:Spring Cloud由眾多子專案組成,如Spring Cloud Config、Spring Cloud Netflix、Spring Cloud Consul 等,提供了搭建分布式系統及微服務常用的工具,如配置管理、服務發現、斷路器、智能路由、微代理、控制總線、一次性token、全域鎖、選主、分布式會話和集群狀態等,滿足了構建微服務所需的所有解決方案,Spring Cloud基于Spring Boot, 使得開發部署極其簡單,

課間休息,又來秀一下來自咱們群里同學的搬磚工地,坐標:凌晨的臺灣夜市,
作者:shi前巨餓
面試題3:說說RPC和SOA、SOAP、REST的區別吧
1、REST
??可以看著是HTTP協議的一種直接應用,默認基于JSON作為傳輸格式,使用簡單,學習成本低效率高,但是安全性較低,
2、SOAP
??SOAP是一種資料交換協議規范,是一種輕量的、簡單的、基于XML的協議的規范,而SOAP可以看著是一個重量級的協議,基于XML、SOAP在安全方面是通過使用XML-Security和XML-Signature兩個規范組成了WS-Security來實作安全控制的,當前已經得到了各個廠商的支持 ,
??他主要的優點是:易用、靈活、跨語言、跨平臺,
3、SOA
??面向服務架構,它可以根據需求通過網路對松散耦合的粗粒度應用組件進行分布式部署、組合和使用,服務層是SOA的基礎,可以直接被應用呼叫,從而有效控制系統中與軟體代理互動的人為依賴性,
??SOA是一種粗粒度、松耦合服務架構,服務之間通過簡單、精確定義介面進行通訊,不涉及底層編程介面和通訊模型,SOA可以看作是B/S模型、XML(標準通用標記語言的子集)/Web Service技術之后的自然延伸,
每日小結
??今天我們復習了面試中常考的RPC框架相關的三個問題,你做到心中有數了么?對了,如果你的朋友也在準備面試,請將這個系列扔給他,如果他認真對待,肯定會感謝你的!!好了,今天就到這里,學廢了的同學,記得在評論區留言:打卡,,給同學們以激勵,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/290869.html
標籤:java
下一篇:16 條 yyds 的代碼規范
