IT公司筆試面試題
在日常學習和工作生活中,我們會經常接觸并使用試題,借助試題可以更好地檢查參考者的學習能力和其它能力。大家知道什么樣的試題才是好試題嗎?下面是小編幫大家整理的IT公司筆試面試題,希望能夠幫助到大家。
IT公司筆試面試題 1
1、ows程序的入口是哪里?寫出Windows消息機制的流程。
答案:Windows程序的入口是WinMain函數。消息機制:系統將會維護一個或多個消息隊列,所有產生的消息都會被放入或是插入隊列中。系統會在隊列中取出每一條消息,根據消息的接收句柄而將該消息發送給擁有該窗口的程序的消息循環。每一個運行的程序都有自己的.消息循環,在循環中得到屬于自己的消息并根據接收窗口的句柄調用相應的窗口過程。而在沒有消息時消息循環就將控制權交給系統。
2、如何定義和實現一個類的成員函數為回調函數?
答案:所謂的回調函數,就是預先在系統的對函數進行注冊,讓系統知道這個函數的存在,以后,當某個事件發生時,再調用這個函數對事件進行響應。
定義一個類的成員函數時在該函數前加CALLBACK即將其定義為回調函數,函數的實現和普通成員函數沒有區別。
3、C++里面是不是所有的動作都是main()引起的?如果不是,請舉例。
答案:不是,比如中斷引起的中斷處理不是直接由main()引起的,而是由外部事件引起的。
在運行c++程序時,通常從main()函數開始執行。因此如果沒有main(),程序將不完整,編譯器將指出未定義main()函數。
例外情況:如,在windows編程中,可以編寫一個動態連接庫(dll)模塊,這是其他windows程序可以使用的代碼。由于DLL模塊不是獨立的程序,因此不需要main()。用于專用環境的程序——如機器人中的控制器芯片——可能不需要main()。但常規的獨立程序都需要main()。
比如全局變量的初始化,就不是由main函數引起的但是這個初始化動作并不能為編譯器的斷點所截斷。
4、C++里面如何聲明const void f(void)函數為C程序中的庫函數?
答案:在該函數前添加extern “C”聲明。
IT公司筆試面試題 2
1.一個類有基類、內部有一個其他類的成員對象,構造函數的執行順序是怎樣的。
答:先執行基類的(如果基類當中有虛基類,要先執行虛基類的,其他基類則按照聲明派生類時的順序依次執行),再執行成員對象的,最后執行自己的。
2.在UML中,聚合(aggregation)和組合(composition)有什么區別
答案:聚合關系更強,類似于pages和book的關系;組合關系要弱,類似于books和bookshelf的關系。
3.C#和C++除了語法上的差別以外,有什么不同的地方?
答案:(C#我只是了解,不是很精通)
(1) c#有垃圾自動回收機制,程序員不用擔心對象的回收。
(2)c#嚴禁使用指針,只能處理對象。如果希望使用指針,則僅可在unsafe程序塊中能使用指針。
(3)c#只能單繼承。
(4)必須通過類名訪問靜態成員。不能像C++中那樣,通過對象訪問靜態成員。
(5)在子類中覆蓋父類的虛函數時必須用關鍵字override,覆蓋父類的方法要用關鍵字new
和ADO的區別?
答案:實際上除了“能夠讓應用程序處理存儲于DBMS中的數據“這一基本相似點外,兩者沒有太多共同之處。但是ADO使用OLE DB接口并基于微軟的COM技術,而擁有自己的接口并且基于微軟的體系架構。眾所周知體系不同于COM體系,接口也就完全不同于ADO和OLE DB接口,這也就是說和ADO是兩種數據訪問方式。 提供對XML的支持。
與malloc free的區別
答案:用malloc函數不能初始化對象,new會調用對象的構造函數。Delete會調用對象的destructor,而free不會調用對象的destructor.
6.#define DOUBLE(x) x+x
i = 5*DOUBLE(10); i是多少?正確的聲明是什么?
答案:i為60。正確的聲明是#define DOUBLE(x) (x+x)
7.有哪幾種情況只能用intialization list而不能用assignment?
答案:當類中含有const、reference成員變量;基類的.構造函數都需要參數;類中含有其他類的成員對象,而該類的構造函數都需要參數。
8.C++是不是類型安全的?
答案:不是。兩個不同類型的指針之間可以強制轉換。C#是類型安全的。
函數執行以前,還會執行什么代碼?
答案:全局對象的構造函數會在main函數之前執行。
10.比較一下C++中static_cast和dynamic_cast的區別。
dynamic_casts在幫助你瀏覽繼承層次上是有限制的。它不能被用于缺乏虛函數的類型上,它被用于安全地沿著類的繼承關系向下進行類型轉換。如你想在沒有繼承關系的類型中進行轉換,你可能想到static_cast
11.在8086匯編下,邏輯地址和物理地址是怎樣轉換的?
答案:通用寄存器給出的地址,是段內偏移地址,相應段寄存器地址*10H+通用寄存器內地址,就得到了真正要訪問的地址。
12.類成員函數的重載、覆蓋和隱藏區別
答案:
成員函數被重載的特征:
(1)相同的范圍(在同一個類中);
(2)函數名字相同;
(3)參數不同;
(4)virtual關鍵字可有可無。
覆蓋是指派生類函數覆蓋基類函數,特征是:
(1)不同的范圍(分別位于派生類與基類);
(2)函數名字相同;
(3)參數相同;
(4)基類函數必須有virtual關鍵字。
“隱藏”是指派生類的函數屏蔽了與其同名的基類函數,規則如下:
(1)如果派生類的函數與基類的函數同名,但是參數不同。此時,不論有無virtual關鍵字,基類的函數將被隱藏(注意別與重載混淆)。
(2)如果派生類的函數與基類的函數同名,并且參數也相同,但是基類函數沒有virtual關鍵字。此時,基類的函數被隱藏(注意別與覆蓋混淆)
13.如何判斷一段程序是由C編譯程序還是由C++編譯程序編譯的?
答案:
#ifdef __cplusplus
cout<<"c++";
#else
cout<<"c";
#endif
14.數組a[N],存放了1至N-1個數,其中某個數重復一次。寫一個函數,找出被重復的數字.時間復雜度必須為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("多余的數字是%dn",key);
}
15.一語句實現x是否為2的若干次冪的判斷
位運算
int i = 512; cout << boolalpha << ((i & (i - 1)) ? false : true) << endl;
16.什么是預編譯?何時需要預編譯?
1、總是使用不經常改動的大型代碼體。
2、程序由多個模塊組成,所有模塊都使用一組標準的包含文件和相同的編譯選項。在這種情況下,可以將所有包含文件預編譯為一個預編譯頭。
IT公司筆試面試題 3
1.多態類中的虛函數表是Compile-Time,還是Run-Time時建立的?
答案:虛擬函數表是在編譯期就建立了,各個虛擬函數這時被組織成了一個虛擬函數的入口地址的數組.而對象的隱藏成員--虛擬函數表指針是在運行期--也就是構造函數被調用時進行初始化的,這是實現多態的關鍵。
2.一個父類寫了一個virtual 函數,如果子類覆蓋它的函數不加virtual ,也能實現多態?
在子類的空間里,有沒有父類的這個函數,或者父類的私有變量? (華為筆試題)
答案:只要基類在定義成員函數時已經聲明了virtue關鍵字,在派生類實現的時候覆蓋該函數時,virtue關鍵字可加可不加,不影響多態的實現。子類的空間里有父類的所有變量(static除外)。
3.完成字符串拷貝可以使用 sprintf、strcpy 及 memcpy 函數,請問這些函數有什么區別,你喜歡使用哪個,為什么?
答案:這些函數的區別在于實現功能以及操作對象不同。
py 函數操作的對象是字符串,完成從源字符串到目的字符串的拷貝功能。
intf 函數操作的對象不限于字符串:雖然目的對象是字符串,但是源對象可以是字符串、也可以是任意基本類型的數據。這個函數主要用來實現(字符串或基本數據類型)向字符串的轉換功能。如果源對象是字符串,并且指定 %s 格式符,也可實現字符串拷貝功能。
py 函數顧名思義就是內存拷貝,實現將一個內存塊的內容復制到另一個內存塊這一功能。內存塊由其首地址以及長度確定。程序中出現的實體對象,不論是什么類型,其最終表現就是在內存中占據一席之地(一個內存區間或塊)。因此,memcpy 的操作對象不局限于某一類數據類型,或者說可適用于任意數據類型,只要能給出對象的起始地址和內存長度信息、并且對象具有可操作性即可。鑒于 memcpy 函數等長拷貝的特點以及數據類型代表的物理意義,memcpy 函數通常限于同種類型數據或對象之間的.拷貝,其中當然也包括字符串拷貝以及基本數據類型的拷貝。
對于字符串拷貝來說,用上述三個函數都可以實現,但是其實現的效率和使用的方便程度不同:
py 無疑是最合適的選擇:效率高且調用方便。
intf 要額外指定格式符并且進行格式轉化,麻煩且效率不高。
py 雖然高效,但是需要額外提供拷貝的內存長度這一參數,易錯且使用不便;并且如果長度指定過大的話(最優長度是源字符串長度 + 1),還會帶來性能的下降。其實 strcpy 函數一般是在內部調用 memcpy 函數或者用匯編直接實現的,以達到高效的目的。因此,使用 memcpy 和 strcpy 拷貝字符串在性能上應該沒有什么大的差別。
【IT公司筆試面試題】相關文章:
微軟10道筆試面試題目02-23
硬件巨頭Intel筆試面試題目02-10
各大互聯網公司2014前端筆試面試題(HTML篇)10-23
應聘微軟全程指導(筆試,面試,面試題)02-12
寶潔公司的筆試10-20
德國公司經典面試題03-05
Google公司經典面試題及答案02-23
證券公司筆試經驗10-17
電氣公司筆試題目10-18