版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五電影制作保密合同范本6篇
- 二零二五版木材行業(yè)碳排放權(quán)交易合同范本8篇
- 2025年個(gè)人住宅房產(chǎn)抵押擔(dān)保合同范本
- 課題申報(bào)參考:內(nèi)感受干預(yù)促進(jìn)青少年情緒能力的神經(jīng)基礎(chǔ)
- 課題申報(bào)參考:民事訴訟法的基礎(chǔ)理論和基本制度研究
- 2025年度住宅小區(qū)停車位共有產(chǎn)權(quán)轉(zhuǎn)讓合同范本
- 2025年個(gè)人房產(chǎn)繼承權(quán)轉(zhuǎn)讓合同范本2篇
- 2025版農(nóng)機(jī)具租賃與智能灌溉系統(tǒng)合同4篇
- 二零二五版美容美發(fā)院加盟店會(huì)員管理與服務(wù)合同4篇
- 2025年度高端建筑用熱鍍鋅鋼管采購合同3篇
- 臨床三基考試題庫(附答案)
- 合同簽訂執(zhí)行風(fēng)險(xiǎn)管控培訓(xùn)
- DB43-T 3022-2024黃柏栽培技術(shù)規(guī)程
- 九宮數(shù)獨(dú)200題(附答案全)
- 人員密集場(chǎng)所消防安全管理培訓(xùn)
- 《聚焦客戶創(chuàng)造價(jià)值》課件
- PTW-UNIDOS-E-放射劑量?jī)x中文說明書
- JCT587-2012 玻璃纖維纏繞增強(qiáng)熱固性樹脂耐腐蝕立式貯罐
- 保險(xiǎn)學(xué)(第五版)課件全套 魏華林 第0-18章 緒論、風(fēng)險(xiǎn)與保險(xiǎn)- 保險(xiǎn)市場(chǎng)監(jiān)管、附章:社會(huì)保險(xiǎn)
- 典范英語2b課文電子書
- 員工信息登記表(標(biāo)準(zhǔn)版)
評(píng)論
0/150
提交評(píng)論