前端面試題 | 計算機網路基礎篇

梭梭醬加油鴨發表於2019-04-11

從輸入URL到頁面載入發生了什麼?

  1. 位址列輸入URL並按下回車
  2. 瀏覽器會在快取中查詢URL是否存在,並比較快取是否過期
  3. DNS解析url,找到對應的ip地址
  4. 獲取IP地址之後開始建立第一次?,這裡是由tcp協議完成的,主要通過3次握手完成:
  • 第一次握手: 建立連線時,客戶端傳送syn包(syn=j)到伺服器,並進入SYN_SENT狀態,等待伺服器確認;
  • 第二次握手: 伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也傳送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;
  • 第三次握手: 客戶端收到伺服器的SYN+ACK包,向伺服器傳送確認包ACK(ack=k+1),此包傳送完畢,客戶端和伺服器進入ESTABLISHED(TCP連線成功)狀態,完成三次握手。
  1. 完成握手後,瀏覽器向伺服器傳送http請求,
  2. 瀏覽器接收伺服器返回的Response物件,主要包括狀態碼、響應頭和響應報文3個部分
  3. 瀏覽器收到後就會對dom結構進行渲染
  4. 四次握手

http和https有什麼區別?

  1. https協議更加安全,因為它是基於ssl加密傳輸的,而http是超文字傳輸協議,資料通過明文傳輸
  2. http速度更快,因為https傳輸需要驗證證書
  3. 埠不同,http埠是80,https埠是443
  4. http連線是無狀態的

get和post有什麼區別?

其實,GET和POST本質上兩者沒有任何區別。他們都是HTTP協議中的請求方法。底層實現都是基於TCP/IP協議。所謂區別,只是瀏覽器廠家根據約定,做得限制而已。

  • get是通過明文傳送資料請求,而post是通過密文;
  • get傳輸的資料量有限,因為url的長度有限,post則不受限;
  • GET請求的引數只能是ASCII碼,所以中文需要URL編碼,而POST請求傳參沒有這個限制
  • GET產生一個TCP資料包;POST產生兩個TCP資料包。對於GET方式的請求,瀏覽器會把http header和data一併傳送出去,伺服器響應200(返回資料);而對於POST,瀏覽器先傳送header,伺服器響應100 continue,瀏覽器再傳送data,伺服器響應200 ok(返回資料)。
  • 參考:www.cnblogs.com/logsharing/…

OSI七層協議

blog.csdn.net/tracy_frog/…

棧和堆的區別

棧:先進後出 堆: 1、堆疊空間分配

棧(作業系統):由作業系統自動分配釋放 ,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。

堆(作業系統): 一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由OS回收,分配方式倒是類似於連結串列。

2、堆疊快取方式

棧使用的是一級快取, 他們通常都是被呼叫時處於儲存空間中,呼叫完畢立即釋放。

堆則是存放在二級快取中,生命週期由虛擬機器的垃圾回收演算法來決定(並不是一旦成為孤兒物件就能被回收)。所以呼叫這些物件的速度要相對來得低一些。

3、效率比較

棧由系統自動分配,速度較快。但程式設計師是無法控制的。

堆是由new分配的記憶體,一般速度比較慢,而且容易產生記憶體碎片,不過用起來最方便。

4、儲存內容

棧: 在函式呼叫時,在大多數的C編譯器中,引數是由右往左入棧的,然後是函式中的區域性變數。注意靜態變數是不入棧的。

當本次函式呼叫結束後,區域性變數先出棧,然後是引數,最後棧頂指標指向函式的返回地址,也就是主函式中的下一條指令的地址,程式由該點繼續執行。

堆:一般是在堆的頭部用一個位元組存放堆的大小。堆中的具體內容由程式設計師安排。

其他知識點參考:juejin.im/post/5bb2d1…

相關文章