




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第 18 章文字解答實戰(zhàn)題前面的章節(jié)已經介紹了在 C/C+面試中的大部分考點,覆蓋了基礎知識高級算法的各個方面。本章將之前介紹的知識做試題的介紹和分析,提供一些各大公司的經典和常見試題,以及考題和完整的解題思路分析,幫助讀者鞏固 C/C+面試的各個考點,通過大量的練習進一步提高實戰(zhàn)能力。文字解答題考的是 C/C+程序員的語言基礎和工作經驗等方面的知識,以及一些簡單但是可能設有“陷阱”的計算和程序邏輯推理。C/C+的基礎和經驗對于反映一個程序員的水平是非常重要的,很多公司在面試時都會準備這種類型的題目。下面將介紹一些常見的經驗概念試題以及相關分析和解答。面試題 199介紹 STL,詳細說明 ST
2、L 如何實現 vector(面試題)【分析與】STL(標準模版庫,Standard Template Library)它由容器算法迭代器組成。本題應聘者對于 STL 的了解。STL 有包括以下一些優(yōu)點。qqq可以方便容易地實現搜索數據或對數據排序等一系列的算法; 調試程序時更加安全和方便;即使是程序員使用 STL 在 UNIX 平臺下寫的代碼讀者也可以很容易地理解(因為STL 是跨平臺的)。vector 實質上就是一個動態(tài)數組,會根據數據的增加,動態(tài)的增加數組空間。以下是一段基于 SGI STL 的一個 vector 的實現的代碼:#include <alloc.h>/內存分配器頭
3、文件,非標準#include <iterator.h>/迭代器頭文件,非標準template <class T >/模板類,提供泛型功能class vectortypedef alloc Alloc;/內存分配器 typedef public:typedef T value_type;/值類型 T typedef value_type* pointer;/指針類型 T*typedef value_type* iterator;/迭代器,這里的迭代器不需要,只是一個原生指針的 typedef typedef const value_type* const_iterator
4、; /只讀迭代器typedef value_type& reference;/T&typedef const value_type& const_reference; /只讀typedef size_t size_type;/長度類型 size_t,一般是 unsigned int;第 18 章 文字解答實戰(zhàn)題從示例代碼中可以看到,vector 使用 allocator 來進行內存管理,使用 3 個迭代器來引用這存。vector 的 iterator 其實就是 T*的別名。在續(xù)的內存里(數組),指針是可以做算術運算的,也支持操作,由此,vector 的 iterator
5、 也支持算術運算,+,-,+=,-=,。vector 的迭代器就是通常的隨機迭代器了。面試題 200分析 Visual C+程序出錯的使用 Visual C+開發(fā)程序經常會遇見這幾個錯誤:LNK2001,C2001,c2005,c2011。請問出現這些錯誤的是什么?【分析與】在學習 Visual C+的過程中,遇到的 LNK2001 錯誤的消息主要為 unresolved、externalsymbol“symbol”(不確定的外部“符號”)。本題主要是應聘者是否有足夠的經驗。如果連接程序不能在所有的庫和目標文件內找到所的函數、變量或,將產生此錯誤消息。一般來說,發(fā)生錯誤的主要有以下兩個:(1)
6、是所的函數、變量不存在、拼寫不正確或者使用錯誤。(2)可能使用了不同版本的連接庫。編譯器錯誤 C2001:常數中有換行符。字符串常數不能繼續(xù)到第二行,除非進行此類操作: 用反斜杠結束第一行。用一個雙引號結束第一行上的字符串,并在下一行使用另一個雙引號開始該字符串。用 n 結束第一行是不夠的,例如下面的代碼:下一行開始處位于行繼續(xù)的空格包含在字符串常數中。以上顯示的示例都沒有將換行符嵌入字符串常數中,可以按如下所示嵌入換行符:printf("Hello,nworld");·239·printf("Hello, world"); /錯誤p
7、rintf("Hello,nworld"); /錯誤printf("Hello, world"); /正確printf("Hello,"" world"); /正確typedef ptrdiff_t difference_type; /指針間隔,用來表示兩個指針間的距離typedef reverse_iterator<const_iterator, value_type, const_reference, difference_type> const_reverse_iterator;/反向迭代器,定義
8、在<iterator.h> typedef reverse_iterator<iterator, value_type, reference, difference_ type>reverse_iterator;/只讀反向迭代器protected:/數據成員typedef simple_alloc<value_type, Alloc> data_allocator;/分配器的 typedefiterator start;/vector 的第一個元素的迭代器,用來表示 vector,永遠為 vector.begin(); iterator finish;/ve
9、ctor 的末尾,指向 vector 的最后一個元素的下一個位置。永遠為 vector.end(); iterator end_of_storage;/vector 所擁有的內存的末尾。如果等于 vector.end(),表示 vector 已滿第 4 篇 C/C+面試題實戰(zhàn)編譯器錯誤 C2005:#line 應輸入行號,卻找到“token”。#line 指令后面必須跟行號。下面的示例生成 C2005:編譯器錯誤 C2011:“identifier”:“type”類型重定義,該標識符已定義為 type 類型。如果多次將某個類型庫導入同一個文件,也可能生成 C2011,例如下面的代碼:面試題 2
10、01繼承和多態(tài)有何區(qū)別【分析與】本題應聘者對面向對象應用的了解。在 OOD 和 OOP 中,多態(tài)組合優(yōu)于繼承。多態(tài)的基礎是繼承,沒有繼承,多態(tài)無從談起。(1) 對象的類型不影響類中函數的行為時,就要使用模板來生成這樣一組類。(2) 對象的類型影響類中函數的行為時,就要使用繼承來得到這樣一組類。面試題 202有何區(qū)別?傳指針和比傳指針安全,為什么【分析與本題(1)】應聘者對于 C/C+最基礎的指針的了解,如下:在創(chuàng)建的同時必須初始化,即到一個有效的對象,而指針在定義的時候不必初始化,可以在定義后面的任何地方重新賦值。(2)不存在 NULL,必須與合法的單元關聯(lián);而指針則可以是 NULL。(3)一
11、旦被初始化為指向一個對象,它就不能被改變?yōu)榱硪粋€對象的;而指針在任何時候都可以改變?yōu)橹赶蛄硪粋€對象。給關系。賦值并不是改變它和原始對象的綁定(4)的創(chuàng)建和銷毀并調用類的拷貝構造函數。(5)語言層面,的用法和對象一樣。在二進制層面,一般都是通過指針來實現的,只不過編譯器幫我們完成了轉換。不存在空,并且一旦被初始化為指向一個對象,它就不能被改變?yōu)榱硪粋€對象,顯得很安全。const 指針仍然存在空指針,并且有可能產生野指針??偟膩碚f,既具有指針的效率,又具有變量使用的方便性和直觀性。·240·struct S;union S;/錯誤:C2011/ C2005.cpp int ma
12、in()int i = 0;#line i / C2005/ try ./ #line 0printf("Hello,nworld"); printf("Hello,n""world");printf("Hello,""nworld");第 18 章 文字解答實戰(zhàn)題面試題 203參數傳遞的方式與多態(tài)參數傳遞的實現(摩托羅拉面試題)【分析與】參數傳遞有傳值,傳指針或者等 3 種,下面作詳細介紹。qq傳值方式適合一般數值傳送,并且不改變原數據,但要消耗內存空間;傳指針方式適合傳遞數組、指針,由于傳遞
13、的是地址,所以直接操作會改變原 數據;q指針比較類似,是相對比較新的式。一般情況下能用傳址的就能用,而且使用更方便一點?;A好的 C/C+程序員應該明白,實現多態(tài)主要采用和指針。傳值這種方式是復制數據,其類型編譯器就已決定,而多態(tài)是類型要等到執(zhí)行期才能決定,所以不使用傳值方式來實現多態(tài)參數傳遞。面試題 204怎樣應用設計模式的理念【分析與設計模式】考慮的是擴展和重用,而這兩方面在很多情況下,往往會被忽略。面試官主要對應聘者未來的發(fā)展前景考慮,通過本題了解應聘者對系統(tǒng)分析、整體架構設計方面的經驗。雖然設計模式非常關鍵,不過也不建議程序員不建議用設計模式可能使得簡單問題變得復雜化。設計模式,因為不
14、合適的使面試題 205介紹一下對設計模式的理解【分析與】設計模式概念是由設計師 Christopher Alexander 提出:“每一個模式描述了一個在我們周圍不斷重復發(fā)生的問題,以及該問題的解決方案的次地使用該方案而不必做重復勞動?!鄙鲜龆x是對設計模式的向對象軟件的領域內,就形成了對設計模式的狹義定義。這樣,你就能一次又一義。將其應用到面可以簡單的認為:設計模式就是解決某個特定的面向對象軟件問題的特定方法,并且已經上升到理論程度。下面是框架與設計模式的區(qū)別:(1)設計模式和框架對特定業(yè)務的問題域。的問題域不同。設計模式面向對象的問題域就是框架針(2) 設計模式比框架更為抽象。設計模式在碰
15、到具體問題后,才能產生代碼;框架已經可以用代碼表示。(3) 設計模式是比框架更小的體系結構元素??蚣苤锌梢园ǘ鄠€設計模式。例如,設計模式就像武術中基本的招式。將這些招式合理地縱組合起來,就形成套路(框架)??蚣芫褪且环N半成品。·241·第 4 篇 C/C+面試題實戰(zhàn)面試題 206C+和 C 定義結構的區(qū)別是什么(摩托羅拉筆試題)【分析與】C 語言中的結構僅僅是數據的結合,C 語言中的結構體內是不能函數的。面試官要的就是應聘者對這兩種語言基礎的了解。C+中的結構和類其實具備幾乎一樣的功能,結構體內也可以函數。C+的結構和類默認具有不一樣的屬性。面試題 207關于構造函數和析
16、構函數構造函數可否是虛函數?為什么?析構函數呢?析構函數可否是純虛的呢?【分析與】這是初學者容易的問題。構造函數不能為虛函數,要構造一個對象,必須清楚地知道要構造什么,否則無法構造一個對象。析構函數可以是虛函數,也可以是純虛函數。面試題 208對拷貝構造函數的深拷貝、淺拷貝和臨時對象的理解【分析與】應聘者對于基礎知識的了解。深拷貝意味著拷貝了和指針,而淺拷貝只是拷,造成對同一份析構兩次,貝了指針,沒有拷貝。這樣會使得兩個指針指向同一份程序。臨時對象的開銷比局部對象小些。面試題 209基類中有一個虛函數,子類還需要申明為 virtual 嗎【分析與】這種情況下不申明為 virtual 是沒有關系
17、的。不過,很多程序員也會喜歡使用顯式申明,這樣可以使得代碼更加清晰,增強可讀性。面試官主要的其實是程序員對于基礎知識的了解,能說出正確的,就說明基礎比較扎實。面試題 210C+的類有什么優(yōu)點C+可以通過精心僅為了實現重用?某些函數功能實現重用,那 C+的類有什么優(yōu)點嗎?是不是僅【分析與】并不僅僅是為了實現重用。(Object Oriented Design,簡稱 OOD 即面向對象)和(Object Oriented Programming,簡稱 OOP 即面向對象的程序設計)從根本上改變了程序設計模式和設計思想,具備深遠的意義。和·242·第 18 章 文字解答實戰(zhàn)題類的
18、 3 大最基本的特征:,繼承和多態(tài)。這些特征將編程模型從面向過程轉變?yōu)槊嫦驅ο螅瑥母旧细淖兞司帉懗绦虻乃悸泛湍J?。本題應聘者對于面向對象和經驗。面試題 211如何實現多態(tài)?父類和子類的繼承關系如何【分析與】多態(tài)的基礎是繼承,需要虛函數的支持,C+中多態(tài)有下面 3 種實現方式:qqq使用函數重載; 使用模板函數;使用虛函數。子類繼承父類的大部分。不能繼承的有構造函數、析構函數、拷貝構造函數、operator=函數、函數等。面試題 212為什么要引入抽象基類和純虛函數(摩托羅拉筆試題)【分析與】主要目的是為了實現一種接口的效果。在面向對象的編程語言中,為了更好的表示客觀世界。所以有些類可以什么都
19、不實現只是提供一個共享的接口。這就是純虛函數,而含有純虛函數的基類即為抽象基類。面試題 213介紹一下模板和容器,如何實現【分析與】模板可以說比較古老了,但是當前使用的泛型編程實質上就是模板編程。它體現了一種通用和泛化的思想。本題的就是模板的基礎知識。STL 有 7 種主要容器:vector、list、deque、map、multimap、set 和 multiset。面試題 214什么是 MVC?簡單舉例說明其應用【分析與】MVC 模式是 Observer 模式的一個特例,典型的有 MFC 中的文檔視圖架構。本題應聘者對于設計模式的了解,對于先進流行框架的學習程度。面試題 215列舉幾種進程
20、的同步機制(面試題)【分析與】原子操作、信號量機制、自旋鎖、管程、會合、分布式系統(tǒng)。本題對于進程基礎知識的深入理解程度,同時要求應聘者一定要知道什么是同步,同步的原理是什么。·243·第 4 篇 C/C+面試題實戰(zhàn)面試題 216進程之間通信的途徑【分析與】本題進程之間通信的途徑主要有以下 3 種:qqq共享系統(tǒng);消息傳遞系統(tǒng);:以文件系統(tǒng)為基礎。面試題 217進程死鎖的【分析與】死鎖是指在兩個或多個并發(fā)進程中,如果每個進程持有某種而又都等待別的進程它們現在保持著的,否則就不能向前推進。此時,每個進程都占用了一定的但是又不能向前推進,稱這一組進程產生了死鎖。簡單地說,就是兩個
21、或多個進程無止境的等候著,永遠成立的條件的一種系統(tǒng)狀態(tài)。產生死鎖的根本如下。是系統(tǒng)能夠提供的個數比要求該的進程數少,具體q 系統(tǒng)不足;q 進程推進順序。面試題 218死鎖的 4 個必要條件【分析與】如果應聘者能完整的回答此題,則顯示出他對基礎知識的熟練程度。(1)互斥條件:一個每次只能被一個進程使用。(2)請求與保持條件:一個進程因請求而阻塞時,對已獲得的保持不放。 關系。(3)不條件:進程已獲得的,在沒使用完之前,不能強行(4)循環(huán)等待條件:若干進程之間形成一種頭尾相接的循環(huán)等待面試題 219死鎖的處理【分析與】知道如何發(fā)現問題,如何解決問題是一個程序員必須面對的任務。本題何處理常見的死鎖問
22、題,具體有以下幾個方面:(1) 鴕鳥算法忽略該問題。(2) 檢測死鎖并且恢復。應聘者如(3)仔細地對進行動態(tài)分配,以避免死鎖。(4)通過破壞死鎖產生的 4 個必要條件之一,來防止死鎖產生。·244·第 18 章 文字解答實戰(zhàn)題面試題 220操作系統(tǒng)中進程調度策略有哪幾種【分析與】在考慮這個問題時,首先要考慮操作系統(tǒng),如果不確定,先要詢問面試官,是 Windows系統(tǒng)還是 Linux 系統(tǒng)。如果這兩種操作系統(tǒng)應聘者都很熟悉,則直接可以說出這兩個系統(tǒng)的區(qū)別和進程調度的策略,詳細如下:FCFS(先來先服務)、優(yōu)先級、時間片輪轉和多級反饋。面試題 221類的靜態(tài)成員和非靜態(tài)成員有何
23、區(qū)別【分析與】靜態(tài)變量使用 static 修飾符進行,在類被實例化時創(chuàng)建,通過類進行不帶有static 修飾符的變量稱做非靜態(tài)變量。在對象被實例化時創(chuàng)建,通過對象進行一個類的所有實例的同一靜態(tài)變量都是同一個值,同一個類的不同實例的同一非靜態(tài)變量可以是不同的值。靜態(tài)函數的實現里不能使用非靜態(tài)成員,例如非靜態(tài)變量、非靜態(tài)函數等。類的靜態(tài)成員每個類只有一個,非靜態(tài)成員每個對象一個。本題識的把握程度。應聘者對基礎知面試題 222純虛函數如何定義?使用時應注意什么【分析與】定義方式如下:virtual void f()=0;必須要實現該接口。在 C/C+語言中,純虛函數的應此函數是一個接口,子類用非常廣
24、泛,它如何定義和注意事項,是對基礎知識的一種考量。面試題 223數組和鏈表的區(qū)別【分析與本題】C/C+語言的基礎知識,應聘者應該了解數組和鏈表的概念和定義,然后才能具體的區(qū)別它們,詳細如下。q 數組:數據順序,固定大??;q 鏈表:數據可以隨機,大小可動態(tài)改變。面試題 224關于 ISO 七層模型的典型問題ISO 的七層模型是什么?TCP/UDP 是屬于哪一層?TCP/UDP 有何優(yōu)缺點?【分析與】ISO 的七層模型主要包括:應用層、表示層、會話層、層、網絡層、物理鏈路層、·245·第 4 篇 C/C+面試題實戰(zhàn)物理層。TCP/UDP 屬于傳輸層。TCP 服務提供了數據流傳輸
25、、可靠性、有效流、全雙工操作和多路復用技術等。與 TCP 不同,UDP 并不提供對 IP 協(xié)議的可靠機制、流以及錯誤恢復功能等。由于 UDP 比較簡單,所以它的頭部信息包含很少的字節(jié),比 TCP 負載消耗少。q TCP:提供穩(wěn)定的傳輸服務,有流量,缺點是包頭大,冗余性不好。q UDP:不提供穩(wěn)定的服務,包頭部信息少,開銷小。面試題 225內存的分配方式及其區(qū)別【分析與】對于 C/C+語言,因為多是開發(fā)操作系統(tǒng)的底層技術,所以內存分配非常關鍵。下面從多方面解釋內存分配方式:(1)從靜態(tài)區(qū)域分配。內存在程序編譯的時候就已經分配好,這塊內存在程序的整個運行期間都存在。例如,全局變量和 static
26、變量。(2)在棧上創(chuàng)建。在執(zhí)行函數時,函數內局部變量的單元都可以在棧上創(chuàng)建,函數執(zhí)行結束時這些單元自動被。棧內存分配運算內置于處理器的指令集。(3)從堆上分配,亦稱動態(tài)內存分配。程序在運行的時候使用 malloc 或 new 申請任意多少的內存,程序員負責在何時用 free 或 delete內存。動態(tài)內存的生存期由程序員決定,使用非常靈活,但問題也最多。面試題 226struct 和 class 的區(qū)別【分析與】struct 的成員默認是公有的,而類的成員默認是私有的。struct 和 class 在其他方面是功能相當的。從習慣上來講,大多數的開發(fā)者感到類和結構有很大的差別。感覺上結構僅僅像一
27、堆缺乏和功能的開放的內存位,而類就像活的并且可靠的成員,它有智能服務,有牢固的屏障和一個良好的定義接口。既然大多數人都這么認為,那么只有在程序員的類有很少的方法并且有公有數據(這種事情在良好設計的系統(tǒng)中是存在的)時,也許應該使用 struct 關鍵字,否則,應該使用 class 關鍵字。面試題 227一個類所占內存空間的問題(Autodesk 面試題改編)當一個類 A 中沒有任何成員變量與成員函數時,sizeof(A)的值是否可以為 0?請解釋一下編譯器為什么沒有讓它為 0?!痉治雠c】肯定不是 0。舉個反例,如果是 0 的話,一個 class A10對象數組,而每一個對象占用的內存空間是 0,
28、這時就沒辦法區(qū)分 A0,A1了。這是一個最簡單的例子,本例的就是應聘者的反應能力和考慮問題的多面性。·246·第 18 章 文字解答實戰(zhàn)題面試題 228在 8086 匯編中,邏輯地址和物理地址如何轉換(Intel 面試題)【分析與】首先要明白,為什么特指在 8086 匯編下?因為 C 語言能編譯成 8086 匯編語言。本題范圍比較寬廣,需要應聘者對匯編語言有一定的了解。通用寄存器給出的地址,是偏移地址,相應段寄存器地址*10H+通用寄存器內地址,就得到了真正要的地址。面試題 229比較 C+中的 4 種類型轉換方式【分析與】C+同時提供了 4 種新的強制形式(通常稱為新風格
29、的或 C+風格的強制):const_cast(expression)、dynamic_cast(expression)、reinterpret_cast(expression) 和 static_cast (expression),每一種都適用于特定的目的,具體如下:(1)dynamic_cast 主要用于執(zhí)行“安全的向下(safe downcasting)”,也就是說,要確定一個對象是否是一個繼承體系中的一個特定類型。它是唯一不能用舊風格語法執(zhí)行的強制,也是唯一可能有運行價的強制。(2)static_cast 可以被用于強制隱型轉換(例如,non-const 對象為 const 對象,int
30、為 double,等等),它還可以用于很多這樣的轉換的反向轉換(例如,void*指針為有類型指針,基類指針為派生類指針),但是它不能將一個const 對象對象(只有 const_cast 能做到),它最接近于 C-style 的轉換。為non-const(3)const_cast 一般用于強制消除對象的常量性。它是唯一能做到這一點的 C+風格的強制。(4)reinterpret_cast 是特意用于底層的強制,導致實現依賴( implementation-dependent)(就是說,不可移植)的結果,例如,將一個指針制在底層代碼以外應該極為罕見。為一個整數。這樣的強舊風格的強制依然合法,但是
31、新的形式更可取。首先,在代碼中它們更容易識別(無論是人還是像 grep 這樣的工具都是如此),這樣就簡化了在代碼中尋找類型系統(tǒng)被破壞的地方的過程。其次,更精確地指定每一個強制的目的,使得編譯器診斷使用錯誤成為可能。例如,試圖使用一個 const_cast 以外的新風格強制無法編譯。來消除常量性,代碼將面試題 230面向對象的 3 個基本特征是什么【分析與】應聘者對于面向對象技術的了解,下面是簡述:將客觀事物抽象成類,每個類對自身的數據和方法實行 protection(private,(1)protected,public)。(2)繼承:廣義的繼承有 3 種實現形式:實現繼承(指使用基類的屬性和
32、方法而無需額外編碼的能力)、可視繼承(子窗體使用父窗體的外觀和實現代碼)、接口繼承(僅使·247·第 4 篇 C/C+面試題實戰(zhàn)用屬性和方法,實現滯后到子類實現)。前兩種(類繼承)和后一種(對象組合=>接口繼承以及純虛函數)了功能復用的兩種方式。(3)多態(tài):是將父對象設置成為和一個或的它的子對象相等的技術,賦值之后,父對象就可以根據當前賦值給它的子對象的特性以不同的方式將子類類型的指針賦值給父類類型的指針。簡單地說,就是面試題 231重載(overload)和重寫(overried)的區(qū)別【分析與】這是一個經常會考到的題目,從定義上來說具有以下兩個方面:(1)重載:是
33、指存在多個同名函數,而這些函數的參數表不同(或許參數個數不同,或許參數類型不同,或許兩者都不同)。(2)重寫:是指子類重新定義復類虛函數的方法。從實現原理上來說:(1)重載:編譯器根據函數不同的參數表,對同名函數的名稱做修飾,然后這些同名函數就成了不同的函數(至少對于編譯器來說是這樣的)。例如,下面的代碼有兩個同名函數:function func(p:integer):integer;和function func(p:string):integer;那么編譯器做過修飾后的函數名稱可能是這樣的:int_func、str_func。對于這兩個函數的調用,在編譯器間就已經確定了,是靜態(tài)的。也就是說,
34、它們的地址在編譯期就已經綁定了(早綁定),因此,重載和多態(tài)是沒有關系的。(2)重寫:和多態(tài)真正相關。當子類重新定義了父類的虛函數后,父類指針根據賦給它的不同的子類指針,動態(tài)的調用屬于子類的該函數,這樣的函數調用在編譯期間是無法確定的(調用的子類的虛函數的地址無法給出)。因此,這樣的函數地址是在運行期綁定的(晚綁定)。面試題 232多態(tài)的作用【分析與】多態(tài)是面向對象開發(fā)的一個特色,其作用主要是以下兩個。q 隱藏實現細節(jié),使得代碼能夠模塊化;擴展代碼模塊,實現代碼重用。q 接口重用:為了類在繼承和派生的時候,保證使用性時的正確調用。中任一類的實例的某一屬面試題 233ADO 與 ADO.NET 有
35、何異同【分析與】除了能夠讓應用程序處理于 DBMS 數據庫中的數據這一基本相似點外,兩者沒有·248·第 18 章 文字解答實戰(zhàn)題太多共同之處。但是 ADO 使用 OLE DB 接口并基于微軟的 COM 技術,而 ADO.NET 擁有的 ADO.NET 接口并且基于微軟的.NET 體系架構。眾所周知.NET 體系不同于 COM 體系,ADO.NET 接口也就完全不同于 ADO 和 OLE DB 接口,這也就是說 ADO.NET 和 ADO是兩種數據方式。ADO.NET 提供對 XML 的支持。面試題 234New delete 與 malloc free 有何與區(qū)別【分析與
36、】C/C+軟件工程師在面試的時候內存的特別的多,這是程序安全開發(fā)的關鍵。本題題干中,這兩者都是在堆(heap)上進行動態(tài)的內存操作。使用 malloc 函數需要指定內存分配的字節(jié)數并且不能初始化對象,New 會自動調用對象的構造函數。delete 會調用對象的 destructor,而 free調用對象的 destructor.面試題 235#define DOUBLE(x) x+x,i = 5*DOUBLE(5),求 i【分析與本題主要】函數的宏定義,例如,#define DOUBLE(x) x+x 就是函數的宏定義。把宏定義展開就能計算正確的結果。將其展開:i= 5*6 + 6 = 30。
37、所以,i 為 30。面試題 236哪幾種情況只能用 intialization list 而不能用 assignment【分析與】當類中含有 const 和 reference 等成員變量時,基類的構造函數都需要初始化表。本題主要就是初始化關鍵字,這是 C+中非常基礎又非常關鍵的技術點。面試題 237C+是不是類型安全的【分析與】不是。兩個不同類型的指針之間可以強制轉換(用 reinterpret cast)。回答本題時,可以先說清楚什么是類型安全,然后解釋類型安全的必要性,最后回答結果。當然如果能很干脆地給出結果,也說明了應聘者基礎還比較扎實,對待問題的處理不拖泥帶水。面試題 238main
38、()函數執(zhí)行前還會執(zhí)行什么代碼【分析與】全局對象的構造函數會在 main()函數之前執(zhí)行。筆者曾經在 MSN 上應聘一個的工作,當初方面給的所有的題都是一些包含多個構造函數的對象,的主·249·第 4 篇 C/C+面試題實戰(zhàn)要內容就是每個構造函數執(zhí)行的先后順序。外企公司特別注意這種題型,而初學者經常在這方面有點。通過此題也希望讀者能深化面向對象的知識。面試題 239static 有什么用途(至少說明兩種)【分析與】靜態(tài)變量的類型說明符是 static。靜態(tài)變量當然是屬于靜態(tài)儲方式的變量不一定就是靜態(tài)變量。例如,外部變量雖屬于靜態(tài)方式,但是屬于靜態(tài)存方式,但不一定是靜態(tài)變量,
39、必須由 static 加以定義后才能成為靜態(tài)外部變量,或稱靜態(tài)全局變量。通過上述概念的了解,可以知道 static 的主要用途有以下兩個:q 限制變量的作用域;q 設置變量的域。面試題 240描述實時系統(tǒng)的基本特性【分析與】實時系統(tǒng)的特性就是在特定時間內完成特定的任務、實時性與可靠性。本題其實的是應聘者對于實時系統(tǒng)的了解程度。除了解外,還要知道它與 C 語言的關系。面試題 241全局變量和局部變量在內存中是否有區(qū)別?說明【分析與】有區(qū)別。全局變量在靜態(tài)數據區(qū),局部變量在堆棧中。本題一看就知道的是基礎知識,了解什么是全局變量,什么是局部變量。既然名字不同,那肯定有一定的區(qū)別。如果這類問題不上來,
40、那應聘者應該把一本 C 語言入門書從頭到尾再讀一遍。面試題 242什么是平衡二叉樹【分析與】二叉樹是每個結點最多有兩個子樹的有序樹。通常子樹的根被稱作左子樹(left subtree) 和右子樹(right subtree)。應聘者應先了解什么是二叉樹,再去說明什么是平衡二叉樹。平衡二叉樹的左右子樹都是平衡二叉樹,且左右子樹的深度差值的絕對值不大于 1。面試題 243定義 int *a34,則變量占用的內存空間為多少【分析與】還是常見的對 C 語言的內存如下:,回答占用內存空間應該考慮 16 位和 32 位的問題,在 int *p; /*16 位下 sizeof(p)=2,32 位下 size
41、of(p)=4*/,總共 3*4*sizeof(p)。·250·第 18 章 文字解答實戰(zhàn)題面試題 244堆棧溢出一般是由什么導致的【分析與】堆棧溢出一般是循環(huán)的遞歸調用導致的。如果使用的大數據結構的局部變量,也可能導致堆棧溢出。沒有回收會導致內存泄露最后耗盡系統(tǒng)內存。如果這個問題說的很清楚,則應聘者在安全開發(fā)方面是比較在意的,面試官要的就是 C/C+語言開發(fā)的安全問題。面試題 245什么函數不能為虛函數【分析與】構造函數不能為虛函數,如下:(1)所謂虛函數就是多態(tài)情況下只執(zhí)行一個,而從繼承的概念來講,總是要先構造父類對象,然后才能是子類對象。如果構造函數設為虛函數,那么當
42、在構造父類的構造函數時就不得不顯示的調用構造。還有一個就是為了防錯,試想如果在子類中一不重寫了一個與父類構造函數一樣的函數,那么父類的構造函數將被覆蓋,這樣的話既不能完成父類的構造也會出錯。(2)虛函數的主要意義在于被派生類繼承從而產生多態(tài)。派生類的構造函數中,編譯器會加入構造基類的代碼,如果基類的構造函數用到參數,則派生類在其構造函數的初始化列表中必須為基類給出參數。面試題 246冒泡排序算法的時間復雜度是什么【分析與】冒泡排序是這樣實現的:首先將所有待排序的數字放入工作列表中。從列表的第一個數字到倒數第二個數字,逐個檢查:若某一位上的數字大于它的下一位,則將它與它的下一位交換。重復上述步驟
43、,直至再也不能交換。冒泡排序的平均時間復雜度與同,也是平方級的,但也是非常容易實現的算法。冒泡排序的時間復雜度是:O(n2)。排序相面試題 247寫出 float x 與“零值”比較的 if 語句【分析與】x 是一個變量,被定義為 float,所以在比較時,零值并不是 0,而是以下代碼:if(x>0.000001&&x<-0.000001)一般來說,對于一個浮點數,只定義了不使用。通常我們都會對浮點數進行比較復雜的運算,那么在運算的過程中,就有可能發(fā)生四舍五入的情況。所以,對于一個進行了一些可能導致四舍五入的運算的浮點數而言,不能保證它的準確性(當然這里的誤差是
44、183;251·第 4 篇 C/C+面試題實戰(zhàn)非常非常小的)。所以,在對浮點數比較的時候,就需要考慮到這些誤差,方法之一就是,讓浮點數與一段數值范圍比較,而不是與一個確定的數值比較。面試題 248Internet 采用哪種網絡協(xié)議?介紹該協(xié)議的主要層次結構【分析與】Internet 采用的是 TCP/IP 協(xié)議。TCP/IP 協(xié)議的主要層次結構為 5 層:應用層、傳輸層、網絡層、數據鏈路層和物理層。本題的是網絡相關知識,需要對網絡的層次結構和協(xié)議有一定的了解。這些內容非?;A,如果應聘網絡方面的工程師,則這些問題必須能回答上來。面試題 249Internet 物理地址和 IP 地址轉
45、換采用什么協(xié)議【分析與】采用 ARP(Address Resolution Protocol)即地址ARP 協(xié)議的基本功能就是通過目標設備的 IP 地址,協(xié)議。目標設備的 MAC 地址,以保證通信的順利進行。地址換成目標 MAC 地址的過程。(address resolution)就是主機在幀前將目標 IP 地址轉面試題 250IP 地址的編碼分為哪兩部分【分析與】IP 地址由兩部分組成:網絡號和主機號。不過是要和“子網掩碼”按位與上之后,才能區(qū)分哪些是網絡位哪些是主機位。本題也是的網絡相關知識。如果是普通的 C/C+工程師,可能這方面的問題,專門做通信或語音等相關方面的網絡工程師,本題很常見
46、。面試題 251不能做 switch()的參數類型是什么數據類型【分析與switch(表數不能為實型。switch()表】),表可以是整型、字符型以及枚舉類型等表。switch()的參是常見的分支選擇語句,在多條件時經常遇到,為了更好的使用它,一定要了解這方面的知識,本題就是應聘者的編程經驗,因為如果你經驗豐富,則這種編程中常用表的注意事項難不倒應聘者。面試題 252盡可能多地說出 static 和 const 關鍵字的作用【分析與】static 關鍵字至少有下列 n 個作用:·252·第 18 章 文字解答實戰(zhàn)題(1)函數體內 static 變量的作用范圍為該函數體,不同
47、于 auto 變量,該變量的內存只被分配一次,因此其值在下次調用時仍維持上次的值。(2)在模塊內的 static 全局變量可以被模塊內所用函數數。,但不能被模塊外其他函(3)在模塊內的 static 函數只可以被這一模塊內的其他函數調用。這個函數的使用范圍被限制在它的模塊內。(4) 在類中的 static 成員變量屬于整個類所擁有,對類的所有對象只有一份拷貝。(5) 在類中的 static 成員函數屬于整個類所擁有,這個函數不接收 this 指針,因而只能類的 static 成員變量。const 關鍵字至少有下列 n 個作用:(1)欲一個變量被改變,可以使用 const 關鍵字。在定義該 co
48、nst 變量時,通常需要對它進行初始化,因為以后就沒有機會再去改變它了。(2)對指針來說,可以指定指針本身為 const;也可以指定指針所指的數據為 const, 或二者同時指定為 const。(3)在一個函數能改變其值。中,const 可以修飾形參,表明它是一個輸入參數,在函數內部不(4) 對于類的成員函數,若指定其為 const 類型,則表明其是一個常函數,不能修改類的成員變量。(5) 對于類的成員函數,有時候必須指定其返回值為 const 類型,以使得其返回值不為“”,例如下面的代碼:const classA operator*(const classA& a1,const cl
49、assA& a2);operator*的返回結果必須是一個 const 對象。如果不是,這樣的代碼也編譯出錯:操作(a * b) = c 顯然不符合編程者的初衷,也沒有任何意義。%注意:看到上面的代碼,讀者也許會覺得有一點驚訝。很普通的 static 和 const 居然有這么多功能,這個題可以考查面試者對程序設計知識的掌握程度是初級、中級還是比較深入,如果沒有一定的知識廣度和深度,不可能對這個問題給出全面地解答。大多數人只能回答出 static 和 const 關鍵字的部分功能。面試題 253什么是預編譯【分析與】預編譯就是處理#開頭的指令。例如,拷貝#include 包含的文件代碼
50、,#define 宏定義的替換和條件編譯等。預編譯就是為編譯做的預備工作的階段,主要處理#開始的預編譯指令。預編譯指令指示了在程序正式編譯前就由編譯器進行的操作,可以放在位置。何時需要預編譯,具體如下:的任何·253·classA a, b, c;(a * b) = c;/對 a*b 的結果賦值第 4 篇 C/C+面試題實戰(zhàn)(1)總是使用不經常改動的大型代碼體。(2)多個模塊組成,所有模塊都使用一組標準的包含文件和相同的編譯選項。在這種情況下,可以將所有包含文件預編譯為一個預編譯頭。面試題 254寫一個,使其輸入兩個參數,返回較小的一個【分析與本題就是】宏定義,注意最后沒有
51、分號結尾。詳細代碼如下:.#define Min(X, Y) (X)>(Y)?(Y):(X) /結尾沒有;面試題 255系統(tǒng)中如何用 C 語言編寫死循環(huán)【分析與】如果不是常面試的人可能不知道,題目竟然是要使用 C 語言來編寫死循環(huán),這不是影響程序的進行嘛?但筆者面試過很多公司,這個問題還是非常多見的。因為題目的前提是系統(tǒng)中經常遇到無限循環(huán),也就是我們while(1)或者 for(;)的死循環(huán)。如下:面試題 256int (*s10)(int)表示什么【分析與】學習 C 語言時,覺得指針是最基礎卻又最難的一項技術,面試題基本都會碰到,但一旦學習好它,就很容易過關。本題的就是數組指針。int
52、 (*s10)(int)函數指針數組,將每個指針指向一個 int func(int param)的函數。面試題 257下列表哪些會被編譯器(面試題)題目:【分析與】指針和變量定義相關方面的知識,非常基礎,如下:·254·int a=248; b=4;int const c=21; const int *d=&a; int *const e=&b;int const *f const =&a;*c=32; d=&b;*d=43;e=34;e=&a; f=0x321f;第 18 章 文字解答實戰(zhàn)題(1)*c 語法錯誤,所以。(2)*d 已
53、經定義了是 const,所以(3)e = &a 已經定義了是 const,所以。(4)const *f const =&a,。面試題 258換兩個變量的值而不使用第 3 個變量,即 a=3,b=5,交換之后 a=5,b=3【分析與】有兩種解法:一種是使用算術算法,另一種是使用(異或)。示例代碼如下:和:面試題 259C 和 C+中的 struct 有什么不同【分析與】在 C 和 C+中,struct 的主要區(qū)別是 C 中的 struct 不可以含有成員函數,而 C+中的struct 可以。在 C+中 struct 和 class 的主要區(qū)別在于默認的存取權限不同,struct
54、默認為public,而 class 默認為 private。面試題 260如何讓程序跳轉到絕對地址 0x100000 去執(zhí)行要對絕對地址 0x100000 賦值,可以用(unsigned int*)0x100000 = 1234。那么如何讓程序跳轉到絕對地址 0x100000 去執(zhí)行?【分析與】 *(void (*)( )0x100000 ) ( );首先要將 0x100000 強制轉換成函數指針,即:(void (*)()0x100000;然后再調用它,即: *(void (*)()0x100000)();用 typedef 可以看得更直觀些,如下:·255·typedef void(*)() voidFuncPtr;*(voidFuncPtr)0x100000)();a = ab;/ 只能對 int,char. b = ab;a = ab; ora = b = a;a = a + b; b
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 了解紡織材料特性試題及答案
- 電路基礎期末試題及答案
- 等待救援面試題及答案
- 管理基礎考試題及答案
- 互動營銷與傳統(tǒng)廣告的區(qū)別試題及答案
- 七和弦樂理試題及答案
- 廣告受眾的多樣性與考慮因素分析試題及答案
- 國際商業(yè)美術設計師考試例題解析及答案
- 林木種子法試題及答案
- 2024年國際商業(yè)美術設計師考試創(chuàng)意項目合作模式討論試題及答案
- 產后抑郁癥的原因及護理文獻匯報
- 湖北省武漢市華中師大一附中2025屆高考數學全真模擬密押卷含解析
- 【MOOC】行政法與行政訴訟法學-西南政法大學 中國大學慕課MOOC答案
- ARVR在電商設計中的應用與前景
- 宣傳工作實務-形考任務三-國開(FJ)-參考資料
- 貴州省遵義市(2024年-2025年小學五年級語文)人教版小升初真題((上下)學期)試卷及答案
- 物流行業(yè)綜合工時優(yōu)化方案
- 宮頸癌護理查房-5
- 2023年上海鐵路局集團有限公司招聘考試真題
- 中國高血壓防治指南(2024年修訂版)要點解讀
- 軸類零件加工工藝設計-畢業(yè)設計論文
評論
0/150
提交評論