一則經典技術面試題目的解讀

2021-09-19 16:50:37 字數 1841 閱讀 9781

從瀏覽器位址列輸入**,到網頁徹底開啟,中間都發生了什麼?

這是一道經典面試題,以前我以為只有我喜歡出這道題,後來在微博上發現其他技術大牛也出這道題。

這道題其實測試的不是具體特定的技術,而是對整個上網這個概念以及背後流程的理解。

我先說一下我所理解或者說我所期待的大概的答題要點,後面再解釋這道題的目的和意義,實際上所謂上網這個過程分為三個大的區塊,一塊是客戶端,一塊是網路傳輸層,一塊是服務端。

那麼逃脫本地客戶端的判斷後,這個網域名稱查詢請求會發到服務商的dns伺服器,服務商的dns伺服器會檢查快取,如果不存在你要訪問的這個網域名稱或者快取狀態已經過期,會訪問根網域名稱伺服器,根網域名稱伺服器也會先檢查快取,如果無法直接返回結果,會檢查這個網域名稱是哪個dns伺服器負責解析的,然後將請求**過去,獲得這個網域名稱所對應的ip,然後返回給本地服務商的dns,本地服務商的dns就更新快取,然後把ip返回給客戶端。

關於解析到ip,複雜點的還可以說說cdn的原理和機制,以及針對不同地區使用者智慧型解析的機制。不過這裡就不展開了,當然展開了我也未必說的清楚。

到了ip這裡,瀏覽器發出請求,去指定ip獲取指定的檔案,這裡涉及路由定址和報文傳輸,當然如果細說我也說不清了,但是至少知道用tracert可以跟蹤路由就好。然後到了指定ip,伺服器會在80埠有乙個守護程序接受這個請求,細說的話這裡還有三次握手的協議,那麼下面就是webserver是怎麼工作的,靜態頁面的處理比較簡單,動態指令碼還需要乙個直譯器系統工作,執行一段**後將返回結果輸出。這裡可能又涉及有服務端快取的,資料庫,負載均衡和輪詢等等,也就是可能後面不是一台主機,而是乙個集群。再往下變成架構師專題了,就更不能展開了。

但是到這裡沒完,為什麼呢,返回的這個內容頁往往又包含了大量的嵌入頁面請求,比如css,比如各種小圖示,小,這又涉及瀏覽器發出請求,這裡也存在一些需要注意的邏輯,比如瀏覽器在發出請求時,對數量和排隊的限制。此外,這個內容頁可能還涉及了一些可執行**,是在瀏覽器上執行的,這也對你看到什麼有重要的影響。

但是到這裡依然還沒完,在到了目標機房,以及資料返回你的電腦時,都存在乙個在子網被劫持被篡改的風險,arp欺騙,arp協議是什麼,為什麼你要訪問的內容會被劫持會被篡改。此外,在傳輸中會不會被偵聽,會不會被篡改,上文提過,除了gfw,還有強大的地方電信。

囉嗦這麼一堆,可能有人會覺得,我就應聘乙個服務端程式設計師/前端技術/運維工程師,我需要知道這些麼?那麼問題來了,通常我問這個題目的時候,還會包含一到兩個引申題目。

看到這些,相信很多人都會發現,哎呀,這還真是個常見問題啊。而這種常見問題的排查,其實就涉及了如上的每個步驟。卡和慢究竟是客戶端,網路層還是傳輸層的問題?如何快速排查和定位出問題,以及影響範圍? 這個思考題今天不展開,但是如果沒有上面那個流程的認識,這個題目你肯定不可能給出好的結果。

說乙個觀點,全棧工程師為什麼現在這麼被看重,是因為大部分問題出現的時候,問題並不會告訴你,它是屬於哪個領域的,而需要你來摸索,排查,如果你不具備綜合的視野和開闊的思路,你很可能無法找到問題的關鍵所在。你的能力又怎麼體現呢?

其實是不是我們同時需要精通前端,精通網路協議,精通服務端,這個的確太難,但是有乙個整體框架的思路,再去精通其中乙個領域,你的能力和視野就會上乙個台階,至少在排查問題,技術協同等各個方面會顯得更專業,更有自信。

我剛開始接觸網際網路的時候,剛開始寫web程式的時候,那真是一竅不通,我寫乙個cgi程式,我想讓他執行起來,我都糊里糊塗,不知道這個東西是怎麼執行的,我跑乙個webserver,設定目錄許可權,糊里糊塗,以及最早看著coolfire的乙個黑客手冊照貓畫虎去拿別人伺服器許可權的時候,還是糊里糊塗,很長時間都不知道這玩意到底原理是蝦公尺。 我總在想,那些年就沒有人跟我講這些,幫我梳理一下,所以當時很多東西做出來,但是不明白其發生作用的機制,更不明白如何更好的調優和細化。

梳理一下這些,其實花不了太多時間和精力,而梳理後對認識問題的提公升,是巨大的,對技術協同意識的提公升,也是巨大的。

python經典面試題目

print set a set b a,b中相同的元素 print set a set b a,b中不同元素list 1 a b c b a list 1 list set list 1 print list 1 alist defsort by age alist return sorted al...

經典C 面試題目

1 在c 中,string str null 與 string str 請盡量使用文字或圖象說明其中的區別。回答要點 說明詳細的空間分配。10分 答 string str null 是不給他分配記憶體空間,而string str 給它分配長度為空字串的記憶體空間.請詳述在dotnet中類 class...

經典的C 面試題目

1.介紹一下stl,詳細說明stl如何實現vector。answer stl 標準模版庫,standard template library.它由容器演算法迭代器組成。stl有以下的一些優點 可以方便容易地實現搜尋資料或對資料排序等一系列的演算法 除錯程式時更加安全和方便 即使是人們用stl在uni...