C++面試題整理 1
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 操作系統中,虛擬地址空間的內部又被分為內核空間和用戶空間兩部分,用戶空間又分為棧,堆,數據,程序文件等。
6. 同步/異步與阻塞/非阻塞的區別
同步指的一條指令執行完,再執行下一條執行,各指令按照順序依次執行,異步指的是,兩條指令可以同時執行。阻塞指的是一個線程需要等待另一個線程的結果時,阻止當前線程繼續向下執行,而非阻塞則是不阻止當前線程。
7. 有哪些架構類型
單體架構、分布式應用、微服務與Serverless
作者:robot2017
出處:http://www.rzrgm.cn/stephen2023/p/18410719
版權:本文版權歸作者和博客園共有
轉載:歡迎轉載,但未經作者同意,必須保留此段聲明;必須在文章中給出原文連接;否則必究法律責任
出處:http://www.rzrgm.cn/stephen2023/p/18410719
版權:本文版權歸作者和博客園共有
轉載:歡迎轉載,但未經作者同意,必須保留此段聲明;必須在文章中給出原文連接;否則必究法律責任
浙公網安備 33010602011771號