騰訊面試題收集

Q:TCP/IP編程服務器端主要調用哪些接口

A:bind listen connect send read write等等

 

Q:select/poll/epoll的區別

A:三種IO多路複用 epoll性能更高,節省更多開銷

 

Q:recv函數的返回值及其意義

A:當應用程序調用recv函數時,

    (1)recv先等待socket的發送緩衝中的數據被協議傳送完畢,如果協議在傳送socket的發送緩衝中的數據時出現網絡錯誤,那 麼recv函數返回SOCKET_ERROR,

    (2)如果socket的發送緩衝中沒有數據或者數據被協議成功發送完畢後,recv先檢查套接字socket的接收緩衝區,如果接收緩衝區中沒有數據或者協議正在接收數據,那麼recv就一直等待,直到協議把數據接收完畢。當協議把數據接收完畢,rec函數就把socket的接收緩衝中的數據copy到buffer中(注意協議接收到的數據可能大於buf的長度,所以 在這種情況下要調用幾次recv函數才能把socket的接收緩衝中的數據copy完。recv函數僅僅是copy數據,真正的接收數據是協議來完成的),rec函數返回其實際copy的字節數。如果recv在copy時出錯,那麼它返回SOCKET_ERROR;如果recv函數在等待協議接收數據時網絡中斷了,那麼它返回0。

 

Q:進程之間通訊有哪幾種方式?

A:無名管道(父子間)、有名管道(無親緣關係也可以)、消息隊列(消息的鏈表)、信號量(計數器,一種同步手段)、信號、共享內存、套接字等等

 

Q:進程和線程的優缺點,各適用於什麼場合?

A:進程優點:使任務併發執行;每個進程互相獨立不影響;容易擴充性能

      進程缺點:邏輯控制複雜;調度開銷大

      線程優點:無需跨進程邊界;程序邏輯和控制方式簡單;所有線程可以直接共享內存和變量

      線程缺點:一個線程的崩潰可能影響到整個程序的穩定性;調度開銷大,性能擴充難

      多線程比多進程成本低,但性能更低,線程適用於對性能要求不高的場合

 

Q:extern "C"的作用

A:指示編譯器這部分代碼按C語言的進行編譯,更好地支持舊代碼

 

Q:map和hash_map的區別

A:map的基礎數據結構是紅黑樹,hash_map的基礎數據結構是哈希表,hashmap的查詢時間複雜度比較低,適合記錄比較多的情況

 

Q:非遞歸求二叉樹的深度搜索

A:使用隊列,加個level變量++深度增加

 

Q:Top K海量數據查找

A:先通過Hash法,把這1億個數字去重複,然後創建最小堆,比較、替換堆頂元素再重新調整爲最小堆,直至遍歷完

 

Q:基類的析構函數必須爲虛函數嗎?

A:如果確定程序中有基類指針指向派生類的問題,則必須將基類的析構函數指定爲虛函數,否則不需要

 

Q:vector list 區別

A:vector和數組類似,list用雙向鏈表實現,它們的區別就是數組/鏈表的區別

 

Q:單鏈表找環

A:保存遍歷過的節點(空間更少方法:一邊遍歷一邊反轉鏈表(翻轉指針),如果有環會掉頭走回頭結點)

 

Q:靜態鏈接庫和動態鏈接庫的區別

A:靜態:函數代碼直接鏈接進目標程序;動態:程序運行的時候再從DLL中尋找相應函數代碼

      靜態執行速度略比動態鏈接庫快

      動態更加節省內存,提高了可維護性和可擴展性,適合大規模開發

 

Q:一個C++程序從編譯到運行都經歷了哪些階段

A:編譯預處理->編譯->優化程序->彙編程序->鏈接程序->可執行文件

 

Q:觀察者模式

A:觀察者設計模式定義了對象間的一種一對多的組合關係,以便一個對象的狀態發生變化時,所有依賴於它的對象都得到通知並自動刷新(“註冊——通知——撤銷註冊”)

 

Q:大端法和小端法指的是什麼

A:最高有效字節在最前面的方式稱爲大端法,小端法相反

 

Q:判斷兩個鏈表有沒有交點

A:如果他們相交的話,那麼他們最後的一個節點一定是相同的

 

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