C++常見的面試題目整理

本文列出C++面試中經常遇到的一些問題,都是一些常見的面試考點,如果後續遇到其他常見面試問題還會再次更新。希望對近期參加面試的同學有一些幫助。先後順序與問題的重要性無關,查看的時候,最好是全面了解一下。
C++語言基礎、語言特性、數據結構、作業系統知識甚至是一些內核相關的知識、網路相關知識、資料庫操作、多執行緒多進程數據同步互斥、記憶體相關知識等等。
1、關鍵字及基本問題
const的作用,const怎麼使用,有哪些應用場景?
static的作用,static類成員變數怎麼初始化?static成員可以調用哪些成員函數,非static成員函數可以調用哪些成員函數?
static成員函數怎麼使用,與普通成員函數有什麼區別?
指針和引用的區別?
new和malloc的區別?
程式的記憶體分布?堆棧的生長方向?為什麼是相反的生長方向?
了解哪些創建堆的函數?

2、類相關的題目
為什麼要進行封裝?
什麼是多態,多態是怎麼實現的?多態的應用場景?
虛函數表是屬於類的還是屬於成員的?虛指針呢?
虛函數,純虛函數?什麼時候使用虛函數,什麼時候使用純虛函數?有了虛函數為什麼還要用純虛函數,可以用虛函數替代純虛函數嗎?
類的構造函數可以定義為虛函數嗎?析構函數呢?
基類的析構函數為什麼通常需要定義為虛函數?如果不定義為虛函數會有什麼問題?什麼場景下會產生這種問題?
定義拷貝構造函數的時候參數有什麼要求?為什麼要將參數定義為引用,如果不定義為引用會產生什麼問題?
什麼是深拷貝?怎麼實現深拷貝?
構造函數的成員初始化列表的使用場景?什麼時候必須使用初始化列表?

3、C++11+的新特性
你了解哪些C++11新的特性?
static_cast 與dynamic_cast有什麼區別?分別是基於什麼原理實現?為什麼要使用他們而不是使用之前標準裡面的強制類型轉換?
nullptr的作用?為什麼要引入nullptr而不使用NULL?
你了解哪些智慧指針?
智慧指針的內部是怎麼實現的?
左值右值,左值引用與右值引用?

4、STL及數據結構(注意效率與複雜度)
vector和list的內部實現是什麼?分別適用於什麼應用場景?
vector隨機訪問的時間複雜度是多少?怎麼優化vector的查找速度?
vector擴容的過程?
怎麼徹底清空vector?
vector怎麼查找元素?如果是一個結構怎麼查找一個vector結構中的指定元素?(find find_if)
map查找的複雜度?
map的底層是怎麼實現的?map與hashmap的區別?什麼時候應該使用map什麼時候應該使用hashmap?
常見排序演算法及其時間和空間複雜度?桶排序有了解的嗎?
給定一個場景,選擇一種合適的容器?
怎麼定義一個環形隊列?怎麼判斷環形隊列的空與滿?

C/C++的學習裙【105+302+9869】,無論你是小白還是進階者,是想轉行還是想入行都可以來了解一起

進步一起學習!裙內有開發工具,很多乾貨和技術資料分享!

5、電腦網路
三次握手與四次揮手的過程及狀態的轉變?
為什麼是三次握手而不是兩次握手?
為什麼是需要四次揮手?
soket通訊實現的基本過程?
使用原生的socket不使用網路庫的時候,怎麼防止粘包,需要怎麼定義相關請求的結構?
介面的冪等性?
http協議是長連接還是短鏈接,怎麼改為長鏈接?
http請求頭包含哪些內容?一個http請求包含哪些內容?

6、多執行緒與多進程
windows下怎麼創建執行緒?使用哪些執行緒函數?為什麼建議使用_beginthreadex與endthreadex而不是createthread與endthread?
執行緒間同步互斥的方法有哪些?
進程間通訊進程間同步的方法有哪些?
互斥、事件、臨界區、訊號量之間區別?(臨界區控制同步的時候不需要進入內核態,其他的都需要進入內核態)
說一說臨界區的使用?CRITICAL_SECTION InitializeCriticalSection EnterCriticalSection LeaveCriticalSection
同一執行緒可以多次進入臨界區嗎?
什麼是死鎖,什麼情況下會產生死鎖,怎麼避免產生死鎖,如果產生了死鎖該怎麼調試?
多執行緒情況下,怎麼只讓某個執行緒調用指定的函數?

7、資料庫
mysql資料庫中的左連接 右鏈接 內連接的區別?
關係型資料庫與非關係型資料庫的區別?
存儲過程?
了解redis嗎?

8、設計模式
你了解哪些設計模式?
怎麼實現一個懶漢式的執行緒安全的單例模式?

9、git使用的問題
git pull 與git rebase

10、windows相關問題
說說windows的消息機制?有哪些相關的函數?
MFC窗體的生命周期,涉及到哪些函數?
模態對話框與非模態對話框的區別?
怎麼產生一個dump文件?dump分析工具你知道哪些?windbg
windows下你了解哪些定時器類?自己怎麼實現一個定時器類?
什麼時候會產生記憶體泄漏?怎麼調試記憶體泄漏?用到哪些記憶體泄漏的調試方式?
說一說windwos的消息映射機制?
一個dll大入口函數是什麼?mfc程式的入口函數是什麼?
執行緒切換的時候作業系統做了哪些事情?
sendmessage與postmessage的區別是什麼?什麼是同步消息什麼是非同步消息?

11、程式碼實現(手寫程式碼)
strcpy、memcpy、單例模式 、二叉樹的前序中序後序遍歷、二叉樹的層序遍歷遍歷、不完全二叉樹的序列化與反序列化