C++後臺開發最常問到的面試題
一、C/C++方面
1、說說C++中的多型及其實現;
3、帶虛擬函式與否的空類大小;
不帶虛擬函式:sizeof為1;帶虛擬函式:sizeof為4(32位)。
4、位元組對齊;
7、static、const的用法?
8、指標和引用
10、智慧指標、物件管理資源;
11、深拷貝和淺拷貝;
13、型別大小(long、int等在32和64位系統中)。
32位系統 64位系統 (單位Bytes)
char 1 1
short 2 2
int 4 4
指標 4 8
long 4 8
float 4 4
double 8 8
14、拷貝建構函式與拷貝複製函式需要注意的事項?
15、解構函式虛擬函式為什麼,建構函式為什麼不能是虛擬函式
17、new和malloc的區別
18、C++11特性
20、子類建構函式具體呼叫了啥
21、函式指標和指標函式的區別
22、虛擬函式的呼叫時機
24、記憶體溢位和記憶體洩漏
25、程式的記憶體結構
26、虛擬函式的底層實現
27、 弱型別、強型別、動態型別是什麼
28、RAII
31、C語言中的指標和陣列的差別
32、C++編寫一個string類
二、STL方面
1、說說std::vector底層機制;
2、說說std::list的底層機制;
3、說說std::map的底層機制;
4、說說std::deque底層機制;
5、std::vector的自增長機制;
12、STL用過嗎?map和hashmap的區別,查詢的時間複雜度分別是多少
14、二叉搜尋樹與雜湊表
三、資料結構方面
1、二叉樹前、中、後、層序遍歷遞迴與非遞迴實現;
3、兩個棧實現一個佇列(考慮執行緒安全);
4、B樹與B+樹的區別;
5、紅黑樹的性質;
6、AVL樹的單旋轉;
7、分別說一下7種內部排序;
8、有序表查詢;
10、紅黑樹和avl樹的區別
11、map底層為什麼用紅黑樹實現
12、介紹迭代器失效。push_back會導致迭代器失效嗎
13、雜湊衝突的解決方法
14、哈夫曼樹
四、演算法方面
1、逆轉單鏈表;
2、連結串列帶環檢測以及環入口;
3、連結串列排序(nlogn不退化);
4、KMP字串匹配;
5、詞頻統計(使用trie樹);
6、lru cache(list+map);
7、100億個整型數排序(外排);
8、100億個數,找出其中最小的1萬個數(構造大頂堆);
10、不重複數值排序(點陣圖)。
11、如何判斷一個圖是否連通
12、char*s1, const char *s2,刪除s1中s2出現過的字元
13、刪除單項鍊表中重複的節點 (1 2 2 3 3 9) -> (1 2 3 9)
14、求二叉樹的深度
15、判斷一個數是不是迴文數
16、求一個數組的最長連續子序列
17、有兩個連結串列,怎麼求交點
19、假設有兩個陣列,各有十萬數量級的整數,如何求交集
21、假設有一個排好序的陣列,數字都是兩個兩個出現的,只有一個是單獨出現的,求這個數
22、寫兩道題,一道快排,一道字串反轉
24、手寫strcpy函式
30、快排演算法最差情況推導公式
32、講講DFS/BFS區別,需要用啥資料結構
五、網路及其程式設計方面
1、IP分片和重組;
2、TCP的3次握手、4次斷開及其狀態轉移,Linux下TIME_WAIT和CLOSE_WAIT區別是什麼;
3、timewait狀態;
4、擁塞控制演算法;
5、說一下位址列輸入一個URL,接下來所涉及到的全部協議,儘可能詳細;
7、select、poll、epoll模型;
8、說說如何設計一個tcp伺服器程式(迭代、併發範型);
9、程序間通訊
10、系統呼叫是什麼。你用過哪些系統呼叫。什麼系統呼叫會耗時長
12、GET和POST的區別
13、TCP的三次握手四次揮手 ,擁塞,流量,可靠性的原理
14、tcp的緩衝區
15、埠是幹什麼用的
16、網路七層協議
17、http、TCP、UDP的區別和聯絡
18、TCP和UDP各自的優勢,知道哪些使用UDP協議的成功案例
21、TCP粘包怎麼處理
22、DDOS攻擊
23、驚群效應,如何避免
26、 網路層、資料鏈路層、傳輸層的裝置有哪些
29、 epoll中ET模式與LT模式的區別
30、為什麼是三次握手
六、LINUX及作業系統方面
1、程序和執行緒的區別;
2、堆和棧的區別;
3、fork的底層實現(寫時拷貝);
4、fork、vfork和clone的區別;
6、gdb、coredump檔案使用;
7、檢視機器負載的命令(top、ps、tcpdump、netstate、lsof等);
8、什麼是inode;
9、硬連結和軟連結的區別;
10、地址轉換、段頁式記憶體管理;
12、缺頁中斷
13、頁表定址
14、Linux虛擬地址空間
17、grep、sed、awk的使用
18、 使用者態到核心態的轉化原理
20、 執行緒共享程序的什麼,不共享什麼,CPU共享嗎
21、 怎麼保證一個CPU只有一個執行緒執行
22、 執行緒分配什麼:tcb?
23、 執行緒的基本組成是什麼?暫存器堆疊
一個標準的執行緒由:執行緒ID,當前指令指標(PC),暫存器集合和堆疊組成。
24、 執行緒有什麼狀態
25、 多執行緒同步和互斥方法,核心態下有什麼方法
26、 條件變數是什麼
27、 訊號量是什麼
28、 緩衝區溢位是什麼?會造成什麼危害呢?出現原因是什麼
29、 守護程序、殭屍程序、孤兒程序,守護程序的作用是什麼
30、 死鎖條件,解決死鎖的方法?按照四個方面來解決
31、 記憶體對映是什麼
32、 中斷的作用
33、 一個檔案被刪除了,沒有被釋放是什麼原因呢
34、 Linux下檢視程式記憶體狀況
35、 Linux下如何檢視網路中伺服器狀態
36、 Linux下TCP伺服器都有什麼狀態
37、 作業系統中的PV操作是做什麼用的,能否舉個例子
38、 linux 檔案查詢指令
39、 top顯示出來的系統資訊都是什麼含義
40、 頁快取
41、 linux下檢視IO佔用情況
42、 講一下執行緒池
43、 執行緒之間的通訊方式
44、 gdb用過哪些指令,在其中怎麼檢視執行緒的執行情況
47、 Linux下常用的命令有哪些
51、 互斥鎖和讀寫鎖說一下吧?哪個效率高呢
52、 說一下ping這個命令底層是做了什麼吧,ping本機和ping遠端過程上有哪些區別
54、 大記憶體申請時候選用哪種
mmap
55、 mmap對映底層原始碼
56、程序排程演算法
57、記憶體分配原理
七、資料庫方面
1、說說資料庫的4大正規化;
2、說說事務的4個性質;
3、mysql中innodb和myisam這兩者db引擎的區別(優點和缺點);
4、mysql的4個隔離級別以及髒讀和幻讀;
5、查詢優化有哪些方法;
6、如何定位耗時過長的查詢(使用慢查詢日誌);
7、檢視、索引等的作用;
8、瞭解哪些NoSQL的db(非關係型資料庫)?
9、講講MySQL和NoSQL
10、資料庫事務
11、索引是什麼。多加索引一定會好嗎
12、MySQL死鎖的原因和解決方法
13、資料庫儲存引擎
八、其他
1、如何把一個檔案快速下發到100w個伺服器
2、爬蟲怎麼防止爬到重複的網站
3、gdb除錯用過嗎。什麼是條件斷點
4、XSS原理
5、數字證書是什麼,裡面都包含那些內容。
公鑰,過期時間,簽發機構等
6、加密方法都有哪些
7、對一堆檔名(字串)做雜湊,怎麼樣可以減少衝突率
8、 gcc選項
9、 假設我想要快取web伺服器的訪問記錄,該如何實現這個資料結構
10、 講一下負載均衡的設計
11、 容災如何處理
12、 如何加權控制後臺伺服器負載的平衡性的
13、 程式記憶體崩潰了怎麼辦
gdb core dump檔案,backtrace可以檢視哪裡有段錯誤