面向?qū)ο鬁y試題_第1頁
面向?qū)ο鬁y試題_第2頁
面向?qū)ο鬁y試題_第3頁
面向?qū)ο鬁y試題_第4頁
面向?qū)ο鬁y試題_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、一、問答題1. 值類型和引用類型的區(qū)別?值類型和引用類型的區(qū)別在于,值類型的變量直接存放實(shí)際的數(shù)據(jù),而引用類型的變量存放的則是數(shù)據(jù)的地址,即對(duì)象的引用。 值類型變量直接把變量的值保存在棧中,引用類型的變量把實(shí)際數(shù)據(jù)的地址保存在棧中,而實(shí)際數(shù)據(jù)則保存在堆中。注意,堆和棧是兩個(gè)不同的概念,在內(nèi)存中的存儲(chǔ)位置也不相同。堆(Heap)一般用于存儲(chǔ)可變長度的數(shù)據(jù),如字符串類型堆中保存值和對(duì)象,調(diào)用完畢之后依然存在,由垃圾回收器查找棧中有無指向該值或?qū)ο蟮囊?,無則從堆中刪除;棧(Stack)則用于存儲(chǔ)固定長度的數(shù)據(jù),如整型類型的數(shù)據(jù)int(每個(gè)int變量占用四個(gè)字節(jié)),棧由系統(tǒng)管理生存期,存儲(chǔ)代碼執(zhí)行和

2、調(diào)用路徑,執(zhí)行或調(diào)用完畢即從棧中清除。 由數(shù)據(jù)存儲(chǔ)的位置可以得知,當(dāng)把一個(gè)值變量賦給另一個(gè)值變量時(shí),會(huì)在堆棧中保存兩個(gè)完全相同的值;而把一個(gè)引用變量賦給另一個(gè)引用變量,則會(huì)在堆棧中保存對(duì)同一個(gè)堆位置的兩個(gè)引用,即在堆棧中保存的是同一個(gè)堆的地址。在進(jìn)行數(shù)據(jù)操作時(shí),對(duì)于值類型,由于每個(gè)變量都有自己的值,因此對(duì)一個(gè)變量的操作不會(huì)影響到其它變量;對(duì)于引用類型的變量,對(duì)一個(gè)變量的數(shù)據(jù)進(jìn)行操作就是對(duì)這個(gè)變量在堆中的數(shù)據(jù)進(jìn)行操作,如果兩個(gè)引用類型的變量引用同一個(gè)對(duì)象,實(shí)際含義就是它們?cè)诙褩V斜4娴亩训牡刂废嗤?,因此?duì)一個(gè)變量的操作就會(huì)影響到引用同一個(gè)對(duì)象的另一個(gè)變量。(1) 值類型 包括:簡單類型、結(jié)構(gòu)類型

3、、枚舉類型。其中,簡單類型又分為:整型、布爾型、字符型、浮點(diǎn)型、小數(shù)型。 (2) 引用類型 包括:對(duì)象類型、類類型、接口、元數(shù)據(jù)、字符串類型、數(shù)組。/值類型與引用類型的例子static void Main(string args)/=值類型,操作的是值=int i1 = 10;int i2 = i1;i2 = 88;Console.WriteLine(i1 + + i2);/10 88由于值類型直接操作值,所以不會(huì)發(fā)生改變/=引用類型,操作的是引用,所謂的引用可以看作是指向內(nèi)存的地址,地址再對(duì)應(yīng)著內(nèi)容=int intArr1 = new int 1, 2, 3 ;int intArr2 = i

4、ntArr1;intArr20 = 9;intArr22 = 0;foreach (int i in intArr1) Console.Write(i);/結(jié)果:920由于引用類型intArr1的引用賦值給了intArr2,所以他們是持有同一個(gè)引用,當(dāng)intArr2的引用發(fā)生改變的時(shí)候,intArr1的引用也將發(fā)生變化foreach (int j in intArr2) Console.Write(j);/結(jié)果:9 2 0Console.Read();下面代碼的輸出結(jié)果是什么?class Program static void Main(string args) string b; b = o

5、ld; Func1(ref b); Console.WriteLine(b);int c; c = 3; Func1(ref c); Console.WriteLine( c); public static void Func1(ref string a) a = new; public static void Func1(ref int a) a = 6; 答案:new6題目2:下面代碼的輸出結(jié)果是什么? class Program static void Main(string args) string b; b = old; Func1( b); Console.WriteLine(b)

6、; int c; c = 3; Func1( c); Console.WriteLine( c); public static void Func1( string a) a = new; public static void Func1( int a) a = 6; 答案: old 32. 簡述裝箱和拆箱的過程。 裝箱(boxing)是將值類型隱式地轉(zhuǎn)換為引用類型。如int i=3; object o = i ;便是裝箱過程,裝箱一個(gè)數(shù)值會(huì)為其分配一個(gè)對(duì)象實(shí)例,并把該數(shù)值拷貝到新對(duì)象中。拆箱(unboxing)是顯式地把引用類型轉(zhuǎn)換成值類型,如int j = (int)o char j= (

7、char)o。3. 結(jié)構(gòu)和類的區(qū)別是什么? 1) 結(jié)構(gòu)是一個(gè)值類型,保存在棧上,而類是一個(gè)引用類型,保存在受管制的堆上。 2) 對(duì)結(jié)構(gòu)中的數(shù)據(jù)進(jìn)行操作比對(duì)類或?qū)ο笾械臄?shù)據(jù)進(jìn)行操作速度要快。 3) 一般用結(jié)構(gòu)存儲(chǔ)多種類型的數(shù)據(jù),當(dāng)創(chuàng)建一個(gè)很多類或?qū)ο蠊灿玫男⌒蛯?duì)象時(shí),使用結(jié)構(gòu)效率更高。 4. 什么是靜態(tài)變量?類的數(shù)據(jù)成員可以分靜態(tài)變量、非靜態(tài)變量兩種. 靜態(tài)成員:靜態(tài)類中的成員加入static修飾符,即是靜態(tài)成員.可以直接使用類名+靜態(tài)成員名訪問此靜態(tài)成員,因?yàn)殪o態(tài)成員存在于內(nèi)存,非靜態(tài)成員需要實(shí)例化才會(huì)分配內(nèi)存,所以靜態(tài)成員不能訪問非靜態(tài)的成員.因?yàn)殪o態(tài)成員存在于內(nèi)存,所以非靜態(tài)成員可以直接訪

8、問類中靜態(tài)的成員.非成靜態(tài)員:所有沒有加Static的成員都是非靜態(tài)成員,當(dāng)類被實(shí)例化之后,可以通過實(shí)例化的類名進(jìn)行訪問.非靜態(tài)成員的生存期決定于該類的生存期.而靜態(tài)成員則不存在生存期的概念,因?yàn)殪o態(tài)成員始終駐留在內(nèi)容中。一個(gè)類中可以同時(shí)包含靜態(tài)成員和非靜態(tài)成員,類中也包括靜態(tài)構(gòu)造函數(shù)和非靜態(tài)構(gòu)造函數(shù)。5. abstract class和interface有什么區(qū)別?聲明方法的存在而不去實(shí)現(xiàn)它的類被叫做抽像類(abstract class),它用于要?jiǎng)?chuàng)建一個(gè)體現(xiàn)某些基本行為的類,抽象類不能被實(shí)例化。abstact class AA a = new A(); /這個(gè)是錯(cuò)誤的class B:AB

9、b = new B();A a = b;然而可以創(chuàng)建一個(gè)變量,其類型是一個(gè)抽像類,并讓它指向【具體子類】的一個(gè)實(shí)例。不能有抽像構(gòu)造函數(shù)或抽像靜態(tài)方法。抽象類的方法必須全部被子類繼承:如果子類也是抽象的,那么就不必全部繼承接口(interface)是抽像類的【變體】。在接口中,所有方法都是抽像的;在抽象類中,有些方法可以不是抽象的。多繼承性可通過接口實(shí)現(xiàn)。接口中的所有方法都是抽像的,沒有一個(gè)有【方法體】。interface Ainterface Babstract class A1()abstract class A2class c:A1,A,B6. 接口是否可繼承接口? 抽象類是否可實(shí)現(xiàn)(im

10、plements)接口? 抽象類是否可繼承實(shí)體類(concrete class)?接口可以繼承接口。抽象類可以實(shí)現(xiàn)(implements)接口,抽象類是可繼承實(shí)體類,但前提是實(shí)體類必須有明確的構(gòu)造函數(shù)。7. 進(jìn)程和線程分別怎么理解?1)定義解釋進(jìn)程是具有一定獨(dú)立功能程序在關(guān)于某個(gè)數(shù)據(jù)集上的一次運(yùn)行活動(dòng)。進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位。線程是進(jìn)程的一個(gè)實(shí)體,是Cup調(diào)度的基本單位。它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位,線程只擁有一點(diǎn)在運(yùn)行中必不可少的資源,可與同一個(gè)進(jìn)程中其他線程共享進(jìn)程中所擁有的所有資源。一個(gè)線程可以創(chuàng)建和銷毀另一個(gè)線程,同一進(jìn)程中的多個(gè)線程可以同時(shí)并發(fā)執(zhí)行;2)區(qū)

11、別解釋一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程。線程的劃分尺度小于進(jìn)程,使得多線程程序并發(fā)行高,另外,進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元,而多個(gè)線程共享內(nèi)存從而極大的提高程序的運(yùn)行效率。進(jìn)程有獨(dú)立的地址空間一個(gè)進(jìn)程崩潰后在保護(hù)模式下不會(huì)對(duì)其他進(jìn)程產(chǎn)生影響,而線程只是一個(gè)進(jìn)程中的不同執(zhí)行路徑;線程有自己的堆棧和局部變量,但線程之間沒有單獨(dú)的地址空間,一個(gè)線程死掉就等于整個(gè)進(jìn)程死掉。所以多進(jìn)程的程序要比多線程的程序健壯,但在進(jìn)程切換時(shí)耗費(fèi)資源較大,效率要差一些。但對(duì)一些要同時(shí)進(jìn)行并且又要共享某些變量的并發(fā)操作,只能用線程,不能用進(jìn)程。8. 簡述“開-閉”原則的基本思想。請(qǐng)舉出一個(gè)使用了軟件“

12、開-閉”原則的軟件設(shè)計(jì)模式,其中何處體現(xiàn)了“開-閉”原則。答:“開閉”原則:軟件實(shí)體應(yīng)當(dāng)對(duì)擴(kuò)展開放,而對(duì)修改關(guān)閉,“開-閉”原則要求軟件系統(tǒng)能夠在不需要修改原有類的基礎(chǔ)上,通過增加類達(dá)到擴(kuò)展功能的目的。Abstract factory體現(xiàn)了這個(gè)原則,如果想增加一類新的products,只需在product類體系中增加各個(gè)products,然后在factory類體系結(jié)構(gòu)中增加一個(gè)concrete factory就可以了,而不需要對(duì)現(xiàn)有類做任何修改,The Open-closed principleocp在不改動(dòng)過模塊源代碼的情況下擴(kuò)展模塊的行為。9. 簡述依賴倒置原則的基本思想。請(qǐng)舉出一個(gè)使用了

13、軟件依賴原則的軟件設(shè)計(jì)模式,其中何處體現(xiàn)了依賴原則。答:依賴倒置原則的基本思想是:高層模塊不應(yīng)該依賴于低層模塊,二者都應(yīng)該依賴于抽象。抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象。Template method就體現(xiàn)了這個(gè)原則,它定義了一個(gè)操作中的算法骨架,而將一些步驟延遲到子類中,template method使得子類不改變一個(gè)算法的結(jié)構(gòu),即可重定義該算法的某些特定步驟。10. 什么是單一職責(zé)原則?請(qǐng)舉出一個(gè)使用了單一職責(zé)原則的軟件設(shè)計(jì)模式,其中何處體現(xiàn)了單一職責(zé)原則。答:基本思想:SRP使得一個(gè)類或一個(gè)模塊承擔(dān)的責(zé)任盡可能的少,使盡可能少的因素或動(dòng)機(jī)影響該類或該模塊,即增大類或模塊的內(nèi)聚性,減

14、少其耦合度,SRP是所有原則中最簡單的之一,也是最難正確運(yùn)用的之一。COMMAND模式體現(xiàn)了SRP原則,大多數(shù)類都是一組方法和相應(yīng)的一組變量的結(jié)合,而該模式只是封裝了一個(gè)沒有任何變量的函數(shù),它對(duì)函數(shù)的關(guān)注超過了類,將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,從而可用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化。11. 軟件復(fù)用可采用類的繼承方式和類的聚合方式,比較兩者的優(yōu)缺點(diǎn)。答:聚合:一個(gè)對(duì)象擁有另一個(gè)對(duì)象或?qū)α硪粋€(gè)對(duì)象負(fù)責(zé)(即一個(gè)對(duì)象包含另一個(gè)對(duì)象或是另一個(gè)對(duì)象的一部分)并且聚合對(duì)象和其所有具有相同的生命周期(即所謂的“同生共死”關(guān)系)。聚合復(fù)用優(yōu)點(diǎn):容器類僅能通過被包含對(duì)象的接口來對(duì)其進(jìn)行訪問。“黑盒”復(fù)用,因?yàn)楸话瑢?duì)象

