1. 程式人生 > 其它 >【第四十二期】米哈遊後臺golang開發面經

【第四十二期】米哈遊後臺golang開發面經

  • 介紹一下自己
  • 一開始問專案(我的專案跟網路相關)中的擁塞控制、流量控制;
  • 簡單介紹了一下協議做的事情。有什麼擁塞控制協議:Reno和BBR
  • 介紹一下Reno協議的工作方式;
  • UDP 和 TCP 的區別,都適合什麼場景:在遊戲中使用KCP協議比較多。
  • 引申了一下HTTP 的狀態碼:1~5開頭各是什麼作用
  • 用HTTP可以實現主動推送的功能嗎,為什麼不使用HTTP而是使用 websocket(專案中使用了websocket )
  • HTTP1.1 中也實現了長連線,但是這個長連線中伺服器還是被動的,而且HTTP都是基於文字的,雖然底層TCP沒有斷開,傳送訊息還是包含太多不必要的頭部資訊(頻寬消耗大),所以在某些場景還是 websocket 好用。
  • HTTP2中對上述的兩個缺點做了些優化,比如壓縮頭部,再比如可以支援伺服器主動推送(相當於預載入),但是客戶端還是主導地位,可以傳送RST_STREAM 來顯式的停止這種推送。
  • TCP 的各種標誌位(發現我不熟這些標誌位),又開始問TCP的三次握手
  • TCP 有多個控制位,SYNC是開啟連線,FIN是結束連線(單向斷開,優雅斷開),ACK是指回復包,RST是異常斷開(雙向都直接不能處理了),PSH是類似於FLUSH,告訴對方可以將緩衝區的資料直接上報道應用層了(還是有序的),URG(把這一個包上報應用層,資料包可能是無序的)
  • 問 golang 的協程:Goroutine 阻塞的話,是不是對應的M也會阻塞
  • 問一道思考題:如何併發100個任務,但是同一時間最多執行的10個任務(waitgroup + channel)

本文由 GOLANG ROADMAP 釋出!