騰訊公司c++面試小結(jié)
今天上午面試完騰訊,感覺(jué)項(xiàng)目部分被洗的不輕啊,實(shí)習(xí)項(xiàng)目被追問(wèn),網(wǎng)絡(luò)爬蟲(chóng)項(xiàng)目被逼問(wèn),一個(gè)問(wèn)題結(jié)一個(gè)問(wèn)題的深入,剛介紹完項(xiàng)目,就開(kāi)始問(wèn)為什么用epoll一步步深入了;理論基礎(chǔ)部分個(gè)人感覺(jué)回答感覺(jué)不錯(cuò),都回答上了,很基礎(chǔ),下面針對(duì)基礎(chǔ)部分總結(jié)一下,分享給大家,希望對(duì)大家有一些幫助。
1、malloc和new的區(qū)別
(1)操作對(duì)象不同:malloc/free是C++/C語(yǔ)言的標(biāo)準(zhǔn)庫(kù)函數(shù),new/delete是C++的運(yùn)算符。對(duì)于非內(nèi)部數(shù)據(jù)類(lèi)的對(duì)象而言,光用malloc/free無(wú)法滿(mǎn)足動(dòng)態(tài)對(duì)象的要求。
(2)返回類(lèi)型安全性:new操作符內(nèi)存分配成功時(shí),返回的是對(duì)象類(lèi)型的指針,類(lèi)型嚴(yán)格與對(duì)象匹配,無(wú)須進(jìn)行類(lèi)型轉(zhuǎn)換,故new是符合類(lèi)型安全性的操作符。而malloc內(nèi)存分配成功則是返回void * ,需要通過(guò)強(qiáng)制類(lèi)型轉(zhuǎn)換將void*指針轉(zhuǎn)換成我們需要的類(lèi)型。(int *)malloc(sizeof(int))
類(lèi)型安全很大程度上可以等價(jià)于內(nèi)存安全,類(lèi)型安全的代碼不會(huì)試圖方法自己沒(méi)被授權(quán)的內(nèi)存區(qū)域。關(guān)于C++的類(lèi)型安全性可說(shuō)的又有很多了。
(3)內(nèi)存分配失敗時(shí)的返回值:new內(nèi)存分配失敗時(shí),會(huì)拋出bac_alloc異常,比如反饋客戶(hù)請(qǐng)求處理內(nèi)存分配不足;malloc分配內(nèi)存失敗時(shí)返回NULL。
(4)是否需要指定內(nèi)存大?。菏褂胣ew操作符申請(qǐng)內(nèi)存分配時(shí)無(wú)須指定內(nèi)存塊的大小,編譯器會(huì)根據(jù)類(lèi)型信息自行計(jì)算,而malloc則需要顯式地指出所需內(nèi)存的尺寸。
例子:(int *)malloc(sizeof(int)),new int;
(5)是否調(diào)用構(gòu)造/析構(gòu)函數(shù):使用new操作符來(lái)分配對(duì)象內(nèi)存時(shí)會(huì)經(jīng)歷三個(gè)步驟:調(diào)用operator new 函數(shù)(對(duì)于數(shù)組是operator new[])分配一塊足夠大的原始的未命名的內(nèi)存空間以便存儲(chǔ)特定類(lèi)型的對(duì)象;編譯器運(yùn)行相應(yīng)的構(gòu)造函數(shù)以構(gòu)造對(duì)象,并為其傳入初值;編譯器運(yùn)行相應(yīng)的構(gòu)造函數(shù)以構(gòu)造對(duì)象,并為其傳入初值。使用delete操作符來(lái)釋放對(duì)象內(nèi)存時(shí)會(huì)經(jīng)歷兩個(gè)步驟:調(diào)用對(duì)象的析構(gòu)函數(shù);編譯器調(diào)用operator delete(或operator delete[])函數(shù)釋放內(nèi)存空間。
(6)對(duì)數(shù)組的處理:C++提供了new[]與delete[]來(lái)專(zhuān)門(mén)處理數(shù)組類(lèi)型: A*ptr=new A[10];//分配10個(gè)A對(duì)象,使用new[]分配的內(nèi)存必須使用delete[]進(jìn)行釋放:delete [] ptr;new對(duì)數(shù)組的支持體現(xiàn)在它會(huì)分別調(diào)用構(gòu)造函數(shù)函數(shù)初始化每一個(gè)數(shù)組元素,釋放對(duì)象時(shí)為每個(gè)對(duì)象調(diào)用析構(gòu)函數(shù)。注意delete[]要與new[]配套使用,不然會(huì)找出數(shù)組對(duì)象部分釋放的現(xiàn)象,造成內(nèi)存泄漏。至于malloc,它并不知道你在這塊內(nèi)存上要放的數(shù)組還是啥別的東西,反正它就給你一塊原始的內(nèi)存,在給你個(gè)內(nèi)存的地址就完事。所以如果要?jiǎng)討B(tài)分配一個(gè)數(shù)組的內(nèi)存,還需要我們手動(dòng)自定數(shù)組的大?。篿nt*ptr=(int*)malloc(sizeof(int));//分配一個(gè)10個(gè)int元素的數(shù)組。
(7)New/malloc是否可以互相調(diào)用:operator new /operator delete的實(shí)現(xiàn)可以基于malloc,而malloc的實(shí)現(xiàn)不可以去調(diào)用new。
(8)opeartor new /operator delete可以被重載(前提是自定義版本必須位于全局作用域或者類(lèi)作用域中),而malloc/free并不允許重載。
(9)malloc能直觀(guān)的重新分配內(nèi)存:使用malloc分配的內(nèi)存后,如果在使用過(guò)程中發(fā)現(xiàn)內(nèi)存不足,可以使用realloc函數(shù)進(jìn)行內(nèi)存重新分配實(shí)現(xiàn)內(nèi)存的擴(kuò)充。realloc先判斷當(dāng)前的指針?biāo)竷?nèi)存是否有足夠的連續(xù)空間,如果有,原地?cái)U(kuò)大可分配的內(nèi)存地址,并且返回原來(lái)的地址指針;如果空間不夠,先 按照新指定的大小分配空間,將原有數(shù)據(jù)從頭到尾拷貝到新分配的內(nèi)存區(qū)域,而后釋放原來(lái)的內(nèi)存區(qū) 域。new沒(méi)有這樣直觀(guān)的配套設(shè)施來(lái)擴(kuò)充內(nèi)存。
2、線(xiàn)程和進(jìn)程的區(qū)別
主要差別在于它們是不同的操作系統(tǒng)資源管理方式。進(jìn)程有獨(dú)立的地址空間,一個(gè)進(jìn)程崩潰后,在保護(hù)模式下不會(huì)對(duì)其它進(jìn)程產(chǎn)生影響,而線(xiàn)程只是一個(gè)進(jìn)程中的不同執(zhí)行路徑。線(xiàn)程有自己的堆棧和局部變量,但線(xiàn)程之間沒(méi)有單獨(dú)的地址空間,是共享地址空間,一個(gè)線(xiàn)程死掉就等于整個(gè)進(jìn)程死掉,所以多進(jìn)程的程序要比多線(xiàn)程的程序健壯,但在進(jìn)程切換時(shí),耗費(fèi)資源較大,效率要差一些。但對(duì)于一些要求同時(shí)進(jìn)行并且又要共享某些變量的并發(fā)操作,只能用線(xiàn)程,不能用進(jìn)程。
每個(gè)獨(dú)立的線(xiàn)程有一個(gè)程序運(yùn)行的入口、順序執(zhí)行序列和程序的出口。但是線(xiàn)程不能夠獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線(xiàn)程執(zhí)行控制。從邏輯角度來(lái)看,多線(xiàn)程的意義在于一個(gè)應(yīng)用程序中,有多個(gè)執(zhí)行部分可以同時(shí)執(zhí)行。但操作系統(tǒng)并沒(méi)有將多個(gè)線(xiàn)程看做多個(gè)獨(dú)立的應(yīng)用,來(lái)實(shí)現(xiàn)進(jìn)程的調(diào)度和管理以及資源分配。這就是進(jìn)程和線(xiàn)程的重要區(qū)別。
3、僵尸進(jìn)程
一個(gè)進(jìn)程使用fork創(chuàng)建子進(jìn)程,如果子進(jìn)程退出,而父進(jìn)程并沒(méi)有調(diào)用wait或waitpid獲取子進(jìn)程的狀態(tài)信息,那么子進(jìn)程的進(jìn)程描述符仍然保存在系統(tǒng)中。這種進(jìn)程稱(chēng)之為僵死進(jìn)程。
危害:如果進(jìn)程不調(diào)用wait / waitpid的話(huà), 那么保留的那段信息就不會(huì)釋放,其進(jìn)程號(hào)就會(huì)一直被占用,但是系統(tǒng)所能使用的進(jìn)程號(hào)是有限的,如果大量的產(chǎn)生僵死進(jìn)程,將因?yàn)闆](méi)有可用的進(jìn)程號(hào)而導(dǎo)致系統(tǒng)不能產(chǎn)生新的進(jìn)程. 此即為僵尸進(jìn)程的危害,應(yīng)當(dāng)避免。
處理方法:當(dāng)我們尋求如何消滅系統(tǒng)中大量的僵死進(jìn)程時(shí),答案就是把產(chǎn)生大 量僵死進(jìn)程的那個(gè)元兇槍斃掉(也就是通過(guò)kill發(fā)送SIGTERM或者SIGKILL信號(hào)啦)。槍斃了元兇進(jìn)程之后,它產(chǎn)生的僵死進(jìn)程就變成了孤兒進(jìn) 程,這些孤兒進(jìn)程會(huì)被init進(jìn)程接管,init進(jìn)程會(huì)wait()這些孤兒進(jìn)程,釋放它們占用的系統(tǒng)進(jìn)程表中的資源,這樣,這些已經(jīng)僵死的孤兒進(jìn)程 就能瞑目而去了。
孤兒進(jìn)程:一個(gè)父進(jìn)程退出,而它的一個(gè)或多個(gè)子進(jìn)程還在運(yùn)行,那么那些子進(jìn)程將成為孤兒進(jìn)程。孤兒進(jìn)程將被init進(jìn)程(進(jìn)程號(hào)為1)所收養(yǎng),并由init進(jìn)程對(duì)它們完成狀態(tài)收集工作。
4、重載與多態(tài)的區(qū)別
(1)重載是同名參數(shù)不同,通過(guò)參數(shù)來(lái)確定調(diào)用那個(gè)函數(shù);但是多態(tài)是同名同參數(shù),通過(guò)函數(shù)的實(shí)際類(lèi)型決定調(diào)用那個(gè)函數(shù);
(2)重載而言,在方法調(diào)用之前,編譯器就已經(jīng)確定了所要調(diào)用的方法,這稱(chēng)為“早綁定”或“靜態(tài)綁定”;
多態(tài)而言,只有等到方法調(diào)用的那一刻,編譯器才會(huì)確定所要調(diào)用的具體方法,這稱(chēng)為“晚綁定”或“動(dòng)態(tài)綁定”。
到此這篇關(guān)于騰訊公司c++面試小結(jié)的文章就介紹到這了,更多相關(guān)c++騰訊面試內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!
相關(guān)文章
這篇文章主要介紹了 C++ 面試題目(整理自??途W(wǎng)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2020-02-13華為校招 C++崗面試經(jīng)歷總結(jié)【筆試+一面+二面+Offer】
這篇文章主要介紹了華為校招 C++崗面試經(jīng)歷,總結(jié)分析了華為校招C++崗位的筆試題,以及一面、二面到最終拿到Offer的經(jīng)歷與相關(guān)經(jīng)驗(yàn)感想,需要的朋友可以參考下2019-11-28- 這篇文章主要介紹了C++面試常見(jiàn)算法題與參考答案,總結(jié)分析了C++面試中遇到的常見(jiàn)算法題與相應(yīng)的參考答案,需要的朋友可以參考下2019-11-20
- 這篇文章主要介紹了C++必備面試題與參考答案,結(jié)合大量經(jīng)典實(shí)例總結(jié)分析了C++面試過(guò)程中經(jīng)常遇到的各種概念、原理、算法相關(guān)問(wèn)題及參考答案,需要的朋友可以參考下2019-10-31
- 這篇文章主要介紹了C/C++經(jīng)典面試題(附答案),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-10-23
- 這篇文章主要介紹了C/C++求職者必備的20道面試題與參考答案,總結(jié)分析了C/C++相關(guān)的常見(jiàn)概念、原理、知識(shí)點(diǎn)與注意事項(xiàng),需要的朋友可以參考下2019-10-10
騰訊的外包c(diǎn)++面試經(jīng)歷總結(jié)
這篇文章主要介紹了騰訊的外包c(diǎn)++面試經(jīng)歷,總結(jié)記錄了一次騰訊C++面試的經(jīng)歷,包括面試的流程、面試題目與相應(yīng)的參考答案,需要的朋友可以參考下2019-09-29- 這篇文章主要介紹了阿里面試必會(huì)的20道C++面試題與參考答案,涉及C++指針、面向?qū)ο?、函?shù)等相關(guān)特性與使用技巧,需要的朋友可以參考下2019-09-26
- 這篇文章主要介紹了經(jīng)典C++筆試題目與參考答案,總結(jié)分析了C++常見(jiàn)的各種面試題目,包含C++常見(jiàn)知識(shí)點(diǎn)、技術(shù)難點(diǎn)、算法等,需要的朋友可以參考下2019-09-10
- 這篇文章主要介紹了華為筆試算法面試題與參考答案,結(jié)合實(shí)例形式分析了基于C++的字符串轉(zhuǎn)換、判斷、排序等算法相關(guān)操作技巧,需要的朋友可以參考下2019-09-05


