1. 程式人生 > >深信服社招linux崗面試記錄

深信服社招linux崗面試記錄

一面:

1、首先自我介紹吧

2、結構體位元組對齊?(給了個只有Int、char型別的結構體,32位機器,求大小,然後問位元組對齊問題)

3、詢問對C中的字串操作函式是否熟悉,手寫字串拷貝函式

4、問對資料結構和演算法是否熟悉,手寫單鏈表反轉

5、TCP和UDP有什麼區別?

6、TIME_WAIT的兩個作用?

7、TIME_WAIT和CLOSE_WAIT的區別?

8、TCP如何保證可靠性傳輸?

9、TCP的四個定時器?

  (1)超時重傳定時器:在傳送端傳送資料後,啟動超時重傳定時器,在給定時間內沒有收到對端傳送的確認訊息,此定時器超時,傳送端重新發送資料,並將此定時器復位。

  (2)堅持定時器:傳送端給接收端傳送一部分資料後,接收端的快取已滿無法在接收資料,就向接收端傳送一個滑窗大小為0的ACK通知傳送方停止傳送資料,接收方收到此訊息後,啟動堅持定時器,並向接收方傳送大小為1個位元組的探測報文,在定時器超時後還未收到接收端視窗更新的訊息,將堅持定時器加倍並復位,直到堅持定時器已達max=60s,接下來就每隔60s傳送探測報文,直到收到接收端的視窗更新訊息。

  設計此定時器的原因:假設傳送端收到滑窗大小為0的ACK訊息後,接收端發現自己已經可以接受資料了,於是向傳送方傳送滑窗大小不為0的ACK,不巧的是這個ACK丟了,傳送方若沒有堅持定時器,則一直在等待發送端通知自己什麼時候可以發資料,而接收端認為自己已經通知傳送方了,但是沒有收到傳送方的資料,這就會造成一種死鎖狀態。

  (3)保活定時器:在一個TCP成功連線後,接收端在收到一次傳送方的資料後,會啟動一個保活定時器,時間為2h,如果此定時器超時,傳送方會每隔75s傳送一個探測報文,在嘗試10次以後,傳送方就可以斷開這個連線。

  (4)2MS定時器:此定時器是為了處理TCP連線中主動斷開連線的一方處於TIME_WAIT狀態而設定的,大小為2MSL(資料包在網路上存活的最大時長的兩倍,即一個往返時間),處於此狀態的一方無法立即建立新的連線,設定此狀態下的定時器有連個作用,其一,防止斷開連線時的最後一個ACK丟失,保證TCP連線的可靠性;其二,防止舊的連線上傳送的髒資料被新的連線收到。

Tips:此問題的答案參考網上的部落格以及書籍《UNIX網路程式設計 I》

10、TCP粘包問題?

11、如何檢視耗時最大的函式?使用什麼工具?

12、epoll和select的區別?

13、listen、accept、bind呼叫時,核心層面發生了什麼?

14、C++的虛標指標是什麼?多重繼承虛標指標有幾張?

15、C中static的作用?

16、C如何呼叫C++函式?

17、最近有沒有關注新技術?比如人工智慧?區塊鏈?

18、你平時都有瀏覽部落格等方式去學習麼?

19、舉一個例子說明你平時學習到的東西?

二面:

1、自我介紹(呵,萬年不變呀。。。)

2、ARP是什麼?協議是怎麼實現的?

3、ARP是怎麼找到MAC地址的?

4、講一下你做的一個專案?

5、你覺得你做的模組在整個專案中的價值佔比多少?

6、出現空指標會出現什麼情況?怎麼處理?

7、區域性變數和全域性變數的區別?

8、全域性變數未初始化時為什麼時隨機值?

9、有兩個程序,有同名變數,這個變數是共享的嗎?如果是動態庫呢?

10、你覺得你對你自己還有什麼要補充的?

11、如果能入職,可能要學習很多新東西,你能接受嗎?

12、你還有什麼要問的?

 

另一個部門的面試

一面:

1、做一個自我介紹?

2、兩個程序要通訊,什麼樣的方式最快?

3、父程序使用malloc得到一塊記憶體,子程序可以使用嗎?

4、程序使用malloc分配一塊100M的記憶體,是馬上就得到這塊記憶體了嗎?

5、有一個程序突然卡死了,你是怎麼定位這個問題的?

6、怎麼檢視CPU的佔用情況?

7、某一個執行緒佔用很大的記憶體,怎麼解決?

8、你平時有看開源的專案嗎?

9、講一個你平時做的專案?

10、你在工作中有遇到什麼技術難點嗎?

11、建立網路連結時,客戶端和伺服器的過程?

12、傳送資料時阻塞和非阻塞的區別?

13、recv呼叫成功是已經正確收到資料了嗎?

 

去年也有過一次深信服失敗的面試經歷,詳情請看這裡:https://www.cnblogs.com/kks170716/p/7778739.html

深信服面試每次都是一個小冊子,也就是公司的題庫,什麼時候才能把小冊子的東西掌握呀,,,

現在的真實感受是:哪有什麼天生的好運呀,不過是付出的努力在某一刻遇到了合適的機會,便成了所謂的好運,繼續努力吧。