容易遺忘的知識點總結


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

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補齊

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


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM