1、介紹一下最近一年的項目
答:巴拉巴拉
2、說下這個項目你解決過什麼問題?
答:巴拉巴拉,聊到記憶體洩露
3、你覺得你遇到的記憶體洩露都有哪幾種?
答:有繼承關系的類父類析構沒有聲明成虛函數的、malloc、new指針未釋放的、vector裡面指針未釋放的,還一個記憶體占用問題就是vector元素隻進行了pop,沒有釋放内部數組記憶體,導緻容器占用的記憶體逐漸變大。
注:夜裡忽然驚醒,想到當時緊張忘說了檔案描述符未釋放的問題。比如open的檔案未關閉,連接配接的socket不再使用未斷開。
4、那你是怎麼釋放vector裡面的數組記憶體的?
答:vector str, str.swap(vector())
插曲:面試官發了個阿裡的連結,線上刷題,僞代碼即可。
1、設計一個方法求二叉樹的高度
寫出來了。
2、設計一個方法對一個有序的單向連結清單去重
第一次沒看到有序用的set,面試官指出來了讓我修改。去掉set改判斷值就可以了。第二次提醒跳過的節點為什麼沒有釋放,加了delete。
5、介紹下虛函數
答:是實作多态的核心,父類聲明虛函數,子類重寫。虛函數原理是一個類的執行個體的首地存放的是虛函數表指針位址,使用該位址可以通路虛函數表,起初虛函數表内都是父類虛函數的位址,當被執行個體化為子類時,會用子類虛函數的位址替換虛函數表中的對應函數位址,實作函數覆寫。
6、介紹下程序和線程
答:程序是系統資源配置設定的基本機關,線程是CPU排程的基本機關。
切換:
程序切換:
1、切換頁表目錄(虛拟記憶體到實體記憶體的映射)
2、切換核心堆棧(整個記憶體空間)
3、上下文切換(核心消耗是需要把程序資料放入到寄存器)
4、重新整理TLB(就是padg cache,存放磁盤資料索引,加快磁盤檔案通路效率)
線程切換:
1、切換棧(隸屬于同一程序相同的記憶體空間,隻切換棧)
2、上下文切換(沒有程序資料的換出換入,僅切換少量寄存器)
資料同步:
程序:
通信:普通管道、有名管道、消息隊列、共享記憶體、記憶體檔案映射、socket
同步:信号、信号量
線程:
通信:共享變量位址即可
同步:各種鎖,互斥鎖、自旋鎖、讀寫鎖、條件變量
7、fork介紹一下,傳回值都代表什麼意思
答:傳回0是子程序、傳回正數為父程序,正數是子程序PID,傳回-1執行失敗
8、智能指針說一下
答:使用計數記錄引用次數,計數為0時析構才釋放記憶體
9、linux中so和a的類不需要導出、windos的dll和lib類需要導出才能使用這是為什麼?
答:這個不知道,面試官說不要緊
10、用過什麼開源庫
答:pcap網絡收發包和一個開源的http協定檔案,boost沒用過。面試官回複不要緊。
11、了解資料庫嗎?
答:自學過mysql和redis,原理和指令都學過,但是指令記不太清楚了。面試官回複可以沒再細問。
12、了解分布式嗎?
答:不了解。面試官回複不要緊,這個可以學習。