很多同學(xué)想知道企業(yè)在招聘Java工程師時(shí)會(huì)提問哪些問題?千鋒武漢Java培訓(xùn)老師匯總Java面試常見的網(wǎng)絡(luò)通信的10道問題,下面一起來看看吧!希望幫助大家順利通過面試!

一、http協(xié)議的狀態(tài)碼有哪些?含義是什么?
200 OK 客戶端請求成功
301Moved Permanently(永久移除),請求的URL已移走。Response中應(yīng)該包含一個(gè) Location URL,說明資源現(xiàn)在所處的位置
302found 重定向
400Bad Request 客戶端請求有語法錯(cuò)誤,不能被服務(wù)器所理解
401Unauthorized 請求未經(jīng)授權(quán),這個(gè)狀態(tài)代碼必須和WWW-Authenticate報(bào)頭域一起使用
403 Forbidden 服務(wù)器收到請求,但是拒絕提供服務(wù)
404 Not Found 請求資源不存在,eg:輸入了錯(cuò)誤的URL
500 Internal Server Error 服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤
503 Server Unavailable 服務(wù)器當(dāng)前不能處理客戶端的請求,一段時(shí)間后可能恢復(fù)正常
二、http的請求報(bào)文組成?
請求行:
1、是請求方法,GET和POST是最常見的http方法,除此以外還包括DELETE、HEAD、OPTIONS、PUT、TRACE。
2、為請求對應(yīng)的URL地址,它和報(bào)文頭的Host屬性組成完整的請求URL。
3、是協(xié)議名稱及版本號。
請求頭:
是http的報(bào)文頭,報(bào)文頭包含若干個(gè)屬性,格式為“屬性名:屬性值”,服務(wù)端據(jù)此獲取客戶端的信息。
與緩存相關(guān)的規(guī)則信息,均包含在header中
請求體:
是報(bào)文體,它將一個(gè)頁面表單中的組件值通過param1=value1?m2=value2的鍵值對形式編碼成一個(gè)格式化串,它承載多個(gè)請求參數(shù)的數(shù)據(jù)。不但報(bào)文體可以傳遞請求參數(shù),請求URL也可以通過類似于“/chapter15/user.html? param1=value1?m2=value2”的方式傳遞請求參數(shù)。?
三、一次完整的http請求是怎樣的?
域名解析 --> 發(fā)起TCP的3次握手 --> 建立TCP連接后發(fā)起http請求 --> 服務(wù)器響應(yīng)http請求,瀏覽器得到html代碼 --> 瀏覽器解析html代碼,并請求html代碼中的資源(如js、css、圖片等) --> 瀏覽器對頁面進(jìn)行渲染呈現(xiàn)給用戶
四、Tcp和Udp的區(qū)別?
1.基于連接與無連接;
2.對系統(tǒng)資源的要求(TCP較多,UDP少);
3.UDP程序結(jié)構(gòu)較簡單;
4.流模式與數(shù)據(jù)報(bào)模式 ;
5.TCP保證數(shù)據(jù)正確性,UDP可能丟包,TCP保證數(shù)據(jù)順序,UDP不保證。
五、SSL協(xié)議的三個(gè)特性
私密性:在握手協(xié)議定義了會(huì)話密鑰后,所有的消息都被加密。
確認(rèn)性:盡管會(huì)話的客戶端認(rèn)證是可選的,但是服務(wù)器端始終是被認(rèn)證的。
可靠性:傳送的消息包括消息完整性檢查。
六、TCP的三次握手與四次揮手
第一次握手:建立連接時(shí),客戶端發(fā)送syn包(syn=x)到服務(wù)器,并進(jìn)入SYN_SENT狀態(tài),等待服務(wù)器確認(rèn);SYN:同步序列編號(Synchronize Sequence Numbers)。
第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=x+1),同時(shí)自己也發(fā)送一個(gè)SYN包(syn=y),即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài);
第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=y+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED(TCP連接成功)狀態(tài),完成三次握手。
1)客戶端進(jìn)程發(fā)出連接釋放報(bào)文,并且停止發(fā)送數(shù)據(jù)。釋放數(shù)據(jù)報(bào)文首部,F(xiàn)IN=1,其序列號為seq=u(等于前面已經(jīng)傳送過來的數(shù)據(jù)的最后一個(gè)字節(jié)的序號加1),此時(shí),客戶端進(jìn)入FIN-WAIT-1(終止等待1)狀態(tài)。 TCP規(guī)定,F(xiàn)IN報(bào)文段即使不攜帶數(shù)據(jù),也要消耗一個(gè)序號。
2)服務(wù)器收到連接釋放報(bào)文,發(fā)出確認(rèn)報(bào)文,ACK=1,ack=u+1,并且?guī)献约旱男蛄刑杝eq=v,此時(shí),服務(wù)端就進(jìn)入了CLOSE-WAIT(關(guān)閉等待)狀態(tài)。TCP服務(wù)器通知高層的應(yīng)用進(jìn)程,客戶端向服務(wù)器的方向就釋放了,這時(shí)候處于半關(guān)閉狀態(tài),即客戶端已經(jīng)沒有數(shù)據(jù)要發(fā)送了,但是服務(wù)器若發(fā)送數(shù)據(jù),客戶端依然要接受。這個(gè)狀態(tài)還要持續(xù)一段時(shí)間,也就是整個(gè)CLOSE-WAIT狀態(tài)持續(xù)的時(shí)間。
3)客戶端收到服務(wù)器的確認(rèn)請求后,此時(shí),客戶端就進(jìn)入FIN-WAIT-2(終止等待2)狀態(tài),等待服務(wù)器發(fā)送連接釋放報(bào)文(在這之前還需要接受服務(wù)器發(fā)送的最后的數(shù)據(jù))。
4)服務(wù)器將最后的數(shù)據(jù)發(fā)送完畢后,就向客戶端發(fā)送連接釋放報(bào)文,F(xiàn)IN=1,ack=u+1,由于在半關(guān)閉狀態(tài),服務(wù)器很可能又發(fā)送了一些數(shù)據(jù),假定此時(shí)的序列號為seq=w,此時(shí),服務(wù)器就進(jìn)入了LAST-ACK(最后確認(rèn))狀態(tài),等待客戶端的確認(rèn)。
5)客戶端收到服務(wù)器的連接釋放報(bào)文后,必須發(fā)出確認(rèn),ACK=1,ack=w+1,而自己的序列號是seq=u+1,此時(shí),客戶端就進(jìn)入了TIME-WAIT(時(shí)間等待)狀態(tài)。注意此時(shí)TCP連接還沒有釋放,必須經(jīng)過2??MSL(最長報(bào)文段壽命)的時(shí)間后,當(dāng)客戶端撤銷相應(yīng)的TCB后,才進(jìn)入CLOSED狀態(tài)。
6)服務(wù)器只要收到了客戶端發(fā)出的確認(rèn),立即進(jìn)入CLOSED狀態(tài)。同樣,撤銷TCB后,就結(jié)束了這次的TCP連接。可以看到,服務(wù)器結(jié)束TCP連接的時(shí)間要比客戶端早一些。
七、為什么連接的時(shí)候是三次握手,關(guān)閉的時(shí)候卻是四次握手?
因?yàn)楫?dāng)Server端收到Client端的SYN連接請求報(bào)文后,可以直接發(fā)送SYN+ACK報(bào)文。其中ACK報(bào)文是用來應(yīng)答的,SYN報(bào)文是用來同步的。但是關(guān)閉連接時(shí),當(dāng)Server端收到FIN報(bào)文時(shí),很可能并不會(huì)立即關(guān)閉SOCKET,所以只能先回復(fù)一個(gè)ACK報(bào)文,告訴Client端,"你發(fā)的FIN報(bào)文我收到了"。只有等到我Server端所有的報(bào)文都發(fā)送完了,我才能發(fā)送FIN報(bào)文,因此不能一起發(fā)送。故需要四步握手。
八、如果已經(jīng)建立了連接,但是客戶端突然出現(xiàn)故障了怎么辦?
TCP還設(shè)有一個(gè)保活計(jì)時(shí)器,顯然,客戶端如果出現(xiàn)故障,服務(wù)器不能一直等下去,白白浪費(fèi)資源。服務(wù)器每收到一次客戶端的請求后都會(huì)重新復(fù)位這個(gè)計(jì)時(shí)器,時(shí)間通常是設(shè)置為2小時(shí),若兩小時(shí)還沒有收到客戶端的任何數(shù)據(jù),服務(wù)器就會(huì)發(fā)送一個(gè)探測報(bào)文段,以后每隔75秒鐘發(fā)送一次。若一連發(fā)送10個(gè)探測報(bào)文仍然沒反應(yīng),服務(wù)器就認(rèn)為客戶端出了故障,接著就關(guān)閉連接。
九、http中重定向和請求轉(zhuǎn)發(fā)的區(qū)別?
本質(zhì)區(qū)別:轉(zhuǎn)發(fā)是服務(wù)器行為,重定向是客戶端行為。
重定向特點(diǎn):兩次請求,瀏覽器地址發(fā)生變化,可以訪問自己web之外的資源,傳輸?shù)臄?shù)據(jù)會(huì)丟失。
請求轉(zhuǎn)發(fā)特點(diǎn):一次強(qiáng)求,瀏覽器地址不變,訪問的是自己本身的web資源,傳輸?shù)臄?shù)據(jù)不會(huì)丟失。
十、GET和POST的區(qū)別?
1、GET請求的數(shù)據(jù)會(huì)附在URL之后(就是把數(shù)據(jù)放置在http協(xié)議頭中),以?分割URL和傳輸數(shù)據(jù),參數(shù)之間以&相連,如:login.action?name=zhagnsan&password=123456。POST 把提交的數(shù)據(jù)則放置在是http包的包體中。
2、GET方式提交的數(shù)據(jù)最多只能是1024字節(jié),理論上POST沒有限制,可
4、Get 是向服務(wù)器發(fā)索取數(shù)據(jù)的一種請求,而Post是向服務(wù)器提交數(shù)據(jù)的一種請求,在FORM(表單)中,Method默認(rèn)為"GET",實(shí)質(zhì)上GET和POST只是發(fā)送機(jī)制不同,并不是一個(gè)取一個(gè)發(fā)。

