visual集合庫(kù)-零基礎(chǔ)學(xué)c第16章_第1頁(yè)
visual集合庫(kù)-零基礎(chǔ)學(xué)c第16章_第2頁(yè)
visual集合庫(kù)-零基礎(chǔ)學(xué)c第16章_第3頁(yè)
visual集合庫(kù)-零基礎(chǔ)學(xué)c第16章_第4頁(yè)
visual集合庫(kù)-零基礎(chǔ)學(xué)c第16章_第5頁(yè)
已閱讀5頁(yè),還剩61頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

零基礎(chǔ)學(xué)VC第16章常見的面試題及解答技巧課程安排理論基礎(chǔ)知識(shí):數(shù)學(xué)、智力題程序設(shè)計(jì)問(wèn)答題計(jì)算機(jī)理論知識(shí)題程序設(shè)計(jì)與算法題小結(jié)16.1理論基礎(chǔ)知識(shí):數(shù)學(xué)、智力題

考些“無(wú)法準(zhǔn)備”的問(wèn)題。

目的:來(lái)考察應(yīng)聘者的應(yīng)變能力、解決問(wèn)題能力以及闡述問(wèn)題的能力。

面試題1:請(qǐng)把一盒蛋糕切成8份,分給8個(gè)人,但蛋糕盒里還必須留有一份。答:面對(duì)這樣的怪題,有些應(yīng)聘者絞盡腦汁也無(wú)法分成;而有些應(yīng)聘者卻感到此題實(shí)際很簡(jiǎn)單,把切成的8份蛋糕先拿出7份分給7人,剩下的1份連蛋糕盒一起分給第8個(gè)人。面試題2:小貓奔跑問(wèn)題。考慮下列問(wèn)題:將兩只小貓放在足球場(chǎng)的兩端,相距100米。它們以每分鐘10米的速度相向行走。同時(shí),這兩只小貓的貓媽媽在足球場(chǎng)的一端,以每分鐘100米的速度奔跑,貓媽媽從一只小貓跑到另一只小貓,來(lái)回輪流跑而不停歇,一直到兩只小貓?jiān)谥袌?chǎng)相遇。問(wèn)貓媽媽一共跑了多遠(yuǎn)?答:如果使用蠻力計(jì)算,會(huì)建立一個(gè)涉及無(wú)窮幾何級(jí)數(shù)的和計(jì)算。如果通過(guò)引用一個(gè)附加變量,問(wèn)題就會(huì)簡(jiǎn)單得多。兩只小貓以100米距離,且以每分鐘20米的速度接近,即花費(fèi)5分鐘即可相遇,而貓媽媽的速度是每分鐘100米,5分鐘跑的距離是500米,問(wèn)題得解。面試題3:4,4,10,7,各數(shù)只使用一次,運(yùn)用加減乘除,怎么得出24?答:(4+4)*(10-7)=24。如果出現(xiàn)類似的24點(diǎn)問(wèn)題,應(yīng)該想辦法往這幾個(gè)數(shù)組中靠:四六、三八、二和十二。這三組數(shù)據(jù)相乘都是24。本題采取的是三八組合。面試題4:為什么下水道的蓋子是圓的?答:因?yàn)槿绻欠降摹㈤L(zhǎng)方的或橢圓的,那無(wú)聊之徒拎起來(lái)它就可以直接扔進(jìn)地下道啦!但圓形的蓋子嘛,就可以避免這種情況了。說(shuō)明:針對(duì)這類的問(wèn)題,可以設(shè)想如果不是設(shè)定的情況,會(huì)出現(xiàn)什么不妥的事情,然后反推出目前的狀態(tài)是合理的。面試題5:美國(guó)有多少輛汽車?答:這個(gè)乍看讓人有些摸不著頭腦的問(wèn)題時(shí),你可能要從問(wèn)這個(gè)國(guó)家有多少小汽車入手。面試者也許會(huì)告訴你這個(gè)數(shù)字,但也有可能說(shuō):”我不知道,你來(lái)告訴我?!蹦敲?,你對(duì)自己說(shuō),美國(guó)的人口是2.75億。你可以猜測(cè),如果平均每個(gè)家庭(包括單身)的規(guī)模是2.5人,你的計(jì)算機(jī)會(huì)告訴你,共有1.1億個(gè)家庭。你回憶起在什么地方聽說(shuō)過(guò),平均每個(gè)家庭擁有1.8輛小汽車,那么美國(guó)大約會(huì)有1.98億輛小汽車。面試題6:為什么鏡子中的影像可以顛倒左右,卻不能顛倒上下?答:因?yàn)槿说膬裳墼谒椒较蛏蠈?duì)稱。因此人眼所見的鏡子映像是左右顛倒的,而眼睛沒(méi)有上下排列,因此不能看到上下顛倒。假設(shè)人躺著看鏡子,則鏡子中的映像就是“上下顛倒”了。面試題7:請(qǐng)估算一下密西西比河的水的總質(zhì)量。答:該題和面試題5有點(diǎn)類似,都是屬于估算題。它和一般的謎語(yǔ)或智力題還是有區(qū)別的。我們稱這類題為“快速估算題”,主要考的是快速估算的能力,這是開發(fā)軟件必備的能力之一。當(dāng)然,題目只是手段,不是目的,最終得到一個(gè)結(jié)果固然是需要的,但更重要的是對(duì)考生得出這個(gè)結(jié)果的過(guò)程也就是方法的考察。針對(duì)該題,可以通過(guò)這樣估算:首先預(yù)估密西西比河的水流速度,即一秒鐘的水流可以走多遠(yuǎn),然后估算密西西比河全長(zhǎng),還有密西西比河的橫截面積。通過(guò)這樣可以估算出密西西比河所有水的體積,進(jìn)而得出水的總質(zhì)量。16.2程序設(shè)計(jì)問(wèn)答題在IT研發(fā)公司的面試過(guò)程中,由于時(shí)間有限,且條件有限(如一般不安排上機(jī)),對(duì)程序設(shè)計(jì)的考察往往是以問(wèn)答形式出現(xiàn)的。而應(yīng)聘者的程序設(shè)計(jì)語(yǔ)言理論的水平,也非常容易在問(wèn)答中體現(xiàn)。這類面試問(wèn)題的解答,沒(méi)有捷徑,也不能通過(guò)死記硬背來(lái)準(zhǔn)備,只能通過(guò)平時(shí)的知識(shí)積累,多總結(jié)、多思考、多記錄。面試題8:如何理解面向?qū)ο蠛兔嫦蜻^(guò)程?用C++編程就是面向?qū)ο蟪绦蛟O(shè)計(jì)嗎?答:面向過(guò)程和面向?qū)ο蠖贾皇且环N編程思想,和具體的語(yǔ)言沒(méi)有關(guān)系。使用C語(yǔ)言也可以進(jìn)行面向?qū)ο笏枷氲木幊?,使用C++也可以進(jìn)行面向?qū)ο蟮某绦蛟O(shè)計(jì)。面試題9:C/C++程序設(shè)計(jì)中,局部變量能否和全局變量重名?答:能,局部會(huì)屏蔽全局。要用全局變量,需要使用“::”;局部變量可以與全局變量同名,在函數(shù)內(nèi)引用這個(gè)變量時(shí),會(huì)用到同名的局部變量,而不會(huì)用到全局變量。對(duì)于有些編譯器而言,在同一個(gè)函數(shù)內(nèi)可以定義多個(gè)同名的局部變量,比如在兩個(gè)循環(huán)體內(nèi)都定義一個(gè)同名的局部變量,而那個(gè)局部變量的作用域就在那個(gè)循環(huán)體內(nèi)。面試題10:如何引用一個(gè)已經(jīng)定義過(guò)的全局變量?答:extern可以用引用頭文件的方式,也可以用extern關(guān)鍵字,如果用引用頭文件方式來(lái)引用某個(gè)在頭文件中聲明的全局變理,假定你將那個(gè)編寫錯(cuò)了,那么在編譯期間會(huì)報(bào)錯(cuò),如果你用extern方式引用時(shí),假定你犯了同樣的錯(cuò)誤,那么在編譯期間不會(huì)報(bào)錯(cuò),而在連接期間報(bào)錯(cuò)。面試題11:全局變量可不可以定義在可被多個(gè).C文件包含的頭文件中?為什么?答:可以,在不同的C文件中以static形式來(lái)聲明同名全局變量。可以在不同的C文件中聲明同名的全局變量,前提是其中只能有一個(gè)C文件中對(duì)此變量賦初值,此時(shí)連接不會(huì)出錯(cuò)。面試題12:static全局變量與普通的全局變量有什么區(qū)別?答:全局變量的說(shuō)明之前再冠以static就構(gòu)成了靜態(tài)的全局變量。全局變量本身就是靜態(tài)存儲(chǔ)方式,靜態(tài)全局變量當(dāng)然也是靜態(tài)存儲(chǔ)方式。這兩者在存儲(chǔ)方式上并無(wú)不同。這兩者的區(qū)別在于非靜態(tài)全局變量的作用域是整個(gè)源程序,當(dāng)一個(gè)源程序由多個(gè)源文件組成時(shí),非靜態(tài)的全局變量在各個(gè)源文件中都是有效的。而靜態(tài)全局變量則限制了其作用域,即只在定義該變量的源文件內(nèi)有效,在同一源程序的其它源文件中不能使用它。由于靜態(tài)全局變量的作用域局限于一個(gè)源文件內(nèi),只能為該源文件內(nèi)的函數(shù)公用,因此可以避免在其它源文件中引起錯(cuò)誤。面試題13:對(duì)于一個(gè)頻繁使用的短小函數(shù),在C語(yǔ)言中應(yīng)用什么實(shí)現(xiàn),在C++中應(yīng)用什么實(shí)現(xiàn)?答:C一般用宏定義,C++用inline(內(nèi)聯(lián))函數(shù)。實(shí)際上,C++是包含C的語(yǔ)法特點(diǎn)的,因此,C++中葉可以使用宏定義,但宏定義中,容易引起宏歧義(如\\會(huì)解析為注釋),另外,宏是將程序原樣展開,會(huì)導(dǎo)致程序臃腫,而內(nèi)聯(lián)函數(shù)則是調(diào)用方式。面試題14:關(guān)鍵字const有什么含意?答:表示常量不可以修改的變量,也可以修飾參數(shù),作為輸入?yún)?shù)。修飾函數(shù),防止意外的改動(dòng)。修飾類的成員函數(shù),不改變類中的數(shù)據(jù)成員。在C++程序設(shè)計(jì)中,如果能用const的地方,就盡量用,防止編寫時(shí)意外修改而出錯(cuò)。面試題15:虛函數(shù)和普通函數(shù)有什么不同?答:虛函數(shù)在運(yùn)行時(shí)生成相應(yīng)的機(jī)器碼,并在運(yùn)行時(shí)決定調(diào)用繼承鏈中的具體函數(shù),這種方式稱為動(dòng)態(tài)聯(lián)編。普通函數(shù)在編譯時(shí)就生成相應(yīng)的機(jī)器碼,并在編譯時(shí)決定執(zhí)行繼承鏈中的具體函數(shù),這種方式稱為靜態(tài)聯(lián)編。但如果不需要虛函數(shù)的地方,則定義普通函數(shù),這樣可以減小系統(tǒng)開銷,讓軟件運(yùn)行更為流暢。面試題16:抽象基類不能實(shí)例化,為什么還有抽象基類這個(gè)語(yǔ)法特性?答:抽象類不能實(shí)例化,因此一般作為基類被繼承,因此也常稱抽象類為“抽象基類”。抽象基類的特點(diǎn)是含有純虛函數(shù),因此,如果派生類不重定義純虛函數(shù),則派生類也是抽象類,因此也不能實(shí)例化。進(jìn)而可知,抽象類定義的純虛函數(shù)有著如果派生類要實(shí)例化,則“非要讓派生類重寫純虛函數(shù)”的作用。抽象類就是將接口以純虛函數(shù)的形式規(guī)定好,必須讓派生類重寫。面試題17:C++程序設(shè)計(jì)語(yǔ)言中,vector和數(shù)組有何不同?答:數(shù)組是基礎(chǔ)數(shù)據(jù)類型,vector是向量類,它模擬了數(shù)組的特性,并且具有基礎(chǔ)數(shù)組不具備的許多面向?qū)ο蠊δ?,如可以通過(guò)size()函數(shù)獲得vector所含有的元素?cái)?shù)目,或通過(guò)其他函數(shù)進(jìn)行數(shù)據(jù)量的擴(kuò)展??偟脕?lái)說(shuō),使用vector代替數(shù)組,會(huì)使程序設(shè)計(jì)更為方便,但同時(shí)也會(huì)帶來(lái)額外的系統(tǒng)開銷,很顯然,使用類對(duì)象,無(wú)論從時(shí)間還是空間,都要比基礎(chǔ)數(shù)組類型要多。面試題18:C++編譯器默默為我們完成和調(diào)用了哪些函數(shù)?答:一個(gè)定義體為空的類其實(shí)并不為空,編譯器的服務(wù)非常周到,它默默為我們創(chuàng)建了許多東西:拷貝構(gòu)造函數(shù)、構(gòu)造函數(shù)、賦值運(yùn)算符和一對(duì)取址運(yùn)算符。當(dāng)用戶不自定義這些函數(shù)時(shí),卻可以調(diào)用這些函數(shù),說(shuō)明編譯器自動(dòng)為程序生成了這些默認(rèn)函數(shù)。面試題19:為什么要定義拷貝構(gòu)造函數(shù)?答:任何類都有拷貝構(gòu)造函數(shù),要么用戶自己定義,要么編譯器幫忙直接生成一個(gè)默認(rèn)的拷貝構(gòu)造函數(shù)(有一些中文書籍稱之為復(fù)制構(gòu)造函數(shù),英文統(tǒng)一為copyconstructor)。默認(rèn)的拷貝構(gòu)造函數(shù)執(zhí)行的是木訥的逐字節(jié)拷貝方式,這種方式在某些情況下是直觀且高效的。但如果類內(nèi)有指針,且類實(shí)例化了兩個(gè)對(duì)象,木訥的逐字節(jié)拷貝函數(shù)將兩個(gè)對(duì)象的成員指針都指向了同一塊區(qū)域,那好,其中一個(gè)對(duì)象被銷毀,也將銷毀該對(duì)象成員指針指向的空間,而另外一個(gè)對(duì)象沒(méi)有銷毀,但這個(gè)對(duì)象的成員指針?biāo)赶虻目臻g已經(jīng)不存在了。因此,對(duì)于這種有指針成員的類,需要將指針?biāo)赶虻目臻g也復(fù)制一份出來(lái),這種拷貝方式稱為“深度拷貝”??截悩?gòu)造函數(shù)和重載的賦值運(yùn)算符往往是成對(duì)出現(xiàn)的,自定義了拷貝構(gòu)造函數(shù),則一定要記得也重載定義賦值運(yùn)算符。面試題20:名稱空間有何作用?答:名稱空間用于防止函數(shù)或類名重疊問(wèn)題,其中也包括防止自定義類、函數(shù)和默認(rèn)類、函數(shù)重名,也防止自定義類、函數(shù)之間的重名問(wèn)題。當(dāng)然,同一個(gè)空間中的類、函數(shù)等不能重名,否則編譯器會(huì)提示重復(fù)定義。面試題21:在構(gòu)造函數(shù)中初始化和使用初始化列表有什么不同?答:首先,使用初始化列表的效率要比在構(gòu)造函數(shù)內(nèi)賦值初始化要高,使用初始化列表是調(diào)用具體類對(duì)象的構(gòu)造函數(shù),而賦值操作首先需要?jiǎng)?chuàng)建臨時(shí)對(duì)象,然后調(diào)用復(fù)制構(gòu)造函數(shù)將對(duì)象拷貝到賦值號(hào)左邊的對(duì)象中。其次,在某些情況下一定要用成員初始化列表進(jìn)行初始化,如成員是常量,而常量不能作為左值,因此不能在構(gòu)造函數(shù)中使用賦值的方式進(jìn)行初始化,而在類定義體中也不能初始化,因?yàn)轭惗x不分配具體的空間。在這種情況下,只能使用類構(gòu)造函數(shù)的成員初始化列表進(jìn)行初始化。面試題22:為什么要避免數(shù)據(jù)成員放在公共域中?答:首先從一致性方面考慮,如果用戶程序(調(diào)用類對(duì)象的程序或函數(shù))在使用時(shí)每一項(xiàng)都是函數(shù),則用戶程序無(wú)需在調(diào)用時(shí)每次都考慮是否要加小括號(hào)。因?yàn)槊宽?xiàng)都是函數(shù),所以都一致性地加小括號(hào)進(jìn)行訪問(wèn)。再假設(shè)另外一種實(shí)際的情況,假設(shè)某個(gè)類需要頻繁讀取數(shù)據(jù)成員數(shù)組的平均值,如果直接讀取的話,則每新增數(shù)組成員,則要計(jì)算一次,而如果使用成員函數(shù),則調(diào)用時(shí),也就是增加每一批時(shí)才計(jì)算平均值,這樣來(lái)看,系統(tǒng)開銷要比直接讀取要小得多。面試題23:可定義也可不定義const的變量為什么盡量要定義const?答:const的含義是“某個(gè)對(duì)象不應(yīng)該被修改”,const不僅僅用于定義常量類型,也可以用于在類成員函數(shù)中約束函數(shù)改變類的成員。如下代碼:01 stze_tString::Length()const02 {03 if(!lengthIsValid)04 {05 dataLength=strlen(data);//錯(cuò)誤!06 lengthIsValid=true;//錯(cuò)誤!07 }08 returndataLength;09 }面試題24:C和C++的注釋風(fēng)格有何不同,為什么盡量選擇C++風(fēng)格的注釋?答:C++風(fēng)格的注釋指的是“//”符號(hào),用于注釋一行,而C語(yǔ)言風(fēng)格的注釋指的是“/**/”的一對(duì)符號(hào),用于注釋這一對(duì)符號(hào)之中的內(nèi)容。C風(fēng)格的注釋將從“/*”開始,直到遇到第一個(gè)“*/”為止。如下代碼將會(huì)引起注釋歧義:01 if(a>b)02 {03 /*inttemp=a;/*swapaandb*/04 a=b;05 b=temp;06 */07 }面試題25:在程序編譯時(shí),編譯器會(huì)有一些警告信息,你是如何看待這些警告信息的?答:警告信息是編譯器給開發(fā)人員提醒的信息,但并非是語(yǔ)法錯(cuò)誤,當(dāng)開發(fā)人員忽視警告信息時(shí),編譯器照常編譯、連接并運(yùn)行生成執(zhí)行文件。而問(wèn)題就出在這里了,如果警告信息可能會(huì)使軟件使用時(shí)造成錯(cuò)誤的,忽視警告并沒(méi)有解決掉錯(cuò)誤,而是將錯(cuò)誤延期到了運(yùn)行時(shí),這是軟件開發(fā)中最需要避免的。16.3計(jì)算機(jī)理論知識(shí)題技術(shù)面試題中,最常見的就是計(jì)算機(jī)理論知識(shí)題,尤其是大中型企業(yè),特別注重計(jì)算機(jī)理論知識(shí)是否深厚,理論知識(shí)的水平,決定了該應(yīng)聘者是否有培養(yǎng)前途。一般而言,企業(yè)也較重視重點(diǎn)大學(xué)的畢業(yè)生,與其說(shuō)這是一種學(xué)校歧視,不如說(shuō)這是一種間接的計(jì)算機(jī)理論水平篩選,如果讀者并非重點(diǎn)大學(xué)畢業(yè),則更要注重相關(guān)理論知識(shí)的準(zhǔn)備,以實(shí)力打敗名校的競(jìng)爭(zhēng)對(duì)手。面試題26:基本的數(shù)據(jù)結(jié)構(gòu)有哪些類型?答:基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)有3大類,分別是:線性、樹狀和圖狀。線性數(shù)據(jù)結(jié)構(gòu)主要有線性表、單鏈表和雙向鏈表,線性數(shù)據(jù)結(jié)構(gòu)的判斷基礎(chǔ)是除了首元素和尾元素,其他元素都有只有一個(gè)前驅(qū)和一個(gè)后繼。樹狀結(jié)構(gòu)是無(wú)環(huán)結(jié)構(gòu),即除根節(jié)點(diǎn)外,每個(gè)節(jié)點(diǎn)都有一個(gè)前驅(qū)和若干后繼,但不能形成環(huán)路。圖狀則涵蓋了前兩者類型,也允許有環(huán)。面試題27:什么是平衡二叉樹(AVL樹)?答:平衡二叉樹是每個(gè)節(jié)點(diǎn)的左右子樹高度最多差1的二叉樹。注意,說(shuō)到平衡二叉樹,需要明確一點(diǎn)的是,這個(gè)定義是普遍定義,也可以自定義,如自定義左右子樹高度最多差2或者差0的二叉樹,但通用的還是差1的。常用操作是插入和刪除,在每次插入和刪除后,可能會(huì)破壞平衡條件,需要通過(guò)一次旋轉(zhuǎn)或二次旋轉(zhuǎn)來(lái)保持平衡特性。面試題28:給出一系列的二進(jìn)制碼,如何判斷這些編碼是前綴碼?答:任何一個(gè)二進(jìn)制碼都不能成為其他任何二進(jìn)制的前綴,則可以稱這些二進(jìn)制碼為前綴碼。前綴碼在組合時(shí)不會(huì)造成信息歧義,因?yàn)槿魏未a都不是其他碼的前綴,而且前綴碼根據(jù)信息出現(xiàn)的頻率來(lái)編碼,因此可以將高概率出現(xiàn)的信息以短碼編制,低概率出現(xiàn)的信息以長(zhǎng)碼編制,以此減小信息容量。面試題29:什么是左式堆?答:任一節(jié)點(diǎn)X的零路徑長(zhǎng)定義為從X到一個(gè)不具有兩個(gè)兒子的節(jié)點(diǎn)的最短路徑的長(zhǎng)度。左式堆定義為:對(duì)于堆中的每一個(gè)節(jié)點(diǎn)X,左兒子的零路徑長(zhǎng)至少與右兒子的零路徑長(zhǎng)一樣大(也就是左兒子的零路徑長(zhǎng)大于等于右兒子的零路徑長(zhǎng))。面試題30:請(qǐng)簡(jiǎn)單闡述3NF和BCNF的基本概念。答:每個(gè)非主屬性不部分依賴于碼也不傳遞依賴于碼符合3NF規(guī)范,在3NF的基礎(chǔ)上,沒(méi)有任何屬性完全函數(shù)依賴于非碼的任何一組屬性。面試題31:數(shù)據(jù)庫(kù)并發(fā)操作可能會(huì)帶來(lái)什么問(wèn)題?如何防止這些問(wèn)題?答:數(shù)據(jù)庫(kù)并發(fā)控制帶來(lái)的數(shù)據(jù)不一致性有3類:丟失修改、不可重復(fù)讀和讀“臟”數(shù)據(jù)。防止這些問(wèn)題主要通過(guò)封鎖協(xié)議進(jìn)行,一般而言,可以設(shè)定二級(jí)封鎖協(xié)議。第一級(jí)封鎖協(xié)議:事務(wù)T在修改數(shù)據(jù)R之前必須先對(duì)其加X(jué)鎖,直到事務(wù)結(jié)束才釋放。第二級(jí)封鎖協(xié)議:一級(jí)封鎖協(xié)議加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,讀完后釋放S鎖。S鎖是共享鎖,X鎖是排他鎖。S鎖鎖定資源時(shí),則事務(wù)可以讀資源但不能修改,其他事務(wù)職能對(duì)資源加S鎖,而不能加X(jué)鎖。X鎖鎖定資源時(shí),只允許該事務(wù)讀取和修改資源,其他事務(wù)不得對(duì)資源加任何鎖。面試題32:簡(jiǎn)述CMM和CMMI。答:CMM是軟件過(guò)程能力成熟度模型的簡(jiǎn)稱,它用于評(píng)估軟件開發(fā)組織承接軟件項(xiàng)目的能力,強(qiáng)調(diào)持續(xù)的過(guò)程改進(jìn),為各種軟件機(jī)構(gòu)的過(guò)程改進(jìn)提供有效的指導(dǎo)指標(biāo),CMM將軟件組織的能力成熟度分為5級(jí):初始級(jí)、可重復(fù)級(jí)、已定義級(jí)、已管理級(jí)、優(yōu)化級(jí)。CMMI是CMM的最新版本。CMMI被看作是把各種CMM集成到一個(gè)系列的模型中,它從CMM演化而來(lái),但CMMI的基礎(chǔ)源模型更形式化和精致。面試題33:在一個(gè)查詢中,使用哪一個(gè)關(guān)鍵字能夠除去重復(fù)列值?答:使用distinct關(guān)鍵字。在查詢中,一般select語(yǔ)句選取的列未必都是碼,因此出現(xiàn)重復(fù)的概率很高。而數(shù)據(jù)庫(kù)中可以創(chuàng)建視圖,在使用屬性子集來(lái)創(chuàng)建視圖,則無(wú)需過(guò)多的餓冗余信息。面試題34:什么是快照?它的作用是什么?答:快照Snapshot是一個(gè)文件系統(tǒng)在特定時(shí)間里的鏡像,對(duì)于在線實(shí)時(shí)數(shù)據(jù)備份非常有用。快照對(duì)于擁有不能停止的應(yīng)用或具有常打開文件的文件系統(tǒng)的備份非常重要。對(duì)于只能提供一個(gè)非常短的備份時(shí)間而言,快照能保證系統(tǒng)的完整性。面試題35:簡(jiǎn)述存儲(chǔ)過(guò)程和觸發(fā)器的相關(guān)概念。答:存儲(chǔ)過(guò)程是一組Transact-SQL語(yǔ)句,在一次編譯后可以執(zhí)行多次。因?yàn)椴槐刂匦戮幾gTransact-SQL語(yǔ)句,所以執(zhí)行存儲(chǔ)過(guò)程可以提高性能。觸發(fā)器是一種特殊類型的存儲(chǔ)過(guò)程,不由用戶直接調(diào)用。創(chuàng)建觸發(fā)器時(shí)會(huì)對(duì)其進(jìn)行定義,以便在對(duì)特定表或列作特定類型的數(shù)據(jù)修改時(shí)執(zhí)行。面試題36:SQLServer是否支持行級(jí)鎖,有什么好處?答:支持動(dòng)態(tài)行級(jí)鎖定SQLServer2000動(dòng)態(tài)地將查詢所引用的每一個(gè)表的鎖定粒度調(diào)整到合適的級(jí)別。當(dāng)查詢所引用的少數(shù)幾行分散在一個(gè)大型表中時(shí),優(yōu)化數(shù)據(jù)并行訪問(wèn)的最佳辦法是使用粒度鎖,如行鎖。但是,如果查詢引用的是一個(gè)表中的大多數(shù)行或所有行,優(yōu)化數(shù)據(jù)并行訪問(wèn)的最佳辦法可以是鎖定整個(gè)表,以盡量減少鎖定開銷并盡快完成查詢。面試題37:事務(wù)是什么?事務(wù)具備哪些特性?答:事務(wù)是作為一個(gè)邏輯單元執(zhí)行的一系列操作,一個(gè)邏輯工作單元必須有四個(gè)屬性,稱為ACID(原子性、一致性、隔離性和持久性)屬性,只有這樣才能成為一個(gè)事務(wù):1、原子性2、一致性3、隔離性4、持久性面試題38:觸發(fā)器分為事前觸發(fā)和事后觸發(fā),這兩種觸發(fā)有何區(qū)別?語(yǔ)句級(jí)觸發(fā)和行級(jí)觸發(fā)有何區(qū)別?答:事前觸發(fā)器運(yùn)行于觸發(fā)事件發(fā)生之前,而事后觸發(fā)器運(yùn)行于觸發(fā)事件發(fā)生之后。通常事前觸發(fā)器可以獲取事件之前和新的字段值。語(yǔ)句級(jí)觸發(fā)器可以在語(yǔ)句執(zhí)行前或后執(zhí)行,而行級(jí)觸發(fā)在觸發(fā)器所影響的每一行觸發(fā)一次。面試題39:解決死鎖的方法有哪些?答案:解決方式一般有4種:1、SQLServer自動(dòng)檢測(cè)和消除死鎖。2、設(shè)置死鎖優(yōu)先級(jí)。3、設(shè)置鎖定超時(shí)。4、使用更新鎖避免死鎖。面試題40:提高數(shù)據(jù)庫(kù)運(yùn)行效率的辦法有哪些?答:在給定的系統(tǒng)硬件和系統(tǒng)軟件條件下,提高數(shù)據(jù)庫(kù)系統(tǒng)的運(yùn)行效率的辦法是:1、在數(shù)據(jù)庫(kù)物理設(shè)計(jì)時(shí),降低范式,增加冗余,少用觸發(fā)器,多用存儲(chǔ)過(guò)程。2、當(dāng)計(jì)算非常復(fù)雜、而且記錄條數(shù)非常巨大時(shí)(例如一千萬(wàn)條),復(fù)雜計(jì)算要先在數(shù)據(jù)庫(kù)外面,以文件系統(tǒng)方式用C++語(yǔ)言計(jì)算處理完成之后,最后才入庫(kù)追加到表中去。這是電信計(jì)費(fèi)系統(tǒng)設(shè)計(jì)的經(jīng)驗(yàn)。3、發(fā)現(xiàn)某個(gè)表的記錄太多,例如超過(guò)一千萬(wàn)條,則要對(duì)該表進(jìn)行水平分割。水平分割的做法是,以該表主鍵PK的某個(gè)值為界線,將該表的記錄水平分割為兩個(gè)表。若發(fā)現(xiàn)某個(gè)表的字段太多,例如超過(guò)八十個(gè),則垂直分割該表,將原來(lái)的一個(gè)表分解為兩個(gè)表。4、對(duì)數(shù)據(jù)庫(kù)管理系統(tǒng)DBMS進(jìn)行系統(tǒng)優(yōu)化,即優(yōu)化各種系統(tǒng)參數(shù),如緩沖區(qū)個(gè)數(shù)。5、在使用面向數(shù)據(jù)的SQL語(yǔ)言進(jìn)行程序設(shè)計(jì)時(shí),盡量采取優(yōu)化算法??傊?,要提高數(shù)據(jù)庫(kù)的運(yùn)行效率,必須從數(shù)據(jù)庫(kù)系統(tǒng)級(jí)優(yōu)化、數(shù)據(jù)庫(kù)設(shè)計(jì)級(jí)優(yōu)化、程序?qū)崿F(xiàn)級(jí)優(yōu)化,這三個(gè)層次上同時(shí)下功夫。面試題41:以你的工作經(jīng)驗(yàn),簡(jiǎn)述數(shù)據(jù)庫(kù)的設(shè)計(jì)過(guò)程。答:數(shù)據(jù)庫(kù)設(shè)計(jì)分為五個(gè)階段:需求分析:主要是準(zhǔn)確收集用戶信息需求和處理需求,并對(duì)收集的結(jié)果進(jìn)行整理和分析,形成需求說(shuō)明。概念結(jié)構(gòu)設(shè)計(jì):對(duì)用戶需求進(jìn)行綜合、歸納、抽象,形成一個(gè)與與具體的DBMS無(wú)關(guān)概念模型(一般為ER模型)。邏輯結(jié)構(gòu)設(shè)計(jì):將概念結(jié)構(gòu)設(shè)計(jì)的概念模型轉(zhuǎn)化為某個(gè)特定的DBMS所支持的數(shù)據(jù)模型,建立數(shù)據(jù)庫(kù)邏輯模式,并對(duì)其進(jìn)行優(yōu)化,同時(shí)為各種用戶和應(yīng)用設(shè)計(jì)外模式。物理結(jié)構(gòu)設(shè)計(jì):為設(shè)計(jì)好的邏輯模型選擇物理結(jié)構(gòu),包括存儲(chǔ)結(jié)構(gòu)和存取方法等,建立數(shù)據(jù)庫(kù)物理模式。實(shí)施和維護(hù):實(shí)施就是使用DLL語(yǔ)言建立數(shù)據(jù)庫(kù)模式,將實(shí)際數(shù)據(jù)載入數(shù)據(jù)庫(kù),建立真正的數(shù)據(jù)庫(kù)。維護(hù)階段是對(duì)運(yùn)行中的數(shù)據(jù)庫(kù)進(jìn)行評(píng)價(jià)、調(diào)整和修改。面試題42:在為視圖創(chuàng)建索引前,視圖本身必須滿足哪些條件?答:需要滿足以下條件:1、視圖以及視圖中引用的所有表都必須在同一數(shù)據(jù)庫(kù)中,并具有同一個(gè)所有者2、索引視圖無(wú)需包含要供優(yōu)化器使用的查詢中引用的所有表。3、必須先為視圖創(chuàng)建唯一群集索引,然后才可以創(chuàng)建其它索引。4、創(chuàng)建基表、視圖和索引以及修改基表和視圖中的數(shù)據(jù)時(shí),必須正確設(shè)置某些SET選項(xiàng)(在本文檔的后文中討論)。另外,如果這些SET選項(xiàng)正確,查詢優(yōu)化器將不考慮索引視圖。5、視圖必須使用架構(gòu)綁定創(chuàng)建,視圖中引用的任何用戶定義的函數(shù)必須使用SCHEMABINDING選項(xiàng)創(chuàng)建。6、另外,還要求有一定的磁盤空間來(lái)存放由索引視圖定義的數(shù)據(jù)。面試題43:什么是SQLServer的確定性函數(shù)和不確定性函數(shù)?答:只要使用特定的輸入值集并且數(shù)據(jù)庫(kù)具有相同的狀態(tài),不管何時(shí)調(diào)用,始終都能范圍相同結(jié)果的函數(shù)叫確定性函數(shù)。幾十訪問(wèn)的數(shù)據(jù)庫(kù)的狀態(tài)不變,每次書用特定的輸入值都可能范圍不同結(jié)果的函數(shù)叫非確定性函數(shù)。面試題44:哪類視圖是可以更新的?哪類視圖是不可更新的?各舉一例說(shuō)明。答:基本表的行列子集視圖一般是可更新的。若視圖的屬性來(lái)自集函數(shù)、表達(dá)式,則該視圖肯定是不可以更新的。面試題45:所有的視圖是否都可以更新?為什么?答案:不是。視圖是不實(shí)際存儲(chǔ)數(shù)據(jù)的虛表,因此對(duì)視圖的更新,最終要轉(zhuǎn)換為對(duì)基本表的更新。因?yàn)橛行┮晥D的更新不能惟一有意義地轉(zhuǎn)換成對(duì)相應(yīng)基本表的更新,所以,并不是所有的視圖都是可更新的。面試題46:什么是基本表?什么是視圖?答:基本表是本身獨(dú)立存在的表,在SQL中一個(gè)關(guān)系就對(duì)應(yīng)一個(gè)表。視圖是從一個(gè)或幾個(gè)基本表導(dǎo)出的表。視圖本身不獨(dú)立存儲(chǔ)在數(shù)據(jù)庫(kù)中,是一個(gè)虛表。面試題47:數(shù)據(jù)庫(kù)中為什么要有視圖,試述視圖的優(yōu)點(diǎn)。答:視圖有以下優(yōu)點(diǎn):1、視圖能夠簡(jiǎn)化用戶的操作。2、視圖使用戶能以多種角度看待同一數(shù)據(jù)。3、視圖為數(shù)據(jù)庫(kù)提供了一定程度的邏輯獨(dú)立性。4、視圖能夠?qū)C(jī)密數(shù)據(jù)提供安全保護(hù)。16.4程序設(shè)計(jì)與算法題面試題中,一般極少出現(xiàn)程序設(shè)計(jì)題或算法題,即使一般也以口述或偽代碼的方式實(shí)現(xiàn)即可。所以在面試時(shí)如果遇到程序設(shè)計(jì)或算法題,方法和步驟比程序細(xì)節(jié)更重要。面試題48:使用C++,輸入一個(gè)字符串,將其逆序后輸出。答:本題的代碼如下所示:01 #include<iostream>02 usingnamespacestd;03 voidmain()04 {05 chara[50];memset(a,0,sizeof(a));06 inti=0,j;07 chart;08 cin.getline(a,50,'/n');09 for(i=0,j=strlen(a)-1;i<strlen(a)/2;i++,j--)10 {11 t=a[i];12 a[i]=a[j];13 a[j]=t;14 }15 cout<<a<<endl;16 }面試題49:代碼判斷題目,判斷給定代碼是否有問(wèn)題。題目的代碼1如下:01 voidtest2()02 {03 charstring[10],str1[10];04 for(i=0;i<=10;i++)05 {06 str1[i]='a';07 }08 strcpy(string,str1);09 }答:以上代碼的錯(cuò)誤在于數(shù)組越界,該程序代碼可以通過(guò)編譯器編譯,但運(yùn)行時(shí)讀取str1[10]時(shí),數(shù)組越界,程序異常退出。題目的代碼2如下:01 classA02 {03 public:04 A(){p=this;}05 ~A(){if(p!=NULL){deletep;p=NULL;}}06 07 A*p;08 };答:以上代碼會(huì)引起無(wú)限遞歸。類對(duì)象在構(gòu)造時(shí),會(huì)將p指向自己,而在析構(gòu)時(shí),會(huì)刪除自己,但自己所指向的還是自己。面試題50:用C++寫個(gè)程序,如何判斷一個(gè)操作系統(tǒng)是16位還是32位的?不能用sizeof()函數(shù)。答:16位的系統(tǒng)下:inti=65536;cout<<i;//輸出0;inti=65535;cout<<i;//輸出-1;32位的系統(tǒng)下:inti=65536;cout<<i;//輸出65536;inti=65535;cout<<i;//輸出65535;面試題51:在不用第三方參數(shù)的情況下,交換兩個(gè)參數(shù)的值。答:該題是程序設(shè)計(jì)的技巧題目,代碼如下:01 #include<stdio.h>02 voidmain()03 {04 inti=60;05 intj=50;06 i=i+j;07 j=i-j;08 i=i-j;09 printf("i=%d/n",i);10 printf("j=%d/n",j);11 }面試題52:程序解讀,判斷問(wèn)題。提供以下代碼,A和B兩個(gè)類的關(guān)系為繼承關(guān)系:01 classA02 {03 virtualvoidfunc1();04 voidfunc2();05 };06 classB:classA07 {08 voidfunc1(){cout<<"fun1inclassB"<<endl;}09 virtualvoidfunc2(){cout<<"fun2inclassB"<<endl;}10 };問(wèn):哪些func1和func2是虛函數(shù)?答:A中的func1和B中的func2都是虛函數(shù)。func1被繼承重寫后,從虛函數(shù)變成了普通函數(shù),而func2繼承重寫后,由基類的普通函數(shù)變?yōu)樘摵瘮?shù)。面試題53:使用SQL語(yǔ)句進(jìn)行數(shù)據(jù)庫(kù)建表與查詢。一個(gè)數(shù)據(jù)庫(kù)中有兩個(gè)表:一張表為Customer,含字段ID,Name;一張表為Order,含字段ID,CustomerID(連向Customer中ID的外鍵),Revenue;寫出求每個(gè)Customer的Revenue總和的SQL語(yǔ)句。答:建表的SQL語(yǔ)句如下所示:01 createtablecustomer02 (03 IDintprimarykey,Namechar(10)04 )05 createtable[order]06 (07 IDintprimarykey,CustomerIDintforeignkeyreferencescustomer(id),Revenuefloat08 )表建立之后,填入測(cè)試數(shù)據(jù),然后可以執(zhí)行以下的查詢SQL語(yǔ)句:01 selectCustomer.ID,sum(isnull([Order].Revenue,0))02 fromcustomerfulljoin[order]03 on([order].customerid=customer.id)04 groupbycustomer.id面試題54:編寫一個(gè)算法,利用棧的基本運(yùn)算返回指定棧的棧底元素。答:假定采用順序棧的存儲(chǔ)結(jié)構(gòu)(棧還可以用鏈表來(lái)存儲(chǔ))??梢韵韧顺鰲t的所有元素,利用臨時(shí)棧temp_st存放st退出的所有元素,則最后一個(gè)元素即為所求元素。然后再將臨時(shí)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論