面必問:網(wǎng)絡(luò)編程八股知識點系統(tǒng)梳理與面試應(yīng)對)
最近好幾個準備跳槽的朋友來問我大廠技術(shù)面到底該怎么準備。聊了一圈我發(fā)現(xiàn)很多人項目經(jīng)驗挺豐富但一聊到網(wǎng)絡(luò)編程就露怯——不是不知道是知道得太散被面試官連追幾個“為什么”就卡住了。我自己去年面下來最大的感受是網(wǎng)絡(luò)編程這塊基本是每一輪技術(shù)面都繞不開的硬骨頭。不管是面后端、客戶端還是基礎(chǔ)架構(gòu)面試官總喜歡從網(wǎng)絡(luò)編程切入因為這里最容易區(qū)分“背過題”和“真懂”。今天把我在面試前整理、面試中被反復追問、最終幫我頂住壓力的網(wǎng)絡(luò)編程八股系統(tǒng)梳理一遍按大廠面試的考察邏輯來講不是單純列知識點而是把每一條背后“為什么這么設(shè)計”“面試官想聽什么”一起說清楚。適用人群比較明確準備數(shù)月內(nèi)參加大廠技術(shù)面、需要系統(tǒng)過一遍網(wǎng)絡(luò)編程知識體系的開發(fā)者以及工作兩三年、想查漏補缺提升內(nèi)功的朋友。如果只是隨便看看這篇也能幫你把零散的網(wǎng)絡(luò)編程知識點串成一張完整的網(wǎng)。1. 大廠網(wǎng)絡(luò)編程面試到底在考什么面試官問網(wǎng)絡(luò)編程表面是在考知識點實際上是在考察三件事你有沒有扎實的計算機基礎(chǔ)能不能把抽象協(xié)議和實際現(xiàn)象對應(yīng)起來以及遇到線上問題時有沒有清晰的排查思路。這三件事恰好對應(yīng)了大廠日常開發(fā)里真正需要的能力——不是背得出TCP頭格式而是服務(wù)端連接數(shù)暴漲時知道從哪里入手。1.1 面試官最看重的那幾板斧網(wǎng)絡(luò)編程的知識點浩如煙海但大廠面試官翻來覆去問的其實就集中在幾塊TCP連接管理三次握手、四次揮手、各種狀態(tài)、TCP可靠性機制重傳、流量控制、擁塞控制、I/O模型阻塞、非阻塞、多路復用、Socket編程細節(jié)粘包、拆包、超時處理、以及C/Linux背景下特有的坑文件描述符、信號驅(qū)動、多線程模型。這幾塊為什么被反復問因為它們是所有網(wǎng)絡(luò)程序的底座。你做HTTP服務(wù)要處理TCP連接你做即時通訊要管長連接狀態(tài)你做網(wǎng)關(guān)要調(diào)I/O模型你寫客戶端要考慮粘包拆包。面試官問的是八股實際想看的是你能不能把這些底層機制和你做過的東西聯(lián)系起來。我之前面某大廠時面試官先問我“項目里為什么用長連接”我答完之后他直接追問“長連接的保活你怎么做的”然后一路追到TCP KeepAlive的定時參數(shù)、應(yīng)用層心跳的優(yōu)缺點。這個追問鏈的起點就是最基礎(chǔ)的八股但終點已經(jīng)是實戰(zhàn)經(jīng)驗了。1.2 八股的價值不是背是構(gòu)建體系很多人對八股有誤解覺得就是死記硬背。但以我自己的經(jīng)驗看網(wǎng)絡(luò)編程八股真正的價值是幫你建立一張完整的知識網(wǎng)絡(luò)。你背“三次握手是為了確認雙方的收發(fā)能力”這只是個孤立的點當你理解序列號、確認號、SYN Flood這些概念后三次握手才真正變成你知識體系里和“連接可靠性”關(guān)聯(lián)的一個節(jié)點。所以準備八股的正確姿勢不是背題而是把每一塊知識點畫成樹狀圖。比如TCP可靠性機制這棵樹根是“IP協(xié)議不可靠”枝干是“校驗和、序列號、確認應(yīng)答、超時重傳、流量控制、擁塞控制”每個枝干再往下長葉子——滑動窗口怎么動、擁塞窗口怎么調(diào)、快速重傳觸發(fā)條件是什么。面試官無論從哪個葉子問起你都能沿著枝干往上找到根也能從上往下講清楚細節(jié)。這種“體系感”是面試中最重要的東西比多背十個知識點管用得多。2. 網(wǎng)絡(luò)編程八股的核心硬骨頭TCP協(xié)議細節(jié)TCP是網(wǎng)絡(luò)編程面試的絕對核心沒有之一。面試官會從各個角度考TCP但最終都繞不開兩個大方向連接管理和可靠性機制。這兩個方向覆蓋了TCP最核心的設(shè)計思想也是線上問題排查時最常用的知識。2.1 TCP三次握手和四次揮手真的懂了嗎三次握手的過程大家都背得出來客戶端發(fā)SYN服務(wù)端回SYNACK客戶端再回ACK。但面試官真正想聽的是“為什么”。為什么是三次而不是兩次或四次因為三次握手能最低成本地確認雙方的收發(fā)能力都正常第一次握手服務(wù)端確認客戶端發(fā)送能力第二次握手客戶端確認服務(wù)端收發(fā)能力都正常第三次握手服務(wù)端確認客戶端接收能力正常。兩次握手無法讓服務(wù)端確認客戶端的接收能力四次又多余。三次握手還有個高頻考點——SYN Flood攻擊。攻擊者只發(fā)SYN不回ACK讓服務(wù)端一直維持半連接隊列。這塊面試官會追問半連接隊列滿了會怎樣新SYN被丟棄或SYN Cookie機制生效SYN Cookie原理是什么不分配資源通過Cookie編碼信息收到ACK時再校驗。了解這些說明你不只懂正常流程還懂異常場景。四次揮手同理關(guān)鍵在狀態(tài)變化??蛻舳税l(fā)FIN進入FIN_WAIT_1收到ACK進入FIN_WAIT_2收到服務(wù)端FIN進入TIME_WAIT服務(wù)端收到FIN進入CLOSE_WAIT發(fā)完數(shù)據(jù)后發(fā)FIN進入LAST_ACK。兩個高頻問題為什么TIME_WAIT要等2MSL以及CLOSE_WAIT過多說明什么。TIME_WAIT等2MSL有兩個原因一是確保最后一個ACK能到達如果丟了給對端重發(fā)FIN的機會二是讓舊連接的報文在網(wǎng)絡(luò)中自然消失避免干擾新連接。CLOSE_WAIT過多基本說明服務(wù)端代碼有問題——收到對端FIN后沒有正確關(guān)閉自己的socket常見于忘記關(guān)閉文件描述符或業(yè)務(wù)處理線程卡住。提示項目里遇到大量TIME_WAIT別慌這通常說明服務(wù)端主動關(guān)閉了連接配合長連接優(yōu)化或調(diào)大端口范圍能緩解。真正需要警惕的是CLOSE_WAIT堆積那才是代碼層面的問題。2.2 TCP的可靠性機制重傳、流量控制、擁塞控制TCP的可靠性建立在IP是不可靠的基礎(chǔ)上這是理解整棵樹的根。面試官問“TCP怎么保證可靠傳輸”標準答案是校驗和、序列號、確認應(yīng)答、超時重傳、流量控制、擁塞控制。但每個點都要能展開。重傳機制要區(qū)分三種超時重傳RTO超時沒收到ACK就重傳、快速重傳收到三個重復ACK就重傳不用等超時、SACK選擇性確認只重傳丟失的段。面試官問“快速重傳為什么比超時重傳快”你要答得出來超時重傳等待時間太長而三個重復ACK說明后續(xù)數(shù)據(jù)都到了只是中間丟了這時候立即重傳能減少等待。流量控制是點對點的通過滑動窗口實現(xiàn)。接收方在ACK里帶上自己的窗口大小發(fā)送方據(jù)此調(diào)整發(fā)送速率防止把接收方緩沖區(qū)打滿。這里常問“窗口大小變成0怎么辦”——發(fā)送方會停止發(fā)送同時啟動持續(xù)定時器周期性地發(fā)零窗口探測報文避免死等。擁塞控制是全局的防止數(shù)據(jù)把網(wǎng)絡(luò)帶寬打滿。四步曲慢啟動、擁塞避免、快速重傳、快速恢復。面試重點在于“擁塞窗口cwnd和接收窗口rwnd的區(qū)別”以及“什么時候進入擁塞避免”。我習慣用一個類比來解釋流量控制是水管末端的水龍頭說了算擁塞控制是整條管道的水壓說了算。2.3 UDP和TCP的選型邏輯以及為什么QUIC值得聊UDP在面試里比重不如TCP但最近幾年問得越來越多原因是HTTP/3和QUIC把UDP重新帶回視野。UDP的核心特點就三句話無連接、不可靠、報文邊界清楚。面試官問“什么時候用UDP”標準答案是實時性要求高、可以容忍丟包、不希望擁塞控制拖慢速度的場景比如音視頻通話、游戲同步。但這里有個進階點純UDP在復雜網(wǎng)絡(luò)下并不好用所以QUIC在UDP之上重新實現(xiàn)了可靠傳輸、流量控制、擁塞控制還加入了多路復用和連接遷移。面試時如果能從“UDP不可靠”聊到“為什么QUIC要選擇UDP而不是改造TCP”會是很明顯的加分項。核心原因是TCP棧在內(nèi)核里改造成本太高、升級周期太長而在用戶態(tài)基于UDP實現(xiàn)可靠傳輸?shù)俣群挽`活性都好得多。3. Linux下網(wǎng)絡(luò)編程的實戰(zhàn)細節(jié)八股背得再好落到代碼上才是真功夫。大廠面試一般會有15到20分鐘的代碼或場景題網(wǎng)絡(luò)編程的實戰(zhàn)細節(jié)是這時候的主戰(zhàn)場。這塊我建議重點準備socket編程流程、I/O多路復用和常見的網(wǎng)絡(luò)編程坑。3.1 socket編程基本流程和邊界條件TCP服務(wù)端的標準流程socket()創(chuàng)建套接字、bind()綁定地址、listen()進入監(jiān)聽、accept()接受連接、read()/write()收發(fā)數(shù)據(jù)、close()關(guān)閉??蛻舳说牧鞒谈唵蝧ocket()、connect()、read()/write()、close()。這個流程背下來不難但面試官會從邊界條件切入。比如listen()的backlog參數(shù)是什么意思已完成連接隊列的最大長度accept()返回的fd和監(jiān)聽fd有什么關(guān)系accept返回的是每個客戶端連接的新fd并發(fā)連接很多時單線程accept能不能扛住不能需要多線程或多路復用close()之后立刻再連接同一個端口會怎樣可能TIME_WAIT可能端口占用。我面試時被問過一個很典型的場景題設(shè)計一個支持高并發(fā)的服務(wù)端你在代碼層面會怎么做。這題看起來是系統(tǒng)設(shè)計實際考的就是socket模型選型。一是把accept和讀寫分離到不同線程二是用epoll做I/O多路復用避免每連接一個線程三是把業(yè)務(wù)邏輯放到線程池里異步處理。這三層對應(yīng)了服務(wù)端網(wǎng)絡(luò)程序最常見的架構(gòu)模式——Reactor模型。3.2 粘包拆包問題為什么必須處理怎么處理粘包拆包是網(wǎng)絡(luò)編程面試里出現(xiàn)頻率極高的問題尤其面C和QT開發(fā)。根本原因只有一個TCP是字節(jié)流協(xié)議沒有消息邊界。發(fā)送方連續(xù)send兩次數(shù)據(jù)接收方可能一次recv就全收到也可能收一半還可能把多次send的數(shù)據(jù)合并成一次recv。面試官問“你怎么解決粘包”其實是問“你的應(yīng)用層協(xié)議怎么設(shè)計”。主流方案有三種固定長度每個報文固定字節(jié)數(shù)不足補位簡單但浪費、長度前綴包頭用固定字節(jié)數(shù)存正文長度收到夠長的數(shù)據(jù)后再解析最常用、分隔符如HTTP的\r\n\r\n適合文本協(xié)議但正文里不能出現(xiàn)分隔符。這里我想多說一句粘包問題的本質(zhì)不是“解決”而是“定義消息邊界”。很多新手以為在send時加個sleep就行了這完全不對——TCP的粘包和時序無關(guān)就算兩次send間隔1秒接收方還是可能一次性讀到兩段數(shù)據(jù)。真正要做的是在接收緩沖區(qū)里維護一個完整的數(shù)據(jù)包拆包邏輯每次先讀包頭、根據(jù)包頭里的長度字段判斷是否收齊、收齊后再把完整消息交給業(yè)務(wù)層。3.3 I/O多路復用select、poll、epoll三件套I/O多路復用是網(wǎng)絡(luò)編程面試的必考點幾乎每一輪都會被問到。核心問題是一個線程怎么同時管理成千上萬個連接。select是最老的方案三個問題fd數(shù)量上限是1024每次調(diào)用都要把fd集合從用戶態(tài)拷貝到內(nèi)核態(tài)內(nèi)核要線性掃描所有fdO(n)復雜度。poll解決了fd上限問題但拷貝和遍歷的問題還在。epoll是Linux下的最優(yōu)解核心改進有三個epoll_create在內(nèi)核建了一個事件表epoll_ctl注冊fd時只拷貝一次epoll_wait只返回有事件發(fā)生的fd不用全量遍歷。但面試官最愛追問的是epoll的ET和LT怎么選為什么。LT水平觸發(fā)是默認模式只要fd還有數(shù)據(jù)可讀就會一直通知ET邊沿觸發(fā)只在狀態(tài)變化時通知一次如果沒讀完后續(xù)不再通知。ET模式的坑在于你必須一次性把數(shù)據(jù)讀完否則會餓死——所以用ET時通常要配合非阻塞fd循環(huán)讀到EAGAIN為止。用ET還是LT我的建議是除非對性能有極致追求否則用LT。LT代碼寫起來簡單、不容易漏事件性能差距在絕大多數(shù)場景下可以忽略。如果你在面試里說“我項目里用的ET”一定要能說清楚為什么——比如“減少了事件通知次數(shù)”“配合非阻塞IO循環(huán)讀”等等。答不上來這句面試官會認為你只是聽過名詞。4. 從C到QT兩個高頻場景的考察點網(wǎng)絡(luò)編程熱詞里C和QT是兩個高頻前綴。大廠客戶端和后端崗位對C網(wǎng)絡(luò)編程考察很重而QT網(wǎng)絡(luò)編程則更偏向跨平臺客戶端開發(fā)。兩塊都有各自的常見問題。4.1 C網(wǎng)絡(luò)編程的常見坑生命周期和半包問題C和網(wǎng)絡(luò)編程組合在一起面試官會重點考察內(nèi)存管理和對象生命周期。最經(jīng)典的場景某個客戶端連接關(guān)閉后你還有異步讀寫操作持有這個連接的指針怎么辦這類問題本質(zhì)是“C里沒有自動回收socket對象生命周期需要自己管理”。解決辦法常見的有用shared_ptr管理連接對象、在事件回調(diào)里用weak_ptr檢查有效性、或者統(tǒng)一由一個管理器管理所有連接對象、連接關(guān)閉時從管理器移除。面試時我會建議把“連接對象生命周期管理”作為項目中的一個設(shè)計點主動講出來這比被動回答效果好很多。半包問題是另一大考點。上一節(jié)講了粘包拆包C場景下還會追問“緩沖區(qū)怎么設(shè)計”。我常用的是每個連接維護一個動態(tài)增長的接收緩沖區(qū)收到數(shù)據(jù)先追加到緩沖區(qū)然后循環(huán)嘗試解析出完整報文解析成功就交給業(yè)務(wù)層。緩沖區(qū)用vector 還是環(huán)形緩沖區(qū)取決于你的封包大小是否均勻——這塊能聊出設(shè)計取舍面試官會很感興趣。4.2 QT網(wǎng)絡(luò)編程的信號槽機制和線程模型QT網(wǎng)絡(luò)編程的核心是QTcpSocket、QTcpServer、QNetworkAccessManager這些類但面試官考得更多的是信號槽機制在網(wǎng)絡(luò)編程中的特殊表現(xiàn)。簡單說QT的網(wǎng)絡(luò)事件分發(fā)依賴事件循環(huán)信號槽默認在接收者所在線程執(zhí)行這個機制帶來一個典型問題——你在子線程里處理業(yè)務(wù)時QTcpSocket的readyRead信號到底在哪個線程觸發(fā)。正解是如果QTcpSocket歸屬主線程readyRead在主線程觸發(fā)不能在子線程里直接操作UI如果要在子線程里做網(wǎng)絡(luò)操作要么用moveToThread把socket移到子線程要么用QNetworkAccessManager的異步接口配合事件循環(huán)。很多人面試時聊到QT網(wǎng)絡(luò)編程翻車都是栽在這里——信號槽觸發(fā)的線程上下文沒搞清楚。還有一個小高頻點QTcpServer收到新連接后nextPendingConnection()返回的QTcpSocket父對象要設(shè)對否則內(nèi)存管理會出問題。這個點看起來小但面試官拿真實項目代碼問你時能不能一眼看出問題就很關(guān)鍵了。5. 網(wǎng)絡(luò)編程與自動化新興場景的加分項“網(wǎng)絡(luò)編程與自動化”這個詞在最近的招聘需求里出現(xiàn)頻率明顯變高。很多人一開始不明白網(wǎng)絡(luò)編程和自動化有什么關(guān)系。其實關(guān)系非常大——自動化測試系統(tǒng)要模擬網(wǎng)絡(luò)請求、要mock服務(wù)端、要做協(xié)議測試、要做異常注入這些都離不開網(wǎng)絡(luò)編程能力。5.1 自動化測試為什么要懂網(wǎng)絡(luò)編程一個典型的自動化測試平臺通常需要三塊能力模擬客戶端發(fā)送各種協(xié)議請求、模擬服務(wù)端返回預(yù)期響應(yīng)、構(gòu)造網(wǎng)絡(luò)異常場景超時、亂序、丟包。這三塊每一塊都是網(wǎng)絡(luò)編程的活。比如模擬TCP半關(guān)閉場景你要真寫代碼控制FIN的發(fā)送模擬慢客戶端要手工控制讀取速度這都要求你對網(wǎng)絡(luò)協(xié)議棧有深入理解。面試如果涉及自動化方向我建議主動把你做的網(wǎng)絡(luò)相關(guān)功能包裝成“自動化能力”。比如“我封裝了一個協(xié)議mock服務(wù)基于epoll管理上萬個虛擬設(shè)備連接能模擬設(shè)備掉線、弱網(wǎng)、亂序”這句話比寫十行“熟悉TCP/IP”有用得多。這也是為什么網(wǎng)絡(luò)編程八股在自動化崗位面試里同樣重要的原因——技術(shù)的表現(xiàn)形式不同底層原理是共通的。5.2 網(wǎng)絡(luò)排查工具的實戰(zhàn)用法聊到網(wǎng)絡(luò)編程與自動化還有個實用話題線上網(wǎng)絡(luò)問題排查。面試中一旦聊到項目面試官很可能會問“你遇到網(wǎng)絡(luò)問題怎么排查”這時候能熟練說出幾個命令的用法是非常真實的加分項。我的個人工具箱是ss/netstat看連接狀態(tài)特別留意TIME_WAIT和CLOSE_WAIT數(shù)量tcpdump抓包看實際報文重點看SYN、FIN、重傳ping/mtr看網(wǎng)絡(luò)連通性和路徑質(zhì)量curl -v看HTTP層交互細節(jié)。這幾個工具覆蓋了從物理網(wǎng)絡(luò)到應(yīng)用層的全套鏈路。舉個例子線上某個服務(wù)調(diào)用偶發(fā)超時你排查的路徑應(yīng)該是先看服務(wù)端ss有沒有大量TIME_WAIT或CLOSE_WAIT再tcpdump抓包看有沒有重傳、有沒有RST確認網(wǎng)絡(luò)層沒問題后再回到應(yīng)用層看超時時間設(shè)置、連接池配置。這套思路本身就是面試官想考察的“網(wǎng)絡(luò)編程實戰(zhàn)能力”。6. 面試追問實錄高頻追問鏈怎么接住八股能不能頂住技術(shù)面關(guān)鍵在你能不能接住面試官的追問。同一個知識點面試官會從不同角度層層深入直到問到你答不上來為止。這一節(jié)我整理幾個最常遇到的追問鏈以及我認為正確的應(yīng)對方式。6.1 經(jīng)典追問從“你用過epoll”到“ET和LT你怎么選”我面某大廠時面試官從一個簡單問題開始你服務(wù)端用的什么I/O模型我回答Epoll。接下來就是一連串追問“說說epoll的工作流程?!薄@是基礎(chǔ)答epoll_create、epoll_ctl、epoll_wait。“ET和LT有什么區(qū)別”——答觸發(fā)條件和通知機制見前述。“你項目里用的哪種”——我答LT理由實現(xiàn)簡單、不易漏事件、性能差距可接受。“如果并發(fā)量是100萬LT會不會成為瓶頸”——這時候要穩(wěn)住。LT每次返回所有就緒fd如果有大量fd一直處于可讀狀態(tài)比如慢客戶端確實可能造成頻繁通知。這時候可以分情況討論如果業(yè)務(wù)允許把大包讀取放到線程池主線程只做accept和監(jiān)聽如果追求極致可以用ET非阻塞IO。“單線程epoll能扛100萬連接嗎”——能維護但業(yè)務(wù)處理會成瓶頸所以要用線程池、甚至多Reactor模型。這個問題聊到這里面試官已經(jīng)不是在考八股而是在看你的系統(tǒng)設(shè)計能力了。我的經(jīng)驗是追問鏈的每一環(huán)都不要太快丟出結(jié)論先想清楚面試官問這個問題的意圖。他問“100萬連接怎么辦”不是真想讓你給一個完美的架構(gòu)方案而是看你會不會分析瓶頸、有沒有權(quán)衡取舍的思路。6.2 避坑指南幾個容易被問倒的細節(jié)總結(jié)幾個我面試時遇到的、也比較容易讓人翻車的細節(jié)列成速查表問題關(guān)鍵點容易答錯的地方TCP三次握手能攜帶數(shù)據(jù)嗎第三次握手可以帶數(shù)據(jù)前兩次不行說成“任何階段都不能帶數(shù)據(jù)”accept發(fā)生在三次握手的哪個階段三次握手在內(nèi)核完成accept只是從已完成隊列取連接說成“accept參與握手”SYN泛洪怎么防御SYN Cookie、增大半連接隊列、限制SYN速率只會說“防火墻”close和shutdown的區(qū)別close釋放fdshutdown只關(guān)閉讀寫通道混為一談心跳包和TCP KeepAlive是一回事嗎不是KeepAlive是協(xié)議棧保活心跳是應(yīng)用層?;钫f成“一樣”HTTP/1.1和HTTP/2的隊頭阻塞有什么區(qū)別HTTP/1.1是TCP隊頭阻塞HTTP/2還有TCP層隊頭阻塞說成“HTTP/2沒有隊頭阻塞”這些細節(jié)如果沒準備很容易在面試中突然卡殼。我的方法是在整理八股時每個主題額外補充三到五個“追問可能問到的細節(jié)”把自己當面試官先問自己一輪。注意面試時說“這個細節(jié)我不確定但我的理解是……”比硬編一個答案好得多。面試官看重的是思路不是每個細節(jié)都要答對。7. 最后一輪實戰(zhàn)模擬這套八股怎么用在自我介紹里很多人的自我介紹就是簡單說一下公司、項目、技術(shù)棧太浪費了。如果你準備的是網(wǎng)絡(luò)編程方向的八股完全可以把自我介紹包裝成“引導面試官提問”的工具。舉個例子介紹項目時“我負責的網(wǎng)關(guān)服務(wù)基于epoll做I/O多路復用單機維護了十幾萬長連接平時最頭疼的問題就是TIME_WAIT和連接異常斷開”——這句話拋出去面試官自然會追問epoll怎么用的、TIME_WAIT怎么處理的、連接異常怎么發(fā)現(xiàn)的。這些問題恰好全在你準備過的八股范圍內(nèi)。這叫“主動設(shè)靶”比被動等面試官出題要主動得多。同樣道理如果你面的是QT客戶端崗位“我做的客戶端用QTcpSocket做長連接經(jīng)常遇到粘包問題后來在應(yīng)用層加了長度前綴協(xié)議解決”——這句話把話題引向粘包拆包、協(xié)議設(shè)計、QT信號槽線程模型全是高頻考點。自我介紹不是背簡歷而是給面試官畫出一條你最擅長的技術(shù)路線圖。這套八股整理下來我自己最大的感受是技術(shù)面不怕問得深就怕問得散。網(wǎng)絡(luò)編程的知識點之間關(guān)聯(lián)性極強只要你能把TCP、Socket、I/O模型、應(yīng)用層協(xié)議串成一條完整的知識鏈面試官無論從哪個點切入你都能前后呼應(yīng)地講清楚。按這個思路準備大廠的技術(shù)面網(wǎng)絡(luò)編程這塊基本就能穩(wěn)住。