hazy的面試小筆記之計網 持續更新

2021-10-21 08:25:52 字數 3808 閱讀 2584

tcp如何保證傳輸可靠性(校驗和,序列號和確認應答號,重傳,流量控制,擁塞控制)

答:1、校驗和

3、超時重傳:傳送方等待兩個來回時間沒收到接收訊號,就會重發。接收方接收到重發的包,根據之前是否已經接收到這個包來選擇丟棄或者接收,並最終都會傳送乙個接收訊號ack

4、流量控制:接收端會在確認應答傳送ack報文時,將自己的即時視窗大小填入,並跟隨ack報文一起傳送過去。而傳送方根據ack報文裡的視窗大小的值的改變進而改變自己的傳送速度。如果接收到視窗大小的值為0,那麼傳送方將停止傳送資料。並定期(乙個超時重發的時間)的向接收端傳送視窗探測資料段,讓接收端把視窗大小告訴傳送端。

擁塞控制:慢啟動,指數增長,到達閾值之後線性增長; 發生擁塞之後,擁塞閾值(即開始變成線性增長的閾值)就會變為擁塞傳送時視窗的一半

注意:實際的傳送視窗大小取決於流量控制的視窗和擁塞視窗中較小的乙個

dns為什麼使用udp協議

答:1、dns不適用於tcp的長連線,只需要單次的資料獲取(無上下文要求),用udp更適用於這種場景

2、如果使用tcp,那麼dns伺服器就會有大量的連線,並且需要建立tcp連線的時間

3、dns傳輸的資料比較小,使用udp已經足夠,速度夠快就行

瀏覽器輸入url後的過程

1、瀏覽器查詢當前url是否存在快取,並比較快取是否過期,如果是就通過dns解析url對應的ip。

​ 瀏覽器dns快取—>作業系統dns快取—>本地網域名稱伺服器—>根網域名稱伺服器—>com域頂級網域名稱伺服器—>下乙個網域名稱伺服器—>本地網域名稱伺服器—>作業系統dns快取—>瀏覽器dns快取—>瀏覽器得到ip位址

2、根據ip建立tcp連線(三次握手)。

3、http發起請求。

​ 完整的http請求包含請求起始行、請求頭部、請求主體三部分。

4、伺服器處理請求,瀏覽器接收http響應。

​ 狀態碼,響應頭,響應報文

5、渲染頁面,構建dom樹。

6、關閉tcp連線(四次揮手)。

全連線佇列和半連線佇列?

答:半連線是指客戶端傳送乙個syn包企圖建立連線,伺服器收到這個syn後把該連線加入到半連線佇列,並返回syn包以求得客戶端的最終確認,但是客戶端不發生確認,導致多個連線塞滿半連線佇列,最後不得不拋棄新到的連線請求,又稱為ddos攻擊。雖然在多次伺服器重傳失敗下,伺服器會拋棄認為已經失效的半連線請求,但是只要半連線請求不斷打過來,最後還是會崩潰。

解決辦法:利用syn_cookies方法去減少資源分配(時間戳和序號),不再使用半連線佇列

全連線佇列是指已經建立完成連線的請求的佇列,如果該佇列已滿,則會拋棄掉新到的請求

答:https是http加上ssl,利用了對稱加密演算法與非對稱加密演算法,其中資料的交換使用的是對稱加密,而對稱加密前獲取金鑰的過程使用的是非對稱加密,就是用這個非對稱加密過程來保證對稱加密的安全。

對稱加密:資料交換的雙方使用同一把金鑰,用該金鑰加密的資訊只能用該金鑰解密。效率比較高

非對稱加密:持有一把公鑰和一把私鑰。公鑰加密的資訊只有私鑰能解,私鑰加密的資訊只有公鑰能解。效率比較低

https資料交換時使用的是對稱加密,為了讓客戶端和伺服器端拿到同一把金鑰,這個過程就必須保密,如果被他人擷取到了這把金鑰那後續的資訊都暴露了。

先採用非對稱加密的方式來獲取對稱加密的金鑰:客戶端先生成對稱加密的金鑰,然後使用服務端的公鑰進行加密,把加密後的金鑰傳送給服務端,服務端利用私鑰解密得到金鑰,在這個單向的過程中,其他人無法解開這個金鑰,因此是安全的。

客戶端使用的服務端的公鑰其實是乙個證書,由ca機構進行頒布,包含了公鑰、網域名稱等待資訊。如果他人申請了乙個ca證書企圖替代其他公鑰也是不可能的,因為包含了網域名稱資訊,可以防偽。

