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