C++奪命連環(huán)問
秋招進行到現(xiàn)在,面了有二三十次了,總結了一些C++的高頻面試問題,和一些我認為非常能考察理解深度的問題,供參考。
1. C++11有什么新特性?
2. 函數(shù)有哪些常見的傳參方式,有何區(qū)別?
3. 指針和引用有什么區(qū)別?
4. 指針常量和常量指針有何區(qū)別?
5. 常見的內存泄漏發(fā)生場景有哪些?
6. 常見的內存泄漏檢測工具?
7. 虛擬內存和物理內存的區(qū)別?
8. 內存空間有哪些區(qū)域?分別是做什么的?
9. 段頁式內存管理有何優(yōu)點?
10. 說一下智能指針?
11. 內聯(lián)函數(shù)是什么?和宏有何區(qū)別?它有什么優(yōu)缺點? 什么情況不能內聯(lián)?
12. 說一下多態(tài)的底層原理?為什么要有多態(tài),直接靜態(tài)重寫不好嗎?
13. C++空類的大小是多少?如果空類內含有虛函數(shù),類的大小又是多少?
14. 講講內存對齊?
15. 虛函數(shù)可以是模板函數(shù)嗎?
16. 虛函數(shù)可以內聯(lián)嗎?
17. 32位Linux系統(tǒng)的尋址空間是多大?進程能申請的內存有這么大嗎?
18. Linux系統(tǒng)中進程默認棧空間是多大?如何修改?
19. Linux系統(tǒng)中調試崩潰問題的流程是?
20. 棧溢出一般是由哪些原因導致?
21. Static關鍵字有什么用?static變量修飾全局、函數(shù)內和類內變量時,分別在什么時候進行初始化?
22. 初始化列表有什么好處?哪些成員變量必須通過初始化列表初始化?
23. 什么是右值引用?說一下什么是移動語義及使用場景?
24. Malloc/free和new/delete有什么區(qū)別?
25. Vector和List有什么區(qū)別?講一下vector動態(tài)擴展的原理?
26. Vector動態(tài)擴展時,編譯器為什么不先判斷一下原有空間后面的內存是否空閑,如果空閑,直接在后面的內存空間繼續(xù)分配空間?(從內存池角度回答)
27. Unordered_map和map,unordered_set和set,分別有什么區(qū)別,它們的底層數(shù)據(jù)結構是什么?
28. prioriry_queue優(yōu)先級隊列的底層數(shù)據(jù)結構是什么?操作的時間復雜度是什么?
29. 紅黑樹與AVL樹有什么區(qū)別?與堆有什么區(qū)別?與跳表有什么區(qū)別?
30. 如果讓你用一維數(shù)組模擬一個大根堆,你怎么實現(xiàn)?
31. Sort()函數(shù)的排序策略是什么?用到了哪些排序方法?(快速排序、插入排序、堆排序)
32. Sort里面什么情況下會調用插入排序?它時間復雜度是N2,為什么要用它?
33. Sort里面什么情況下會調用堆排?為什么不能無腦用快排?
34. 哈希沖突了怎么辦?
35. 如果用鏈表把沖突的節(jié)點鏈起來,因為這些節(jié)點的哈希值都一樣,那如何區(qū)分這些節(jié)點?
36. 哈希表負載因子過大時要進行Rehash,那哈希函數(shù)要變嗎?
37. 如果有幾十億個id(字符串),怎么快速判斷某個id是否存在?
38. 如果要在一億個數(shù)字里找出最大/小的K個,怎么做?
39. 類A提供了拷貝構造函數(shù)和等號賦值運算符,假設b是A的一個對象,代碼:A a=b;會調用拷貝構造函數(shù)還是等號賦值函數(shù)?
40. C++編譯過程分為哪幾步?動態(tài)鏈接和靜態(tài)鏈接的區(qū)別是?
先記這么多吧,后面再補充~