C++面试宝典(纯干货)
之前許多朋友私信問過我整理一篇“C++面試題”,我把自己在面試過程中被問的和自認(rèn)為重要的面試題整理出來,希望對大家有所幫助。其中一些問題,請關(guān)注我的公眾號,都有相應(yīng)的文章。
?
01 C語言
const的作用有哪些,談一談你對const的理解?
描述char*、const char*、char* const、const char* const的區(qū)別?
指針常量和常量指針有什么區(qū)別?
static的作用是什么,什么情況下用到static?
全局變量與局部變量的區(qū)別?
宏定義的作用是什么?
內(nèi)存對齊的概念?為什么會有內(nèi)存對齊?
inline 內(nèi)聯(lián)函數(shù)的特點有哪些?它的優(yōu)缺點是什么?
如何用C 實現(xiàn) C++ 的面向?qū)ο筇匦?#xff08;封裝、繼承、多態(tài))
memcpy怎么實現(xiàn)讓它效率更高?
typedef和define有什么區(qū)別?
extern有什么作用,extern C有什么作用?
如何避免野指針?
如何計算結(jié)構(gòu)體長度?
sizeof和strlen有什么區(qū)別?
知道條件變量嗎?條件變量為什么要和鎖配合使用?
?
02 C++基礎(chǔ)
?
C語言和C++有什么區(qū)別?
struct和class有什么區(qū)別?
extern "C"的作用?
函數(shù)重載和覆蓋有什么區(qū)別?
談一談你對多態(tài)的理解,運行時多態(tài)的實現(xiàn)原理是什么?
對虛函數(shù)機(jī)制的理解,單繼承、多繼承、虛繼承條件下虛函數(shù)表的結(jié)構(gòu)
如果虛函數(shù)是有效的,那為什么不把所有函數(shù)設(shè)為虛函數(shù)?
構(gòu)造函數(shù)可以是虛函數(shù)嗎?析構(gòu)函數(shù)可以是虛函數(shù)嗎?
面試系列之C++的對象布局【建議收藏】
什么場景需要用到純虛函數(shù)?純虛函數(shù)的作用是什么?
了解RAII嗎?介紹一下?
RAII妙用之計算函數(shù)耗時
RAII妙用之ScopeExit
類的大小怎么計算?
volatile關(guān)鍵字的作用?什么時候需要使用volatile關(guān)鍵字
如何實現(xiàn)一個線程池?C++線程池的實現(xiàn)之格式修訂版
了解各種強制類型轉(zhuǎn)換的原理及使用?
指針和引用有什么區(qū)別?什么情況下用指針,什么情況下用引用?
一般什么情況下會出現(xiàn)內(nèi)存泄漏?怎么用C++在編碼層面盡量避免內(nèi)存泄漏。
unique_ptr如何轉(zhuǎn)換所有權(quán)?
談一談你對面向?qū)ο蟮睦斫?/p>
什么場景下使用繼承方式,什么場景下使用組合?
new和malloc有什么區(qū)別?
-
malloc的內(nèi)存可以用delete釋放嗎?
-
malloc出來20字節(jié)內(nèi)存,為什么free不需要傳入20呢,不會產(chǎn)生內(nèi)存泄漏嗎?
-
new[]和delete[]一定要配對使用嗎?new[]和delete[]為何要配對使用?
21. C++11新特性你都了解多少?
-
了解auto和decltype嗎?一文吃透C++11中auto和decltype知識點
-
談一談你對左值和右值的了解,了解左值引用和右值引用嗎?
-
了解移動語義和完美轉(zhuǎn)發(fā)嗎?左值引用、右值引用、移動語義、完美轉(zhuǎn)發(fā),你知道的不知道的都在這里
-
了解列表初始化嗎?學(xué)會C++11列表初始化
-
平時會用到function、bind、lambda嗎,都什么場景下會用到?搞定c++11新特性std::function和lambda表達(dá)式
-
對C++11的mutex和RAII lock有過了解嗎?c++11新特性之線程相關(guān)所有知識點
-
對C++11的智能指針了解多少,可以自己實現(xiàn)一個智能指針嗎?c++11新特性之智能指針 源碼分析shared_ptr實現(xiàn)之修訂版
-
enum 和 enum class有什么區(qū)別?
22. STL
-
C++直接使用數(shù)組好還是使用std::array好?std::array是怎么實現(xiàn)的?
-
std::vector最大的特點是什么?它的內(nèi)部是怎么實現(xiàn)的?resize和reserve的區(qū)別是什么?clear是怎么實現(xiàn)的?
-
deque的底層數(shù)據(jù)結(jié)構(gòu)是什么?它的內(nèi)部是怎么實現(xiàn)的?
-
map和unordered_map有什么區(qū)別?分別在什么場景下使用?
-
list的使用場景?std::find可以傳入list對應(yīng)的迭代器嗎?
-
string的常用函數(shù)
?
03 設(shè)計模式
如果你能知道所有的設(shè)計模式最好,即便不知道所有的設(shè)計模式,下面這些高頻設(shè)計模式你還是需要了解的。
分別寫出餓漢和懶漢線程安全的單例模式
說出觀察者模式類關(guān)系和優(yōu)點
說出代理模式類關(guān)系和優(yōu)點
說出工廠模式概念和優(yōu)點
說出構(gòu)造者模式概念
說出適配器模式概念
?
04 操作系統(tǒng)
進(jìn)程和線程的區(qū)別?深度好文|面試官:進(jìn)程和線程,我只問這19個問題
操作系統(tǒng)是怎么進(jìn)行進(jìn)程管理的?
操作系統(tǒng)是如何做到進(jìn)程阻塞的?
進(jìn)程之間的通信方式有哪些?
什么是上下文切換,操作系統(tǒng)是怎么做的上下文切換?
線程是如何實現(xiàn)的?
線程之間私有和共享的資源有哪些?
一般應(yīng)用程序內(nèi)存空間的堆和棧的區(qū)別是什么?
進(jìn)程虛擬空間是怎么布局的?10張圖22段代碼,萬字長文帶你搞懂虛擬內(nèi)存模型和malloc內(nèi)部原理
虛擬內(nèi)存是如何映射到物理內(nèi)存的?了解分頁內(nèi)存管理嗎?操作系統(tǒng)內(nèi)存管理,你能回答這8個問題嗎?
產(chǎn)生死鎖的必要條件有哪些?如何避免死鎖?
什么是大端字節(jié),什么是小端字節(jié)?如何轉(zhuǎn)換字節(jié)序?
信號和信號量的區(qū)別是什么?
鎖的性能開銷,鎖的實現(xiàn)原理?
了解CPU的Cache嗎?如何寫一個高效的多維矩陣乘法?如何利用CPU Cache寫出高性能代碼,看這些圖就夠了!
05 編譯原理
gcc hello.c 這行命令具體的執(zhí)行過程,內(nèi)部究竟做了什么?gcc a.c 究竟經(jīng)歷了什么?
程序一定會從main函數(shù)開始運行嗎?
如何確定某個函數(shù)有被編譯輸出?
動態(tài)鏈接庫和靜態(tài)鏈接庫的區(qū)別是什么?Linux 為什么要動態(tài)鏈接?與靜態(tài)鏈接的區(qū)別是什么?
?
大家如果對哪個問題有疑問可以留言,有其他覺得比較好的問題也可以分享在留言區(qū)!
總結(jié)
以上是生活随笔為你收集整理的C++面试宝典(纯干货)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python学习之生成器
- 下一篇: s3c2440移植MQTT