【校招】面試_字節跳動_客戶端開發工程師_一面

1 面試信息

面試形式:視頻面試
面試時間:2020-03-05 16:00:00GMT+08:00
面試時長:約兩小時
面試職位:客戶端開發工程師-產品研發和工程架構部

2 考察內容

1.我們主要考察通用型的業務問題和過往的項目經歷
2.價值觀和軟性技能也是我們選擇人才的重要因素

3 面試問題

1.三次握手和四次握手的原理(爲什麼是四次?)
2.TCP和UDP的區別
3.TCP的可靠性依靠什麼實現
4.滑動窗口的作用
5.磁盤調度算法(進程調度算法)
6.虛擬內存
7.內存溢出時如何判斷是虛擬內存溢出還是物理內存溢出
面試官解答:可以查看數據結構的地址,如果存在空閒地址段,則是虛擬內存溢出,如果地址段滿則是物理內存溢出。
8.LRU算法怎麼實現
9.結合實際問題,定義緩衝池結構,使用HashMap如何儘可能高效地實現LRU算法進行頁面淘汰(需要明白HashMap的基本原理)
面試官解答:利用隊列先進先出的性質,淘汰時刪除隊首節點。同時,在定義HashMap的<key,value>鍵值對時,value直接存儲節點。

4 機試問題

選擇了中等難度(easy,mid,hard),問題如下:
一個數據結構中保存了若干航班飛機的起飛和降落時間,當在飛行中的飛機數量小於K時,處於安全狀態,判斷輸入的數據結構中飛機的時間安排是否安全。


* 面試問題答案整理

1.答:
三次握手:
(1)客戶端主動請求建立連接,發送SYN包(同步位SYN=1,序列號seq=x)到服務器端,並進入SYN-SENT狀態,等待服務器確認;
(2)服務器端收到客戶端發來的SYN包後必須對其進行確認,同時自己也發送SYN包請求連接,即發送ACK+SYN包(確認位ACK=1,同步位SYN=1,確認號ack=x+1,序列號seq=y)到客戶端,此時服務器進入SYN-RECEIVED狀態;
(3)客戶端收到服務器端發來的ACK+SYN包後,向服務器發送確認包(確認位ACK=1,確認號ack=y+1,序列號seq=x+1),此包發送完畢,客戶端和服務器端進入ESTABLISHED狀態,三次握手完成。
四次揮手:
(1)客戶端發送連接釋放報文(終止位FIN=1,序列號seq=u)到服務器端,並進入FIN-WAIT-1狀態;
(2)服務器端收到連接釋放報文,發送確認報文(確認位ACK=1,確認號ack=u+1,序列號seq=v)給客戶端,並進入CLOSE-WAIT狀態。此時,客戶端到服務器方向的傳輸釋放,處於半關閉狀態,但服務器端依舊可以向客戶端發送數據。客戶端收到服務器端的確認報文後,進入FIN-WAIT-2狀態,等待服務器端發送連接釋放報文;
(3)服務器端將最後的數據發送完畢後,向客戶端發送連接釋放報文(終止位FIN=1,確認位ACK=1,確認號ack=u+1,序列號seq=w),並進入LAST-ACK狀態;
(4)客戶端收到服務器端的連接釋放報文後,發送確認報文(確認位ACK=1,確認號ack=w+1,序列號seq=u+1)給服務器端,並進入TIME-WAIT狀態,在經過2MSL時間後,撤銷TCB,進入CLOSED狀態。

2.答:

UDP TCP
是否連接 無連接 面向連接
是否可靠 不可靠傳輸,不使用流量控制和擁塞控制 可靠傳輸,使用流量控制和擁塞控制
連接對象個數 支持一對一,一對多,多對一,和多對多交互通信 只能是一對一通信
傳輸方式 面向報文 面向字節流
首部開銷 首部開銷小,僅8字節 首部最小20字節,最大60字節
適用場景 適用於實時應用(IP電話,視頻會議,直播等) 適用於要求可靠傳輸的應用,如文件傳輸

