容易遺忘的知識點總結

黃小蔥發表於2021-09-16

主要是工作中不常用,導致記得不是很清晰。但是很重要的知識點,慢慢積累...

1.七層協議

  • 從上到下是:應用層、表示層、會話層、傳輸層、網路層、資料鏈路層、物理層;
  • 協議型別:
應用層中,有FTP:檔案傳輸協議;  http:超文字傳輸協議;  SMTP:郵件傳輸協議;  DNS:域名系統;
傳輸層中,有TCP:傳輸控制協議;  UDP:使用者資料協議

2.Http的工作過程

對於請求的地址,從地址中分離出協議名、主機名、埠、物件路徑等

  1. 地址解析
    使用域名系統DNS解析域名,得到主機的IP地址

  2. 封裝HTTP請求資料包
    把解析出的資訊結合自己本機的資訊,封裝成一個HTTP請求資料包

  3. 封裝成TCP包,建立TCP連線
    (三次連線)

  4. 客戶機傳送請求命令
    建立連線後,客戶機傳送一個請求給伺服器,請求方式的格式為:統一資源識別符號(URL)、協議版本號,後面是MIME資訊。

  5. 伺服器響應

  6. 伺服器是否關閉TCP連線
    若在請求頭中加入了Connection:keep-alive,則表示仍然保持連線


3.API閘道器的作用

身份驗證、監控、負載均衡、快取、請求分片與管理、靜態響應處理、限流控制等

  • 效能:API閘道器高可用,負載均衡,容錯機制。
  • 安全:許可權身份認證、脫敏,流量清洗,後端簽名(保證全鏈路可信呼叫),黑名單(非法呼叫的限制)。
  • 日誌:日誌記錄(spainid,traceid)一旦涉及分散式,全鏈路跟蹤必不可少。
  • 快取:資料快取。
  • 監控:記錄請求響應資料,api耗時分析,效能監控。
  • 限流:流量控制,錯峰流控,可以定義多種限流規則。
  • 灰度:線上灰度部署,可以減小風險。路由:動態路由規則。

Nginx和Api Gateway的說明

Nginx和Api gateway在功能上是有一些重疊的,都可以做服務轉發。但是閘道器在大型微服務系統中是一個很重要的角色

  • Api閘道器是轉為閘道器的角色而設計的,功能強大,在大型系統開發中基本上都會選用次元件
  • Nginx只能實現一些上面說的部分用牛奶,一般都是選用Nginx做靜態資源快取和前端呼叫介面的負載均衡

總結:現在前後端分離的系統一般都會如下設計:Nginx做靜態資源伺服器,前端頁面呼叫後端介面時先請求到Nginx,Nginx做負載君合路由到後端閘道器,然後閘道器做請求身份驗證,日誌記錄等操作,再轉發業務處理介面,處理完返回資料。


4.攔截器和過濾器的區別

Filter過濾器:本質是基於函式回撥
1.修改字元編碼(CharacterEncodingFilter)、在過濾器中修改HttpServletRequest的一些引數
2.過濾低俗文字、危險字元
3.對URL地址做處理
缺點:只能對controller請求進行攔截,對於其他直接訪問的靜態資源的請求無法進行攔截處理。

Interceptor攔截器:本質是基於Java的反射機制
1.Filter能做的都可以做
2.在請求前和請求後都可以攔截,比較靈活。


5.關於前端提交格式【Content-Type】與後端接受格式 互相對應點

  1. 前端格式為 Content-Type:application/x-www-form-urlencoded;charset=UTF-8 時(表單提交方式),
    後端接受時,在路徑的RequestMapping上,加上consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE;接受的引數可以通過@RequestParam成功獲取(不可用@RequestBody接受),後端如下圖:

採用其他格式或引數接受,會報如下錯誤,Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported

  1. 當前端格式為 Content-Type:application/json 時(Payload提交方式),後端接受方式為 consumes = MediaType.APPLICATION_JSON_VALUE,引數可通過@RequestBody接受,如下所示:

注:@RequestParam和@RequestBody接受引數,@ReqeustParam底層是通過request.getParameter方式獲得引數的,get和post提交都可以接受到;@RequestBody接受的是json物件的字串,而不是json物件。


6. 運算子

關於運算子,總是容易混淆和遺忘。特總結如下:

  1. 位運算子
  • & 與運算子:參與運算的兩個值,如果兩個相應位都是1,則該位的結果位1,否則為0;
  • | 或運算子:參與運算的兩個值,如果其中有一個位是1,則該位的結果為1,否則為0;
  • ^ 異或運算子:當兩對應的位相異時,結果為1;
  • ~ 取反運算子:對資料的每個二進位制為取反,即把1改為0,把0改為1;
  • << 左移運算子:各二進位制位全部左移若干位,由“<<” 右邊的數指定移動的位數,高位丟棄,低位補0;相當於乘以2的n次方
  • >> 右移運算子:與左移剛好相反。例:11 >> 2,11右移2位,11的二進位制為:1011,右移的結果為:0010,即對應的十進位制為2。右移n位相當於除以2的n次方,值取商,餘數捨棄。
  • >>> : 無符號右移,忽略符號位,空位都以0補齊

不斷積累中,未完待續...


若覺得博文不錯或對你有幫助,請點選【推薦】,感謝你的支援