小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

C/C 求職者必備的20道技術面試題,不看就等于被Pass

 斷劍圖書館 2016-07-13

 面試題有難有易,不能因為容易,我們就輕視,更不能因為難,我們就放棄。我們面對高薪就業(yè)的態(tài)度永遠不變,那就是堅持、堅持、再堅持。出現(xiàn)問題,找原因;遇到困難,想辦法。我們一直堅信只有在堅持中才能看到希望,而不是看到希望才去堅持。


OK,進入正題,下面就是《必須掌握的20道技術面試題》,請大家認真學習,反復練習。


1
請用簡單的語言告訴我C++ 是什么?


答:C++是在C語言的基礎上開發(fā)的一種面向對象編程語言,應用廣泛。C++支持多種編程范式 --面向對象編程、泛型編程和過程化編程。 其編程領域眾廣,常用于系統(tǒng)開發(fā),引擎開發(fā)等應用領域,是最受廣大程序員受用的最強大編程語言之一,支持類:類、封裝、重載等特性!

2
C和C++的區(qū)別?


答:c++在c的基礎上增添類,C是一個結構化語言,它的重點在于算法和數(shù)據(jù)結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環(huán)境條件)進行運算處理得到輸出(或實現(xiàn)過程(事務)控制),而對于C++,首要考慮的是如何構造一個對象模型,讓這個模型能夠契合與之對應的問題域,這樣就可以通過獲取對象的狀態(tài)信息得到輸出或實現(xiàn)過程(事務)控制。

3
什么是面向對象(OOP)?


答:面向對象是一種對現(xiàn)實世界理解和抽象的方法、思想,通過將需求要素轉化為對象進行問題處理的一種思想。

4
什么是多態(tài)?


答:多態(tài)是指相同的操作或函數(shù)、過程可作用于多種類型的對象上并獲得不同的結果。不同的對象,收到同一消息可以產(chǎn)生不同的結果,這種現(xiàn)象稱為多態(tài)。

5
設計模式懂嘛,簡單舉個例子?


答:設計模式(Design pattern)是一套被反復使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設計經(jīng)驗的總結。


比如單例模式,保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。
適用于:當類只能有一個實例而且客戶可以從一個眾所周知的訪問點訪問它時;當這個唯一實例應該是通過子類化可擴展的,并且客戶應該無需更改代碼就能使用一個擴展的實例時。

比如工廠模式,定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類。Factory Method 使一個類的實例化延遲到其子類。
適用于當一個類不知道它所必須創(chuàng)建的對象的類的時候;當一個類希望由它的子類來指定它所創(chuàng)建的對象的時候;當類將創(chuàng)建對象的職責委托給多個幫助子類中的某一個,并且你希望將哪一個幫助子類是代理者這一信息局部化的時候。


6
STL庫用過嗎?常見的STL容器有哪些?算法用過哪幾個?


答:STL包括兩部分內容:容器和算法。(重要的還有融合這二者的迭代器)
容器,即存放數(shù)據(jù)的地方。比如array等。


在STL中,容器分為兩類:序列式容器和關聯(lián)式容器。
序列式容器,其中的元素不一定有序,但都可以被排序。如:vector、list、deque、stack、queue、heap、priority_queue、slist;


關聯(lián)式容器,內部結構基本上是一顆平衡二叉樹。所謂關聯(lián),指每個元素都有一個鍵值和一個實值,元素按照一定的規(guī)則存放。如:RB-tree、set、map、multiset、multimap、hashtable、hash_set、hash_map、hash_multiset、hash_multimap。


下面各選取一個作為說明:


vector:它是一個動態(tài)分配存儲空間的容器。區(qū)別于c++中的array,array分配的空間是靜態(tài)的,分配之后不能被改變,而vector會自動重分配(擴展)空間。
set:其內部元素會根據(jù)元素的鍵值自動被排序。區(qū)別于map,它的鍵值就是實值,而map可以同時擁有不同的鍵值和實值。


算法,如排序,復制……以及個容器特定的算法。這點不用過多介紹,主要看下面迭代器的內容。


迭代器是STL的精髓,我們這樣描述它:迭代器提供了一種方法,使它能夠按照順序訪問某個容器所含的各個元素,但無需暴露該容器的內部結構。它將容器和算法分開,好讓這二者獨立設計。

7
數(shù)據(jù)結構會嗎?項目開發(fā)過程中主要用到那些?


答:數(shù)據(jù)結構中主要會用到數(shù)組,鏈表,樹(較少),也會用到棧和隊列的思想。

8
const知道嗎?解釋其作用。


答:1.const 修飾類的成員變量,表示成員常量,不能被修改。
       2.const修飾函數(shù)承諾在本函數(shù)內部不會修改類內的數(shù)據(jù)成員,不會調用其它非 const 成員函數(shù)。
       3.如果 const 構成函數(shù)重載,const 對象只能調用 const 函數(shù),非 const 對象優(yōu)先調用非 const 函數(shù)。
       4.const 函數(shù)只能調用 const 函數(shù)。非 const 函數(shù)可以調用 const 函數(shù)。
       5.類體外定義的 const 成員函數(shù),在定義和聲明處都需要 const 修飾符。。

