這些C++工程師面試題你都會了嗎?
- 2019 年 10 月 5 日
- 筆記
來源:牛客網
原文地址:http://1t.click/apbZ
編輯:守望先生
秋招進行中,搜羅了一些面試題,看看你會不會?
一、基礎知識
基本語言
1、說一下static關鍵字的作用
2、說一下C++和C的區別
3、說一說c++中四種cast轉換
5、給定三角形ABC和一點P(x,y,z),判斷點P是否在ABC內,給出思路並手寫程式碼
6、怎麼判斷一個數是二的倍數,怎麼求一個數中有幾個1,說一下你的思路並手寫程式碼 7、請你說一下你理解的c++中的smart pointer四個智慧指針:
9、請你回答一下野指針是什麼?
10、請你介紹一下C++中的智慧指針
11、請你回答一下智慧指針有沒有記憶體泄露的情況
12、請你來說一下智慧指針的記憶體泄漏如何解決
13、請你回答一下為什麼析構函數必須是虛函數?為什麼C++默認的析構函數不是虛函數
14、請你來說一下函數指針
15、請你來說一下fork函數
16、請你來說一下C++中析構函數的作用
17、請你來說一下靜態函數和虛函數的區別
18、請你來說一說重載和覆蓋
19.、請你說一說strcpy和strlen
20、請你說一說你理解的虛函數和多態
23、請你來寫個函數在main函數執行前先運行
34、請你來說一下C++里是怎麼定義常量的?常量存放在記憶體的哪個位置?
26、請你來說一說隱式類型轉換
27、說說你了解的類型轉換
28、請你來說一說C++函數棧空間的最大值
30、請你回答一下new/delete與malloc/free的區別是什麼
31、請你說說虛函數表具體是怎樣實現運行時多態的?
32、請你說說C語言是怎麼進行函數調用的?
34、請你說說C++如何處理返回值?
35、請你回答一下C++中拷貝賦值函數的形參能否進行值傳遞?
43、請你回答一下malloc與new區別
36、請你說一說select
37、請你說說fork,wait,exec函數
38、請你回答一下靜態函數和虛函數的區別
容器和演算法
1、請你來說一下map和set有什麼區別,分別又是怎麼實現的
2、請你來介紹一下STL的allocator
3、請你來說一說STL迭代器刪除元素
4、請你說一說STL中MAP數據存放形式
5、請你說說STL中map與unordered_map
6、請你說一說vector和list的區別,應用,越詳細越好
7、請你來說一下STL中迭代器的作用,有指針為何還要迭代器
8、請你說一說epoll原理
9、請你說一說STL中MAP數據存放形式
10、n個整數的無序數組,找到每個元素後面比它大的第一個數,要求時間複雜度為O(N)
11、請你回答一下STL里resize和reserve的區別
類和數據抽象
1.請你來說一下C++中類成員的訪問許可權
3、請你回答一下C++類內可以定義引用數據成員嗎?
面向對象與泛型編程
1、請你回答一下什麼是右值引用,跟左值又有什麼區別?
2、析構函數可以為 virtual 型,構造函數則不能,為什麼?
3、C++中空類默認產生哪些類成員函數?
4、什麼是面向對象?
編譯與底層
1、 請你來說一下一個C++源文件從文本到可執行文件經歷的過程?
2、 請你來回答一下include頭文件的順序以及雙引號」」和尖括弧的區別?
3、 請你回答一下malloc的原理,另外brk系統調用和mmap系統調用的作用分別是什麼?
4、 請你說一說C++的記憶體管理是怎樣的?
5、請你來說一下C++/C的記憶體分配
6、請你回答一下**如何判斷記憶體泄漏?
7、請你來說一下什麼時候會發生段錯誤
8、請你來回答一下什麼是記憶體泄漏
9、請你來回答一下new和malloc的區別
10、請你來說一下共享記憶體相關api
11、請你來說一下reactor模型組成
12、請自己設計一下如何採用單執行緒的方式處理高並發
13、請你說說C++如何處理記憶體泄漏?
14、請你說說select,epoll的區別,原理,性能,限制都說一說
15、請你說一說C++ STL 的記憶體優化
C++11
1、請問C++11有哪些新特性?
2、請你詳細介紹一下C++11中的可變參數模板、右值引用這幾個新特性。
二、作業系統
1、請你說一下進程與執行緒的概念,以及為什麼要有進程執行緒,其中有什麼區別,他們各自又是怎麼同步的
2、請你說一說Linux虛擬地址空間
3、請你說一說作業系統中的程式的記憶體結構
4、請你說一說作業系統中的缺頁中斷
5、請你回答一下fork和vfork的區別
6、請問如何修改文件最大句柄數?
7、請你說一說並發(concurrency)和並行(parallelism)
8、請問MySQL的埠號是多少,如何修改這個埠號
9、請你說一說作業系統中的頁表定址
10、請你說一說有了進程,為什麼還要有執行緒?
11、請問單核機器上寫多執行緒程式,是否需要考慮加鎖,為什麼?
12、請問執行緒需要保存哪些上下文,SP、PC、EAX這些暫存器是幹嘛用的
13、請你說一說執行緒間的同步方式,最好說出具體的系統調用
14、遊戲伺服器應該為每個用戶開闢一個執行緒還是一個進程,為什麼?
15、請你說一說OS缺頁置換演算法
16、請你說一下多進程和多執行緒的使用場景
17、請你說一說死鎖發生的條件以及如何解決死鎖
18、請問虛擬記憶體和物理記憶體怎麼對應
19、請你說一說作業系統中的結構體對齊,位元組對齊
20、請問進程間怎麼通訊
23、請你說一下虛擬記憶體置換的方式
24、請你說一下多執行緒,執行緒同步的幾種方式
25、請你講述一下互斥鎖(mutex)機制,以及互斥鎖和讀寫鎖的區別
26、請你說一說進程狀態轉換圖,動態就緒,靜態就緒,動態阻塞,靜態阻塞
27、A a = new A; a->i = 10;在內核中的記憶體分配上發生了什麼?
28、給你一個類,裡面有static,virtual,之類的,來說一說這個類的記憶體分布
29、請你回答一下軟鏈接和硬鏈接區別
32、請你說一說用戶態和內核態區別
33、請問如何設計server,使得能夠接收多個客戶端的請求
34、死循環+來連接時新建執行緒的方法效率有點低,怎麼改進?
35、請問怎麼喚醒被阻塞的socket執行緒?
36、請問怎樣確定當前執行緒是繁忙還是阻塞?
37、空閑的進程和阻塞的進程狀態會不會在喚醒的時候誤判?
38、請問就緒狀態的進程在等待什麼?
39、請你說一說多執行緒的同步,鎖的機制
40、兩個進程訪問臨界區資源,會不會出現都獲得自旋鎖的情況?
41、假設臨界區資源釋放,如何保證只讓一個執行緒獲得臨界區資源而不是都獲得?
42、C++的鎖你知道幾種?
43、說一說你用到的鎖
44、請你說一說死鎖產生的必要條件?
45、請你來說一說協程
46、系統調用是什麼,你用過哪些系統調用,和庫函數有什麼區別?
47、請你來說一說用戶態到內核態的轉化原理
48、請你說一下源碼到可執行文件的過程
49、請你來說一下微內核與宏內核
50、請你說一下殭屍進程
52、請你來介紹一下5種IO模型
53、請你說一說非同步編程的事件循環
54、請你回答一下作業系統為什麼要分內核態和用戶態
55、請你回答一下為什麼要有page cache,作業系統怎麼設計的page cache
56、server端監聽埠,但還沒有客戶端連接進來,此時進程處於什麼狀態?
57、請問如何設計server,使得能夠接收多個客戶端的請求
58、死循環+來連接時新建執行緒的方法效率有點低,怎麼改進?
59、兩個進程訪問臨界區資源,會不會出現都獲得自旋鎖的情況?
60、假設臨界區資源釋放,如何保證只讓一個執行緒獲得臨界區資源而不是都獲得?
61、請問怎麼實現執行緒池
63、請你來說一下awk的使用
64、請你來說一下linux內核中的Timer 定時器機制
三、電腦網路
1、請問怎麼確保節點傳輸存儲的可靠性
2、請你說一下TCP怎麼保證可靠性,並且簡述一下TCP建立連接和斷開連接的過程
3、請你說一說TCP的模型,狀態轉移
4、請回答一下HTTP和HTTPS的區別,以及HTTPS有什麼缺點?
5、請你說一說HTTP和HTTPS的不同
6、請你說一說HTTP返回碼
7、請你說一說IP地址作用,以及MAC地址作用
8、請介紹一下作業系統中的中斷
9、請回答OSI七層模型和TCP/IP四層模型,每層列舉2個協議
11、搜索baidu,會用到電腦網路中的什麼層?每層是幹什麼的
12、請你說一說TCP擁塞控制?以及達到什麼情況的時候開始減慢增長的速度?
13、請問TCP用了哪些措施保證其可靠性
14、請你說說TCP/IP數據鏈路層的交互過程
15、請你說說傳遞到IP層怎麼知道報文該給哪個應用程式,它怎麼區分UDP報文還是TCP報文
16、請問你有沒有基於做過socket的開發?具體網路層的操作該怎麼做?(其實就是網路編程的基本步驟)
17、請問server端監聽埠,但還沒有客戶端連接進來,此時進程處於什麼狀態?
19、請問tcp握手為什麼兩次不可以?為什麼不用四次?
22、請你來說一下TCP擁塞控制?
20、TCP和UDP的區別和各自適用的場景
21、請你來說一下TCP三次握手四次揮手的過程,為什麼tcp連接握手需要三次, time_wait狀態
22、請你來說一說http協議
23、請你來說一下GET和POST的區別
24、請你來說一下socket編程中伺服器端和客戶端主要用到哪些函數
25、請你來說一下數字證書是什麼,裡面都包含那些內容
26、請你來介紹一下UDP的connect函數
27、請你講述一下TCP三次握手,四次揮手,以及為什麼用三次握手?
28、請你說一下阻塞,非阻塞,同步,非同步
29、請你講述一下Socket編程的send() recv() accept() socket()函數?
30、請你說一下http協議會話結束標誌怎麼截出來?
四、資料庫
資料庫基礎
1、請你說一下資料庫事務以及四個特性
2、請你說一說資料庫的三大範式
3、請你介紹一下資料庫的ACID特性
4、請你說一說資料庫索引
5、請你說一說資料庫事務
6、請你說一說資料庫事務隔離
7、請你說一說inner join和left join
8、請你聊一聊資料庫事物的一致性
9、請你說說索引是什麼,多加索引一定會好嗎
10、k-v存儲中,key有哪些要求?
11、介紹資料庫中的WAL技術
Mysql
1.請你說一說mysql的四種隔離狀態
2.請你介紹一下mysql的MVCC機制
3、請問SQL優化方法有哪些
4、請你說一下MySQL引擎和區別
5、知道SQL注入嗎?有哪些防禦手段?
Redis
1.請你回答一下mongodb和redis的區別
2、請你來說一說Redis的定時機制怎麼實現的
3、請你來說一說Redis是單執行緒的,但是為什麼這麼高效呢?
4、請問Redis的數據類型有哪些,底層怎麼實現?
5、請問Redis的rehash怎麼做的,為什麼要漸進rehash,漸進rehash又是怎麼實現的?
6、請問Redis怎麼實現的定期刪除功能
7、redis的持久化方式有哪幾種,分別有什麼特點?
五、演算法與數據結構
樹
1、請你來說一說紅黑樹和AVL樹的定義,特點,以及二者區別
2、請你聊一聊哈夫曼編碼
3、請你回答一下map底層為什麼用紅黑樹實現
4、請你介紹一下B+樹
5、請你回答一下map和unordered_map優點和缺點
6、請你回答一下epoll怎麼實現的
7、請你說一說紅黑樹的性質還有左右旋轉
8、請你說一說紅黑樹的原理以及erase以後迭代器的具體分布情況?
堆與棧
1、請說一說你理解的stack overflow,並舉個簡單例子導致棧溢出
2、請你回答一下棧和堆的區別,以及為什麼棧要快
3、手寫程式碼:兩個棧實現一個隊列
4、請你來說一下堆和棧的區別
數組
1、請你回答一下Array&List, 數組和鏈表的區別
2、一個長度為N的整形數組,數組中每個元素的取值範圍是[0,n-1],判斷該數組否有重複的數,請說一下你的思路並手寫程式碼
排序
1、請你手寫一下快排的程式碼,快排的最差複雜度是怎麼樣的?如何避免?
2、請問求第k大的數的方法以及各自的複雜度是怎樣的,另外追問一下,當有相同元素時,還可以使用什麼不同的方法求第k大的元素
3、請你來介紹一下各種排序演算法及時間複雜度
5、請問快排的時間複雜度最差是多少?什麼時候時間最差
6、請你介紹一下快排演算法;以及什麼是穩定性排序,快排是穩定性的嗎;快排演算法最差情況推導公式
哈希
1、請你來說一說hash表的實現,包括STL中的哈希桶長度常數。
2、請你回答一下hash表如何rehash,以及怎麼處理其中保存的資源
3、請你說一下哈希表的桶個數為什麼是質數,合數有何不妥?
4、請你說一下解決hash衝突的方法
動態規劃
1、請你手寫程式碼:最長公共連續子序列
2、手寫程式碼:求一個字元串最長迴文子串
3、手寫程式碼:查找最長迴文子串
鏈表
1、請你手寫程式碼,如何合併兩個有序鏈表
2、手寫程式碼:反轉鏈表
3、判斷一個鏈表是否為迴文鏈表,說出你的思路並手寫程式碼
4、請你手寫鏈表反轉
5、什麼是單向鏈表,如何判斷兩個單向鏈表是否相交
高級演算法
1、如果讓你做自然語言理解(NLU),在處理語言規則的時候大概會用到什麼演算法
2、請問加密方法都有哪些
3、什麼是LRU快取
4、請你說一說洗牌演算法
字元串
1、給你一個字元串,找出第一個不重複的字元,如「abbbabcd」,則第一個不重複就是c
2、翻轉字元串
3、字元串轉整數
六、設計模式
1、請問你用過哪些設計模式,介紹一下單例模式的多執行緒安全問題
2、請問你了解哪些設計模式?
3、請問如何保證單例模式只有唯一實例?你知道的都有哪些方法?
4、請你說一說OOP的設計模式的五項原則
5、請你說說工廠模式的優點?
6、請你說一下觀察者模式
7、請你介紹一下單例模式
8、單例模式中的懶漢載入,如果並發訪問該怎麼做?
9、裝飾器模式和單例模式,使用單例模式應該注意什麼
七、場景題
1、給你兩個球,100層樓,每個球在一定高度扔下去會碎,怎麼用最少的次數給判斷是幾層樓能把求摔碎?
2、一共有25匹馬,有一個賽場,賽場有5個賽道,就是說最多同時可以有5匹馬一起比賽。假設每匹馬都跑的很穩定,不用任何其他工具,只通過馬與馬之間的比賽,試問最少得比多少場才能知道跑得最快的5匹馬?
關注公眾號【編程珠璣】,獲取更多Linux/C/C++/Python/Go/演算法/工具等原創技術文章。後台免費獲取經典電子書和影片資源