15、的內(nèi)部細(xì)節(jié)對(duì)外是不可見。包裝性好。實(shí)現(xiàn)上的相互依賴性比較小。每一個(gè)類只專注于一項(xiàng)任務(wù)。通過獲取指定其他的具有相同類型的對(duì)象的使用,可以在運(yùn)行期間動(dòng)態(tài)地定義(對(duì)象的)組合。聚合的缺點(diǎn):導(dǎo)致系統(tǒng)中的對(duì)象過多 為了能將多個(gè)不同的對(duì)象作為組合塊來使用,必須仔細(xì)地對(duì)接口進(jìn)行定義。類繼承:是一種通過擴(kuò)展(一個(gè)已有對(duì)象的)實(shí)現(xiàn),從而獲得新功能的復(fù)用方法。繼承的優(yōu)點(diǎn):容易進(jìn)行新的實(shí)現(xiàn),因?yàn)槠浯蠖鄶?shù)可繼承而來 易于修改或擴(kuò)展那些被復(fù)用的實(shí)現(xiàn)。繼承的缺點(diǎn):破壞了封裝性,因?yàn)檫@會(huì)將父類的實(shí)現(xiàn)細(xì)節(jié)暴露給子類 “白盒”復(fù)用,因?yàn)楦割惖膬?nèi)部細(xì)節(jié)對(duì)于子類而言通常是可見的 當(dāng)父類的實(shí)現(xiàn)更改時(shí),子類也不得不隨之更改 從父類繼承

16、來的實(shí)現(xiàn)將不能在運(yùn)行期間進(jìn)行改變。12. 比較Adapter和Proxy模式使用上的異同之處。適配器模式(Adapter):將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。代理模式有兩個(gè)英文名字:Proxy Pattern 和 Surrogate Pattern。代理模式:為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問。說白了就是,在一些情況下客戶不想或者不能直接引用一個(gè)對(duì)象,而代理對(duì)象可以在客戶和目標(biāo)對(duì)象之間起到中介作用,去掉客戶不能看到的內(nèi)容和服務(wù)或者增添客戶需要的額外服務(wù)。兩者的主要區(qū)別在于代理模式應(yīng)用的情況是不改變

17、接口命名的,而且是對(duì)已有接口功能的一種控制;而適配器模式則強(qiáng)調(diào)接口轉(zhuǎn)換。二、選擇題1 關(guān)于信息隱藏的描述錯(cuò)誤的是( )A 信息隱藏是指對(duì)象在與外界的交互中,盡可能地隱藏對(duì)象的內(nèi)部細(xì)節(jié),僅保留有限的對(duì)外接口與外部進(jìn)行聯(lián)系。 B 信息隱藏既可以隱藏屬性,也可以隱藏操作。 C 一個(gè)對(duì)象信息隱藏的內(nèi)容對(duì)任何對(duì)象都是一樣的,并不隨與之交互的對(duì)象的不同而改變。 D 信息隱藏的原則是公開不變的操作,隱藏易變的操作。2 關(guān)于多態(tài)的描述正確的是( )A 多態(tài)是指在聚合關(guān)系中的各個(gè)類中名字相同的屬性和操作具有不同的意義。 B 多態(tài)的實(shí)現(xiàn)機(jī)制是編譯時(shí)靜態(tài)鏈接。C 函數(shù)名重載(overload) 會(huì)導(dǎo)致多態(tài)現(xiàn)象出現(xiàn)。

18、D 多態(tài)可實(shí)現(xiàn)接口復(fù)用,節(jié)省大量的編碼工作量. 3 關(guān)于重載(overload)與覆蓋(override)的說法正確的是( )。A 如果子類中的成員函數(shù)f(x)具有父類中成員函數(shù)f(x)相同的函數(shù)名,那么稱子類對(duì)父類的f(x)進(jìn)行了覆蓋。B 如果子類中的成員函數(shù)f(x)具有父類中成員函數(shù)f(x)相同的基調(diào),那么稱子類對(duì)父類的f(x)進(jìn)行了重載。 C 重載導(dǎo)致多態(tài),覆蓋與多態(tài)無關(guān)。D 覆蓋由動(dòng)態(tài)鏈接實(shí)現(xiàn),重載由靜態(tài)鏈接實(shí)現(xiàn)。 4 關(guān)于用例圖與類圖的描述正確的是( )。A. 參與者是用例圖中的元素,類是類圖中的元素,二者沒有關(guān)系。B. 用例圖中用例應(yīng)全部識(shí)別為類圖中的同名類。C. 用例圖中參與者應(yīng)

