通過幾輪面試,我發現真正那種問答的技術面,寫一堆專案真不如去刷技術文章作用大,因此刷了一段時間的部落格和掘金,整理下曾經被問到的2道面試題
- 從瀏覽器輸入URL按回車到頁面顯示都發生了什麼
- 說說你瞭解的HTTP/2
筆者才疏學淺,如有錯誤歡迎各位dalao指正。
從瀏覽器輸入URL按回車到頁面顯示都發生了什麼
- 瀏覽器根據URL進行DNS查詢
- 首先從DNS快取中查詢
- 若未在快取中找到,則不停的向上一級級請求DNS伺服器
- 取得IP地址,建立TCP連線
- 構造HTTP請求報
- 新增一些HTTP首部
- 根據同源政策新增cookie
- 在TCP連線上傳送HTTP報文,等待響應
- 伺服器處理HTTP請求報文,返回響應HTTP響應報文
- 瀏覽器處理伺服器返回的HTTP響應報文,若為HTML則渲染頁面,不包括指令碼的簡單渲染流程如下
- 解析DOM、CSSOM
- 根據DOM、CSSOM計算render tree
- 根據render tree進行layout
- 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一波喲~~
- Github pea3nut/Pxer
- 官網 pxer.pea3nut.org