c、c++筆試題面試題_第1頁
c、c++筆試題面試題_第2頁
c、c++筆試題面試題_第3頁
c、c++筆試題面試題_第4頁
c、c++筆試題面試題_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

2010C、C++筆試題大全,被問的概率幾乎100%。

很少有真正精通了c語言編程的學(xué)員,一般都有或多或少概念不是完全清楚的問題,

特別是一些需要豐富的實(shí)戰(zhàn)經(jīng)驗(yàn)才能體會(huì)和明白的問題,如字符串,指針,類型轉(zhuǎn)換,定義

指向函數(shù)的指針類型,這也是導(dǎo)致學(xué)習(xí)c困難的一個(gè)原因。下面有幾個(gè)簡(jiǎn)單測(cè)試將能發(fā)現(xiàn)

你對(duì)C語言的掌握情況。

1)intx=35;

charstr[10];

〃問:strien(str)和sizeof(str)的值分別是多少?

答:strlen(str)值不確定,strlen根據(jù)1V),確定字符串是否結(jié)束。

sizeof(str)=10sizeof一個(gè)數(shù)組為數(shù)組長度

strcpy(str,"”/*共13個(gè)字母*/);

//問:此時(shí)x和strlen(str)的值分別是多少?

答:x為35

strcpy(char*dest,constchar*src)

根據(jù)src來復(fù)制dest,健src的、O'決定復(fù)制的長度,而dest必須要提供足夠的長度,這

里會(huì)引起溢出,strlen返回13,但是數(shù)組外部的數(shù)據(jù)已經(jīng)被破壞

strlen的值為13,在VC++環(huán)境下,x的值是要改變的(其他編譯器下沒試,).雖然表面上看來,

在程序中并沒有修改x的值,但是實(shí)際運(yùn)行的結(jié)果是上面的x的值發(fā)生了修改,這是因?yàn)?/p>

strcpy以后,把多余的數(shù)據(jù)拷貝進(jìn)了str的鄰居(int類型的x)中,所以x的數(shù)據(jù)也就變了.這是?

個(gè)曾讓我刻骨銘心的問題,在我剛出道時(shí)遇到這個(gè)問題,雖然在朋友的幫助下解決了這個(gè)問題,

但一直不明白x的值為何變了,只有最后走上培訓(xùn)教師的崗位,才開始梳理自己曾經(jīng)的困惑,

才開始總結(jié)以前的經(jīng)驗(yàn)供學(xué)員們借鑒.我覺得這個(gè)題目的價(jià)值非常之大,它能引起學(xué)員對(duì)字符

串拷貝越界問題的足夠重視,并且通過這個(gè)問題更能明白字符串的處理是怎么回時(shí),更能明白

字符串與字符數(shù)組的關(guān)系:字符串就是一個(gè)字符數(shù)組,只是把這個(gè)字符數(shù)組用在處理串的函數(shù)

中時(shí),這些函數(shù)不考慮數(shù)組的長度,只是記住數(shù)組的首地址,從首地址開始處理,并在遇到0時(shí)

結(jié)束處理,

3)charstr|10];

str="";//alsocanuse:memcpy(str,"")

〃編譯能通過嗎?

答:數(shù)組不能賦值,只能初始化。charstr[10]="";

而且初始化時(shí)編譯器會(huì)檢查數(shù)組的長度與初始化串的長度是否匹配

4)char*pstr;

strcpy(pstr,"");〃需要初始化并分配空間

//上句編譯能通過嗎?運(yùn)行時(shí)有問題嗎?

答:可以通過編譯,但是pstr指向了常量區(qū),運(yùn)行忖最好只做讀操作,寫操作不保險(xiǎn)。

編譯可以通過,但是pstr沒有進(jìn)行有效的初始化,它指向了一個(gè)不確定的內(nèi)存區(qū),運(yùn)行時(shí)會(huì)

出現(xiàn)內(nèi)存不可寫錯(cuò)誤!

constchar*p1;

char*constp2;//const指針必須初始化

〃上面兩句有什么區(qū)別嗎?

答:constchar*和charconst*一樣,都是表示指向常量的字符指針。

char*const表示指向字符的常量指針

pl=(constchar*)str;

〃如果是pl=str;編譯能夠通過嗎?明白為什么要類型轉(zhuǎn)換?類型轉(zhuǎn)換的本質(zhì)是什么?

答:可以通過編譯。關(guān)于常量與非常量指針的關(guān)系是這樣的:

const指針可以指向const或者非const區(qū)域,不會(huì)造成什么問題。

非const指針不能指向const區(qū)域,會(huì)引起錯(cuò)誤。(呵呵,這個(gè)問題,很經(jīng)典)

strcpy(p1,"abc'');//編譯能夠通過嗎?

答:不能通過,strcpy(char*,constchar*);char*不能指向constchar*

注意:非const指針不能指向const區(qū)域,會(huì)引起錯(cuò)誤。

printf("%d",str);〃有問題嗎?

答:沒有問題,輸出的是str的地址信息

Char*pstr;

pstr=3000;〃編譯能過嗎?如果不行,該如何修改以保證編譯通過呢?

答:不能通過,char*pstr表示pstr是個(gè)字符指針,不能指向3000的整形變量。

修改的話,可以這樣:pstr=(char*)3000,把pstr指向3000這個(gè)地址;

longy=(k>ng)pstr;〃可以這樣做嗎?

答:可以,y的值為pstr所指的地址。不過如果是純粹要地址的話,最好是用unsignedlong。

int*p=str;

*p=0x00313200;

printf("%s",str);〃會(huì)是什么效果?提示0x31對(duì)應(yīng)字符T,0x32對(duì)應(yīng)字符2。

答:首先編譯未必會(huì)過關(guān),有些編譯器可能不允許int*直接指向char*。最好是改為int*p

=(int*)str;

過關(guān)了效果就是什么東西都沒有。int*p=str;p為str所指的地址,*p表示修改了str所指向

的內(nèi)存。

由于sizeof(int)在32位機(jī)上,int有4個(gè)字節(jié)(其實(shí)具體要看編譯器的配置文件,好像是limit.h,

一般是4個(gè)字節(jié))所以修改了str[0]-str[3]

由于0x00313200頭尾都是0,所以字符串為M)'開頭,什么都打印不出來。這里有個(gè)Big-endin

和little-endin的問題。以0x31323334為例

little-endin的機(jī)器上面,0x31323334在內(nèi)存中排列順序?yàn)?4333231,鼬為4321,如INTEL

芯片的pc

big-endin機(jī)器上面為31323334,輸出為1234,如IBMPOWERPC

p=3000;//p+l的結(jié)果會(huì)是多少?

答:3000+sizeof(int);指針+1均為原來地址加上sizeof(指針?biāo)傅臄?shù)據(jù)類型)

char*pc=newchar[100];〃上述語句在內(nèi)存中占據(jù)兒個(gè)內(nèi)存塊,怎樣的布局情況?

答:本身pc會(huì)占用函數(shù)棧一個(gè)4字節(jié)的指針長度(具體是否為4個(gè)字節(jié)要看機(jī)器和編譯器)。