19、全部識(shí)別為類圖中的同名類。D. 用例圖中參與者有可能識(shí)別為類圖中的主動(dòng)類5. 關(guān)于狀態(tài)圖的陳述正確的是( )A 一個(gè)對(duì)象自身的屬性值變化不能作為其狀態(tài)圖中的事件。B 歷史狀態(tài)是指一個(gè)對(duì)象以前曾經(jīng)所處的狀態(tài)集合。C 動(dòng)作是在狀態(tài)內(nèi)或在轉(zhuǎn)化時(shí)所做的操作,是原子的和即時(shí)的。D 一個(gè)狀態(tài)的內(nèi)部轉(zhuǎn)換與自轉(zhuǎn)換的意義是相同的。6. 關(guān)于關(guān)聯(lián)與消息之間的關(guān)系的說法正確的是( )A. 關(guān)聯(lián)的目的是為了提供服務(wù),必然導(dǎo)致消息傳遞B. 只有兩個(gè)類之間存在關(guān)聯(lián),才能互發(fā)消息C. 兩個(gè)類的實(shí)例之間沒有關(guān)聯(lián)鏈,但仍可以傳遞消息D. 若兩個(gè)對(duì)象之間有鏈,則二者一定具有消息傳遞關(guān)系7. 下列關(guān)于面向?qū)ο蟮姆治雠c設(shè)計(jì)的描述,正

20、確的是 ( )。 A 面向?qū)ο蠓治鲕浖鍪裁?,設(shè)計(jì)描述軟件要怎么做。B 面向?qū)ο蠓治雒枋鰡栴}域與系統(tǒng)責(zé)任,面向?qū)ο蟮脑O(shè)計(jì)考慮與軟件實(shí)現(xiàn)有關(guān)的問題。C 面向?qū)ο蠓治雠c面向?qū)ο蟮脑O(shè)計(jì)遵循不同的范型。D 面向?qū)ο蠓治鲱悎D與面向?qū)ο蟮脑O(shè)計(jì)類圖具有相同的類與關(guān)系8. 設(shè)計(jì)模式具有的優(yōu)點(diǎn)( ) 。A適應(yīng)需求變化 B.程序易于理解C減少開發(fā)過程中的代碼開發(fā)工作量 D.簡化軟件系統(tǒng)的設(shè)計(jì)9. 設(shè)計(jì)模式一般用來解決什么樣的問題( )。A. 同一問題的不同表相 B 不同問題的同一表相C.不同問題的不同表相 D.以上都不是10. 設(shè)計(jì)模式的兩大主題是( )。A.系統(tǒng)的維護(hù)與開發(fā) B.對(duì)象組合與類的繼承C.系統(tǒng)架構(gòu)與

21、系統(tǒng)開發(fā) D. 系統(tǒng)復(fù)用與系統(tǒng)擴(kuò)展11. 以下哪些問題通過應(yīng)用設(shè)計(jì)模式不能夠解決 。 ( )A)指定對(duì)象的接口 B)針對(duì)接口編程C)確定軟件的功能都正確實(shí)現(xiàn) D)設(shè)計(jì)應(yīng)支持變化12. Adapter(適配器)模式的意圖是( ) 。A. 希望簡化現(xiàn)有系統(tǒng)的使用方法。你需要定義自己的接口。B 將一個(gè)無法控制的現(xiàn)有對(duì)象與一個(gè)特定接口相匹配。C. 將一組實(shí)現(xiàn)部分從另一組使用它們的對(duì)象中分離出來。D你需要為特定的客戶(或情況)提供特定系列的對(duì)象。13. 下面不屬于創(chuàng)建型模式的有( ) 。A抽象工廠模式( Abstract Factory ) B工廠方法模式(Factory Method)C 適配器模式 ( Adapter ) D單例模式(Singleton)14. 將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另一個(gè)接口。這句話是對(duì)下列哪種模式的描述( ) 。A. 策略模式(Strategies) B橋接模式(Bridge)C 適配器模式( Adapter ) D單例模式(Singleton)15. 以下關(guān)于結(jié)構(gòu)型模式說法不正確的是 。 ( )A)結(jié)構(gòu)型模式可以在不破壞類封

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論