9
類的static變量在什么時候初始化?函數(shù)的static變量在什么時候初始化?


答:類的靜態(tài)成員變量在類實例化之前就已經(jīng)存在了,并且分配了內存。函數(shù)的static變量在執(zhí)行此函數(shù)時進行初始化。

10
堆和棧的區(qū)別?堆和棧的生命周期?


答:一、堆??臻g分配區(qū)別:
  1、棧(操作系統(tǒng)):由操作系統(tǒng)自動分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結構中的棧;
  2、堆(操作系統(tǒng)): 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收,分配方式倒是類似于鏈表。


  二、堆棧緩存方式區(qū)別:
  1、棧使用的是一級緩存, 他們通常都是被調用時處于存儲空間中,調用完畢立即釋放;
  2、堆是存放在二級緩存中,生命周期由虛擬機的垃圾回收算法來決定(并不是一旦成為孤兒對象就能被回收)。所以調用這些對象的速度要相對來得低一些。


  三、堆棧數(shù)據(jù)結構區(qū)別:
  堆(數(shù)據(jù)結構):堆可以被看成是一棵樹,如:堆排序;
  棧(數(shù)據(jù)結構):一種先進后出的數(shù)據(jù)結構。

11
C和C++的區(qū)別?


答:C++在C的基礎上增添類
C是一個結構化語言,它的重點在于算法和數(shù)據(jù)結構。


C程序的設計首要考慮的是如何通過一個過程,對輸入(或環(huán)境條件)進行運算處理得到輸出(或實現(xiàn)過程(事務)控制),而對于C++,首要考慮的是如何構造一個對象模型,讓這個模型能夠契合與之對應的問題域,這樣就可以通過獲取對象的狀態(tài)信息得到輸出或實現(xiàn)過程(事務)控制。

12
解釋下封裝、繼承和多態(tài)?


答:一、封裝:

  封裝是實現(xiàn)面向對象程序設計的第一步,封裝就是將數(shù)據(jù)或函數(shù)等集合在一個個的單元中(我們稱之為類)。
  封裝的意義在于保護或者防止代碼(數(shù)據(jù))被我們無意中破壞。
       二、繼承:
  繼承主要實現(xiàn)重用代碼,節(jié)省開發(fā)時間。
       子類可以繼承父類的一些東西。
       三、多態(tài)
  多態(tài):同一操作作用于不同的對象,可以有不同的解釋,產(chǎn)生不同的執(zhí)行結果。在運行時,可以通過指向基類的指針,來調用實現(xiàn)派生類中的方法。

13
指針和引用的區(qū)別?


答:1. 指針是一個變量,只不過這個變量存儲的是一個地址,指向內存的一個存儲單元;而引用僅是個別名;
       2. 引用使用時無需解引用(*),指針需要解引用;
       3. 引用只能在定義時被初始化一次,之后不可變;指針可變;
       4. 引用沒有 const,指針有 const;
       5. 引用不能為空,指針可以為空;
       6. “sizeof 引用”得到的是所指向的變量(對象)的大小,而“sizeof 指針”得到的是指針本身的大??;
       7. 指針和引用的自增(++)運算意義不一樣;
       8. 指針可以有多級,但是引用只能是一級(int **p;合法 而 int &&a是不合法的)
       9.從內存分配上看:程序為指針變量分配內存區(qū)域,而引用不需要分配內存區(qū)域。

14
什么是內存泄漏?面對內存泄漏和指針越界,你有哪些方法?你通常采用哪些方法來避免和減少這類錯誤?


答:用動態(tài)存儲分配函數(shù)動態(tài)開辟的空間,在使用完畢后未釋放,結果導致一直占據(jù)該內存單元即為內存泄露。
        使用的時候要記得指針的長度。
        malloc的時候得確定在那里free.
        對指針賦值的時候應該注意被賦值指針需要不需要釋放.
        動態(tài)分配內存的指針最好不要再次賦值.

15
常用的排序算法有哪些?簡單描述幾個排序算法的優(yōu)缺點?


答:選擇、冒泡、快速、插入、希爾、歸并、堆排等。
        1.快排:是冒泡排序的一種改進。
        優(yōu)點:快,數(shù)據(jù)移動少
        缺點:穩(wěn)定性不足
        2.歸并:分治法排序,穩(wěn)定的排序算法,一般用于對總體無序,但局部有序的數(shù)列。
        優(yōu)點:效率高O(n),穩(wěn)定
        缺點:比較占用內存

16
new和malloc的區(qū)別?