new會(huì)在■上申請(qǐng)100個(gè)字節(jié)sizeof(char)的連續(xù)空間。

voidtest(char**p)

(

*p=newchar[100];

}〃這個(gè)編譯函數(shù)有問題嗎?外面要調(diào)用這個(gè)函數(shù),該怎樣傳遞參數(shù)?

答:該程序沒有問題。需要在函數(shù)中對(duì)指針?biāo)傅牡刂愤M(jìn)行變化是必須傳入指針的地址。

原因是這樣的:如果傳入的為指針本身,在函數(shù)調(diào)用的時(shí)候,實(shí)參會(huì)被復(fù)制一個(gè)實(shí)例,這

樣就不是原來的指針了,對(duì)該指針本身進(jìn)行的任何改變都不能傳遞回去了。

可以這樣理解,如果傳入的參數(shù)為int,那么對(duì)int本身的值的改變就傳不回去啦,加個(gè)*

也是一樣的。

〃能明白typedefint(*PFUN)(intx,inty)及其作用嗎?

[敞制這樣PFUN就袤來揖向遮■時(shí)■■■

參數(shù)的函數(shù)指針類型了。

可以用來定義這樣的變量:

比如有個(gè)函數(shù)為intfun(intx,inty);

PFUNp=fun;

補(bǔ)充::函數(shù)指針最大的用處在于它可以被一個(gè)模板方法調(diào)用,這是我在學(xué)java的設(shè)計(jì)模式時(shí)

領(lǐng)悟到的.例如,有兩個(gè)函數(shù)的流程結(jié)構(gòu)完全一致,只是內(nèi)部調(diào)用的具體函數(shù)不同,如下所示:

voidfuncl()

(

//一段流程代碼和面向方面的代理,如安全檢查,日志記錄等

intsum=add(x,y);

〃一段流程代碼和面向方面的代理,如安全檢查,日志記錄等

)

voidfunc2()

(

〃與fund完全相同的一段流程代碼和面向方面的代理,如安全檢查,日志記錄等

intdifference=sub(x,y);

〃與fund完全相同的一段流程代碼和面向方面的代理,如安全檢查,日志記錄等

}

那么,可以只定義一個(gè)函數(shù),如下所示

voidfunc(PFUNCp)

(

〃與funcl完全相同的一段流程代碼和面向方面的代理,如安全檢查,日志記錄等

intdifference=p(x,y);

〃與funcl完全相同的一段流程代碼和面向方面的代理,如安全檢查,日志記錄等

)

調(diào)用程序在調(diào)用時(shí),讓參數(shù)p分別指向add和sub函數(shù)就可以了.

以下是騰訊的筆試面試題:

]請(qǐng)定義一個(gè)宏,比較兩個(gè)數(shù)a、b的大小,不能使用大于、小于、if語句

2、如何輸出源文件的標(biāo)題和目前執(zhí)行行的行數(shù)

3、兩個(gè)數(shù)相乘,小數(shù)點(diǎn)后位數(shù)沒有限制,請(qǐng)寫一個(gè)高精度算法

4、寫一個(gè)病毒

5、有A、B、C、D四個(gè)人,要在夜里過一座橋。他們通過這座橋分別需要耗時(shí)

1、2、5、10分鐘,只有一支手電,并且同時(shí)最多只能兩個(gè)人一起過橋。請(qǐng)問,

如何安排,能夠在17分鐘內(nèi)這四個(gè)人都過橋?

2008年騰訊招聘

選擇題(60)

c/c++oslinux方面的基礎(chǔ)知識(shí)c的Sizeof函數(shù)有好幾個(gè)!

程序填空(40)

1.(20)4空x5

不使用額外空間,將A,B兩鏈表的元素交叉歸并

2.(20)4空x5

MFC將樹序列化轉(zhuǎn)存在數(shù)組或鏈表中!

1,計(jì)算a?<<2(運(yùn)算符優(yōu)先級(jí)問題)

2根據(jù)先序中序求后序

3a[3][4]哪個(gè)不能表示a[l][l]:*(&a[0][0])*(*(a+l)+l)*(&a[l]+l)*(&a[0][0]+4)

4for(inti...)

for(intj...)

printf(i,j);

printf(j)

會(huì)出現(xiàn)什么問題

5for(i=0;i<10;++i,sum+=i);的運(yùn)行結(jié)果

610個(gè)數(shù)順序插入查找二叉樹,元素62的比較次數(shù)

710個(gè)數(shù)放入模lOhash鏈表,最大長度是多少

8fun((exp1,exp2),(exp3,exp4,exp5))有兒個(gè)實(shí)參

9希爾冒泡快速插入哪個(gè)平均速度最快

10二分查找是順序存儲(chǔ)鏈存儲(chǔ)按value有序中的哪些

11順序查找的平均時(shí)間

12*p=NULL*p=newchar[100]sizeof(p)各為多少

13頻繁的插入刪除操作使用什么結(jié)構(gòu)比較合適,鏈表還是數(shù)組

14enum的聲明方式

151-20的兩個(gè)數(shù)把和告訴A,積告訴B,A說不知道是多少,

B也說不知道,這時(shí)A說我知道了,B接著說我也知道了,問這兩個(gè)數(shù)是多少

大題:

1把字符串轉(zhuǎn)換為小寫,不成功返回INULL,成功返叵]新串

char*toLower(char*sSrcStr)

char*sDest=NULL;

if(_1—)

intj;

sLen=strlen(sSrcStr);

sDest=new[2];

if(*sDest==NULL)

returnNULL;

sDest[sLen]=、0';

while(3)

sDestfsLen]=toLowerChar(sSrcStr[sLen]);

)

returnsDest;

2把字符串轉(zhuǎn)換為整數(shù)例如:”-123“->-123

main()

if("string)

n=1

else

n=num(string);

intnum(char*string)

for(;!(*string==O);string++)

intk;

k=_2;

j=-sLen;

while(—3—)

k=k*10;

num=num+k;

returnnum;

}

附加題:

1linux下調(diào)試core的命令,察看堆棧狀態(tài)命令

2寫出socks套接字服務(wù)端客戶端通訊程序

3填空補(bǔ)全程序,按照我的理解是添入:Win32調(diào)入川的函數(shù)名

查找函數(shù)入口的函數(shù)名找到函數(shù)的調(diào)用形式

把formView力口至Usingledoc的聲明將singledoc力口到app的聲明

4有關(guān)系s(sno,sname)c(cno,cname)sc(sno,eno,grade)

1問上課程“db”的學(xué)生no

2成績(jī)最高的學(xué)生號(hào)

3每科大于90分的人數(shù)

主要是C/C++、數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)等方面的基礎(chǔ)知識(shí)。好像有sizeof、樹等選

擇題。填空題是補(bǔ)充完整程序。附加題有寫算法的、編程的、數(shù)據(jù)庫sql語句查

詢的。還有一張開放性問題。

請(qǐng)定義一個(gè)宏,比較兩個(gè)數(shù)a、b的大小,不能使用大于、小于、if語句

#defineMix(a,b)(a/b)?a:b

如何輸出源文件的標(biāo)題和目前執(zhí)行行的行數(shù)

intline=_LINE_;

char*file=_FILE_;

cout?"filenameis"?(file)?",lineis"?line?endl;

兩個(gè)數(shù)相乘,小數(shù)點(diǎn)后位數(shù)沒有限制,請(qǐng)寫一個(gè)高精度算法

寫一個(gè)病毒

while(1)

(

int*p=newint[10000000];

)

不使用額外空間,將A,B兩鏈表的元素交叉歸并

將樹序列化轉(zhuǎn)存在數(shù)組或鏈表中

structst{

inti;

shorts;

charc;

sizeof(structst);

8

char*pl;

void*p2;

intp3;

charp4[10];

sizeof(pl...p4)=?

4,4,4,10

二分查找

快速排序

雙向鏈表的刪除結(jié)點(diǎn)

有12個(gè)小球,外形相同,其中一個(gè)小球的質(zhì)量與其他11個(gè)不同

給一個(gè)天平,問如何用3次把這個(gè)小球找出來

并且求出這個(gè)小球是比其他的輕還是重

解答:

哈哈,據(jù)說這是微軟前兒年的一個(gè)面試題。很經(jīng)典滴??!三次一定能求出來,而

且能確定是重還是輕。

數(shù)據(jù)結(jié)構(gòu)的知識(shí)還沒怎么學(xué)透,不過這個(gè)題我到是自己研究過,可以分析下。

將12個(gè)球分別編號(hào)為al,a2,a3.……al0,all,al2.

第一步:將12球分開3撥,每撥4個(gè),al~a4第一撥,記為bl,a5~a6第2撥,

記為b2,其余第3撥,記為b3;

第二步:將bl和b2放到天平兩盤上,記左盤為cl,右為c2;這時(shí)候分兩中情

況:

l.cl和c2平衡,此時(shí)可以確定從al到a8都是常球;然后把c2拿空,并從cl

上拿下a4,從a9到al2四球里隨便取三球,假設(shè)為a9到all,放到c2上。此

時(shí)cl上是al到a3,c2上是a9到all。從這里又分三種情況:

A:天平平衡,很簡(jiǎn)單,說明沒有放上去的al2就是異球,而到此步一共稱了

兩次,所以將al2隨便跟11個(gè)常球再稱一次,也就是第三次,馬上就可以確定

al2是重還是輕;

B:若cl上升,則這次稱說明異球?yàn)閍9到all三球中的一個(gè),而且是比常球

重。取下cl所有的球,并將a8放到cl上,將a9取下,比較a8和all(第三次

稱),如果平衡則說明從c2上取下的a9是偏重異球,如果不平衡,則偏向哪盤

則哪盤里放的就是偏重異球;

C:若cl下降,說明a9到all里有一個(gè)是偏輕異球。次種情況和B類似,所

以接下來的步驟照搬B就是;

2.C1和c2不平衡,這時(shí)候又分兩種情況,cl上升和cl下降,但是不管哪種情況

都能說明a9到al2是常球。這步是解題的關(guān)鍵。也是這個(gè)題最妙的地方。

A:cl上升,此時(shí)不能判斷異球在哪盤也不能判斷是輕還是重。取下cl中的

a2到a4三球放一邊,將c2中的a5和a6放到cl上,然后將常球a9放到c2上。

至此,cl上是al,a5和a6,c2上是a7,a8和a9。此時(shí)又分三中情況:

1)如果平衡,說明天平上所有的球都是常球,異球在從cl上取下a2到a4

中。而且可以斷定異球輕重。因?yàn)閍5到a8都是常球,而第2次稱的時(shí)候cl是

上升的,所以a2到a4里必然有一個(gè)輕球。那么第三次稱就用來從a2到a4中找

到輕球。這很簡(jiǎn)單,隨便拿兩球放到cl和c2,平衡則剩余的為要找球,不平衡

則哪邊低則哪個(gè)為要找球;

2)cl仍然保持上升,則說明要么al是要找的輕球,要么a7和a8兩球中

有一個(gè)是重球(這步懂吧?好好想想,很簡(jiǎn)單的。因?yàn)閍9是常球,而取下的a2

到a4肯定也是常球,還可以推出換盤放置的a5和a6也是常球。所以要么al輕,

要么a7或a8重)。至此,還剩一次稱的機(jī)會(huì)。只需把a(bǔ)7和a8放上兩盤,平衡

則說明al是要找的偏輕異球,如果不平衡,則哪邊高說明哪個(gè)是偏重異球;

3)如果換球稱第2次后天平平衡打破,并且cl降低了,這說明異球肯定

在換過來的a5和a6兩求中,并且異球偏重,否則天平要么平衡要么保持cl上

升。確定要找球是偏重之后,將a5和a6放到兩盤上稱第3次根據(jù)哪邊高可以判

定a5和a6哪個(gè)是重球;

B:第1次稱后cl是下降的,此時(shí)可以將cl看成c2,其實(shí)以后的步驟都同A,

所以就不必要再重復(fù)敘述了。至此,不管情況如何,用且只用三次就能稱出12

個(gè)外觀手感一模一樣的小球中有質(zhì)量不同于其他11球的偏常的球。而且在稱的

過程中可以判定其是偏輕還是偏重。

給一個(gè)奇數(shù)階N幻方,填入數(shù)字1,2,3…N*N,使得橫豎斜方向上的和都相同

答案:

#include<iostream>

#include<iomanip>

#include<cmath>

usingnamespacestd;

intmain()

(

intn;

cin?n;

inti;

int**Matr二newint*[n];〃動(dòng)態(tài)分配二維數(shù)組

for(i=0;i<n;++i)

Matr[i]=newint[n];〃動(dòng)態(tài)分配二維數(shù)組

//j二n/2代表首行中間數(shù)作為起點(diǎn),即1所在位置

intj=n/2,nunFl;〃初始值

i=0;

while(num!=n*n+1)

{

〃往右上角延升,若超出則用%轉(zhuǎn)移到左下角

Matr[(i%n+n)%n][(j%n+n)%n]=num;

〃斜行的長度和n是相等的,超出則轉(zhuǎn)至下一斜行

if(num%n==O)

i++;

else

j++;

)

num++;

)

for(i=0;i<n;i++)

(

for(j=0;j<n;++j)

cout?setw((int)loglO(n*n)+4)<<Matr[i][j];〃格式控制

cout<<endl<<endl;〃格式控制

)

for(i=0;i<n;++i)

delete[]Matr[i];

return1;

)

