- 相關(guān)推薦
IT公司筆試面試題系列(九)
1.一個(gè)類(lèi)有基類(lèi)、內部有一個(gè)其他類(lèi)的成員對象,構造函數的執行順序是怎樣的。
答:先執行基類(lèi)的(如果基類(lèi)當中有虛基類(lèi),要先執行虛基類(lèi)的,其他基類(lèi)則按照聲明派生類(lèi)時(shí)的順序依次執行),再執行成員對象的,最后執行自己的。
2.在UML 中,聚合(aggregation)和組合(composition)有什么區別
答案:聚合關(guān)系更強,類(lèi)似于pages 和book 的關(guān)系;組合關(guān)系要弱,類(lèi)似于books和bookshelf 的關(guān)系。
3.C#和C++除了語(yǔ)法上的差別以外,有什么不同的地方?
答案:(C#我只是了解,不是很精通)
(1) c#有垃圾自動(dòng)回收機制,程序員不用擔心對象的回收。(2)c#嚴禁使用指針,只能處理對象。如果希望使用指針,則僅可在unsafe 程序塊中能使用指針。(3)c#只能單繼承。(4)必須通過(guò)類(lèi)名訪(fǎng)問(wèn)靜態(tài)成員。不能像C++中那樣,通過(guò)對象訪(fǎng)問(wèn)靜態(tài)成員。(5)在子類(lèi)中覆蓋父類(lèi)的虛函數時(shí)必須用關(guān)鍵字override,覆蓋父類(lèi)的方法要用關(guān)鍵字new
4.ADO.net 和ADO 的區別?
答案:實(shí)際上除了“能夠讓?xiě)贸绦蛱幚泶鎯τ贒BMS 中的數據“這一基本相似點(diǎn)外,兩者沒(méi)有太多共同之處。但是ADO 使用OLE DB 接口并基于微軟的COM 技術(shù),而ADO.NET 擁有自己的ADO.NET 接口并且基于微軟的.NET 體系架構。眾所周知.NET 體系不同于COM 體系,ADO.NET 接口也就完全不同于A(yíng)DO和OLE DB 接口,這也就是說(shuō)ADO.NET 和ADO是兩種數據訪(fǎng)問(wèn)方式。ADO.net 提供對XML 的支持。
5.New 與malloc free 的區別
答案:用malloc 函數不能初始化對象,new 會(huì )調用對象的構造函數。Delete 會(huì )調用對象的destructor,而free 不會(huì )調用對象的destructor.
6.#define DOUBLE(x) x+x
i = 5*DOUBLE(10); i 是多少?正確的聲明是什么?
答案:i 為60。正確的聲明是#define DOUBLE(x) (x+x)
7.有哪幾種情況只能用intialization list 而不能用assignment?
答案:當類(lèi)中含有const、reference 成員變量;基類(lèi)的構造函數都需要參數;類(lèi)中含有其他類(lèi)的成員對象,而該類(lèi)的構造函數都需要參數。
8.C++是不是類(lèi)型安全的?
答案:不是。兩個(gè)不同類(lèi)型的指針之間可以強制轉換。C#是類(lèi)型安全的。
9.main 函數執行以前,還會(huì )執行什么代碼?
答案:全局對象的構造函數會(huì )在main 函數之前執行。
10.比較一下C++中static_cast 和 dynamic_cast 的區別。
dynamic_casts在幫助你瀏覽繼承層次上是有限制的。它不能被用于缺乏虛函數的類(lèi)型上,它被用于安全地沿著(zhù)類(lèi)的繼承關(guān)系向下進(jìn)行類(lèi)型轉換。如你想在沒(méi)有繼承關(guān)系的類(lèi)型中進(jìn)行轉換,你可能想到static_cast
11.在8086 匯編下,邏輯地址和物理地址是怎樣轉換的?
答案:通用寄存器給出的地址,是段內偏移地址,相應段寄存器地址*10H+通用寄存器內地址,就得到了真正要訪(fǎng)問(wèn)的地址。
12.類(lèi)成員函數的重載、覆蓋和隱藏區別
答案:
成員函數被重載的特征:
(1)相同的范圍(在同一個(gè)類(lèi)中);
(2)函數名字相同;
(3)參數不同;
(4)virtual 關(guān)鍵字可有可無(wú)。
覆蓋是指派生類(lèi)函數覆蓋基類(lèi)函數,特征是:
(1)不同的范圍(分別位于派生類(lèi)與基類(lèi));
(2)函數名字相同;
(3)參數相同;
(4)基類(lèi)函數必須有virtual 關(guān)鍵字。
“隱藏”是指派生類(lèi)的函數屏蔽了與其同名的基類(lèi)函數,規則如下:
(1)如果派生類(lèi)的函數與基類(lèi)的函數同名,但是參數不同。此時(shí),不論有無(wú)virtual關(guān)鍵字,基類(lèi)的函數將被隱藏(注意別與重載混淆)。
(2)如果派生類(lèi)的函數與基類(lèi)的函數同名,并且參數也相同,但是基類(lèi)函數沒(méi)有virtual 關(guān)鍵字。此時(shí),基類(lèi)的函數被隱藏(注意別與覆蓋混淆)
13.如何判斷一段程序是由C 編譯程序還是由C++編譯程序編譯的?
答案:
#ifdef __cplusplus
cout<<"c++";
#else
cout<<"c";
#endif
14.數組a[N],存放了1至N-1個(gè)數,其中某個(gè)數重復一次。寫(xiě)一個(gè)函數,找出被重復的數字.時(shí)間復雜度必須為o(N)函數原型:int do_dup(int a[],int N)
答案:方法1:如果數就是1-N-1,那么求出a[N]的和,然后減去1-N-1就行了。(確定數字1-N)
S = N * (N-1) / 2;
int i;
int s = 0;
for(i=0;i{
s += a[i];
}
int res = s - S;
方法2.a[]中的某元素a[i]看做是pi[]數組的下標,元素a[i]存儲到對應數組下標pi[a[i]]的地址中
#include
#define N 10
void main()
{
int a[N]={1,2,3,4,5,6,7,7,8,9};
int pi[N]={0};
int key=0;
for(int i=0;i{ if(pi[a[i]]==0)
pi[a[i]]=a[i];
else
{ key=a[i];
break;
}
}
printf("多余的數字是%d\n",key);
}
15.一語(yǔ)句實(shí)現x是否為2的若干次冪的判斷
位運算
int i = 512; cout << boolalpha << ((i & (i - 1)) ? false : true) << endl;
16.什么是預編譯?何時(shí)需要預編譯?
1、總是使用不經(jīng)常改動(dòng)的大型代碼體。
2、程序由多個(gè)模塊組成,所有模塊都使用一組標準的包含文件和相同的編譯選項。在這種情況下,可以將所有包含文件預編譯為一個(gè)預編譯頭。
【IT公司筆試面試題系列九】相關(guān)文章:
IT公司筆試面試題系列07-12
華為硬件筆試、面試題07-11
華為C/C++筆試題系列二07-11
公司招聘筆試題目有哪些07-10
寶馬公司面試題07-11
世界最佳公司面試題07-11