答:1,malloc與free是C++/C語言的標準庫函數(shù),new/delete是C++的運算符。它們都可用于申請動態(tài)內存和釋放內存。
       2,對于非內部數(shù)據(jù)類型的對象而言,光用maloc/free無法滿足動態(tài)對象的要求。對象在創(chuàng)建的同時要自動執(zhí)行構造函數(shù),對象在消亡之前要自動執(zhí)行析構函數(shù)。
       3,由于malloc/free是庫函數(shù)而不是運算符,不在編譯器控制權限之內,不能夠把執(zhí)行構造函數(shù)和析構函數(shù)的任務強加于malloc/free。因此C++語言需要一個能完成動態(tài)內存分配和初始化工作的運算符new,以一個能完成清理與釋放內存工作的運算符delete。注意new/delete不是庫函數(shù)。
       4,C++程序經(jīng)常要調用C函數(shù),而C程序只能用malloc/free管理動態(tài)內存。
       5,new可以認為是malloc加構造函數(shù)的執(zhí)行。new出來的指針是直接帶類型信息的。而malloc返回的都是void指針。

17
TCP和UDP通信的差別?什么是IOCP?


答:1.TCP面向連接, UDP面向無連接的
       2.TCP有保障的,UDP傳輸無保障的
       3.TCP是效率低的,UDP效率高的
       4.TCP是基于流的,UDP基于數(shù)據(jù)報文
       5.TCP傳輸重要數(shù)據(jù),UDP傳輸不重要的數(shù)據(jù)

        IOCP全稱I/O Completion Port,中文譯為I/O完成端口。
        IOCP是一個異步I/O的API,它可以高效地將I/O事件通知給應用程序。
        與使用select()或是其它異步方法不同的是,一個套接字[socket]與一個完成端口關聯(lián)了起來,然后就可繼續(xù)進行正常的Winsock操作了。然而,當一個事件發(fā)生的時候,此完成端口就將被操作系統(tǒng)加入一個隊列中。然后應用程序可以對核心層進行查詢以得到此完成端口。

18
同步IO和異步IO的區(qū)別?


答:        
A. 同步
        所謂同步,就是在發(fā)出一個功能調用時,在沒有得到結果之前,該調用就不返回。
        按照這個定義,其實絕大多數(shù)函數(shù)都是同步調用(例如sin isdigit等)。
        但是一般而言,我們在說同步、異步的時候,特指那些需要其他部件協(xié)作或者需要一定時間完成的任務。
        最常見的例子就是 SendMessage。
        該函數(shù)發(fā)送一個消息給某個窗口,在對方處理完消息之前,這個函數(shù)不返回。
        當對方處理完畢以后,該函數(shù)才把消息處理函數(shù)所返回的值返回給調用者。

B. 異步
        異步的概念和同步相對。
        當一個異步過程調用發(fā)出后,調用者不會立刻得到結果。
        實際處理這個調用的部件是在調用發(fā)出后,
        通過狀態(tài)、通知來通知調用者,或通過回調函數(shù)處理這個調用。

19
解釋C++中靜態(tài)函數(shù)和靜態(tài)變量?


答:
(1)類靜態(tài)數(shù)據(jù)成員在編譯時創(chuàng)建并初始化:在該類的任何對象建立之前就存在,不屬于任何對象,而非靜態(tài)類成員變量則是屬于對象所有的。類靜態(tài)數(shù)據(jù)成員只有一個拷貝,為所有此類的對象所共享。

 (2)類靜態(tài)成員函數(shù)屬于整個類,不屬于某個對象,由該類所有對象共享。
        1,static 成員變量實現(xiàn)了同類對象間信息共享。
        2,static 成員類外存儲,求類大小,并不包含在內。
        3,static 成員是命名空間屬于類的全局變量,存儲在 data 區(qū)的rw段。
        4,static 成員只能類外初始化。
        5,可以通過類名訪問(無對象生成時亦可),也可以通過對象訪問。

        1,靜態(tài)成員函數(shù)的意義,不在于信息共享,數(shù)據(jù)溝通,而在于管理靜態(tài)數(shù)據(jù)成員,完成對靜態(tài)數(shù)據(jù)成員的封裝。
        2,靜態(tài)成員函數(shù)只能訪問靜態(tài)數(shù)據(jù)成員。原因:非靜態(tài)成員函數(shù),在調用時 this指針時被當作參數(shù)傳進。而靜態(tài)成員函數(shù)屬于類,而不屬于對象,沒有 this 指針。

20
說下你對內存的了解?


答:
1.棧 - 由編譯器自動分配釋放
2.堆 - 一般由程序員分配釋放,若程序員不釋放,程序結束時可能由OS回收
3.全局區(qū)(靜態(tài)區(qū)),全局變量和靜態(tài)變量的存儲是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域,未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域。- 程序結束釋放
4.另外還有一個專門放常量的地方。- 程序結束釋放
5 程序代碼區(qū),存放2進制代碼。

在函數(shù)體中定義的變量通常是在棧上,用malloc, calloc, realloc等分配內存的函數(shù)分配得到的就是在堆上。在所有函數(shù)體外定義的是全局量,加了static修飾符后不管在哪里都存放在全局區(qū)(靜態(tài)區(qū)),在所有函數(shù)體外定義的static變量表示在該文件中有效,不能extern到別的文件用,在函數(shù)體內定義的static表示只在該函數(shù)體內有效。另外,函數(shù)中的'adgfdf'這樣的字符串存放在常量區(qū)。


加入互聯(lián)網(wǎng)+SC聯(lián)盟,海量學習資源免費領

↓↓↓ 

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多