麻煩你說下輸入百度網址後,整個過程是什麼樣子的?

2021.07.30

首先當我們在瀏覽器裡面輸入https://www.baidu.com 過後我們想要的是去找百度的服務器請求數據,那麼去哪找百度的服務器地址呢?


Hello 大家好,我是阿粉。雖然說金三銀四已經過去,但是金九銀十快要來了,作為一個居安思危的阿粉,無時無刻不在準備著學習和麵試,今天這個題目相信很多面試過的小伙伴都被問到過,問題其實不難,只是如果有的小伙伴沒有遇到過,可能不會思考到具體的細節,或者說很多東西可能都知道但是並不知道面試官問這個問題的點在哪,所以會有所欠考慮抓不到重點。下面我們就依次來看一下整個過程到底發生了什麼。

我們先想一個整個過程中會涉及到哪些流程:

  • 域名解析
  • 建立連接
  • 發送請求
  • 響應數據
  • 渲染頁面

首先當我們在瀏覽器裡面輸入https://www.baidu.com 後,我們想要的是去找百度的服務器請求數據,那麼去哪找百度的服務器地址呢?請求服務器必須要知道服務器的 ip 地址,光有域名地址是不行的。這個時候我們想到的就是需要根據域名去找到服務器的 ip 地址,所以會有個 DNS 解析的過程。整個 DNS 解析的過程也很複雜,涉及到 DNS 的一層層向上尋找過程,以及整個複雜的 DNS 負載和解析。這裡在面試的過程中如果說對 DNS 了解比較深的話,可以擴展一下,如果說不了解的話簡單帶過就好,不要給自己挖坑。

這裡我們假設經過 DNS 解析和各種負載均衡後得到的某台百度服務器的 ip 地址為 1.2.3.4,那麼當得到 ip 地址後,根據 web 服務的標準,我們也知道默認端口為 80,如果不是默認端口的話,地址上面會攜帶,所以這個時候瀏覽器就可以與服務器建立連接了,建立連接的過程相信大家都知道,是進行 TCP 的三次握手。

關於 TCP 的建立連接的過程,公眾號前面有文章介紹,感興趣的小伙伴可以去搜索看一下。這裡不得不說,TCP 的三次握手和四次揮手也是面試過程中很重要的一個知識點,阿粉在整個職業生涯中不管是參加面試還是面試別人,經常都會遇到這個問題,也不是說這個問題有多考驗人,主要是想看下基本功扎不紮實。

當連接建立完成過後客戶端和服務端就會進行交互了,現在的互聯網服務都是基於 HTTP 的,所以這個時候客戶端會發起 HTTP 請求,每個請求會攜帶相關的請求參數,確保服務端可以根據相關參數返回正確的數據。請求經過網絡會到達我們的應用程序,不管中間有沒有 Nginx 或者其他負載,最終都會到達我們的應用程序的入口。

這個時候如果應用是基於 SpringMVC 的,那也可以說下 SpringMVC 的前端控制器,處理器映射器,處理器適配器,處理器Handler以及視圖解析器的流程,還是那句話,不熟悉的不要說,帶過就好。

當服務器根據客戶端的請求信息獲取到相應數據後會返迴響應報文,攜帶狀態碼和相關數據給到前端,當前端拿到數據過後,就會進行整個頁面的渲染。整個前端頁面的渲染說一下就會,作為後端程序員,面試官應該不會問渲染的細節,如果被問到了那就很尷尬了。

其實這個題目可以有很多擴展的問題,比如有上面提到的 DNS 解析的過程是什麼樣子的和 TCP 連接的三次握手和四次揮手,還可以擴展一下 HTTP 協議和 HTTPS 協議的區別以及網絡的七層結構是怎麼樣的。然後提到 Nginx 和負載均衡也還是可以問一下的,順便問下自己的項目是如果做負載均衡的,在高並發的場景下是如何控制流量分配的以及擴容和容災的。

總得來說作為一個程序員要學的東西還是很多的,而且在面試的過程中我們要揚長避短,盡量往自己熟悉的地方說,對於自己不熟悉的地方盡量不要提到,如果實在被問到知道就是知道不知道就是不知道,誠實的跟面試官坦白,千萬不要想蒙混過關,要知道面試官也不傻的。

好了,今天給大家分享了一個面試題目,希望對大家有幫助,更多的內容關於我們後面的文章,繼續給大家分享。