常用基礎知識面試(C++為主)
挺多家公司面試都問相關基礎問題(C++為主),有的時候一緊張老答不全,趕緊列出來,每天背三遍,吾日三省吾身。
1.引用和指標的區別
①指標是一個實體,需要分配記憶體空間;引用只是變數的別名,不需要分配記憶體空間。
②引用在定義的時候必須進行初始化,並且不能夠改變。指標在定義的時候不一定要初始化,並且指向的空間可變。
③指標和引用的自增運算結果不一樣。(指標是指向下一個空間,引用時引用的變數值加1)。
④sizeof 引用得到的是所指向的變數(物件)的大小,而sizeof 指標得到的是指標本身的大小。
⑤引用訪問一個變數是直接訪問,而指標訪問一個變數是間接訪問。
⑥有多級指標,但是沒有多級引用,只能有一級引用。
2.const int * ptr與 int * const ptr的區別
①const int * ptr是指該指標指向一個const int,即指標的指向可以改變,而指標指向的內容不可以發生改變。
②int * const ptr是指改指標的指向不能發生改變了,但是它指向的內容卻可以發生改變。
3.C++的儲存區(5個)
①棧:區域性變數,函式引數等儲存在該區,由編譯器自動分配和釋放。
②堆:需要程式設計師手動分配和釋放(new,delete),屬於動態分配方式。
③全域性/靜態儲存區:全域性變數,靜態變數分配到該區,到程式結束時自動釋放,包括DATA段(全域性初始化區)與BBS段(全域性未初始化段)。
④文字常量區:存放常量,而且不允許修改。程式結束後由系統釋放。
⑤程式程式碼區:存放程式的二進位制程式碼。
4.C++ 中 new 與 malloc 的區別
① new/delete是C++關鍵字,需要編譯器支援。malloc/free是庫函式,需要標頭檔案支援。
② 引數:使用new操作符申請記憶體分配時不是必須指定記憶體塊的大小,編譯器會根據型別資訊自行計算。而malloc則需要顯式地指出所需記憶體的尺寸。
③ 返回型別:new操作符記憶體分配成功時,返回的是物件型別的指標,型別嚴格與物件匹配,無須進行型別轉換,故new是符合型別安全性的操作符。而malloc記憶體分配成功則是返回void * ,需要通過強制型別轉換將void*指標轉換成我們需要的型別。
④ 記憶體分配失敗時:new記憶體分配失敗時,會丟擲bac_alloc異常。malloc分配記憶體失敗時返回NULL。
⑤ 過載:new允許過載,malloc不允許
⑥ 記憶體區域:new操作符從自由儲存區(free store)上為物件動態分配記憶體空間,而malloc函式從堆上動態分配記憶體。
5.程式和執行緒的區別
①程式和執行緒的定義分別是?
程式:是執行中一段程式,即一旦程式被載入到記憶體中並準備執行,它就是一個程式。程式是表示資源分配的的基本概念,又是排程執行的基本單位,是系統中的併發執行的單位。
執行緒:單個程式中執行中每個任務就是一個執行緒。執行緒是程式中執行運算的最小單位。
②一個執行緒只能屬於一個程式,但是一個程式可以擁有多個執行緒。多執行緒處理就是允許一個程式中在同一時刻執行多個任務。
③執行緒是一種輕量級的程式,與程式相比,執行緒給作業系統帶來側建立、維護、和管理的負擔要輕,意味著執行緒的代價或開銷比較小。
④執行緒沒有地址空間,執行緒包含在程式的地址空間中。執行緒上下文只包含一個堆疊、一個暫存器、一個優先權,執行緒文字包含在他的程式 的文字片段中,程式擁有的所有資源都屬於執行緒。所有的執行緒共享程式的記憶體和資源。 同一程式中的多個執行緒共享程式碼段(程式碼和常量),資料段(全域性變數和靜態變數),擴充套件段(堆儲存)。但是每個執行緒擁有自己的棧段, 暫存器的內容,棧段又叫執行時段,用來存放所有區域性變數和臨時變數。
6.程式間通訊的方法(5種):
① 管道
② 命名管道(FIFO)
③ 訊息佇列
④ 訊號量
⑤ 共享記憶體
7.執行緒間通訊的方法:
① 使用全域性變數進行通訊
② 使用自定義訊息
③ std::promise
可以用來線上程間提供資料傳遞。
std::future = std::promise.get_future()
執行緒中可以對promise賦值std::promise.set_value
。
賦值之後std::future.get()
就會返回其他執行緒中設定的
④ std::packaged_task
可以包裹一個函式, 有點類似std::function
,不同之處在於這個可以通過get_future返回std::future
物件來獲取非同步執行的函式結果。
相關文章
- C++基礎知識C++
- 【C++】C++基礎知識C++
- C++基礎知識整理C++
- 主機板基礎知識
- Java基礎知識面試題Java面試題
- Java 基礎面試知識點Java面試
- (C++) queue容器基礎知識C++
- C++基礎知識篇:C++ 運算子C++
- JS基礎知識(覆蓋JS基礎面試題)JS面試題
- C++基礎知識筆記(1)筆記
- iOS | 面試知識整理 - OC基礎 (一)iOS面試
- Java基礎面試知識點總結Java面試
- 快速掌握JavaScript面試基礎知識(二)JavaScript面試
- 快速掌握JavaScript面試基礎知識(三)JavaScript面試
- iOS基礎面試知識點總結iOS面試
- JavaScript的基礎知識點(面試題)JavaScript面試題
- C++常用知識列表C++
- SAP SD基礎知識之SD常用BAPIAPI
- Python基礎知識之常用框架Flask!Python框架Flask
- Python 面試必備基礎知識-1Python面試
- Python 必備面試基礎知識-3Python面試
- 【Docker】Docker基礎知識(面試一籮筐)Docker面試
- Android面試之——數學基礎知識Android面試
- 機器學習面試基礎知識 & 擴充套件-01機器學習面試套件
- Android NDK入門:C++ 基礎知識AndroidC++
- C++基礎知識學習筆記(1)C++筆記
- C++基礎知識學習筆記(3)C++筆記
- 基礎知識
- Flutter積累一些常用基礎知識Flutter
- 面試-JS基礎知識-作用域和閉包、this面試JS
- 藍橋杯知識點彙總:基礎知識和常用演算法演算法
- c++基礎知識(十一)檔案的複製C++
- 大規模C++程式設計 -- 基礎知識C++程式設計
- MySQL基礎知識和常用命令總結MySql
- Python基礎知識之常用框架Flask介紹!Python框架Flask
- AI 基礎知識AI
- Webpack 基礎知識Web
- Dart基礎知識Dart