1. new和malloc什麼區別?
new和malloc都用於在堆上分配記憶體,new是c++中的關鍵字,分配記憶體後還會呼叫建構函式
2. std中unorded_map,map,multimap有什麼區別?
- unorderd_map中元素不按鍵值排序,底層資料結構是雜湊表,相對map查詢速度快,記憶體開銷大
- map中元素按鍵值排序,底層資料結構是紅黑樹,相對unorderd_map,查詢速度慢,記憶體開銷小
- multimap類似map,但是允許重複鍵值
3. C++中左值和右值的概念,以及使用右值常見的場景
簡單來說,對於一個賦值表示式而言, 左側的稱之為左值,右側的稱之為右值。左值一般為常見的定義過的變數,在棧或堆上有具體的儲存空間,右值一般為臨時物件,作用域只限於賦值表示式期間。右值常見的有數字/字元常量,函式返回的非引用值,臨時構造的物件。
4. C++記憶體洩漏怎麼出現,如何定位與解決
記憶體洩漏是由於在堆上new出來的空間,沒有delete釋放掉導致的。可以透過過載new/delete加入log資訊,比較申請和釋放的記憶體,從而得知是否有記憶體洩漏;也可以透過各種檢測工具,Windows下有UMDH,Linux下有valgrind工具
5. 解釋下linux下虛擬地址空間
作業系統為了解決多程序管理中安全和效率問題,為每個程序分配的是虛擬記憶體地址,各記憶體地址相互隔離。在 Linux 作業系統中,虛擬地址空間的內部又被分為核心空間和使用者空間兩部分,使用者空間又分為棧,堆,資料,程式檔案等。
- 參考連結
知乎-如何理解虛擬地址空間
CSDN-徹底搞懂虛擬記憶體,虛擬地址,虛擬地址空間
6. 同步/非同步與阻塞/非阻塞的區別
同步指的一條指令執行完,再執行下一條執行,各指令按照順序依次執行,非同步指的是,兩條指令可以同時執行。阻塞指的是一個執行緒需要等待另一個執行緒的結果時,阻止當前執行緒繼續向下執行,而非阻塞則是不阻止當前執行緒。
7. 有哪些架構型別
單體架構、分散式應用、微服務與Serverless
- 參考連結
騰訊雲-四種常見的系統架構,目前你處於哪個階段呢?