面試題有難有易,不能因?yàn)槿菀?,我們就輕視,更不能因?yàn)殡y,我們就放棄。我們面對(duì)高薪就業(yè)的態(tài)度永遠(yuǎn)不變,那就是堅(jiān)持、堅(jiān)持、再堅(jiān)持。出現(xiàn)問題,找原因;遇到困難,想辦法。我們一直堅(jiān)信只有在堅(jiān)持中才能看到希望,而不是看到希望才去堅(jiān)持。
OK,進(jìn)入正題,下面就是《必須掌握的20道技術(shù)面試題》,請大家認(rèn)真學(xué)習(xí),反復(fù)練習(xí)。
答:C++是在C語言的基礎(chǔ)上開發(fā)的一種面向?qū)ο缶幊陶Z言,應(yīng)用廣泛。C++支持多種編程范式 --面向?qū)ο缶幊?、泛型編程和過程化編程。 其編程領(lǐng)域眾廣,常用于系統(tǒng)開發(fā),引擎開發(fā)等應(yīng)用領(lǐng)域,是最受廣大程序員受用的最強(qiáng)大編程語言之一,支持類:類、封裝、重載等特性!
答:c++在c的基礎(chǔ)上增添類,C是一個(gè)結(jié)構(gòu)化語言,它的重點(diǎn)在于算法和數(shù)據(jù)結(jié)構(gòu)。C程序的設(shè)計(jì)首要考慮的是如何通過一個(gè)過程,對(duì)輸入(或環(huán)境條件)進(jìn)行運(yùn)算處理得到輸出(或?qū)崿F(xiàn)過程(事務(wù))控制),而對(duì)于C++,首要考慮的是如何構(gòu)造一個(gè)對(duì)象模型,讓這個(gè)模型能夠契合與之對(duì)應(yīng)的問題域,這樣就可以通過獲取對(duì)象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過程(事務(wù))控制。
答:面向?qū)ο笫且环N對(duì)現(xiàn)實(shí)世界理解和抽象的方法、思想,通過將需求要素轉(zhuǎn)化為對(duì)象進(jìn)行問題處理的一種思想。
答:多態(tài)是指相同的操作或函數(shù)、過程可作用于多種類型的對(duì)象上并獲得不同的結(jié)果。不同的對(duì)象,收到同一消息可以產(chǎn)生不同的結(jié)果,這種現(xiàn)象稱為多態(tài)。
設(shè)計(jì)模式懂嘛,簡單舉個(gè)例子? 答:設(shè)計(jì)模式(Design pattern)是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。
比如單例模式,保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)。 適用于:當(dāng)類只能有一個(gè)實(shí)例而且客戶可以從一個(gè)眾所周知的訪問點(diǎn)訪問它時(shí);當(dāng)這個(gè)唯一實(shí)例應(yīng)該是通過子類化可擴(kuò)展的,并且客戶應(yīng)該無需更改代碼就能使用一個(gè)擴(kuò)展的實(shí)例時(shí)。
比如工廠模式,定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪一個(gè)類。Factory Method 使一個(gè)類的實(shí)例化延遲到其子類。 適用于:當(dāng)一個(gè)類不知道它所必須創(chuàng)建的對(duì)象的類的時(shí)候;當(dāng)一個(gè)類希望由它的子類來指定它所創(chuàng)建的對(duì)象的時(shí)候;當(dāng)類將創(chuàng)建對(duì)象的職責(zé)委托給多個(gè)幫助子類中的某一個(gè),并且你希望將哪一個(gè)幫助子類是代理者這一信息局部化的時(shí)候。
STL庫用過嗎?常見的STL容器有哪些?算法用過哪幾個(gè)? 答:STL包括兩部分內(nèi)容:容器和算法。(重要的還有融合這二者的迭代器) 容器,即存放數(shù)據(jù)的地方。比如array等。
在STL中,容器分為兩類:序列式容器和關(guān)聯(lián)式容器。 序列式容器,其中的元素不一定有序,但都可以被排序。如:vector、list、deque、stack、queue、heap、priority_queue、slist;
關(guān)聯(lián)式容器,內(nèi)部結(jié)構(gòu)基本上是一顆平衡二叉樹。所謂關(guān)聯(lián),指每個(gè)元素都有一個(gè)鍵值和一個(gè)實(shí)值,元素按照一定的規(guī)則存放。如:RB-tree、set、map、multiset、multimap、hashtable、hash_set、hash_map、hash_multiset、hash_multimap。
下面各選取一個(gè)作為說明:
vector:它是一個(gè)動(dòng)態(tài)分配存儲(chǔ)空間的容器。區(qū)別于c++中的array,array分配的空間是靜態(tài)的,分配之后不能被改變,而vector會(huì)自動(dòng)重分配(擴(kuò)展)空間。 set:其內(nèi)部元素會(huì)根據(jù)元素的鍵值自動(dòng)被排序。區(qū)別于map,它的鍵值就是實(shí)值,而map可以同時(shí)擁有不同的鍵值和實(shí)值。
算法,如排序,復(fù)制……以及個(gè)容器特定的算法。這點(diǎn)不用過多介紹,主要看下面迭代器的內(nèi)容。
迭代器是STL的精髓,我們這樣描述它:迭代器提供了一種方法,使它能夠按照順序訪問某個(gè)容器所含的各個(gè)元素,但無需暴露該容器的內(nèi)部結(jié)構(gòu)。它將容器和算法分開,好讓這二者獨(dú)立設(shè)計(jì)。
數(shù)據(jù)結(jié)構(gòu)會(huì)嗎?項(xiàng)目開發(fā)過程中主要用到那些? 答:數(shù)據(jù)結(jié)構(gòu)中主要會(huì)用到數(shù)組,鏈表,樹(較少),也會(huì)用到棧和隊(duì)列的思想。
答:1.const 修飾類的成員變量,表示成員常量,不能被修改。 2.const修飾函數(shù)承諾在本函數(shù)內(nèi)部不會(huì)修改類內(nèi)的數(shù)據(jù)成員,不會(huì)調(diào)用其它非 const 成員函數(shù)。 3.如果 const 構(gòu)成函數(shù)重載,const 對(duì)象只能調(diào)用 const 函數(shù),非 const 對(duì)象優(yōu)先調(diào)用非 const 函數(shù)。 4.const 函數(shù)只能調(diào)用 const 函數(shù)。非 const 函數(shù)可以調(diào)用 const 函數(shù)。 5.類體外定義的 const 成員函數(shù),在定義和聲明處都需要 const 修飾符。。
類的static變量在什么時(shí)候初始化?函數(shù)的static變量在什么時(shí)候初始化? 答:類的靜態(tài)成員變量在類實(shí)例化之前就已經(jīng)存在了,并且分配了內(nèi)存。函數(shù)的static變量在執(zhí)行此函數(shù)時(shí)進(jìn)行初始化。
答:一、堆??臻g分配區(qū)別: 1、棧(操作系統(tǒng)):由操作系統(tǒng)自動(dòng)分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧; 2、堆(操作系統(tǒng)): 一般由程序員分配釋放, 若程序員不釋放,程序結(jié)束時(shí)可能由OS回收,分配方式倒是類似于鏈表。
二、堆棧緩存方式區(qū)別: 1、棧使用的是一級(jí)緩存, 他們通常都是被調(diào)用時(shí)處于存儲(chǔ)空間中,調(diào)用完畢立即釋放; 2、堆是存放在二級(jí)緩存中,生命周期由虛擬機(jī)的垃圾回收算法來決定(并不是一旦成為孤兒對(duì)象就能被回收)。所以調(diào)用這些對(duì)象的速度要相對(duì)來得低一些。
三、堆棧數(shù)據(jù)結(jié)構(gòu)區(qū)別: 堆(數(shù)據(jù)結(jié)構(gòu)):堆可以被看成是一棵樹,如:堆排序; 棧(數(shù)據(jù)結(jié)構(gòu)):一種先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu)。
答:C++在C的基礎(chǔ)上增添類 C是一個(gè)結(jié)構(gòu)化語言,它的重點(diǎn)在于算法和數(shù)據(jù)結(jié)構(gòu)。
C程序的設(shè)計(jì)首要考慮的是如何通過一個(gè)過程,對(duì)輸入(或環(huán)境條件)進(jìn)行運(yùn)算處理得到輸出(或?qū)崿F(xiàn)過程(事務(wù))控制),而對(duì)于C++,首要考慮的是如何構(gòu)造一個(gè)對(duì)象模型,讓這個(gè)模型能夠契合與之對(duì)應(yīng)的問題域,這樣就可以通過獲取對(duì)象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過程(事務(wù))控制。
答:一、封裝:
封裝是實(shí)現(xiàn)面向?qū)ο蟪绦蛟O(shè)計(jì)的第一步,封裝就是將數(shù)據(jù)或函數(shù)等集合在一個(gè)個(gè)的單元中(我們稱之為類)。 封裝的意義在于保護(hù)或者防止代碼(數(shù)據(jù))被我們無意中破壞。 二、繼承: 繼承主要實(shí)現(xiàn)重用代碼,節(jié)省開發(fā)時(shí)間。 子類可以繼承父類的一些東西。 三、多態(tài) 多態(tài):同一操作作用于不同的對(duì)象,可以有不同的解釋,產(chǎn)生不同的執(zhí)行結(jié)果。在運(yùn)行時(shí),可以通過指向基類的指針,來調(diào)用實(shí)現(xiàn)派生類中的方法。
答:1. 指針是一個(gè)變量,只不過這個(gè)變量存儲(chǔ)的是一個(gè)地址,指向內(nèi)存的一個(gè)存儲(chǔ)單元;而引用僅是個(gè)別名; 2. 引用使用時(shí)無需解引用(*),指針需要解引用; 3. 引用只能在定義時(shí)被初始化一次,之后不可變;指針可變; 4. 引用沒有 const,指針有 const; 5. 引用不能為空,指針可以為空; 6. “sizeof 引用”得到的是所指向的變量(對(duì)象)的大小,而“sizeof 指針”得到的是指針本身的大?。?br> 7. 指針和引用的自增(++)運(yùn)算意義不一樣; 8. 指針可以有多級(jí),但是引用只能是一級(jí)(int **p;合法 而 int &&a是不合法的) 9.從內(nèi)存分配上看:程序?yàn)橹羔樧兞糠峙鋬?nèi)存區(qū)域,而引用不需要分配內(nèi)存區(qū)域。
什么是內(nèi)存泄漏?面對(duì)內(nèi)存泄漏和指針越界,你有哪些方法?你通常采用哪些方法來避免和減少這類錯(cuò)誤? 答:用動(dòng)態(tài)存儲(chǔ)分配函數(shù)動(dòng)態(tài)開辟的空間,在使用完畢后未釋放,結(jié)果導(dǎo)致一直占據(jù)該內(nèi)存單元即為內(nèi)存泄露。 使用的時(shí)候要記得指針的長度。 malloc的時(shí)候得確定在那里free. 對(duì)指針賦值的時(shí)候應(yīng)該注意被賦值指針需要不需要釋放. 動(dòng)態(tài)分配內(nèi)存的指針最好不要再次賦值.
常用的排序算法有哪些?簡單描述幾個(gè)排序算法的優(yōu)缺點(diǎn)? 答:選擇、冒泡、快速、插入、希爾、歸并、堆排等。 1.快排:是冒泡排序的一種改進(jìn)。 優(yōu)點(diǎn):快,數(shù)據(jù)移動(dòng)少 缺點(diǎn):穩(wěn)定性不足 2.歸并:分治法排序,穩(wěn)定的排序算法,一般用于對(duì)總體無序,但局部有序的數(shù)列。 優(yōu)點(diǎn):效率高O(n),穩(wěn)定 缺點(diǎn):比較占用內(nèi)存
答:1,malloc與free是C++/C語言的標(biāo)準(zhǔn)庫函數(shù),new/delete是C++的運(yùn)算符。它們都可用于申請動(dòng)態(tài)內(nèi)存和釋放內(nèi)存。 2,對(duì)于非內(nèi)部數(shù)據(jù)類型的對(duì)象而言,光用maloc/free無法滿足動(dòng)態(tài)對(duì)象的要求。對(duì)象在創(chuàng)建的同時(shí)要自動(dòng)執(zhí)行構(gòu)造函數(shù),對(duì)象在消亡之前要自動(dòng)執(zhí)行析構(gòu)函數(shù)。 3,由于malloc/free是庫函數(shù)而不是運(yùn)算符,不在編譯器控制權(quán)限之內(nèi),不能夠把執(zhí)行構(gòu)造函數(shù)和析構(gòu)函數(shù)的任務(wù)強(qiáng)加于malloc/free。因此C++語言需要一個(gè)能完成動(dòng)態(tài)內(nèi)存分配和初始化工作的運(yùn)算符new,以一個(gè)能完成清理與釋放內(nèi)存工作的運(yùn)算符delete。注意new/delete不是庫函數(shù)。 4,C++程序經(jīng)常要調(diào)用C函數(shù),而C程序只能用malloc/free管理動(dòng)態(tài)內(nèi)存。 5,new可以認(rèn)為是malloc加構(gòu)造函數(shù)的執(zhí)行。new出來的指針是直接帶類型信息的。而malloc返回的都是void指針。
答:1.TCP面向連接, UDP面向無連接的 2.TCP有保障的,UDP傳輸無保障的 3.TCP是效率低的,UDP效率高的 4.TCP是基于流的,UDP基于數(shù)據(jù)報(bào)文 5.TCP傳輸重要數(shù)據(jù),UDP傳輸不重要的數(shù)據(jù)
IOCP全稱I/O Completion Port,中文譯為I/O完成端口。 IOCP是一個(gè)異步I/O的API,它可以高效地將I/O事件通知給應(yīng)用程序。 與使用select()或是其它異步方法不同的是,一個(gè)套接字[socket]與一個(gè)完成端口關(guān)聯(lián)了起來,然后就可繼續(xù)進(jìn)行正常的Winsock操作了。然而,當(dāng)一個(gè)事件發(fā)生的時(shí)候,此完成端口就將被操作系統(tǒng)加入一個(gè)隊(duì)列中。然后應(yīng)用程序可以對(duì)核心層進(jìn)行查詢以得到此完成端口。
答: A. 同步 所謂同步,就是在發(fā)出一個(gè)功能調(diào)用時(shí),在沒有得到結(jié)果之前,該調(diào)用就不返回。 按照這個(gè)定義,其實(shí)絕大多數(shù)函數(shù)都是同步調(diào)用(例如sin isdigit等)。 但是一般而言,我們在說同步、異步的時(shí)候,特指那些需要其他部件協(xié)作或者需要一定時(shí)間完成的任務(wù)。 最常見的例子就是 SendMessage。 該函數(shù)發(fā)送一個(gè)消息給某個(gè)窗口,在對(duì)方處理完消息之前,這個(gè)函數(shù)不返回。 當(dāng)對(duì)方處理完畢以后,該函數(shù)才把消息處理函數(shù)所返回的值返回給調(diào)用者。
B. 異步 異步的概念和同步相對(duì)。 當(dāng)一個(gè)異步過程調(diào)用發(fā)出后,調(diào)用者不會(huì)立刻得到結(jié)果。 實(shí)際處理這個(gè)調(diào)用的部件是在調(diào)用發(fā)出后, 通過狀態(tài)、通知來通知調(diào)用者,或通過回調(diào)函數(shù)處理這個(gè)調(diào)用。
解釋C++中靜態(tài)函數(shù)和靜態(tài)變量? 答: (1)類靜態(tài)數(shù)據(jù)成員在編譯時(shí)創(chuàng)建并初始化:在該類的任何對(duì)象建立之前就存在,不屬于任何對(duì)象,而非靜態(tài)類成員變量則是屬于對(duì)象所有的。類靜態(tài)數(shù)據(jù)成員只有一個(gè)拷貝,為所有此類的對(duì)象所共享。
(2)類靜態(tài)成員函數(shù)屬于整個(gè)類,不屬于某個(gè)對(duì)象,由該類所有對(duì)象共享。 1,static 成員變量實(shí)現(xiàn)了同類對(duì)象間信息共享。 2,static 成員類外存儲(chǔ),求類大小,并不包含在內(nèi)。 3,static 成員是命名空間屬于類的全局變量,存儲(chǔ)在 data 區(qū)的rw段。 4,static 成員只能類外初始化。 5,可以通過類名訪問(無對(duì)象生成時(shí)亦可),也可以通過對(duì)象訪問。
1,靜態(tài)成員函數(shù)的意義,不在于信息共享,數(shù)據(jù)溝通,而在于管理靜態(tài)數(shù)據(jù)成員,完成對(duì)靜態(tài)數(shù)據(jù)成員的封裝。 2,靜態(tài)成員函數(shù)只能訪問靜態(tài)數(shù)據(jù)成員。原因:非靜態(tài)成員函數(shù),在調(diào)用時(shí) this指針時(shí)被當(dāng)作參數(shù)傳進(jìn)。而靜態(tài)成員函數(shù)屬于類,而不屬于對(duì)象,沒有 this 指針。
答: 1.棧 - 由編譯器自動(dòng)分配釋放 2.堆 - 一般由程序員分配釋放,若程序員不釋放,程序結(jié)束時(shí)可能由OS回收 3.全局區(qū)(靜態(tài)區(qū)),全局變量和靜態(tài)變量的存儲(chǔ)是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域,未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域。- 程序結(jié)束釋放 4.另外還有一個(gè)專門放常量的地方。- 程序結(jié)束釋放 5 程序代碼區(qū),存放2進(jìn)制代碼。
在函數(shù)體中定義的變量通常是在棧上,用malloc, calloc, realloc等分配內(nèi)存的函數(shù)分配得到的就是在堆上。在所有函數(shù)體外定義的是全局量,加了static修飾符后不管在哪里都存放在全局區(qū)(靜態(tài)區(qū)),在所有函數(shù)體外定義的static變量表示在該文件中有效,不能extern到別的文件用,在函數(shù)體內(nèi)定義的static表示只在該函數(shù)體內(nèi)有效。另外,函數(shù)中的'adgfdf'這樣的字符串存放在常量區(qū)。
加入互聯(lián)網(wǎng)+SC聯(lián)盟,海量學(xué)習(xí)資源免費(fèi)領(lǐng)
|