2道面試題:輸入URL按回車&HTTP2

經過幾輪面試,我發現真正那種問答的技術面,寫一堆項目真不如去刷技術文章做用大,所以刷了一段時間的博客和掘金,整理下曾經被問到的2道面試題javascript

  • 從瀏覽器輸入URL按回車到頁面顯示都發生了什麼java

  • 說說你瞭解的HTTP/2git

講真,這2個問題筆者都沒有試驗過,純粹整理其餘文章成「能夠用來答面試」的格式,若有錯誤歡迎指正。github

從瀏覽器輸入URL按回車到頁面顯示都發生了什麼

  1. 瀏覽器根據URL進行DNS查詢面試

    • 首先從DNS緩存中查詢瀏覽器

    • 若未在緩存中找到,則不停的向上一級級請求DNS服務器緩存

  2. 取得IP地址,創建TCP鏈接服務器

  3. 構造HTTP請求報cookie

    • 添加一些HTTP首部學習

    • 根據同源政策添加cookie

  4. 在TCP鏈接上發送HTTP報文,等待響應

  5. 服務器處理HTTP請求報文,返回響應HTTP響應報文

  6. 瀏覽器處理服務器返回的HTTP響應報文,若爲HTML則渲染頁面,不包括腳本的簡單渲染流程以下

    1. 解析DOM、CSSOM

    2. 根據DOM、CSSOM計算render tree

    3. 根據render tree進行layout

    4. paint,至此,用戶能夠看到頁面了

說說你瞭解的HTTP/2

講真,看了那麼多關於HTTP/2的文章,雖然沒用過可是也能感受出HTTP/2與HTTP/1.1的差距不是一點半點

這裏整理的是「具體來講,對比HTTP/1.1,HTTP/2有哪些不一樣」

  • 在瀏覽器端,HTTP/2僅能在TLS下運行,也就是HTTPS。這不是由於HTTP/2標準強制要求,而是全球兩大瀏覽器領導者 —— Firefox和Chrome都明確地表示,他們只會實現基於TLS的HTTP/2

  • HTTP/2取消了大量頭字段,而且取消了小版本號。也就是說服務器和客戶端都必須肯定本身是否完整兼容http2或者完全不兼容

  • 最重要的一點,HTTP/2再也不是一個基於文本的協議,經過新增的二進制分幀層變成了一個二進制協議,這意味着:

    • HTTP/2使用二進制幀進行數據交換。HTTP/2規範中一共定義了10種幀,其中最基礎的兩種分別對應於HTTP/1.1的DATA和HEADERS幀

    • HTTP/2能夠對壓縮頭信息進行壓縮了。反正是二進制幀

  • 利用幀,HTTP/2能夠在單個TCP鏈接上高效傳輸全部資源

    • 經過在單個鏈接上創建多個流,實現流的多路複用

    • 流能夠指派一個優先級,也能夠爲流創建依賴關係。這樣能夠避免「瀏覽器明明在等關鍵的CSS和JS,服務器卻還在發圖片」

    • 徹底避免線頭阻塞

  • 服務器能夠利用RST_STREAM幀隨時中斷某個chunk的發送

  • 服務器能夠主動向客戶端推送資源讓客戶端緩存。固然,客戶端可使用RST_STREAM幀拒絕掉服務器的「好意」

  • HTTP/2的流能夠進行流量控制,經過公示流量窗口來限制另外一端發送數據

若是讓你用Js寫個爬蟲,你怎麼寫?

分an享li下本身用純客戶端javascript寫的pixiv.net爬蟲,在學習ES6或對js爬蟲感興趣的小夥伴歡迎Star一波喲~~

參考文獻

相關文章
相關標籤/搜索