歡迎來到 職場詞典網 , 一個優秀的職場知識學習網站!
職位類型:后臺研發
面試時間:2014校招
招聘公司:奇虎360
360二面主要是技術復試,以下我能回想起的面試題目,僅供大家參考。
一、C和C++
1、堆和棧的區別
堆和棧均是計算機硬件層面的上概念,操作系統給每個進程分配4G(前提32位)的虛擬內存空間。內存空間分別由堆、棧、數據段和代碼段組成。總體來說,堆和棧的區別主要有一下幾點:
1)存的值的類容
堆中的值一般是由new、malloc、realloc分配的,存值類容不固定。可以往里寫任何類型的值。棧里存的是函數返回地址,函數參數和局部變量等。
2)分配與管理
堆是動態分配的,需要程序員調用new、malloc等分配,調用delete,free等釋放。棧是由編譯器將源代碼編譯成一條條“push”“pop”指令,CPU執行到“push”就自動壓棧,執行到“pop”就自動彈棧。無需程序員管理。push、pop指令是編譯器自動生成的,無需顯示告訴其何時“push”何時“pop”,達到了自動管理
注意:堆是動態分配的(malloc、new、realloc),棧可以靜態分配也可以動態分配(alloca函數)
3)生長方式不同
棧是自頂向下增長,堆的增長方式有三種:首次適應、最佳適應和最差適應
4)是否產生碎片
棧不會產生碎片,堆會產生,尤其是頻繁分配和釋放的時候
5)空間大小不同:win32中,堆可達4G;VC中棧默認1M(可以修改)。
2、new和malloc的區別
new是C++里的運算符,而malloc是c里面的函數。C++之所以要引入new關鍵字是因為malloc是封裝好的庫函數,無法修改內部結構。但是,在C++里,如果不是內部數據類型,在絕大多數情況下分配內存的時候是要調用構造函數,釋放內存的時候要調用析構函數的(注意并非所有的類都會調用,一些極其簡單的類是沒有構造函數和析構函數的,分配方式和C完全一致)。由于malloc無法實現,因此C++里增加了new運算符。可以這么理解:new=malloc+構造函數。delete=free+析構函數。而且new和delete還可以申請數組和釋放數組,如newint[10],delete[]等。
free和delete如何知道應該釋放多少內存
答:malloc和new在分配內存的時候會在內存塊前添加一個頭部,通常是四字節(4G)或八字節(64位的,多少G就自己算吧),然后在freep或deletep的時候找到p前面四字節或八字節大小就知道應該釋放多少內存了。
3、寫個類A,聲明類A指針指向NULL,調用類A的方法會有什么后果,編譯通過嗎?
編譯可以通過,運行時會產生段錯誤(segmentationfault),指針指零的常見錯誤。
4、C++如何找到不同類型的成員方法?
什么是重載,相同參數不同返回值可以嗎?為什么?對不同函數編譯器會加什么參數?externC
C++的特性,C中沒有。函數的參數的類型、個數或者順序不同,因此在編譯的時候會編入參數信息,例如intf(inta,doubleb)編譯后會是f@int@double之類的,注意看沒有返回值信息在里面。加了externC以后,編譯器就按C標準編譯了,因此所有的重載函數就都成了一個樣子的。
5、多態在現實中的應用,多態的實現原理
問:sizeof空類為多少?為什么這么設計?
答:sizeof一個空類是一個字節(char)。
一個類能夠實例化,編譯器就需給它分配內存空間,來指示類實例的地址,這里編譯器默認分配了一個字節(如:char),以便標記可能初始化的類實例,同時使空類占用的空間也最少(即1字節)
問:sizeof一個只有一個虛函數的類等于多少?
答:等于sizeof(int),即一個指針的大小。一般32位系統下是4個字節。
問:AB兩個類各自有個虛函數,C繼承A和B,sizeof(C)為多少?
答:等于2*sizeof(int),即2倍指針大小,一般32位系統下是8個字節。
問:構造函數能聲明為虛函數嗎,析構函數呢?為什么?
6、關于地址對齊
64位是什么意思,CPU64位指的是什么,操作系統64位指的是什么?
為什么要有地址對齊,CPU如何取址?
哪些情況會遇到地址對齊,試舉一例?
二、進程與線程
兩者的區別
下一篇:面試結束后要做的事情 下一篇 【方向鍵 ( → )下一篇】
上一篇:行政專員面試技巧和注意事項 上一篇 【方向鍵 ( ← )上一篇】
快搜