騰訊的一道面試題:(與百度相似,可惜昨天百度死在這方面了"〃/

在一個(gè)文件中有10G個(gè)整數(shù),亂序排列,要求找出中位數(shù)。內(nèi)存限制為2G。只

寫出思路即可。

答案:

1,把整數(shù)分成256M段,每段可以用64位整數(shù)保存該段數(shù)據(jù)個(gè)數(shù),256M*8=2G

內(nèi)存,先清0

2,讀10G整數(shù),把整數(shù)映射到256M段中,增加相應(yīng)段的記數(shù)

3,掃描256M段的記數(shù),找到中位數(shù)的段和中位數(shù)的段前面所有段的記數(shù),

可以把其他段的內(nèi)存釋放

4,因中位數(shù)段的可能整數(shù)取值已經(jīng)比較小(如果是32bit整數(shù),當(dāng)然如果是

64bit整數(shù)的話,可以再次分段),對(duì)每個(gè)整數(shù)做一個(gè)記數(shù),再讀一次10G整

數(shù),只讀取中位數(shù)段對(duì)應(yīng)的整數(shù),并設(shè)置記數(shù)。

5,對(duì)新的記數(shù)掃描一次,即可找到中位數(shù)。

如果是32bit整數(shù),讀10G整數(shù)2次,掃描256M記數(shù)一次,后一次記數(shù)因

數(shù)量很小,可以忽略不記

(設(shè)是32bit整數(shù),按無符號(hào)整數(shù)處理

整數(shù)分成256M段?整數(shù)范圍是0-2A32-1一共有4G種取值,

4G/256M=16,每16個(gè)數(shù)算一段0-15是1段,16-31是一段,…

整數(shù)映射到256M段中?如果整數(shù)是0-15,則增加第一段記數(shù),如果整

數(shù)是16-31,則增加第二段記數(shù),...

其實(shí)可以不用分256M段,可以分的段數(shù)少一寫,這樣在掃描記數(shù)段時(shí)

會(huì)快一些,還能節(jié)省一些內(nèi)存)

騰訊題二:

一個(gè)文件中有40億個(gè)整數(shù),每個(gè)整數(shù)為四個(gè)字節(jié),內(nèi)存為1GB,寫出一個(gè)

算法:求出這個(gè)文件里的整數(shù)里不包含的一個(gè)整數(shù)

答:

方法一:4個(gè)字節(jié)表示的整數(shù),總共只有2A32約等于4G個(gè)可能。

為了簡(jiǎn)單起見,可以假設(shè)都是無符號(hào)整數(shù)。

分配500MB內(nèi)存,每-bit代表一個(gè)整數(shù),剛好可以表示完4個(gè)字節(jié)的

整數(shù),初始值為0?;舅枷朊孔x入一個(gè)數(shù),就把它對(duì)應(yīng)的bit位置為1,

處理完40G個(gè)數(shù)后,對(duì)500M的內(nèi)存遍歷,找出一個(gè)bit為0的位,輸出

對(duì)應(yīng)的整數(shù)就是未出現(xiàn)的。

算法流程:

1)分配500MB內(nèi)存buf,初始化為0

2)unsignedintx=0xl;

foreachintjinfile

buf=bufix<<j;

end

(3)for(unsignedinti=0;i<=Oxffffffff;i++)

if(!(buf&x<<i))

(

output(i);

break;

)

以上只是針對(duì)無符號(hào)的,有符號(hào)的整數(shù)可以依此類推。

方法二:

文件可以分段讀啊,這個(gè)是0(2n)算法,應(yīng)該是很快的了,而且空間也允

許的。

不過還可以構(gòu)造更快的方法的,更快的方法主要是針對(duì)定位輸出的整數(shù)

優(yōu)化算法。

思路大概是這樣的,把值空間等分成若干個(gè)值段,比如值為無符號(hào)數(shù),

00000000H-00000FFFH

00001000H-00001FFFH

0000F000H-0000FFFFH

FFFFF000H-FFFFFFFFH

這樣可以訂立一個(gè)規(guī)則,在一個(gè)值段范圍內(nèi)的數(shù)第一次出現(xiàn)時(shí),對(duì)應(yīng)值

段指示值Xn=Xn+l,如果該值段的所有整數(shù)都出現(xiàn)過,則Xn=1000H,

這樣后面輸出定位時(shí)就可以直接跳過這個(gè)值段了,因?yàn)轭}目?jī)H僅要求輸

出一個(gè),這樣可以大大減少后面對(duì)標(biāo)志數(shù)值的遍歷步驟。

理論上值段的劃分有一定的算法可以快速的實(shí)現(xiàn),比如利用位運(yùn)算直接

定位值段對(duì)應(yīng)值進(jìn)行計(jì)算。

騰訊面試題:

有1到10w這10w個(gè)數(shù),去除2個(gè)并打亂次序,如何找出那兩個(gè)數(shù)。(不

準(zhǔn)用位圖??!)

位圖解決:

位圖的方法如下

假設(shè)待處理數(shù)組為A[10w-2]

定義一個(gè)數(shù)組B[10w],這里假設(shè)B中每個(gè)元素占用1比特,并初始化為全0

for(i=0;i<10w-2;i++)

(

B[A[i]]=1

)

那么B中不為零的元素即為缺少的數(shù)據(jù)

這種方法的效率非常高,是計(jì)算機(jī)中最常用的算法之一

其它方法:

求和以及平方和可以得到結(jié)果,不過可能求平方和運(yùn)算量比較大(用64

位int不會(huì)溢出)

騰訊面試題:

騰訊服務(wù)器每秒有2w個(gè)QQ號(hào)同時(shí)上線,找出5min內(nèi)重新登入的qq號(hào)并

打印出來。

解答:第二題如果空間足夠大,可以定義一個(gè)大的數(shù)組

a[qq號(hào)],初始為零,然后這個(gè)qq號(hào)登陸了就a[qq號(hào)]++

最后統(tǒng)計(jì)大于等于2的QQ號(hào)

這個(gè)用空間來代替時(shí)間

第二個(gè)題目,有不成熟的想法。

2wx3OOs

所以用6,000,000個(gè)桶。刪除超口寸的算法后面說,所以平均桶的大小是1o

假設(shè)qq號(hào)碼一共有1070個(gè),所以每個(gè)桶裝的q號(hào)碼

是1070/(6*10A6)個(gè),這個(gè)是插入時(shí)候的最壞效率(插入同一個(gè)桶的

時(shí)候是順序查找插入位置的)。

qq的節(jié)點(diǎn)結(jié)構(gòu)和上面大家討論的基本一樣,增加一個(gè)指針指向輸出列表,

后面說。

structQQstruct{

num_typeqqnum;

timestamplast_logon_time;

QQstruct*pre;

QQstruct*next;

OutPutList*out;//用于free節(jié)點(diǎn)的時(shí)候,順便更新一下輸出列表。

另外增加兩個(gè)指針列表。

第一個(gè)大小300的循環(huán)鏈表,自帶一個(gè)指向QQStruct的域,循環(huán)存300秒

內(nèi)的qq指針。時(shí)間一過

就free掉,所以保證所有桶占用的空間在2wX300以內(nèi)。

第二個(gè)是輸出列表,就是存放題目需要輸出的節(jié)點(diǎn)。

如果登陸的用戶,5分鐘內(nèi)完全沒有重復(fù)的話,每秒free掉2w個(gè)節(jié)點(diǎn)。

不過在free的時(shí)候,要判斷一下時(shí)間是不是真的超時(shí),因?yàn)榘压?jié)點(diǎn)入桶

的時(shí)候,遇到重復(fù)的,會(huì)更

