1、http 響應碼 301 和 302 代表的是什么?有什么區(qū)別?
答:301,302 都是HTTP狀態(tài)的編碼,都代表著某個URL發(fā)生了轉(zhuǎn)移。
區(qū)別:
301 redirect: 301 代表永久性轉(zhuǎn)移(Permanently Moved)。
302 redirect: 302 代表暫時性轉(zhuǎn)移(Temporarily Moved )。
(推薦教程:java入門程序)
2、forward 和 redirect 的區(qū)別?
Forward和Redirect代表了兩種請求轉(zhuǎn)發(fā)方式:直接轉(zhuǎn)發(fā)和間接轉(zhuǎn)發(fā)。
直接轉(zhuǎn)發(fā)方式(Forward),客戶端和瀏覽器只發(fā)出一次請求,Servlet、HTML、JSP或其它信息資源,由第二個信息資源響應該請求,在請求對象request中,保存的對象對于每個信息資源是共享的。
間接轉(zhuǎn)發(fā)方式(Redirect)實際是兩次HTTP請求,服務器端在響應第一次請求的時候,讓瀏覽器再向另外一個URL發(fā)出請求,從而達到轉(zhuǎn)發(fā)的目的。
舉個通俗的例子:
直接轉(zhuǎn)發(fā)就相當于:“A找B借錢,B說沒有,B去找C借,借到借不到都會把消息傳遞給A”;
間接轉(zhuǎn)發(fā)就相當于:"A找B借錢,B說沒有,讓A去找C借"。
(相關(guān)視頻教程推薦:java視頻教程)
3、簡述 tcp 和 udp的區(qū)別?
TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發(fā)送數(shù)據(jù)之前不需要建立連接。
TCP提供可靠的服務。也就是說,通過TCP連接傳送的數(shù)據(jù),無差錯,不丟失,不重復,且按序到達;UDP盡最大努力交付,即不保證可靠交付。
Tcp通過校驗和,重傳控制,序號標識,滑動窗口、確認應答實現(xiàn)可靠傳輸。如丟包時的重發(fā)控制,還可以對次序亂掉的分包進行順序控制。
UDP具有較好的實時性,工作效率比TCP高,適用于對高速傳輸和實時性有較高的通信或廣播通信。
每一條TCP連接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通信。
TCP對系統(tǒng)資源要求較多,UDP對系統(tǒng)資源要求較少。
4、tcp 為什么要三次握手,兩次不行嗎?為什么?
為了實現(xiàn)可靠數(shù)據(jù)傳輸, TCP 協(xié)議的通信雙方, 都必須維護一個序列號, 以標識發(fā)送出去的數(shù)據(jù)包中, 哪些是已經(jīng)被對方收到的。 三次握手的過程即是通信雙方相互告知序列號起始值, 并確認對方已經(jīng)收到了序列號起始值的必經(jīng)步驟。
如果只是兩次握手, 至多只有連接發(fā)起方的起始序列號能被確認, 另一方選擇的序列號則得不到確認。
5、說一下 tcp 粘包是怎么產(chǎn)生的?
(1)發(fā)送方產(chǎn)生粘包
采用TCP協(xié)議傳輸數(shù)據(jù)的客戶端與服務器經(jīng)常是保持一個長連接的狀態(tài)(一次連接發(fā)一次數(shù)據(jù)不存在粘包),雙方在連接不斷開的情況下,可以一直傳輸數(shù)據(jù);但當發(fā)送的數(shù)據(jù)包過于的小時,那么TCP協(xié)議默認的會啟用Nagle算法,將這些較小的數(shù)據(jù)包進行合并發(fā)送(緩沖區(qū)數(shù)據(jù)發(fā)送是一個堆壓的過程);這個合并過程就是在發(fā)送緩沖區(qū)中進行的,也就是說數(shù)據(jù)發(fā)送出來它已經(jīng)是粘包的狀態(tài)了。
(2)接收方產(chǎn)生粘包
接收方采用TCP協(xié)議接收數(shù)據(jù)時的過程是這樣的:數(shù)據(jù)到底接收方,從網(wǎng)絡模型的下方傳遞至傳輸層,傳輸層的TCP協(xié)議處理是將其放置接收緩沖區(qū),然后由應用層來主動獲?。–語言用recv、read等函數(shù));這時會出現(xiàn)一個問題,就是我們在程序中調(diào)用的讀取數(shù)據(jù)函數(shù)不能及時的把緩沖區(qū)中的數(shù)據(jù)拿出來,而下一個數(shù)據(jù)又到來并有一部分放入的緩沖區(qū)末尾,等我們讀取數(shù)據(jù)時就是一個粘包。(放數(shù)據(jù)的速度 > 應用層拿數(shù)據(jù)速度)
如果您想知道