字節跳動客戶端實習一輪面試

剛面完第一輪,先記一下吧,過幾天二面完再補充。

上來問了下實驗室的項目,隨便介紹了下,就開始正題了。

 

1. 把牛客網的網址輸入瀏覽器中,接下來的流程是怎樣的?

要進行URL解析獲取IP地址,解析域名要用到DNS協議,DNS查詢需要到DNS服務器查詢,而DNS服務器是基於UDP的,因此會用到UDP協議。得到IP地址後,瀏覽器要與服務器建立一個HTTP連接,用到HTTP協議。HTTP生成一個GET請求報文,將該報文傳給TCP層處理,然後TCP的數據包會發送給IP層,用到 IP協議,IP通過路由選路,逐跳發送到目的地址。在一個網段內的尋址是通過以太網協議(也可以是其他物理層協議,比如PPP、SLIP等)實現的,以太網協議需要知道目的IP地址的MAC地址,這就需要用到ARP協議(在ARP表中查詢IP地址對應的MAC地址)。

2. TCP連接需要三次握手,那爲什麼不是兩次呢?

因爲TCP連接是一種全雙工的通信方式,需要兩端都進行連接確認,如果只握手兩次的話,只能保證單向的數據鏈路是可以通信的。假如一個客戶端要跟服務器建立連接,它會發出一個SYN包,但可能由於網絡原因滯留在某處,然後客戶端會進行超時重傳,之後成功與服務器建立連接並傳送了數據,數據傳輸完畢後連接釋放。如果這個時候之前滯留的SYN包纔到達服務器,則服務器以爲是客戶端又要建立連接併爲其保存必要的資源,但實際上客戶端並沒有發送建立連接的請求因此在收到服務器發來的ACK後直接把它丟掉了,最終的結果就是浪費了服務器的資源。

3. 面向過程和麪向對象的區別

4. new/delete 和 malloc/free的區別

5. C++中指針和引用的區別,說到指針可以有多級指針,但引用只有一級,接着問那爲什麼要用多級指針呢,好處是什麼?(沒怎麼明白意思,面試官就沒再問了)

6. C++11中新添加了幾個智能指針,爲什麼要添加這些智能指針呢? 講講它們的底層實現

7. 進程和線程的關係,以及它們的區別

8. 說說線程間的同步方式

信號量、互斥量、條件變量

9. 說說你對堆和棧的認識

10. 接觸或者說學習一門新的技術,你會去怎麼學習呢? 經常逛什麼博客或者論壇來學習? 在B站上看視頻,是什麼比較吸引你呢? 別的視頻網站也有彈幕爲什麼偏偏要去B站呢?

這種問題瞎扯就完事了,不過我知道的博客或者論壇還真不多

11.算法題:

給出一顆二叉樹,每個節點中保存了父節點的信息,找出距給定的兩個節點最近的公共父節點

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章