新一下最后登陸的時(shí)間。當(dāng)然啦,這個(gè)時(shí)候,要把這個(gè)qq號(hào)碼放到需要

輸出的列表里面

1、局部變量能否和全局變量重名?

答:能,局部會(huì)屏蔽全局。要用全局變量,需要使用"::"

局部變量可以與全局變量同名,在函數(shù)內(nèi)引用這個(gè)變量時(shí),會(huì)用到同名的局

部變量,而不會(huì)用到全局變量。對(duì)于有些編譯器而言,在同一個(gè)函數(shù)內(nèi)可以定義

多個(gè)同名的局部變量,比如在兩個(gè)循環(huán)體內(nèi)都定義一個(gè)同名的局部變量,而那個(gè)

局部變量的作用域就在那個(gè)循環(huán)體內(nèi)。

2、如何引用一個(gè)已經(jīng)定義過的全局變量?

答:extern

可以用引用頭文件的方式,也可以用extern關(guān)鍵字,如果用引用頭文件方式

來引用某個(gè)在頭文件中聲明的全局變理,假定你將那個(gè)變寫錯(cuò)了,那么在編譯期

間會(huì)報(bào)錯(cuò),如果你用extern方式引用時(shí),假定你犯了同樣的錯(cuò)誤,那么在編譯期

間不會(huì)報(bào)錯(cuò),而在連接期間報(bào)錯(cuò)。

3、全局變量可不可以定義在可被多個(gè).C文件包含的頭文件中?為什么?

答:可以,在不同的C文件中以static形式來聲明同名全局變量。

可以在不同的C文件中聲明同名的全局變量,前提是其中只能有一個(gè)C文

件中對(duì)此變量賦初值,此時(shí)連接不會(huì)出錯(cuò)

4、語句for(;1;)有什么問題?它是什么意思?

答:和while⑴相同。

5、dowhile和whiledo有什么區(qū)別?

答:前一個(gè)循環(huán)一遍再判斷,后一個(gè)判斷以后再循環(huán)

6、請(qǐng)寫出下列代碼的輸出內(nèi)容

#include<stdio.h>

main()

(

inta,b,c,d;

a=10;

b=a++;

c=++a;

d=10*a++;

printf(nb,c,d:%d,%d,%d\b,c,d);

return0;

)

答:10,12,120

7、static全局變量與普通的全局變量有什么區(qū)別?static局部變量和普通局

部變量有什么區(qū)別?static函數(shù)與普通函數(shù)有什么區(qū)別?

全局變量(外部變量)的說明之前再冠以static就構(gòu)成了靜態(tài)的全局變量。全

局變量本身就是靜態(tài)存儲(chǔ)方式,靜態(tài)全局變量當(dāng)然也是靜態(tài)存儲(chǔ)方式。這兩者

在存儲(chǔ)方式上并無不同。這兩者的區(qū)別雖在于非靜態(tài)全局變量的作用域是整個(gè)源

程序,當(dāng)一個(gè)源程序由多個(gè)源文件組成時(shí),非靜態(tài)的全局變量在各個(gè)源文件中

都是有效的。而靜態(tài)全局變量則限制了其作用域,即只在定義該變量的源文件

內(nèi)有效,在同一源程序的其它源文件中不能使用它。由于靜態(tài)全局變量的作用

域局限于一個(gè)源文件內(nèi),只能為該源文件內(nèi)的函數(shù)公用,因此可以避免在其它

源文件中引起錯(cuò)誤。

從以上分析可以看出,把局部變量改變?yōu)殪o態(tài)變量后是改變了它的存儲(chǔ)方

式即改變了它的生存期。把全局變量改變?yōu)殪o態(tài)變量后是改變了它的作用域,限

制了它的使用范圍。

static函數(shù)與普通函數(shù)作用域不同。僅在本文件。只在當(dāng)前源文件中使用的

函數(shù)應(yīng)該說明為內(nèi)部函數(shù)(static),內(nèi)部函數(shù)應(yīng)該在當(dāng)前源文件中說明和定義。對(duì)

于可在當(dāng)前源文件以外使用的函數(shù),應(yīng)該在一個(gè)頭文件中說明,要使用這些函數(shù)

的源文件要包含這個(gè)頭文件

static全局變量與普通的全局變量有什么區(qū)別:static全局變量只初使化-一次,

防止在其他文件單元中被引用;

static局部變量和普通局部變量有什么區(qū)別:static局部變量只被初始化一次,

下一次依據(jù)上一次結(jié)果值;

static函數(shù)與普通函數(shù)有什么區(qū)別:static函數(shù)在內(nèi)存中只有一份,普通函數(shù)

在每個(gè)被調(diào)用中維持一份拷貝

8、程序的局部變量存在于(棧)中,全局變量存在于(靜態(tài)區(qū))中,動(dòng)態(tài)

申請(qǐng)數(shù)據(jù)存在于(堆)中。

9、設(shè)有以下說明和定義:

typedefunion{longi;intk[5];charc;}DATE;

structdata{intcat;DATEcow;doubledog;}too;

DATEmax;

則語句printf('1%dn,sizeof(structdate)+sizeof(max));的執(zhí)行結(jié)果是:__52

答:DATE是一個(gè)union,變量公用空間.里面最大的變量類型是int[5],占

用20個(gè)字節(jié).所以它的大小是20

data是一個(gè)struct,每個(gè)變量分開占用空間.依次為int4+DATE20+double8=

32.

所以結(jié)果是20+32=52.

當(dāng)然…在某些16位編輯器下,int可能是2字節(jié),那么結(jié)果是int2+DATE10+

double8=20

10、隊(duì)列和棧有什么區(qū)別?

隊(duì)列先進(jìn)先出,棧后進(jìn)先出

11、寫出下列代碼的輸出內(nèi)容

#include<stdio.h>

intinc(inta)

(

retum(++a);

)

intmulti(int*a,int*b,int*c)

(

return(*c=*a**b);

)

typedefint(FUNCl)(intin);

typedefint(FUNC2)(int*,int*,int*);

voidshow(FUNC2fun,intargl,int*arg2)

(

INCp=&inc;

inttemp=p(argl);

fun(&temp,&arg1,arg2);

printf(n%d\nn,*arg2);

main()

inta;

show(multi,10,&a);

return0;

)

答:110

12、請(qǐng)找出下面代碼中的所以錯(cuò)誤

說明:以下代碼是把一個(gè)字符串倒序,如“abed”倒序后變?yōu)椤癲eba”

1、#include',string.hn

2、main()

3、(

4、char*src=*'hello,world";

5、char*dest=NULL;

6、intlen=strlen(src);

7、dest=(char*)malloc(len);

8、char*d=dest;

9、char*s=src[len];

10>while(len—!=0)

11、d++=s--;

12、printf(n%s,r,dest);

13、return0;

14、)

答:

方法1:

intmain()