3.答:TCP的可靠性依靠以下7種機制實現:
(1)校驗和:檢驗範圍包括TCP首部和數據部分,發送方將整個報文段以字(16位)爲單位分開,並將所有段進行反碼相加,結果存放在校驗和字段中,接收方用同樣的方法計算,若最終結果全爲1則正確,否則存在錯誤。
(2)序列號:TCP對每個字節的數據都進行編號。序列號作用有:
a.保證數據不丟失
b.保證數據按序到達
c.提高效率,累計確認
d.去除重複數據
(3)確認應答機制(ACK):TCP首部有標誌位ACK,當ACK=1時表示確認號有效。接收方對於按序到達的數據會進行確認,發送方如果收到已發送數據的確認報文,則繼續傳輸下一部分數據,否則等待一段時間後啓動重傳機制。
(4)超時重傳機制:當數據在發送後一定時間內未收到接收方的確認,發送方就會進行重傳。報文段發出到收到應答中間有一個報文段的往返時間RTT,超時重傳時間RTO會略大於RTT,TCP會根據網絡情況動態計算RTT,因此RTO也是不斷變化的,Liunx中RTO呈指數遞增,重傳一定次數後關閉連接。
(5)連接管理機制:即上面提到的三次握手和四次揮手。
(6)流量控制:根據接收端的處理能力,來決定發送端的發送速度。TCP報文段首部有一個16位的窗口大小字段,該字段大小隨着傳輸情況而變化,如果緩衝區滿,就將窗口置爲0,發送方收到後就不在發送數據,但定期會發送一個窗口探測報文,使接收方把窗口大小告訴發送方。
(7)擁塞控制:爲了防止過多數據注入網絡中造成網絡擁堵。主要有四種算法:慢開始、擁塞避免、快重傳、快恢復。
a.慢開始和擁塞避免
發送方維護一個擁塞窗口cwnd,大小等於發送窗口,慢開始的思想是一開始發送方發送一個字節,在收到接收方的確認後,將擁塞窗口大小翻倍,直到擁塞窗口大小達到慢開始門限ssthresh,停止慢開始算法,採用擁塞避免算法,擁塞窗口由指數增長變爲線性增長,當網絡擁塞,發生超時重傳時,慢開始門限變爲當前擁塞窗口大小的一半,擁塞窗口大小置1,重新開始慢啓動算法。
b.快重傳和快恢復
當發送方收到3個連續的重複確認,可能不是擁塞而是報文丟失,發送方執行快重傳算法,對相應報文立即重傳而不是等待超時重傳,同時執行快恢復算法,發送方將慢開始門限和擁塞窗口調整爲當前擁塞窗口大小的一半,然後執行擁塞避免算法。

4.答:滑動窗口分爲三類:停止等待、後退N幀、選擇重傳。滑動窗口保證了傳輸可靠,提高了傳輸效率和穩定性。

5.答:
磁盤調度算法:
(1)先來先服務算法(FCFS)
(2)最短尋道時間優先算法(SSTF)
(3)掃描算法(SCAN)電梯算法
(4)循環掃描算法(CSAN)

進程調度算法:
(1)先來先服務算法(FCFS)
(2)短作業優先調度算法(SJF)
(3)優先權調度算法(分非搶佔和搶佔式)
(4)高相應比優先調度算法
(5)時間片輪轉法
(6)多級反饋隊列調度算法

6.答:存放在磁盤上的文件,會以固定大小的頁進行劃分,在使用CPU處理磁盤文件時,只加載需要使用的數據,當需要的數據不在內存時,發出缺頁信號,再從外存中把相應的頁調入內存。

7.如上

8.答:LRU(最近最少使用)算法是一種頁面置換算法。其實現可以使用HashMap結合雙向鏈表的方法,把k值相同的節點用雙向鏈表連接起來,當新節點加入時,放入表頭,當節點被訪問時,把該節點移動到表頭,當需要選擇刪除節點時,直接刪除表尾節點即可。

9.如上

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