20 HTTP 長連線與短連線
20 HTTP 長連線與短連線
每日一句
紙上得來終覺淺,絕知此事要躬行。
每日一句
Never give up until the fight is over.
永遠不要放棄,要一直戰鬥到最後一秒。
概念
長連線
指在一個TCP連線上可以連續傳送多個數據包。
在TCP連線保持期間,如果沒有資料包傳送,需要雙方發檢測包以維持此連線,一般需要自己做線上維持。
短連線
指通訊雙方有資料互動時,就建立一個TCP連線,資料傳送完成後,則斷開此TCP連線。
HTTP的長連線和短連線本質上是TCP長連線和短連線。
HTTP屬於應用層協議,在傳輸層使用TCP協議,在網路層使用IP協議。
IP協議主要解決網路路由和定址問題,TCP協議主要解決如何在IP層之上可靠的傳遞資料包。
從HTTP/1.1起,預設使用長連線,用以保持連線特性。使用長連線的HTTP協議,會在響應頭有加入這行程式碼:Connection:keep-alive
連線過程
短連線操作步驟是:
連線→資料傳輸→關閉連線;
長連線通常就是:
連線→資料傳輸→保持連線(心跳)→資料傳輸→保持連線(心跳)→……→關閉連線
使用場景
長連線:
多用於操作頻繁,點對點的通訊,而且連線數不能太多情況.
如資料庫連線
短連線
web網站的http服務。長連線更加耗費伺服器資源。bulabula..
美文佳句
把握分寸,是一種難得的智慧。那些能看到別人優點的人,往往懂得把別人放在心上,時刻照顧別人的感受。他們會在一言一語中放低自己的姿態,讓別人感受到關心和尊重。
人與人之間,不過一場以心換心。學會欣賞別人,別人才會欣賞你。對他人適時地讚美,不需要多麼高超的說話技巧,比技巧更重要的是真誠。真心實意、以誠相待,永遠是人際交往中最基本的準則。
面試題
HashMap、ConcurrentHashMap 和Hashtable有什麼區別?
HashMap | ConcurrentHashMap | Hashtable | |
執行緒是否安全,以及實現執行緒安全的方式 | HashMap不安全 | 執行緒安全,ConcurrentHashMap JDK1.7底層採用分段鎖,對整個桶數進行了分割分段(segment), 每一把鎖只鎖容器其中一部分資料,提高併發訪問率。 JDK 1.8 底層採用 Node陣列 + 連結串列 + 紅黑樹的結構實現, 併發控制使用了 synchronized 和 CAS 操作。 | 執行緒安全,底層採用synchronized 來保證執行緒安全, 直接是方法級別的加鎖, ConcurrentHashMap 雖然也是 synchronized 但它是對連結串列或者紅黑樹的頭節點進行加鎖,鎖的粒度更小 |
底層工作原理 | 底層採用的是 陣列 + 連結串列 | ConcurrentHashMap JDK 1.7 底層採用 分段的陣列 + 連結串列實現。 JDK 1.8 採用的是 陣列 + 連結串列/紅黑樹 |
底層採用的是 陣列 + 連結串列 |
空值問題 | HashMap允許使用null值(key和value)都可以。 但是這樣的鍵只有一個,可以有一個或多個鍵所對應的值為null |
HashTable不允許null值(key和value都不可以) | |
初始容量、擴容與預設負載因子 | HashMap 預設初始大小 16,每次擴容 2n,預設負載因子是0。75 | HashTable 預設初始大小為11,每次擴容 2n+1 |
你都知道哪些常用的Map集合?
HashMap、HashTable、TreeMap、LinkedHashMap、ConcurrentHashMap
@RequestMapping 註解有什麼用?
@RequestMapping
註解,用於將特定 HTTP 請求方法對映到將處理相應請求的控制器中的特定類/方法。此註釋可應用於兩個級別:
- 類級別:對映請求的 URL。
- 方法級別:對映 URL 以及 HTTP 請求方法。
你好,我是yltrcc,日常分享技術點滴,歡迎關注我:ylcoder