|
|
IT公司筆試題總結(jié)(一)——北大青鳥(niǎo) |
已閱[3721]次[2012/10/17] |
|
內(nèi)容摘要: 隨著IT產(chǎn)業(yè)的迅速發(fā)展,學(xué)習(xí)IT專(zhuān)業(yè)人員的迅速增多,大量IT相關(guān)專(zhuān)業(yè)人才的流入職場(chǎng),使就業(yè)壓力不斷增大,下面北大青鳥(niǎo)為你總結(jié)了一些IT公司筆試題,希望對(duì)你的面試有幫助。
|
|
正文:
北大青鳥(niǎo)為你總結(jié)了一些IT公司筆試題
1. 引用與指針有什么區(qū)別? 1) 引用必須被初始化,指針不必。 2) 引用初始化以后不能被改變,指針可以改變所指的對(duì)象。 3) 不存在指向空值的引用,但是存在指向空值的指針。
2. 堆棧溢出一般是由什么原因?qū)е碌模?nbsp; 沒(méi)有回收垃圾資源。
3. 什么函數(shù)不能聲明為虛函數(shù)? constructor函數(shù)不能聲明為虛函數(shù)。
4. 寫(xiě)出float x 與“零值”比較的if語(yǔ)句。 if(x>0.000001&&x<-0.000001)
5. 不能做switch()的參數(shù)類(lèi)型是: switch的參數(shù)不能為實(shí)型
6. 頭文件中的 ifndef/define/endif干什么用? 預(yù)處理 答:防止頭文件被重復(fù)引用
7. #include <filename.h> 和 #include "filename.h" 有什么區(qū)別? 答: 對(duì)于#include <filename.h> ,編譯器從標(biāo)準(zhǔn)庫(kù)路徑開(kāi)始搜索filename.h 對(duì)于#include "filename.h" ,編譯器從用戶(hù)的工作路徑開(kāi)始搜索filename.h
8. 在C++ 程序中調(diào)用被 C 編譯器編譯后的函數(shù),為什么要加 extern “C”聲明? 答:函數(shù)和變量被C++編譯后在符號(hào)庫(kù)中的名字與C語(yǔ)言的不同,被extern "C"修飾的變量和函數(shù)是按照C語(yǔ)言方式編譯和連接的。由于編譯后的名字不同,C++程序不能直接調(diào)用C 函數(shù)。C++提供了一個(gè)C 連接交換指定符號(hào)extern“C”來(lái)解決這個(gè)問(wèn)題。
9.
char str1[] = "abc"; char str2[] = "abc";
const char str3[] = "abc"; const char str4[] = "abc";
const char *str5 = "abc"; const char *str6 = "abc";
char *str7 = "abc"; char *str8 = "abc";
cout << ( str1 == str2 ) << endl; cout << ( str3 == str4 ) << endl; cout << ( str5 == str6 ) << endl; cout << ( str7 == str8 ) << endl;
結(jié)果是:0 0 1 1
str1,str2,str3,str4是數(shù)組變量,它們有各自的內(nèi)存空間;而str5,str6,str7,str8是指針,它們指向相同的常量區(qū)域。
10.
main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); printf("%d,%d",*(a+1),*(ptr-1)); }
答:2,5
*(a+1)就是a[1],*(ptr-1)就是a[4], 執(zhí)行結(jié)果是2, 5。&a+1不是首地址+1,系統(tǒng)會(huì)認(rèn)為加一個(gè)a數(shù)組的偏移,是偏移了一個(gè)數(shù)組的大小(本例是5個(gè)int)。int *ptr=(int *)(&a+1); 則ptr實(shí)際是&(a[5]),也就是a+5
原因如下:
&a是數(shù)組指針,其類(lèi)型為 int (*)[5]; 而指針加1要根據(jù)指針類(lèi)型加上一定的值,不同類(lèi)型的指針+1之后增加的大小不同; a是長(zhǎng)度為5的int數(shù)組指針,所以要加 5*sizeof(int)。所以ptr實(shí)際是a[5]。但是prt與(&a+1)類(lèi)型是不一樣的(這點(diǎn)很重要),所以prt-1只會(huì)減去sizeof(int*)。a,&a的地址是一樣的,但意思不一樣,a是數(shù)組首地址,也就是a[0]的地址,&a是對(duì)象(數(shù)組)首地址,a+1是數(shù)組下一元素的地址,即a[1],&a+1是下一個(gè)對(duì)象的地址,即a[5]。
11. 交換兩個(gè)變量的值,不使用第三個(gè)變量。即a=3,b=5,交換之后a=5,b=3;
答:有兩種解法, 一種用算術(shù)算法, 一種用^(異或)
a = a + b; b = a - b; a = a - b;
or
a = a^b;// 只能對(duì)int,char.. b = a^b; a = a^b;
or
a ^= b ^= a;
12. 列舉幾種進(jìn)程的同步機(jī)制,并比較其優(yōu)缺點(diǎn)。 答:原子操作、信號(hào)量機(jī)制、自旋鎖、管程、會(huì)合、分布式系統(tǒng)
13. 進(jìn)程死鎖的原因和4個(gè)必要條件 答:資源競(jìng)爭(zhēng)及進(jìn)程推進(jìn)順序非法;互斥、請(qǐng)求保持、不可剝奪、環(huán)路
14. 要對(duì)絕對(duì)地址0x100000賦值,我們可以用(unsigned int*)0x100000 = 1234; 那么要是想讓程序跳轉(zhuǎn)到絕對(duì)地址是0x100000去執(zhí)行,應(yīng)該怎么做?
答:*((void (*)( ))0x100000 ) ( );
首先要將0x100000強(qiáng)制轉(zhuǎn)換成函數(shù)指針,即: (void (*)())0x100000。然后再調(diào)用它: *((void (*)())0x100000)(); 用typedef可以看得更直觀(guān)些: typedef void(*)() voidFuncPtr; *((voidFuncPtr)0x100000)();
15. unsigned char *p1; unsigned long *p2; p1=(unsigned char *)0x801000; p2=(unsigned long *)0x810000;
請(qǐng)問(wèn) p1+5=______; p2+5=______;
答案:801005;810014。不要忘記了這個(gè)是16進(jìn)制的數(shù)字,p2要加20變?yōu)?6進(jìn)制就是14
16、設(shè)有以下說(shuō)明和定義: typedef union {long i; int k[5]; char c;} DATE; struct data { int cat; DATE cow; double dog;} too; DATE max;
則語(yǔ)句 printf("%d",sizeof(too)+sizeof(max));的執(zhí)行結(jié)果是:______
答:DATE是一個(gè)union, 變量公用空間. 里面最大的變量類(lèi)型是int[5], 占用20個(gè)字節(jié). 所以它的大小是20 data是一個(gè)struct, 每個(gè)變量分開(kāi)占用空間. 依次為int4 + DATE20 + double8 = 32. 所以結(jié)果是 20 + 32 = 52.
當(dāng)然...在某些16位編輯器下, int可能是2字節(jié),那么結(jié)是 int2 + DATE10 + double8 = 20
學(xué)校地址:唐山市路北區(qū)華北煤炭醫(yī)學(xué)院西校區(qū)籃球場(chǎng)以南,北大青鳥(niǎo)(唐山弘基)授權(quán)培訓(xùn)中心。
乘車(chē)路線(xiàn):市內(nèi)乘7、16、61、41、114、35、77路等建設(shè)路沿線(xiàn)公交車(chē)均可到達(dá),煤醫(yī)道口站下車(chē)
聯(lián)系電話(huà):15132527389 13832811994
聯(lián)系QQ:736798197
全國(guó)統(tǒng)一咨詢(xún)熱線(xiàn): 400-808-8566
|
|
熱門(mén)標(biāo)簽: 唐山,北大青鳥(niǎo),IT |
|
|
網(wǎng)上報(bào)名(請(qǐng)?jiān)敿?xì)填寫(xiě)聯(lián)系方式,專(zhuān)業(yè)老師會(huì)盡快與你聯(lián)系,做詳細(xì)的解答!) |
|