Java經(jīng)典面試題匯總:網(wǎng)絡(luò)編程
1. HTTP 響應(yīng)碼 301 和 302 代表的是什么?有什么區(qū)別?
301:永久重定向。 302:暫時重定向。
它們的區(qū)別是,301 對搜索引擎優(yōu)化(SEO)更加有利;302 有被提示為網(wǎng)絡(luò)攔截的風(fēng)險。
2. 簡單說一下http協(xié)議?
HTTP協(xié)議是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫,是用于從萬維網(wǎng)(WWW:World Wide Web )服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。HTTP是一個基于TCP/IP通信協(xié)議被用于在Web瀏覽器和網(wǎng)站服務(wù)器之間傳遞信息,HTTP協(xié)議以明文方式發(fā)送內(nèi)容,不提供任何方式的數(shù)據(jù)加密。
3. HTTP與HTTPS的區(qū)別?
- https協(xié)議需要到CA申請證書,一般免費證書較少,因而需要一定費用。
- http是超文本傳輸協(xié)議,信息是明文傳輸,https則是具有安全性的ssl/tls加密傳輸協(xié)議。
- http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
- http的連接很簡單,是無狀態(tài)的;HTTPS協(xié)議是由SSL/TLS+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,比http協(xié)議安全。
4. HTTP協(xié)議下客戶端請求報文是什么?
HTTP請求由四個部分組成,分別是:
- 請求行(request line)
- 請求頭部(header)
- 空行
- 請求數(shù)據(jù)
5. HTTP協(xié)議服務(wù)器響應(yīng)報文有哪些?
HTTP響應(yīng)也由四個部分組成,分別是:
- 狀態(tài)行
- 消息報頭
- 空行
- 響應(yīng)正文
6. HTTP協(xié)議中的請求方法有哪些?
一共八種請求方法:GET, POST ,HEAD,OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
方法 | 描述 |
GET | 請求指定的頁面信息,并返回實體主體。 |
POST |
向指定資源提交數(shù)據(jù)進(jìn)行處理請求(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請求體中。 POST請求可能會導(dǎo)致新的資源的建立和/或已有資源的修改。 |
HEAD | 類似于get請求,只不過返回的響應(yīng)中沒有具體的內(nèi)容,用于獲取報頭 |
OPTIONS | 允許客戶端查看服務(wù)器的性能。 |
PUT | 從客戶端向服務(wù)器傳送的數(shù)據(jù)取代指定的文檔的內(nèi)容。 |
DELETE | 請求服務(wù)器刪除指定的頁面。 |
TRACE | 回顯服務(wù)器收到的請求,主要用于測試或診斷。 |
CONNECT | HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器 |
7. 常見的HTTP狀態(tài)碼有哪些?
當(dāng)瀏覽者訪問一個網(wǎng)頁時,瀏覽者的瀏覽器會向網(wǎng)頁所在服務(wù)器發(fā)出請求。當(dāng)瀏覽器接收并顯示網(wǎng)頁前,此網(wǎng)頁所在的服務(wù)器會返回一個包含HTTP狀態(tài)碼的信息頭(server header)用以響應(yīng)瀏覽器的請求。
HTTP狀態(tài)碼的英文為HTTP Status Code。下面是常見的HTTP狀態(tài)碼:
- 200 - 請求成功
- 301 - 資源(網(wǎng)頁等)被永久轉(zhuǎn)移到其它URL
- 404 - 請求的資源(網(wǎng)頁等)不存在
- 500 - 內(nèi)部服務(wù)器錯誤
8. forward 和 redirect 的區(qū)別?
- forward 是轉(zhuǎn)發(fā) 和 redirect 是重定向:
- 地址欄 url 顯示:foward url 不會發(fā)生改變,redirect url 會發(fā)生改變;
- 數(shù)據(jù)共享:forward 可以共享 request 里的數(shù)據(jù),redirect 不能共享;
- 效率:forward 比 redirect 效率高。
9. 簡述 tcp 和 udp的區(qū)別?
tcp 和 udp 是 OSI 模型中的運輸層中的協(xié)議。tcp 提供可靠的通信傳輸,而 udp 則常被用于讓廣播和細(xì)節(jié)控制交給應(yīng)用的通信傳輸。 兩者的區(qū)別大致如下:
- tcp 面向連接,udp 面向非連接即發(fā)送數(shù)據(jù)前不需要建立鏈接;
- tcp 提供可靠的服務(wù)(數(shù)據(jù)傳輸),udp 無法保證;
- tcp 面向字節(jié)流,udp 面向報文;
- tcp 數(shù)據(jù)傳輸慢,udp 數(shù)據(jù)傳輸快;
10. TCP 為什么要三次握手,兩次不行嗎?為什么?
如果采用兩次握手,那么只要服務(wù)器發(fā)出確認(rèn)數(shù)據(jù)包就會建立連接,但由于客戶端此時并未響應(yīng)服務(wù)器端的請求,那此時服務(wù)器端就會一直在等待客戶端, 這樣服務(wù)器端就白白浪費了一定的資源。若采用三次握手,服務(wù)器端沒有收到來自客戶端的再此確認(rèn),則就會知道客戶端并沒有要求建立請求,就不會浪費服務(wù)器的資源。
11. 說一下 TCP 粘包是怎么產(chǎn)生的?
TCP 粘包可能發(fā)生在發(fā)送端或者接收端,分別來看兩端各種產(chǎn)生粘包的原因:
- 發(fā)送端粘包:發(fā)送端需要等緩沖區(qū)滿才發(fā)送出去,造成粘包;
- 接收方粘包:接收方不及時接收緩沖區(qū)的包,造成多個包接收。
12. OSI 的七層模型都有哪些?
- 物理層:利用傳輸介質(zhì)為數(shù)據(jù)鏈路層提供物理連接,實現(xiàn)比特流的透明傳輸。
- 數(shù)據(jù)鏈路層:負(fù)責(zé)建立和管理節(jié)點間的鏈路。
- 網(wǎng)絡(luò)層:通過路由選擇算法,為報文或分組通過通信子網(wǎng)選擇最適當(dāng)?shù)穆窂健?/li>
- 傳輸層:向用戶提供可靠的端到端的差錯和流量控制,保證報文的正確傳輸。
- 會話層:向兩個實體的表示層提供建立和使用連接的方法。
- 表示層:處理用戶信息的表示問題,如編碼、數(shù)據(jù)格式轉(zhuǎn)換和加密解密等。
- 應(yīng)用層:直接向用戶提供服務(wù),完成用戶希望在網(wǎng)絡(luò)上完成的各種工作。
13. GET和POST的區(qū)別?
POST和GET都是向服務(wù)器提交數(shù)據(jù),并且都會從服務(wù)器獲取數(shù)據(jù)。
1、傳送方式:get通過地址欄傳輸,post通過報文傳輸。
2、傳送長度:get參數(shù)有長度限制(受限于url長度),而post無限制
3、GET和POST還有一個重大區(qū)別,簡單的說:
GET產(chǎn)生一個TCP數(shù)據(jù)包;POST產(chǎn)生兩個TCP數(shù)據(jù)包
長的說:
對于GET方式的請求,瀏覽器會把http header和data一并發(fā)送出去,服務(wù)器響應(yīng)200(返回數(shù)據(jù));
而對于POST,瀏覽器先發(fā)送header,服務(wù)器響應(yīng)100 continue,瀏覽器再發(fā)送data,服務(wù)器響應(yīng)200 ok(返回數(shù)據(jù))。
建議:
1、get方式的安全性較Post方式要差些,包含機密信息的話,建議用Post數(shù)據(jù)提交方式;
2、在做數(shù)據(jù)查詢時,建議用Get方式;而在做數(shù)據(jù)添加、修改或刪除時,建議用Post方式;
14. 如何實現(xiàn)跨域?
實現(xiàn)跨域有以下幾種方案:
服務(wù)器端運行跨域 設(shè)置 CORS 等于 *;
在單個接口使用注解 @CrossOrigin 運行跨域;
使用 jsonp 跨域;
15. 什么是WebSocket?
WebSocket是一種在單個TCP連接上進(jìn)行全雙工通信的協(xié)議。
WebSocket使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡單,允許服務(wù)端主動向客戶端推送數(shù)據(jù)。在WebSocket API中,瀏覽器和服務(wù)器只需要完成一次握手,兩者之間就直接可以創(chuàng)建持久性的連接,并進(jìn)行雙向數(shù)據(jù)傳輸。
16. WebSocket與HTTP的關(guān)系
相同點
1. 都是一樣基于TCP的,都是可靠性傳輸協(xié)議。
2. 都是應(yīng)用層協(xié)議。
不同點
1. WebSocket是雙向通信協(xié)議,模擬Socket協(xié)議,可以雙向發(fā)送或接受信息。HTTP是單向的。
2. WebSocket是需要握手進(jìn)行建立連接的。
聯(lián)系
WebSocket在建立握手時,數(shù)據(jù)是通過HTTP傳輸?shù)?。但是建立之后,在真正傳輸時候是不需要HTTP協(xié)議的。
17. WebSocket與Socket的關(guān)系
Socket其實并不是一個協(xié)議,而是為了方便使用TCP或UDP而抽象出來的一層,是位于應(yīng)用層和傳輸控制層之間的一組接口。
當(dāng)兩臺主機通信時,必須通過Socket連接,Socket則利用TCP/IP協(xié)議建立TCP連接。TCP連接則更依靠于底層的IP協(xié)議,IP協(xié)議的連接則依賴于鏈路層等更低層次。WebSocket則是一個典型的應(yīng)用層協(xié)議。
區(qū)別
Socket是傳輸控制層協(xié)議,WebSocket是應(yīng)用層協(xié)議。
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
SpringBoot日程管理Quartz與定時任務(wù)Task實現(xiàn)詳解
定時任務(wù)是企業(yè)級開發(fā)中必不可少的組成部分,諸如長周期業(yè)務(wù)數(shù)據(jù)的計算,例如年度報表,諸如系統(tǒng)臟數(shù)據(jù)的處理,再比如系統(tǒng)性能監(jiān)控報告,還有搶購類活動的商品上架,這些都離不開定時任務(wù)。本節(jié)將介紹兩種不同的定時任務(wù)技術(shù)2022-09-09使用ShardingJDBC進(jìn)行數(shù)據(jù)分片以及讀寫分離
ShardingJDBC是一個輕量級的Java框架,提供了數(shù)據(jù)分片、讀寫分離、分布式主鍵生成等數(shù)據(jù)訪問功能,本文將給大家介紹如何使用ShardingJDBC進(jìn)行數(shù)據(jù)分片以及讀寫分離,需要的朋友可以參考下2024-01-01Java String源碼分析并介紹Sting 為什么不可變
這篇文章主要介紹了Java String源碼分析并介紹Sting 為什么不可變的相關(guān)資料,需要的朋友可以參考下2017-02-02關(guān)于MybatisPlus配置雙數(shù)據(jù)庫驅(qū)動連接數(shù)據(jù)庫問題
這篇文章主要介紹了MybatisPlus配置雙數(shù)據(jù)庫驅(qū)動連接數(shù)據(jù)庫的具體實現(xiàn),具體的業(yè)務(wù)邏輯,在service層的類或者方法上面添加@DataSource注解來指定該業(yè)務(wù)需要用到的數(shù)據(jù)源,需要的朋友可以參考下2022-01-01Java 重載、重寫、構(gòu)造函數(shù)的實例詳解
這篇文章主要介紹了Java 重載、重寫、構(gòu)造函數(shù)的實例詳解的相關(guān)資料,希望通過本文大家能理解掌握java 面向?qū)ο蟮姆椒?,需要的朋友可以參考?/div> 2017-09-09Swagger2配置Security授權(quán)認(rèn)證全過程
這篇文章主要介紹了Swagger2配置Security授權(quán)認(rèn)證全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03Java JSON轉(zhuǎn)成List結(jié)構(gòu)數(shù)據(jù)
這篇文章主要介紹了Java JSON轉(zhuǎn)成List結(jié)構(gòu)數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09最新評論