(

char*sre="hello,world'1;

intlen=strlen(src);

char*dest=(char*)malloc(len+l);〃要為\0分配?個(gè)空間

char*d=dest;

char*s=&src[len-l];〃指向最后一個(gè)字符

while(len—!=0)

*d++=*s--;

*d=0;〃尾部要加\0

printf(,,%s\n,,,dest);

free(dest);//使用完,應(yīng)當(dāng)釋放空間,以免造成內(nèi)存匯泄露

return0;

方法2:

#include<stdio.h>

#include<string.h>

main()

(

charstr[]=nhello,worldn;

intlen=strlen(str);

chart;

for(inti=0;i<len/2;i++)

(

t=str[i];

str[i]=str[len-i-l];str[len-i-l]=t;

)

printf("%s",str);

return0;

}

1.-1,2,7,28,,126請(qǐng)問28和126中間那個(gè)數(shù)是什么?為什么?

第一題的答案應(yīng)該是4A3-1=63

規(guī)律是M3-l(當(dāng)n為偶數(shù)0,2,4)23+1(當(dāng)n為奇數(shù)1,3,5)

答案:63

2.用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列的功能?要求給出算法和思路!

設(shè)2個(gè)棧為A,B,一開始均為空.

入隊(duì):

將新元素push入棧A;

出隊(duì):

(1)判斷棧B是否為空;

(2)如果不為空,則將棧A中所有元素依次pop出并push到棧B;

⑶將棧B的棧頂元素pop出;

這樣實(shí)現(xiàn)的隊(duì)列入隊(duì)和出隊(duì)的平攤復(fù)雜度都還是0(1),比上面的兒種方法要

好。

3.在c語言庫函數(shù)中將一個(gè)字符轉(zhuǎn)換成整型的函數(shù)是atool()嗎,這個(gè)函數(shù)的原型

是什么?

函I明(名,atol

功能:把字符串轉(zhuǎn)換成長整型數(shù)

用法:longatol(constchar*nptr);

程序例:

#include<stdlib.h>

#include<stdio.h>

intmain(void)

(

long1;

char*str="98765432";

I=atol(lstr);

printf("string=%sinteger=%ld\n",str,1);

return(0);

)

13.對(duì)于一個(gè)頻繁使用的短小函數(shù),在C語言中應(yīng)用什么實(shí)現(xiàn),在C++中應(yīng)用什

么實(shí)現(xiàn)?

c用宏定義,C++用inline

17徽件測(cè)試都有那些種類?

黑盒:針對(duì)系統(tǒng)功能的測(cè)試

白合:測(cè)試函數(shù)功能,各函數(shù)接口

18.確定模塊的功能和模塊的接口是在軟件設(shè)計(jì)的那個(gè)隊(duì)段完成的?

概要設(shè)計(jì)階段

19.

enumstring

{

xl,

x2,

x3=10,

x4,

x5,

}x;

問x=0x801005,0x8010f4;

20.

unsignedchar*pl;

unsignedlong*p2;

pl=(unsignedchar*)0x801000;

p2=(unsignedlong*)0x810000;

請(qǐng)問pl+5=;

p2+5=;

25.請(qǐng)問下面程序有什么錯(cuò)誤?

inta[60][250][1000],i,j,k;

for(k=0;k<=1000;k++)

for(j=0;j<250;j++)

for(i=0;i<60;i++)

a[i]U][k]=O;

把循環(huán)語句內(nèi)外換一下

26.

#defineMax_CB500

voidLmiQueryCSmd(StructMSgCB*pmsg)

|

unsignedcharucCmdNum;

for(ucCmdNum=0;ucCmdNum<Max_CB;ucCmdNum++)

死循環(huán)

27.以下是求一個(gè)數(shù)的平方的程序,請(qǐng)找出錯(cuò)誤:

#defineSQUARE(a)((a)*(a))

inta=5;

intb;

b=SQUARE(a++);

28.

typedefunsignedcharBYTE

intexamply_fun(BYTEgt_len;BYTE*gt_code)

(

BYTE*gt_buf;

gt_buf=(BYTE*)MALLOC(Max_GT_Length);

if(gt_len>Max_GT_Length)

returnGT_Length_ERROR;

C語言面試題大匯總之華為面試題

Eddy整理

1、局部變量能否和全局變量重名?

答:能,局部會(huì)屏蔽全局。要用全局變量,需要使用"::";局部變量可以與全局變量同名,在函數(shù)內(nèi)引用

這個(gè)變量時(shí),會(huì)用到同名的局部變量,而不會(huì)用到全局變量。對(duì)于有些編譯器而言,在同個(gè)函數(shù)內(nèi)可以

定義多個(gè)同名的局部變量,比如在兩個(gè)循環(huán)體內(nèi)都定義一個(gè)同名的局部變量,而那個(gè)局部變量的作用域就

在那個(gè)循環(huán)體內(nèi)。

2、如何引用個(gè)已經(jīng)定義過的全局變量?

答:extern可以用引用頭文件的方式,也可以用extern關(guān)鍵字,如果用引用頭文件方式來引用某個(gè)在

頭文件中聲明的全局變理,假定你將那個(gè)編寫錯(cuò)了,那么在編譯期間會(huì)報(bào)錯(cuò),如果你用extern方式引用

時(shí),假定你犯了同樣的錯(cuò)誤,那么在編譯期間不會(huì)報(bào)錯(cuò),而在連接期間報(bào)錯(cuò)。

3、全局變量可不可以定義在可被多個(gè).C文件包含的頭文件中?為什么?

答:可以,在不同的C文件中以static形式來聲明同名全局變量??梢栽诓煌腃文件中聲明同名

的全局變量,前提是其中只能有一個(gè)C文件中對(duì)此變量賦初值,此時(shí)連接不會(huì)出錯(cuò).

4、請(qǐng)寫出下列代碼的輸出內(nèi)容

#include<stdio.h>

intmain(void)

{

inta,b,c,d;

a=10;

b=a++;

c=++a;

d=10*a++;

printf("b.c,d:%d,%d,%d",b,c,d);

return0;

}

答:10,12,120

5,static全局變量與普通的全局變量有什么區(qū)別?static局部變量和普通局部變量有什么區(qū)別?static函

數(shù)與普通函數(shù)有什么區(qū)別?

答:1)全局變量(外部變量)的說明之前再冠以static就構(gòu)成了靜態(tài)的全局變量。全局變量本身就是靜態(tài)

存儲(chǔ)方式,靜態(tài)全局變量當(dāng)然也是靜態(tài)存儲(chǔ)方式。這兩者在存儲(chǔ)方式上并無不同。這兩者的區(qū)別在于非

靜態(tài)全局變量的作用域是整個(gè)源程序,當(dāng)一個(gè)源程序由多個(gè)源文件組成時(shí),非靜態(tài)的全局變量在各個(gè)源文

件中都是有效的。而靜態(tài)全局變量則限制了其作用域,即只在定義該變量的源文件內(nèi)有效,在同一源程

序的其它源文件中不能使用它。由于靜態(tài)全局變量的作用域局限于一個(gè)源文件內(nèi),只能為該源文件內(nèi)的函

數(shù)公用,因此可以避免在其它源文件中引起錯(cuò)誤。

2)從以上分析可以看出,把局部變量改變?yōu)殪o態(tài)變量后是改變了它的存儲(chǔ)方式即改變了它的生存期。

