深信服c++面試總結

昨天約了深信服的面試,今天下午和麪試官微信語音面試,面完後覺得自己還有很多地方沒有完全掌握到,繼續加油吧。

面試官:說說你最熟悉的幾個方面

回答:c++、Qt、網絡編程

面試官:好,介紹一下你的項目,巴拉巴拉

(沒有自我介紹,開始進入主題)

問題1:說說http協議有哪些常見狀態碼,403代表什麼意思?

回答:200,404,403,400等,403表示資源不可用。服務器收到了客戶的請求,但拒絕處理它。主要由於服務器上文件或目錄的權限設置導致。

問題2:tcp三次握手和四次揮手說一下,他們的當時狀態分別是怎麼樣的?

三次握手:

發送端首先發送一個帶SYN標誌的數據包給接收端。

接收端收到後,回傳一個帶有SYN/ACK標誌的數據包

發送端收到後,再回傳一個帶ACK標誌的數據包,表示握手結束。

四次揮手:

客戶端首先發送一個帶FIN標誌的數據包給服務端,請求關閉客戶端到服務端的連接。

服務端收到FIN後,回傳一個帶有ACK標誌的數據包給客戶端

服務端再發送一個FIN給客戶端,關閉服務端到客戶端的連接。

客戶端收到FIN,回傳一個ACK給服務端。至此四次握手結束

狀態記不清了。

問題3:linux熟悉麼,查找已知進程名的進程號怎麼查?

回答:還好,結果沒答出來。後面查了一下是:ps -ef | grep 進程名

問題4:聊聊c++基礎吧,c++怎麼申請內存,和c語言申請的方式有什麼不同?

回答:c++使用new運算符申請,c語言使用malloc,

二者的不同之處在於,1、malloc是c庫函數,new是運算符,2、new可以在申請內存時對變量進行初始化,malloc不可以。

3、new以具體類型爲單位進行內存分配,malloc只能以字節爲單位進行內存分配。

問題5:c++如何判斷內存是否申請成功?

回答:if(p==NULL); 面試官說不對,這是C語言的方式,我說的是C++的。沒答出來,後面查了一下是用try catch拋出異常來處理new內存分配失敗的問題。

問題7:stl的vector的實現原理是什麼,自動擴容的時候擴大多少倍?

回答:vector通過一個連續的內存存放元素,和數組類似,如果內存已滿,在新增數據的時候,就要分配一塊更大的內存,將原來的數據複製過來,釋放之前的內存,在插入新增的數據。一般是2倍。

問題7:stl的map的實現原理是什麼,如何給無序的map排序?

回答:二叉樹,面試官問哪一種類型的二叉樹,回答紅黑樹。排序分爲對key或者value排序。

問題8:如何快速定位一個大型c++項目的內存泄漏問題?

回答:查找關鍵日誌。還有其他方法麼?想不到了。

問題9:多線程的同步有哪幾種方式?多進程通信方式呢?

回答:多線程同步:互斥鎖、讀寫鎖、信號量,條件變量

多進程通信:消息隊列,共享內存,套接字、管道。

除了簡單的,其他的要麼是回答不出,要麼就是回答不全,後面面試官可能也覺得基礎不太好,就沒有繼續問下去了。

還是複習沒有到位,不過也發現了目前存在的比較多的問題,繼續加油吧。

個人感覺有時候面試一下,還是有益無害的,能幫助自己查漏補缺,所謂當局者迷,哈哈哈。

 

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