以上就是千鋒武漢Java培訓(xùn)老師匯總的Java面試中常見的網(wǎng)絡(luò)通信的10道問題,希望對大家面試有所幫助。想了解更多高級Java工程師面試題,你可以關(guān)注“千鋒武漢”微信公眾號,定期發(fā)布技術(shù)熱點(diǎn)和行業(yè)趨勢分析,助力你快速入職。你也可以參加千鋒武漢Java培訓(xùn)班,快速系統(tǒng)的學(xué)習(xí)進(jìn)階,做企業(yè)需要的高職高能Java人才!
2021-10-22 千鋒武漢發(fā)布了 《《我的世界》千鋒1024程序員節(jié)品牌片重磅發(fā)布》的文章
2021-10-22 千鋒武漢發(fā)布了 《千鋒1024程序員節(jié)重磅激勵(lì),多重豪禮強(qiáng)力助學(xué)》的文章
2021-10-22 千鋒武漢發(fā)布了 《千鋒聯(lián)動(dòng)全國百所院校 開展1024程序員節(jié)狂“享”活動(dòng)!》的文章
2021-10-20 千鋒武漢發(fā)布了 《千鋒為中國航發(fā)商發(fā)提供Python課程培訓(xùn),助力商發(fā)公司高效決策》的文章
2021-10-15 千鋒武漢發(fā)布了 《千鋒教育1024程序員狂歡節(jié)即將火爆來襲 “厚禮”一觸即發(fā)》的文章