把全局變量改變?yōu)殪o態(tài)變量后是改變了它的作用域,限制了它的使用范圍.3)static

函數(shù)與普通函數(shù)作用域不同,僅在本文件。只在當(dāng)前源文件中使用的函數(shù)應(yīng)該說明為內(nèi)部函數(shù)(static),內(nèi)

部函數(shù)應(yīng)該在當(dāng)前源文件中說明和定義。對(duì)于可在當(dāng)前源文件以外使用的函數(shù),應(yīng)該在一個(gè)頭文件中說明,

要使用這些函數(shù)的源文件要包含這個(gè)頭文件

綜上所述:

static全局變量與普通的全局變量有什么區(qū)別:

static全局變量只初使化一次,防止在其他文件單元中被引用;

static局部變量和普通局部變量有什么區(qū)別:

static局部變量只被初始化一次,下一次依據(jù)上一次結(jié)果值:

static函數(shù)與普通函數(shù)有什么區(qū)別:

static函數(shù)在內(nèi)存中只有一份,普通函數(shù)在每個(gè)被調(diào)用中維持一份拷貝

6、程序的局部變量存在于(棧)中,全局變量存在于(靜態(tài)區(qū))中,動(dòng)態(tài)申請(qǐng)數(shù)據(jù)存在于(堆)中。

7、設(shè)有以下說明和定義:

typedefunion

(

longi;

intk[5];

charc;

}DATE;

structdata

(

intcat;

DATEcow;

doubledog;

}too;

DATEmax;

則語句printf("%d",sizeof(structdata)+sizeof(max));的執(zhí)行結(jié)果是:___52____

考點(diǎn):區(qū)別struct與union.(一般假定在32位機(jī)器I.)

答:DATE是一個(gè)union,變量公用空間.里面最大的變量類型是int[5],占用20個(gè)字節(jié).所以它的大小

是20.data是一個(gè)struct,每個(gè)變量分開占用空間.依次為int4+DATE20+doubles=32.所以結(jié)

果是20+32=52.當(dāng)然…在某些16位編輯器F,int可能是2字節(jié),那么結(jié)果是int2+DATE10+

double8=20

8、隊(duì)列和棧有什么區(qū)別?

隊(duì)列先進(jìn)先出,棧后進(jìn)先出

9、寫出下列代碼的輸出內(nèi)容

#include<stdio.h>

intinc(inta)

{return(++a);}

intmulti(int*a,int*b,int*c)

{return(*c=*a**b);}

typedefint(FUNC1)(intin);

typedefint(FUNC2)(int*,int*,int*);

voidshow(FUNC2fun,intarg1,int*arg2)

FUNC1p=&inc;

inttemp=p(arg1);

fun(&temp,&arg1,arg2);

printf("%dn",*arg2);

)

main()

(

inta;〃局部變量a為。;

show(multi,10,&a);

return0;

)

答:110

10、請(qǐng)找出下面代碼中的所有錯(cuò)誤(題目不錯(cuò),值得?看)

說明:以下代碼是把一個(gè)字符串倒序,如“abed”倒序后變?yōu)椤癲cba”

#include"string.h"

main()

