主要是工作中不常用,導致記得不是很清晰。但是很重要的知識點,慢慢積累...
1.七層協議
- 從上到下是:應用層、表示層、會話層、傳輸層、網路層、資料鏈路層、物理層;
- 協議型別:
應用層中,有FTP:檔案傳輸協議; http:超文字傳輸協議; SMTP:郵件傳輸協議; DNS:域名系統;
傳輸層中,有TCP:傳輸控制協議; UDP:使用者資料協議
2.Http的工作過程
對於請求的地址,從地址中分離出協議名、主機名、埠、物件路徑等
-
地址解析
使用域名系統DNS解析域名,得到主機的IP地址 -
封裝HTTP請求資料包
把解析出的資訊結合自己本機的資訊,封裝成一個HTTP請求資料包 -
封裝成TCP包,建立TCP連線
(三次連線) -
客戶機傳送請求命令
建立連線後,客戶機傳送一個請求給伺服器,請求方式的格式為:統一資源識別符號(URL)、協議版本號,後面是MIME資訊。 -
伺服器響應
-
伺服器是否關閉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】與後端接受格式 互相對應點
- 前端格式為 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
- 當前端格式為 Content-Type:application/json 時(Payload提交方式),後端接受方式為 consumes = MediaType.APPLICATION_JSON_VALUE,引數可通過@RequestBody接受,如下所示:
注:@RequestParam和@RequestBody接受引數,@ReqeustParam底層是通過request.getParameter方式獲得引數的,get和post提交都可以接受到;@RequestBody接受的是json物件的字串,而不是json物件。
6. 運算子
關於運算子,總是容易混淆和遺忘。特總結如下:
- 位運算子
- & 與運算子:參與運算的兩個值,如果兩個相應位都是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補齊
不斷積累中,未完待續...