為了防止傳輸過程中資料被篡改,客戶端可以將資料使用雜湊演算法得到hash值再用自己的私鑰加密,服務端收到後用公鑰解密然後進行hash,如果hash值不一致則說明被篡改。而其他人一旦篡改了資料就會導致hash值不一樣,並且也無法利用公鑰加密。

ping主要是使用什麼協議?

答:tcp/ip模型中的icmp協議

time_wait的作用?

答:在四次揮手的時候,伺服器端在接收到客戶端發出的fin m指令並返回乙個ack m+1指令後,會傳送完最後乙個資料報n,而客戶端接收到資料報n之後,會傳送乙個ack n+1表示真的關閉連線,並且進入time_wait狀態,會等待2msl即兩個資料報在網際網路中最大的存活時間。如果不進入到time_wait而是直接關閉,服務端可能會因為接收不到ack n+1而不關閉連線,因為要重發這個資料報n,而客戶端的time_wait就是為了以防服務端沒有接收到ack n+1而重發的這個資料報n,如果接收到了,客戶端就要再發一次ack n+1,直至真的關閉。time_wait一般持續1到4分鐘。

tcp裡面遇到滑動視窗為0會發生什麼?

答:tcp規範中要求:當接收方視窗為0時,傳送方繼續傳送乙個位元組資料的報文段。這些報文段將會被接收方確認,這樣可以保持tcp連線不中斷。

tcp粘包聽說過嗎?怎麼進行分割,還有嗎(換行符/記錄包大小)?udp有沾包問題嗎(mtu)

答:1、tcp粘包就是指多個資料連續傳送,在接收端的緩衝區裡無法進行單個資料報的分辨,就像是粘作一團,前乙個資料報的尾連著後乙個資料報的頭。

2、出現粘包的原因可能來自接受端(接收緩衝區儲存多個包)也可能來自傳送端(預設使用nagle演算法,收集多個小包一起傳送)

3、如果這些包本來就是一起的那就不用處理,如果不是那就需要進行處理

4、處理方法:傳送方:關閉nagle演算法;接收方:無法解決

應用層:1、開始標記、結束標記,但是得保證資料中不包含這兩個標記 2、記錄包的大小

tcp和udp的區別?

答:1、tcp面向連線的,而udp無連線的,即tcp需要經過三次握手進行連線,四次揮手來斷開連線。就像打**和寄信的區別。

2、tcp利用校驗和、序列號、超時重傳、確認應答號、流量控制、擁塞控制來保證可靠性,而udp不保證可靠性,只求盡量交付

3、udp具有較好的實時性,效率比較高,適合直播、遊戲等業務;而tcp的可靠性適合傳輸檔案等資料

4、tcp需要進行連線因此會比較占用系統資源,而udp占用的資源較少

5、資料頭所包含的資訊也就不一樣,並且最大長度也不一樣,udp是64k,而tcp得看傳送接收雙方

http詳細一點?

2、允許對資料型別進行標記,content-type標記了資料的型別

3、是無狀態的,指的是一次請求對應一次響應。如果為了有狀態去維護上下文的話會占用資源,並且一次中間錯誤需要重傳前邊的資訊

4、keep-alive可以使tcp保持連線

hazy的面試小筆記之Spring 持續更新

spring 的七種事務傳播 spring的單例是怎麼實現的?單例登錄檔 答 維護乙個單例登錄檔,即hashmap,key為beanname,value為對應的bean,如果每次查詢的都是同乙個beanname,就返回同乙個bean 如果是多例模式,則每次都生成新的bean並且不註冊到單例登錄檔中 ...

Python筆記 列表的一些小知識點(持續更新哦)

六月你好呀,最近太忙啦,都沒空程式設計!夏令營報的很麻煩,幾乎佔據了我大部分時間。不多bb,直接開始講吧!下面要講的是python中列表的複製 只有常規複製,才會指向同乙個列表。eg.lst 1,2,3,4,5 lst2 lst lst2.clear print lst 而copy函式 list 和...

小易的字典 牛客網 面試題

小易在學校中學習了關於字串的理論,於是他基於此完成了乙個字典的專案。小易的這個字典很奇特,字典內的每個單詞都包含n個 a 和m個 z 並且所有單詞按照字典序排列。小易現在希望你能幫他找出第k個單詞是什麼。輸入包括一行三個整數n,m,k 1 n,m 100,1 k 109 以空格分割。輸出第k個字典中...