1.
在函數(shù)F中限番,本地變量a和b的構(gòu)造函數(shù)(constructor)和析構(gòu)函數(shù)(destructor)的調(diào)用順序是:
解析:構(gòu)造函數(shù)按照變量聲明的順序入棧;
? ? ? ? 析構(gòu)函數(shù)按照相反順序出棧;
? ? ? ? a構(gòu)造 ? b構(gòu)造 ? ?b析構(gòu) ? ?a析構(gòu)
A ? B 分別是一個類,a,b分別為一個實例,構(gòu)造函數(shù)是用來初始化變量的,析構(gòu)是用來釋放構(gòu)造函數(shù)定義的變量內(nèi)存
2.假定指針變量p定義為“int *p=new int(100);”,要釋放p所指向的動態(tài)內(nèi)存呀舔,應(yīng)使用語句( delete p)
解析:
C++:new實例化一個內(nèi)存,delete刪除一個內(nèi)存
? ? ? ?new和delete是一個操作符;
? ? ? int ? *a ?= new ?int(100); ? ? ?//實例化一個int型的內(nèi)存空間,里邊的值為100;刪除的話用delete ?a;
? ? ? int ? ?*b = new ? int[100]; ? ? ? ? //實例化一個int型的內(nèi)存空間,里邊有100個數(shù)組,刪除的話用
? ? ? delete []b
C語言:malloc(xxx)分配一個內(nèi)存;
? ? ? ? ? free(xxx)釋放一個內(nèi)存;
? ? ? ? ? malloc和free是一個函數(shù);
int ?a=100; ? int ?*p=a; ?p表示地址.*p表示指針(取p里邊的值),&a = p;
int ? a = 100;分配內(nèi)存開始2000-2003
int ?*p;
p = &a; ?/*取地址*/ ?
所以*p=100;
3.處理hash沖突有:開放定址法(線性探測法、線性補償探測法霜瘪、隨機探測法),拉鏈法惜互,建立公共溢出區(qū),再散列法
4.Big-endian(大端序):數(shù)據(jù)的高位字節(jié)存放在地址的低端 低位字節(jié)存放在地址高端
? Little-endian(小端序):數(shù)據(jù)的高位字節(jié)存放在地址的高端 低位字節(jié)存放在地址低端
字節(jié)的高位與低位
舉個例子,int a = 0x12345678 ; 那么左邊12就是高位字節(jié)鲁沥,右邊的78就是低位字節(jié),從左到右允扇,由高到低,(注意唱矛,高低乃相對而言,比如56相對于78是高字節(jié)燥滑,相對于34是低字節(jié)
地址的高端與低端
0x00000001
0x00000002
0x00000003
0x00000004
從上倒下,由低到高,地址值小的為低端肪跋,地址值大的為高端。
5.寫一個函數(shù)找出一個整數(shù)數(shù)組中,第二大的數(shù);
function ? secNumber(arr){
? ? ? ? ? //定義數(shù)組的長度;
? ? ? ? ? ?var ?len ?= arr.length;
? ? ? ? ? //若是數(shù)組元素小于二,則返回未找到;
? ? ? ? ? if(len ?< 2){
? ? ? ? ? ? ? ? ? ?return ? -1;
? ? ? ? ? }
? ? ? ? ? ?//定義兩個變量最大和第二大,分別存放最大值和第二大的值;
? ? ? ? ? ?//循環(huán)遍歷這個數(shù)組;
? ? ? ? ? ? for(var i = 2;i ?< ?len;i++){
? ? ? ? ? ? ? ? ? ? ?if(arr[i] > max_num){ ? // arr[i]比最大的數(shù)字大
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? sec_num = max_num;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?max_num = arr[i];
? ? ? ? ? ? ? ? ? ? }else ?if(arr[i] ?< max_num ?&& arr[i] >sec_num){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?sec_num = arr[i];
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? return ? sec_num;
}
6.由權(quán)值為3,6,7,2,5,1的葉子結(jié)點生成一棵哈夫曼樹逊彭,它的帶權(quán)路徑長度為57;
解析: 構(gòu)造哈夫曼樹步驟是,選擇兩個權(quán)值最小的點構(gòu)造樹签赃,新樹根權(quán)值為左右子樹權(quán)值之和,新的權(quán)值放回到序列中孔庭,繼續(xù)按照上述步驟構(gòu)造樹,直到只有一顆樹為止芽淡。 樹帶權(quán)路徑長度 就是每個葉子結(jié)點的權(quán)值*高度之和掷邦。所以 (5+ 6+ 7)*2+3*3+(1+2)*4=57;

7.一般是客戶端先向服務(wù)器發(fā)送請求:
第一次握手發(fā)送一個序列號;
第二次握手的序列號是單獨發(fā)送的向抢,第二次握手的確認(rèn)號是第一次握手序列號+1篷扩;
第三次握手的序列號是第二次握手的確認(rèn)號枢冤,第三次握手的確認(rèn)號是是第二次握手的序列號+1连茧;
8.數(shù)據(jù)結(jié)構(gòu)中N個頂點的連通圖至少有多少個邊:
? ? ? ? ?至少要有(N-1)條邊(也就是樹)才能保證圖為連通圖.
? ? ? ? 對于簡單圖而言至多有n*(n-1)/2條邊,此時即是完全圖.
? ? ? ? ?一個n個頂點的連通無向圖祟峦,其邊的個數(shù)至少為:n-1;(中間一個點,其余的n-1個點和這個點連接)
? ? ? ? 一個n個頂點的連通有向圖,其邊的個數(shù)至少為:n;
? ? ? ? N頂點無向連通圖最多n!/[2! * (n-2)!]-1條邊
9.關(guān)于將內(nèi)存的分配空間初始化為0;
1) malloc 函數(shù): void *malloc(unsigned int size)
在內(nèi)存的動態(tài)分配區(qū)域中分配一個長度為size的連續(xù)空間厌衙,如果分配成功,則返回所分配內(nèi)存空間的首地址,否則返回NULL奕塑,申請的內(nèi)存不會進行初始化讨衣。
2)calloc 函數(shù): void *calloc(unsigned int num, unsigned int size)
按照所給的數(shù)據(jù)個數(shù)和數(shù)據(jù)類型所占字節(jié)數(shù)歹茶,分配一個 num * size 連續(xù)的空間燎孟。
calloc申請內(nèi)存空間后烹俗,會自動初始化內(nèi)存空間為 0兔仰,但是malloc不會進行初始化朽褪,其內(nèi)存空間存儲的是一些隨機數(shù)據(jù)无虚。
3)realloc 函數(shù): void *realloc(void *ptr, unsigned int size)
動態(tài)分配一個長度為size的內(nèi)存空間戴质,并把內(nèi)存空間的首地址賦值給ptr戈抄,把ptr內(nèi)存空間調(diào)整為size裸诽。
申請的內(nèi)存空間不會進行初始化丈冬。
4)new是動態(tài)分配內(nèi)存的運算符,自動計算需要分配的空間,在分配類類型的內(nèi)存空間時荸实,同時調(diào)用類的構(gòu)造函數(shù)重抖,對內(nèi)存空間進行初始化祖灰,即完成類的初始化工作。動態(tài)分配內(nèi)置類型是否自動初始化取決于變量定義的位置三妈,在函數(shù)體外定義的變量都初始化為0悠鞍,在函數(shù)體內(nèi)定義的內(nèi)置類型變量都不進行初始化。