1、new/delete、 malloc/free
記憶體洩漏是指堆記憶體(heap memory)的洩漏(memory leak)。堆記憶體指程式從堆中分配的,大小任意的(記憶體塊的大小可以在程式執行期決定),使用完後必須顯式釋放的記憶體。應用程式一般使用malloc,realloc,new等函式從堆中分配記憶體,使用完後,程式必須負責相應的呼叫free或delete釋放該記憶體,否則,這塊記憶體就不能被再次使用,即這塊記憶體洩漏了。 malloc與free是c++/c語言的標準庫函式,new/delete是c++的運算子。它們都可用於申請動態記憶體和釋放記憶體。
2、雜湊表(雜湊表)
3、記憶體分配
a、棧區(stack)
向下生長,由編譯器自動分配釋放 ,存放函式的引數值,區域性變數的值等,記憶體的分配是連續的,類似於平時我們所說的棧,如果還不清楚,那麼就把它想成陣列,它的記憶體分配是連續分配的,即,所分配的記憶體是在一塊連續的記憶體區域內.當我們宣告變數時,那麼編譯器會自動接著當前棧區的結尾來分配記憶體.
b、堆區(heap)
向上生長(從低位址開始存放),一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由作業系統**.類似於鍊錶,在記憶體中的分布不是連續的,它們是不同區域的記憶體塊通過指標鏈結起來的.一旦某一節點從鏈中斷開,我們要人為的把所斷開的節點從記憶體中釋放.
c、全域性/靜態儲存區(static)
全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域, 未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。 程式結束後由系統釋放
d、唯讀區
存放程式和常量,比如const int a = 2; char *p = "abc"; 這裡的a和「abc」都存放在可讀寫區。
4、指標以及相關問題
指標是存放位址的變數。指標所佔的儲存空間和作業系統有關,32位作業系統佔4個位元組,64位作業系統佔8個位元組。
例題:64位系統上定義的變數int* a[2][3]佔據 2*3*8 個位元組
&運算子
在c語言中有兩種含義:1、位操作符,表示『位與』;2、取位址運算子,比如int a = 10,*p = &a;
在c++中除了上述兩種含義外還有一種含義:引用,比如int a, &b = a;//a和b等價,共享乙個儲存空間,a,b的值同時變化。
常量指標和指標常量
常量指標:指標所指向的物件只能被讀取,而指標本生的值可以修改,比如:int a,b;
const int
*p = &a; p = &b;
指標常量:不能修改指標本生的值,但可以修改指標所指向的物件的值,比如int a = 10;
int * const p = &a; *p = 20; 常量
常量是不能修改的,存放在記憶體的唯讀區,入如const int a = 10; char *p = "abc";這裡的a和字串abc都是常量,只能讀,不能修改。
函式指標和
指標函式
函式指標也是乙個指標變數,它指向函式的入口位址。
int (*f)(int a, int b); //
宣告函式指標
,函式指標定義為乙個指向乙個返回值為整型,有兩個引數並且兩個引數的型別都是整型的函式。
指標函式是乙個函式,這個函式的返回值是乙個指標。
int *f(int a, int b); //指標函式宣告,該函式有兩個整形引數,返回值是乙個指標
5、http 狀態碼
找不到該頁面:404
禁止訪問:403
內部伺服器訪問:500
伺服器繁忙:503
6、建構函式與虛構函式
a、當派生類中不含
物件成員
(類的某個成員是物件)
時 在建立派生類物件時,建構函式的執行 順序是:基類的建構函式→派生類的
建構函式;
在撤消派生類物件時,析構函式的執行 順序是:派生類的建構函式→基類
建構函式。
b、當派生類中含有物件成員時
在定義派生類物件時,建構函式的執行順序:基類的建構函式→物件成員的
建構函式→派生類的建構函式;
在撤消派生類物件時,析構函式的執行順序:派生類的建構函式→物件成員的建構函式→基類的建構函式。
7、程序的狀態以及轉化
程序的三種基本狀態
程序在執行中不斷地改變其執行狀態。通常,乙個執行程序必須具有以下三種基本狀態。
a 、就緒(ready)狀態
當程序已分配到除cpu以外的所有必要的資源,只要獲得處理機便可立即執行,這時的程序狀態稱為就緒狀態。
b 、執行(running)狀態
當程序已獲得處理機,其程式正在處理機上執行,此時的程序狀態稱為執行狀態。
c、阻塞(blocked)狀態(即等待狀態)
正在執行的程序,由於等待某個事件發生而無法執行時,便放棄處理機而處於阻塞狀態。引起程序阻塞的事件可有多種,例如,等待i/o完成、申請緩衝區不能滿足、等待信件(訊號)等。
程序三種狀態間的轉換
乙個程序在執行期間,不斷地從一種狀態轉換到另一種狀態,它可以多次處於就緒狀態和執行狀態,也可以多次處於阻塞狀態。
(1) 就緒→執行
處於就緒狀態的程序,當程序排程程式為之分配了處理機後,該程序便由就緒狀態轉變成執行狀態。
(2) 執行→就緒
處於執行狀態的程序在其執行過程中,因分配給它的乙個時間片已用完而不得不讓出處理機,於是程序從執行狀態轉變成就緒狀 態。
(3) 執行→阻塞
正在執行的程序因等待某種事件發生而無法繼續執行時,便從執行狀態變成阻塞狀態。
(4) 阻塞→就緒
處於阻塞狀態的程序,若其等待的事件已經發生,於是程序由阻塞狀態轉變為就緒狀態。
例題:程序進入等待狀態有哪幾種方式?(d)
a cpu排程給優先順序更高的執行緒
//執行到等待
b 阻塞的執行緒獲得資源或者訊號
//等待到就緒
c 在時間片輪轉的情況下,如果時間片到了
//執行到就緒
d 獲得spinlock未果
//執行到等待
5、類的基本知識點
1、封裝性
類包含成員資料和成員函式,一般將成員資料定義成私有,外部**通過公有的成員函式對其訪問,成員函式相當於提供了訪問成員資料的乙個介面,從而實現了對成員資料的封裝。
注意:私有成員函式只可以被該類的成員函式訪問
保護成員只可以被基類或者是派生類的成員函式訪問
公有成員可以通過申請物件進行訪問
2、繼承性
3、多型性——乙個介面,多中方法
基類指標能夠指向它派生出來的派生類是實現c++多型性的關鍵。
執行時的多型性通過虛函式和繼承一起來實現。
虛函式:在基類中定義為virtual函式,在派生類中可以重新定義。
多型類:有虛函式的基類,或者是繼承有虛函式的基類的派生類。
純虛函式:在基類中沒定義,在派生類中一定要定義的函式。
抽象類:含有純虛函式的類(不能宣告物件,但可以宣告指標)
面試筆試 http知識點
1 常用的http方法有哪些?get 用於請求訪問已經被uri 統一資源識別符號 識別的資源,可以通過url傳參給伺服器 post 用於傳輸資訊給伺服器,主要功能與get方法類似,但一般推薦使用post方式。put 傳輸檔案,報文主體中包含檔案內容,儲存到對應uri位置。head 獲得報文首部,與g...
一些常見的面試筆試題
問題1 構造和析構函式中的虛函式呼叫 答案 虛函式可以在建構函式和析構函式中呼叫,但虛函式此時是靜態繫結 而非動態繫結。問題2 c 中的異常可不可以是引用 答案 異常可以是引用,並且效率高。問題3 tcp狀態中的close wait是什麼狀態 答案 close wait狀態是被動關閉方的乙個狀態,此...
面試筆試遇到的一些題
sizeof 指標變數 大小為4個位元組 以32位計算機為例 也是,計算機位址32位,指標存的是記憶體位址,自然也要32位。堆和棧的區別 1 棧由程式自動分配,堆是程式設計師申請的,必須指明大小 2 程式結束,棧自動釋放,而堆還需要free或者delete,手動釋放 2 分配棧很快,只要剩餘空間足夠...