一面:
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
深信服面試每次都是一個小冊子,也就是公司的題庫,什么時候才能把小冊子的東西掌握呀,,,
現在的真實感受是:哪有什么天生的好運呀,不過是付出的努力在某一刻遇到了合適的機會,便成了所謂的好運,繼續努力吧。