{

char*src="hello,world";

char*dest=NULL;

intlen=strlen(src);

dest=(char*)malloc(len);

char*d=dest;

char*s=src[len];

while(len--!=0)

d++=s--;

printf(n%s",dest);

return0;

)

答:

方法1:一共有4個(gè)錯(cuò)誤;

intmain()

{

char*sre=Hhello,world'1;

intlen=strlen(src);

char*dest=(char*)malloc(len+1);〃要為分配一個(gè)空間char*d=dest;

char*s=&src[len-1];〃指向最后一個(gè)字符

while(len--!=0)

*d++=*s--;

*d=0;〃尾部要加'\0'

printf("%sn,',dest);

free(dest);//使用完,應(yīng)當(dāng)釋放空間,以免造成內(nèi)存匯泄露

dest=NULL;〃防止產(chǎn)生野指針

return0;

)

方法2:(方法?需要額外的存儲(chǔ)空間,效率不高.)不錯(cuò)的想法

#include<stdio.h>

#include<string.h>

main()

{

charstr[]=nhello,world";

intlen=strlen(str);

chart;

for(inti=0;i<len/2;i++)

(

t=str[i];

str[i]=str[len-i-1];〃小心一點(diǎn)

str[len-i-1]=t;

)

printf(r,%s",str);

return0;

)

11.對(duì)于一個(gè)頻繁使用的短小函數(shù),在C語言中應(yīng)用什么實(shí)現(xiàn),在C++中應(yīng)用什么實(shí)現(xiàn)?

c用宏定義,C++用inline

12.直接鏈接兩個(gè)信令點(diǎn)的一組鏈路稱作什么?

PPP點(diǎn)到點(diǎn)連接

13.接入網(wǎng)用的是什么接口?

V5接口

14.voip都用了那些協(xié)議?

H.323協(xié)議簇、SIP協(xié)議、Skype協(xié)議、H.248和MGCP協(xié)議

15.軟件測(cè)試都有那些種類?

黑盒:針對(duì)系統(tǒng)功能的測(cè)試

白盒:測(cè)試函數(shù)功能,各函數(shù)接口

16.確定模塊的功能和模塊的接口是在軟件設(shè)計(jì)的那個(gè)隊(duì)段完成的?

概要設(shè)計(jì)階段

17.

unsignedchar*p1;

unsignedlong*p2;

p1=(unsignedchar*)0x801000;

p2=(unsignedlong*)0x810000;

請(qǐng)問p1+5=;

p2+5=;

答案:0x801005(相當(dāng)于加上5位)Ox案0014(相當(dāng)于加上20位);

選擇題:

21.Ethternet鏈接到Internet用到以下那個(gè)協(xié)議?D

A.HDLC;B.ARP;C.UDP;D.TCP;E.lD

22.屬于網(wǎng)絡(luò)層協(xié)議的是:(BC)

A.TCP;B.IP;C.ICMP;D.X.25

23.Windows消息調(diào)度機(jī)制是:(C)

A.指令隊(duì)歹iJ;B.指令堆棧;C.消息隊(duì)歹U;D.消息堆棧;

找錯(cuò)題:

25.請(qǐng)問下面程序有什么錯(cuò)誤?

inta[60][250][1000],i,j,k;

for(k=O;kMax_GT_Length)

{returnGT_Length_ERROR;

}.……}

答:死循環(huán)〃

問答題:

29.IPPhone的原理是什么?

IP電話(又稱IPPHONE或VoIP)是建立在IP技術(shù)上的分組化、數(shù)字化傳輸技術(shù),其基本原理是:

通過語音壓縮算法對(duì)語音數(shù)據(jù)進(jìn)行壓縮編碼處理,然后把這些語音數(shù)據(jù)按IP等相關(guān)協(xié)議進(jìn)行打包,經(jīng)過IP

網(wǎng)絡(luò)把數(shù)據(jù)包傳輸?shù)浇邮盏?,再把這些語音數(shù)據(jù)包串起來,經(jīng)過解碼解壓處理后,恢復(fù)成原來的語音信號(hào),從

而達(dá)到由IP網(wǎng)絡(luò)傳送語音的目的。

30.TCP/IP通信建立的過程怎樣,端口有什么作用?

三次握手,確定是呱個(gè)應(yīng)用程序使用該協(xié)議

31.1號(hào)信令和7號(hào)信令有什么區(qū)別,我國某前廣泛使用的是那一種?

1號(hào)信令接續(xù)慢,但是穩(wěn)定,可靠。

7號(hào)信令的特點(diǎn)是:信令速度快,具有提供大量信令的潛力,具有改變和增加信令的靈活性,便于開放

新業(yè)務(wù),在通話時(shí)可以隨意處理信令,成本低。目前得到廣泛應(yīng)用。

32.列舉5種以上的電話新業(yè)務(wù)

如“鬧鐘服務(wù)”、“免干擾服務(wù)”、“熱線服務(wù)”、“轉(zhuǎn)移呼叫”、“遇忙回叫"、"缺席用戶服務(wù)”、“追杳惡意呼叫”、

“三方通話"、“會(huì)議電話"、"呼出限制"、“來電顯示"、"虛擬網(wǎng)電話”等

四.找錯(cuò)題:

1.請(qǐng)問下面程序有什么錯(cuò)誤?

inta[60][250][1000],i,j,k;

for(k=0;k<=1000;k++)

for(j=0;j<250;j++)

for(i=0;i<60;i++)

a[i][j][k]=O;

答:把循環(huán)語句內(nèi)外換一下

2.#defineMax_CB500

voidLmiQueryCSmd(StructMSgCB*pmsg)

{

unsignedcharucCmdNum;

for(ucCmdNum=0;ucCmdNum<Max_CB;ucCmdNum++)

答:死循環(huán),unsignedint的取值范圍是0~255

3.以下是求?個(gè)數(shù)的平方的程序,請(qǐng)找出錯(cuò)誤:

#defineSQUARE(a)((a)*(a))

inta=5;

intb;

b=SQUARE(a++);

答:結(jié)果與編譯器相關(guān),得到的可能不是平方值.

微軟亞洲技術(shù)中心的面試題?。?!

1.進(jìn)程和線程的差別。

答:線程是指進(jìn)程內(nèi)的一個(gè)執(zhí)行單元,也是進(jìn)程內(nèi)的可調(diào)度實(shí)體.

與進(jìn)程的區(qū)別:

(1)調(diào)度:線程作為調(diào)度和分配的基本單位,進(jìn)程作為擁有資源的基本單位

(2)并發(fā)性:不僅進(jìn)程之間可以并發(fā)執(zhí)行,同?個(gè)進(jìn)程的多個(gè)線程之間也可并發(fā)執(zhí)行

(3)擁有資源:進(jìn)程是擁有資源的一個(gè)獨(dú)立單位,線程不擁有系統(tǒng)資源,但可以訪問隸屬于進(jìn)程的資源.

(4)系統(tǒng)開銷:在創(chuàng)建或撤消進(jìn)程時(shí),由于系統(tǒng)都要為之分配和回收資源,導(dǎo)致系統(tǒng)的開銷明顯大于創(chuàng)建或

撤消線程時(shí)的開銷。

2.測(cè)試方法

答:人工測(cè)試:個(gè)人復(fù)查、抽查和會(huì)審

機(jī)器測(cè)試:黑盒測(cè)試和白盒測(cè)試

3.Heap與stack的差別。

答:Heap是堆,stack是棧。

Stack的空間由操作系統(tǒng)自動(dòng)分配/釋放,Heap上的空間手動(dòng)分配/釋放。

Stack空間有限,Heap是很大的自由存儲(chǔ)區(qū)

C中的malloc函數(shù)分配的內(nèi)存空間即在堆上,C++中對(duì)應(yīng)的是new操作符。

程序在編譯期對(duì)變量和函數(shù)分配內(nèi)存都在棧上進(jìn)行,且程序運(yùn)行過程中函數(shù)調(diào)用時(shí)參數(shù)的傳遞也在棧上進(jìn)

4.Windows下的內(nèi)存是如何管理的?

分頁管理

8.談?wù)処A32下的分頁機(jī)制

小頁(4K)兩級(jí)分頁模式,大頁(4M)一級(jí)

9.給兩個(gè)變量,如何找出一個(gè)帶環(huán)單鏈表中是什么地方出現(xiàn)環(huán)的?

一個(gè)遞增一,一個(gè)遞增二,他們指向同一個(gè)接點(diǎn)時(shí)就是環(huán)出現(xiàn)的地方

10.在IA32中一共有多少種辦法從用戶態(tài)跳到內(nèi)核態(tài)?

通過調(diào)用門,從ring3到ring。,中斷從ring3到ring。,進(jìn)入vm86等等

11.如果只想讓程序有一個(gè)實(shí)例運(yùn)行,不能運(yùn)行兩個(gè)。像winamp?樣,只能開一個(gè)窗口,怎樣實(shí)現(xiàn)?

用內(nèi)存映射或全局原子(互斥變量)、查找窗口句柄..

FindWindow,互斥,寫標(biāo)志到文件或注冊(cè)表,共享內(nèi)存。.

12.如何截取鍵盤的響應(yīng),讓所有的宣變成'b’?

答:鍵盤鉤子SetWindowsHookEx

14.存儲(chǔ)過程是什么?有什么用?有什么優(yōu)點(diǎn)?

答:我的理解就是一堆sql的集合,可以建立非常復(fù)雜的查詢,編譯運(yùn)行,所以運(yùn)行一次后,以后再運(yùn)行

速度比單獨(dú)執(zhí)行SQL快很多

15.Template有什么特點(diǎn)?什么時(shí)候用?

答:Template可以獨(dú)立于任何特定的類型編寫代碼,是泛型編程的基礎(chǔ).

當(dāng)我們編寫的類和函數(shù)能夠多態(tài)的用于跨越編譯時(shí)不相關(guān)的類型時(shí),用Template.

模板主要用于STL中的容器,算法,迭代器等以及模板元編程.

(C++的template是實(shí)現(xiàn)在摩設(shè)計(jì)和嵌入式設(shè)計(jì)中的關(guān)鍵。

template能實(shí)現(xiàn)抽象和效率的結(jié)合;同時(shí)template還能有效地防止代碼膨脹)

16.談?wù)刉indowsDNA結(jié)構(gòu)的特點(diǎn)和優(yōu)點(diǎn)。

答:WindowsDistributedinterNetApplicationArchitecture(Windows分布式應(yīng)用結(jié)構(gòu),簡(jiǎn)稱

WindowsDNA)是微軟創(chuàng)建新?代高適應(yīng)性商業(yè)解決方案的框架,它使公司能夠充分地挖掘數(shù)字神經(jīng)系

統(tǒng)的優(yōu)點(diǎn)。WindowsDNA是第一個(gè)將Internet、客戶/服務(wù)器、和用于計(jì)算的PC模型結(jié)合并集成在一

起的為新一類分布式計(jì)算方案而設(shè)計(jì)的應(yīng)用軟件體系結(jié)構(gòu)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論