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