Java程序員面試分類模擬27_第1頁
Java程序員面試分類模擬27_第2頁
Java程序員面試分類模擬27_第3頁
Java程序員面試分類模擬27_第4頁
Java程序員面試分類模擬27_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Java程序員面試分類模擬27一、單項選擇題1.

有如下代碼:publicclassTest{publicstaticvoidmain(String[]args){staticint(江南博哥)num[]=newint[10];System.out.println(num[10]);}}

下面說法正確的是______。A.程序編譯失敗B.程序編譯成功,運行時拋出異常C.程序編譯成功,運行時輸出結(jié)果為0D.如果將System.out.println(num[10])修改為System.out.println(num[9]),輸出結(jié)果將為0正確答案:A[解析]由于static不能修飾局部變量,因此,編譯失敗。所以,選項A正確。

2.

下列關(guān)于類的構(gòu)造方法的描述中,正確的是______。A.類中的構(gòu)造方法不可省略B.構(gòu)造方法必須與類同名,但方法不能與class同名C.構(gòu)造方法在一個對象被new時執(zhí)行D.一個類只能定義一個構(gòu)造方法正確答案:C[解析]對于選項A,類中的構(gòu)造方法是可以省略的,當(dāng)省略時,編譯器會提供一個默認的構(gòu)造方法以供使用。因此,選項A錯誤。

對于選項B,構(gòu)造方法必須與類名相同,但是方法名也可以與類名相同。如下例所示:publicclassTest{publicYest(){System.out.println("construct");}publicvoidTest(){System.out.println("callTest");}publicstaticvoidmain(String[]args){Testa=newTest();//調(diào)用構(gòu)造方法a.Test();//調(diào)用Test方法}}程序的運行結(jié)果為:constructcallTlest

因此,選項B錯誤。

對于選項C,當(dāng)一個對象被new時必定會調(diào)用構(gòu)造方法。因此,選項C正確。

對于選項D,由于構(gòu)造方法也可以重載,因此,一個類可以定義多個構(gòu)造方法。因此,選項D錯誤。

3.

下面有關(guān)方法覆蓋的描述中,不正確的是______。A.覆蓋的方法一定不能是private的B.方法覆蓋要求覆蓋和被覆蓋的方法必須具有相同的訪問權(quán)限C.覆蓋的方法不能比被覆蓋的方法拋出更多的異常D.方法覆蓋要求覆蓋和被覆蓋的方法有相同的名字、參數(shù)列以及返回值正確答案:B[解析]覆蓋(Override)是指派生類方法覆蓋基類方法,覆蓋一個方法并對其重寫,以起到不同的作用。在使用覆蓋時需要注意以下幾點:

1)派生類中的覆蓋方法必須要和基類中被覆蓋的方法有相同的函數(shù)名和參數(shù)。

2)派生類中的覆蓋方法的返回值必須和基類中被覆蓋方法的返回值相同。

3)基類中被覆蓋的方法不能為private,否則,其子類只是定義了另外一個方法,并沒有對其覆蓋。

4)子類方法不能縮小父類方法的訪問權(quán)限。

5)子類方法不能拋出比父類方法更多的異常。

由此可見,覆蓋方法與被覆蓋的方法可以有不同的訪問權(quán)限。所以,選項A、選項C和選項D正確,而選項B錯誤。

4.

在排序方法中,從未排序序列中挑選元素,并將其依次插入已排序序列(初始時為空)的一端的方法,稱為______。A.歸并排序B.希爾排序C.插入排序D.選擇排序正確答案:C

5.

在一個無向圖中,若兩個頂點之間的路徑長度為k,則該路徑上的頂點數(shù)為______。A.kB.k+1C.k+2D.2k正確答案:B

6.

不通過構(gòu)造方法______創(chuàng)建對象。A.可以B.不可以C.不確定正確答案:A[解析]在Java語言中,最常用的創(chuàng)建對象的方法為使用new創(chuàng)建一個對象,這種方式通過調(diào)用類的構(gòu)造方法來完成對象的創(chuàng)建,除此之外,還有如下幾種創(chuàng)建對象的方法:

1)調(diào)用對象的clone方法,需要以下幾個步驟才能使用clone方法:

①實現(xiàn)clone的類首先需要繼承Cloneable接口。Cloneable接口實質(zhì)上是一個標(biāo)識接口,沒有任何接口方法。

②在類中重寫Object類中的clone方法。

③在clone方法中調(diào)用super.clone()。無論clone類的繼承結(jié)構(gòu)是什么,super.clone()都會直接或間接調(diào)用java.lang.Object類的clone()方法。

示例代碼如下:classObjimplementsCloneable{privateintaInt=0;publicObj(){System.out.println("construct");}publicintgetAInt(){returnaInt;}publicvoidsetAInt(intint1){aInt=int1;}publicvoidchangeInt(){this.aInt=1;}publicObjectclone(){Objecto=ull;try{o=(Obj)super.clone();}catch(CloneNotSupportedExceptione){e.printStackTrace();}returno;}}publicclassTest{publicstaticvoidmain(String[]args){Obja=ewObj();0bjb=(Obj)a.clone();b.changeInt();System.out.println("a:"+a.getAInt());System.out.println("b:"+b.getAInt());}}程序的運行結(jié)果為:constructa:0

b:1從以上程序運行結(jié)果可以看出,在調(diào)用a.clone()方法時,系統(tǒng)創(chuàng)建了新的對象,但是沒有調(diào)用構(gòu)造方法。2)通過反射機制來創(chuàng)建對象,如下例所示:classPerson{Stringname="Jack";publicPerson(){System.out.println("construct");}publicStringtoString(){returnname;}}publicclassTest{publicstaticvoidmain(String[]args){ClassclassType;try{classType=Class.forName("Person");Personp=(Person)classType.newInstance();System.out.println(p);}catch(Exceptione){e.printStackTrace();}}}程序的運行結(jié)果為:constructJack從以上運行結(jié)果可以看出,這種方法也調(diào)用了構(gòu)造方法。3)通過反序列化的方式創(chuàng)建對象,示例代碼如下:importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.ObjectlnputStream;importjava.io.ObjectOutputStream;importjava.io.Serializable;publicclassPeopleimplementsSerializable{privateStringname;publicPeople(){="lili";System.out.println("construct");}publicStringtoString(){retum;}publicstaticvoidmain(String[]args){Peoplep=newPeople();System.out.println(p);ObjectOutputStreamoos=null;ObjectInputStreamois=null;try{FileOutputStreamfos=newFileOutputStream("perple.out");oos=newObjectOutputStream(fos);oos.writeObject(p);oos.close(),}catch(Exceptionex){}Peoplep1;try{FileInputStreamfis=newFileInputStream("perple.out");ois=newObjectlnputStream(fis);p1=(People)ois.readObject();System.out.println(p);if(p!=p1)System.out.println("twodifferentobject");ois.close();}catch(Exceptionex){}}}程序的運行結(jié)果為:constructlilililitwodifferentobject

從以上運行結(jié)果可以看出,用反序列化的方式創(chuàng)建對象也不需要調(diào)用構(gòu)造方法。

所以,本題的答案為A。

7.

在Java程序中定義一個類,類中有一個沒有訪問權(quán)限修飾的方法,下面關(guān)于此方法的描述中,正確的是______。A.類的子類和同包類能訪問它B.類外的任何方法都能訪問它C.類外的任何方法都不能訪問它D.只有類和同包類才能訪問它正確答案:A

8.

若輸入序列已經(jīng)是排好序的,下列排序算法中,速度最快的是______。A.插入排序B.Shell排序C.歸并排序D.快速排序正確答案:A[解析]對于選項A,插入排序一遍掃描即可。

對于選項B,Shell排序雖不需要交換數(shù)據(jù),但也要進行幾次插入排序。

對于選項C,歸并排序雖不需要交換數(shù)據(jù),但也要進行l(wèi)ogn次合并。

對于選項D,快速排序在數(shù)列有序的情況下效率是最低的。

通過上面的分析可知,如果序列已經(jīng)排好序,那么,此時插入排序算法速度最快。所以,選項A正確。

9.

對有序數(shù)組{2、11、15、19、30、32、61、72、88、90、96}進行二分查找,則成功找到數(shù)值15需要比較______次。A.2B.3C.4D.5正確答案:A

10.

下面的表達式中,正確的是______。A.Strings="你好";inti=3;s+=i;B.Strings="你好";inti=3;if(i==s){s+=i};C.Strings="你好";inti=3;s=i+s;D.Strings="你好";inti=3;s=i+;E.Strings="你好";inti=(s!=null)&&(s.length>0)?s.length():0;正確答案:A

11.

以下可以替換URL中的sessionID的方法是______。A.HttpServletRequest接口的encodeURL方法B.HttpServletResponse接口的encodeURL方法C.HttpServletRequest接口的rewriteURL方法D.HttpServletResponse接口的rewriteURL方法正確答案:B[解析]session譯為會話,指的是有始有終的一系列動作/消息,例如在打電話時,從拿起電話撥號到掛斷電話這中間的一系列過程可以稱為一個session。當(dāng)程序需要為某個客戶端的請求創(chuàng)建一個session時,服務(wù)器會首先檢查這個客戶端的請求里是否已經(jīng)包含了一個session標(biāo)識,這個標(biāo)識被稱為sessionID。如果已經(jīng)包含一個sessionID,則說明以前已經(jīng)為此客戶端創(chuàng)建過session,此時服務(wù)器就按照sessionID把這個session檢索出來使用(如果檢索不到,可能會新建一個);如果客戶端請求不包含sessionID,則為此客戶端創(chuàng)建一個session,并且生成一個與此session相關(guān)聯(lián)的sessionID。

HttpServletResponse接口提供了重寫URL的方法,如下所示:

publicjava.lang.StringencodeURL(java.lang.Stringurl);

該方法的實現(xiàn)機制如下:先判斷當(dāng)前的Web組件是否啟用session,如果沒有啟用session,則直接返回參數(shù)url,再判斷客戶端瀏覽器是否支持cookie,如果支持cookie,則直接返回參數(shù)url;如果不支持cookie,就在參數(shù)url中加入sessionID信息,然后返回修改后的url。因此,這個方法可以用來把sessionID加入到URL中。所以,選項B正確。

12.

已知數(shù)組序列為{46、36、65、97、76、15、29},以46為關(guān)鍵字進行一趟快速排序后,結(jié)果為______。A.29、36、15、46、76、97、65B.29、15、36、46、76、97、65C.29、36、15、46、97、76、65D.15、29、36、46、97、76、65正確答案:A[解析]第一趟排序過程如下:

初始化關(guān)鍵字{46、36、65、97、76、15、29}。

第一次交換后:{29、36、65、97、76、15、46}(從右向左找到小于46的值并交換)。

第二次交換后:{29、36、46、97、76、15、65}(從左向右找到大于46的值并交換)。

第三次交換后:{29、36、15、97、76、46、65}(從右向左找到小于46的值并交換)。

第四次交換后:{29、36、15、46、

76、97、65}(從左向右找到大于46的值并交換)。

所以,選項A正確。

13.

判斷有向圖是否存在回路,最好的方法是______。A.拓撲排序B.求最短路徑C.求關(guān)鍵路徑D.廣度優(yōu)先遍歷正確答案:A[解析]針對有向圖是否存在回路的問題,最好的方法就是對有向圖構(gòu)造其頂點的拓撲有序序列,如果有向圖的所有頂點可以排出拓撲序列,則該有向圖無環(huán)路。具體步驟如下:

在求拓撲算法的過程中,最重要的是要維護一個入度為0的頂點的集合,每次從這個集合中取出一個頂點,放入保存拓撲結(jié)構(gòu)結(jié)果的列表中,然后從圖中刪除從這個頂點引出的所有邊,在刪除這些邊后,這個邊的另外一個結(jié)點,如果入度變成0,則加入到存放入度為0的結(jié)點的集合中。依次類推,直到把所有頂點都遍歷完成,就求出了拓撲結(jié)構(gòu)。如果在求解的過程中,存放入度為0的集合為空,但是此時圖中還有沒有遍歷的邊,則說明圖中至少存在一個回路。所以,選項A正確。

14.

下列異常中既是檢查型異常,又需要在編寫程序時聲明的是______。A.NullPointerExceptionB.ClassCastExceptionC.IOExceptionD.IndexOutOfBoundsException正確答案:C

15.

當(dāng)用一臺機器作為網(wǎng)絡(luò)客戶端時,該機器最多可以保持______個到服務(wù)端的連接。A.1B.少于1024C.少于65535D.無限制正確答案:C[解析]在一臺機器上,到服務(wù)器端的連接數(shù)由端口的個數(shù)來決定,由于端口號的長度為16位,因此,最多可以使用的端口數(shù)為2^16-1=65535,故最多可以保持65535個連接。所以,選項C正確。

16.

將一棵有100個結(jié)點的完全二叉樹從根這一層開始,進行廣度遍歷編號,那么編號最小的葉子結(jié)點的編號是______。A.49B.50C.51D.52正確答案:C[解析]在解答本題前,首先需要弄懂一個概念,什么是完全二叉樹?所謂完全二叉樹是指除樹的最后一層外,每一層上的結(jié)點數(shù)均達到最大值,且在最后一層上只缺少右邊的若干結(jié)點的二叉樹。

通過完全二叉樹的定義,可以引出以下兩種性質(zhì):①對于深度為K的,有n個結(jié)點的二叉樹,當(dāng)且僅當(dāng)其每一個結(jié)點都與深度為K的滿二叉樹中編號從1至n的結(jié)點一一對應(yīng)時稱為完全二叉樹;②一棵二叉樹至多只有最下面兩層上的結(jié)點的度數(shù)可以小于2,并且最下層上的結(jié)點都集中在該層最左邊的若干位置上,則此二叉樹為完全二叉樹。

假設(shè)n0是度為0的結(jié)點總數(shù)(即葉子結(jié)點數(shù)),n1是度為1的結(jié)點總數(shù),n2是度為2的結(jié)點總數(shù),由二叉樹的性質(zhì)可知:n0=n2+1,n=n0+n1+n2(其中n為完全二叉樹的結(jié)點總數(shù)),由上述公式把n2消去得n=2n0+n1-1,由于完全二叉樹中度為1的結(jié)點數(shù)只有兩種可能:0或1,由此得到n0=(n+1)/2或n0=n/2,即??筛鶕?jù)完全二叉樹的結(jié)點總數(shù)計算出葉子結(jié)點數(shù)。

本題中,n的值為100,根據(jù)上面的分析可知,n0=50。所以,度為0的結(jié)點有50個,度為1的結(jié)點有1個,度為2的結(jié)點有49個,二叉樹前k層最多有2^k-1個結(jié)點。所以,100個結(jié)點二叉樹高度為7,按照廣度優(yōu)先遍歷編號,有50個非葉子結(jié)點,所以,最小的葉子結(jié)點編號為51。

下面給出另外一種求解方法:

100個結(jié)點時,二叉樹高度為7。

7層包含數(shù)據(jù)個數(shù)為100-(2^6-1)=37。

6層包含數(shù)據(jù)的編號為32~63,6層中前19個數(shù)據(jù)包含子樹(37/2=18.5),故最小的葉結(jié)點應(yīng)該為32+19=51。所以,選項C正確。

17.

無向圖G=(V,E),其中V={a,b,c,d,e,f},E={<a,b>,<a,e>,<a,c>,<b,e>,<e,f>,<f,d>,<e,d>},對該圖進行深度優(yōu)先排序,得到的頂點序列正確的是______。A.a,b,e,c,d,fB.a,c,f,e,b,dC.a,e,b,c,f,dD.a,e,d,f,c,b正確答案:D[解析]圖的深度優(yōu)先遍歷類似于樹的前序遍歷。假設(shè)給定無向圖G的初態(tài)是所有頂點均未曾被訪問過,深度優(yōu)先遍歷過程是這樣的:在無向圖G中任選一個頂點v為初始出發(fā)點(源點),首先訪問源點v,并將其標(biāo)記為已訪問過,然后,依次從源點v出發(fā),搜索源點v的每個相鄰結(jié)點w。如果結(jié)點w未曾被訪問過,那么以結(jié)點w為新的出發(fā)點繼續(xù)進行深度優(yōu)先遍歷,直至圖中所有和源點v有路徑相通的頂點(亦稱為從源點可達的頂點)均已被訪問為止。如果此時圖中仍有未訪問的頂點,則另選一個尚未訪問的頂點作為新的源點重復(fù)上述過程,直至圖中所有頂點均已被訪問為止。

本題中,按照上述方法可知,選項D正確。

18.

有下面兩個賦值語句:

(1)a=Integer.parseInt("12");

(2)b=Integer.valueOf("12").intValue();

以下關(guān)于上述代碼的描述中,正確的是______。A.a是整數(shù)類型變量,b是整數(shù)類對象B.a是整數(shù)類對象,b是整數(shù)類型變量C.a和b都是整數(shù)類對象,并且值相等D.a和b都是整數(shù)類型變量,并且值相等正確答案:D[解析]在Java語言中,Integer是int的封裝類,Integer的parseInt方法用來將字符串參數(shù)解析為有符號的整數(shù)。這個方法的原型為:

publicstaticintparseInt(Strings,intradix)throwsNumberFormatException

publicstaticintparseInt(Strings)throwsNumberFormatException

其中,參數(shù)s用來表示待轉(zhuǎn)換的字符串,radix用來表示字符串s代表的整數(shù)的進制。當(dāng)傳入的字符串無法被轉(zhuǎn)換為int類型的時候(例如s=""),就會拋出異常。

valueOf方法的原型如下:

publicstaticIntegervalueOf(inti)

這個方法返回一個表示指定的int值的Integer實例。

publicstaticIntegervalueOf(Strings)throwsNumberFormatException

這個方法返回保存指定的String值的Integer對象。

而Integer類的intValue方法以int類型返回該Integer的值。

由此可見,語句a=Integer.parseInt("12");是把字符串“12”轉(zhuǎn)換為int類型,返回值為12。對于語句b=Integer.valueOf("12").intValue(),首先把字符串“12”轉(zhuǎn)換為Integer實例(實例中整型的值為12),然后調(diào)用intValue方法,以int類型返回Integer的值12,因此,a和b的類型都是int型,值都是12。所以,選項D正確。

19.

以下可以啟動一個線程的方法是______。A.start()B.ran()C.begin()D.notify()正確答案:A[解析]Thread類提供了一個start方法,這個方法的功能是讓這個線程開始執(zhí)行,開始執(zhí)行后,JVM將會調(diào)用這個線程的run方法來執(zhí)行這個線程的任務(wù)。在實現(xiàn)多線程的時候,在繼承了Thread方法后必須實現(xiàn)run方法,也就是說,線程的核心邏輯都存在于run方法中。這個方法被start方法調(diào)用來實現(xiàn)多線程的功能,如果直接調(diào)用run方法就與調(diào)用普通的方法類似。所以,選項A正確,選項B錯誤。

對于選項C,在Java語言中,線程是沒有begin方法的。所以,選項C錯誤。

對于選項D,notify方法是用來喚醒一個線程的,而不是啟動一個線程。所以,選項D錯誤。

20.

下面關(guān)鍵字中,可以用來修飾接口中的變量的是______。A.staticB.privateC.synchronizedD.protected正確答案:A[解析]Java接口是一系列方法的聲明,是一些方法特征的集合。由于一個接口只有方法的聲明,但沒有方法的實現(xiàn),因此,這些方法可以在不同的地方被不同的類實現(xiàn),而這些實現(xiàn)可以具有不同的行為(功能)。而通常,接口中定義的成員變量默認為public、static、final,只能夠有靜態(tài)的、不能被修改的數(shù)據(jù)成員,而且必須給其賦初值,其所有的成員方法都是public、abstract的,而且只能被這兩個關(guān)鍵字修飾。

從以上分析可知,只有關(guān)鍵字static可以用來修飾接口中的變量。因此,選項A正確。

21.

有一段年代久遠的C++代碼,內(nèi)部邏輯復(fù)雜,現(xiàn)在需要利用其實現(xiàn)一個新的需求,假定有以下可行的方案,應(yīng)當(dāng)優(yōu)先選擇______。A.修改老代碼的接口,滿足新的需求B.將老代碼拋棄,自己重新實現(xiàn)類似的邏輯C.修改老代碼的內(nèi)部邏輯,滿足新的需求D.在這段代碼之外寫一段代碼,調(diào)用該代碼的一些模塊,完成新功能需求正確答案:D[解析]對于老代碼的處理措施,既不是將其拋棄,自己重新實現(xiàn),因為這樣做的代價太高昂,也不是去修改其內(nèi)部邏輯或者代碼接口,因為這種修改很有可能會引入更多新的問題,最好的方法是采用封裝的思想,將這些已有的老代碼當(dāng)作一個黑盒,重新編寫一段新代碼完成新的功能,只在需要調(diào)用老代碼的時候,用到老代碼的某些模塊即可。所以,選項A、選項B與選項C錯誤,選項D正確。

22.

有如下代碼:intn=999;n--;++n;System.out.println(n++);

以上程序中,程序的運行結(jié)果為______。A.98B.999C.1000D.1001正確答案:B[解析]在編程的時候,經(jīng)常會用到變量的自增或自減操作,尤其在循環(huán)中用得最多。以自增為例,有兩種自增方式:前置與后置,以變量i為例,即++i和i++,它們的不同點在于后置i++是在程序執(zhí)行完畢后自增,而前置++i是在程序開始執(zhí)行前進行自增。

對于本題而言,整型變量n初始化為999,執(zhí)行完n--后,n的值變?yōu)?98,接著執(zhí)行++n后n的值變?yōu)?99,最關(guān)鍵的一步輸出n++,這個輸出語句的執(zhí)行過程為首先輸出n的值,然后再執(zhí)行n的遞增操作,因此,程序輸出為999,輸出后n的值變?yōu)?000。所以,選項B正確。

23.

快速排序算法在序列已經(jīng)有序的情況下的復(fù)雜度為______。A.O(nlogn)B.(n^2)C.O(n)D.O(n^2logn)正確答案:B[解析]快速排序是目前被認為最好的一種內(nèi)部排序方法。快速排序算法處理的最好情況指每次都是將待排序列劃分為均勻的兩部分,通常認為快速排序在平均情況下的時問復(fù)雜度為O(nlogn)。但是,如果初始記錄序列按關(guān)鍵字有序或基本有序,那么此時快速排序?qū)⑼懟癁槊芭菖判?,其時間復(fù)雜度為O(n^2)。

那么對于其他排序算法,當(dāng)序列已經(jīng)有序時,又是哪種情況呢?無論原始序列中的元素如何排列,歸并排序和堆排序算法的時間復(fù)雜度都是O(nlogn)。插入排序是將一個新元素插入已經(jīng)排列好的序列中。如果在數(shù)據(jù)已經(jīng)是升序的情況下,新元素只需插入到序列尾部,這就是插入排序的最好情況,此時,時間復(fù)雜度為O(n)。所以,選項B正確。

24.

ArrayLista1=newArrayList(20)中的list擴充了______次。A.0B.1C.2D.4正確答案:A[解析]在Java語言中,創(chuàng)建ArrayList對象的時候可以不指定其空間大小,在這種情況下,列表默認的大小為10,在后面使用的過程中,如果發(fā)現(xiàn)列表的大小不夠用,此時會擴充為原來大小的1.5倍。

對于本題而言,在初始化ArrayList對象的時候,顯式地指定了列表的大小為20,因此,創(chuàng)建出來的列表對象的長度為20,在這個過程中不需要擴展,即擴展次數(shù)為0。所以,選項A正確。

如果把題目改成ArrayListlist=newArrayList(),接著向列表里插入20條記錄,那么這個列表在插入第11條記錄的時候就需要擴展一次。

25.

以下表達式中,正確的是______。A.Byte=128;B.Boolean=null;C.Longl=0xfffl;D.Double=0.9239d;正確答案:C

26.

以下用于用戶撥號認證的是______。A.PPTPB.IPSecC.L2TPD.CHAP正確答案:A[解析]對于選項A,PPTP(PointtoPointTunnelingProtocol,點對點隧道協(xié)議)是在PPP(PointtoPointProtocol,點對點協(xié)議)的基礎(chǔ)上開發(fā)的一種新的增強型安全協(xié)議,它支持多協(xié)議虛擬專用網(wǎng)(VPN,VirtualPrivateNetwork),可以通過密碼驗證協(xié)議(PAP,PasswordAuthenticationProtocol)、可擴展認證協(xié)議(EAP,ExtensibleAuthenticationProtocol)等方法增強安全性??梢允惯h程用戶通過撥入ISP(InternetServiceProvider,互聯(lián)網(wǎng)服務(wù)提供商)、直接連接Internet或其他網(wǎng)絡(luò)安全地訪問企業(yè)網(wǎng)。

對于選項B,IPSec(InternetProtocolSecuricy,Internet協(xié)議安全性)是一種開放標(biāo)準(zhǔn)的框架結(jié)構(gòu),通過使用加密的安全服務(wù)以確保在Internet協(xié)議(IP)網(wǎng)絡(luò)上進行保密而安全的通信。它通過端對端的安全性來提供主動的保護以防止專用網(wǎng)絡(luò)與Internet的攻擊。

對于選項C,L2TP(LayerTWOTunnelingProtocol,第二層隧道協(xié)議)是一種虛擬隧道協(xié)議,通常用于虛擬專用網(wǎng)。第二層隧道技術(shù)是在數(shù)據(jù)鏈路層使用隧道協(xié)議對數(shù)據(jù)進行封裝,然后再把封裝后的數(shù)據(jù)作為數(shù)據(jù)鏈路層的原始數(shù)據(jù),并通過數(shù)據(jù)鏈路層的仂、議進行傳輸。L2TP協(xié)議自身不提供加密與可靠性驗證的功能,可以和安全協(xié)議搭配使用,從而實現(xiàn)數(shù)據(jù)的加密傳輸。經(jīng)常與L2TP協(xié)議搭配的加密協(xié)議是IPsec,當(dāng)這兩個協(xié)議搭配使用時,通常合稱L2TP/IPsec。

對于選項D,CHAP全稱是PPP(點對點協(xié)議)詢問握手認證協(xié)議(ChallengeHandshakeAuthenticationProtocol)。該協(xié)議可通過三次握手周期性地校驗對端的身份,可在初始鏈路建立完成時,在鏈路建立之后重復(fù)進行。

以上4個協(xié)議,只有PPTP用于用戶撥號認證。所以,選項A正確。

27.

以下可以對對象加互斥鎖的關(guān)鍵字是______。A.synchronizedB.serializeC.volatileD.static正確答案:A[解析]對于選項A,synchronized(同步的)是Java語言的關(guān)鍵字,主要用來給對象和方法或者代碼塊加鎖,當(dāng)它鎖定一個方法或者一個代碼塊的時候,同一時刻最多只有一個線程執(zhí)行這段代碼。當(dāng)兩個并發(fā)線程訪問同一個對象中的這個加鎖同步代碼塊時,同一時間只能有一個線程執(zhí)行。所以,選項A正確。

對于選項B,serialize是序列化的意思,所謂對象的序列化指的是把對象轉(zhuǎn)換為字節(jié)序列的過程,所謂對象的反序列化指的是把字節(jié)序列恢復(fù)為對象的過程。通常,對象的序列化主要有以下兩種用途:①把對象的字節(jié)序列永久地保存到硬盤上,通常存放在一個文件中;②在網(wǎng)絡(luò)上傳送對象的字節(jié)序列。在Java語言中,序列化通過Serializable接口來實現(xiàn)。所以,選項B不正確。

對于選項C,在由Java語言編寫的程序中,有時候為了提高程序的運行效率,編譯器會做一些優(yōu)化操作,把經(jīng)常被訪問的變量緩存起來,程序在讀取這個變量的時候有可能會直接從寄存器中來讀取這個值,而不會去內(nèi)存中讀取。這樣做的一個好處是提高了程序的運行效率,但當(dāng)遇到多線程編程時,變量的值可能被其他線程改變了,而該緩存的值不會做相應(yīng)的改變,從而造成應(yīng)用程序讀取的值和實際的變量值不一致。關(guān)鍵字volatile正好能夠解決這一問題,被關(guān)鍵字volatile修飾的變量編譯器不會做優(yōu)化,每次都會從內(nèi)存中讀取。所以,選項C不正確。

對于選項D,關(guān)鍵字static主要有以下兩種作用:第一,為某特定數(shù)據(jù)類型或?qū)ο蠓峙鋯我坏拇鎯臻g,而與創(chuàng)建對象的個數(shù)無關(guān);第二,希望某個方法或?qū)傩耘c類而不是對象關(guān)聯(lián)在一起,也就是說,在不創(chuàng)建對象的情況下就可以通過類來直接調(diào)用方法或使用類的屬性??傊?,被static修飾的屬性(方法)是類的屬性(方法),不屬于任何對象。所以,選項D不正確。

28.

以下不能作JSP的服務(wù)器的是______。A.JBossB.BEAWebLogicC.TomcatD.PWS正確答案:D[解析]Web服務(wù)器指的是提供Web功能的服務(wù)器,主要就是HTTP服務(wù)器,包括圖片的下載等一系列和文本相關(guān)的資源。Web服務(wù)器支持以HTTP協(xié)議的方式來訪問,當(dāng)Web服務(wù)器接收到一個HTTP請求時,它同樣會以HTTP協(xié)議格式返回一個響應(yīng),這個響應(yīng)可以是一個靜態(tài)的HTML頁面,也可以是結(jié)果處理的一個動態(tài)的頁面,還可以是音頻、視頻等信息。為了處理一個請求,Web服務(wù)器可以做出一個響應(yīng),并進行頁面跳轉(zhuǎn),或者把動態(tài)響應(yīng)的產(chǎn)生委托給一些其他的程序,例如CGl腳本、JSP、Servlet或者一些其他的服務(wù)器端程序。Web服務(wù)器一般都使用了一些特有的機制(例如容錯機制)來保證Web服務(wù)器有較好的擴展性和不問斷地提供服務(wù)。常見的Web服務(wù)器有IIS和Apache。

應(yīng)用服務(wù)器提供訪問業(yè)務(wù)邏輯的途徑以供客戶端應(yīng)用程序使用。具體而言,它通過HTTP、TCP/IP、IIOP(InternetInter-ORBProtocol,互聯(lián)網(wǎng)內(nèi)部對象請求代理協(xié)議)或JRMP(JavaRemoteMethodProtocol,Java遠程方法協(xié)議)等來提供業(yè)務(wù)邏輯接口。為了系統(tǒng)的可靠性,同樣使用了一些可擴展性和容錯機制。除此之外,它還為應(yīng)用的開發(fā)提供了許多服務(wù),例如事務(wù)管理、安全管理和對象生命周期管理等。常見的應(yīng)用服務(wù)器有BEAWebLogicServer、IBMWebSphereApplicationServer、IPlanetApplicationServer、Oracle9iApplicationServer、JBoss和Tomcat等。

Web服務(wù)器一般是通用的,而應(yīng)用服務(wù)器一般是專用的,例如Tomcat只處理Java應(yīng)用程序而不能處理ASPX或PHP。需要注意的是,Web服務(wù)器與應(yīng)用服務(wù)器是并列關(guān)系,二者不存在相互包容關(guān)系。在使用的時候,如果訪問的頁面只有HTML,用Web服務(wù)器就足夠了,但是如果是JSP,此時就需要應(yīng)用服務(wù)器,因為只有應(yīng)用服務(wù)器才能解析JSP里的Java代碼,并將解析結(jié)果以HTML的格式返回給用戶。

從上面的分析可以看出,選項A、選項B和選項C都可以作為JSP的服務(wù)器。

對于選項D,PWS(PersonalWebSetwer,個人Web服務(wù)器)是微軟開發(fā)的個人網(wǎng)站服務(wù)器,主要應(yīng)用于解決個人信息共享和Web開發(fā)。它是一個桌面形的Web服務(wù)器,使用它可以自動創(chuàng)建個性化主頁,以拖放的方式發(fā)布文檔,在它的幫助下,用戶可以快速簡便地進行Web站點設(shè)置。由于它只是一個Web服務(wù)器,因此,它無法作為JSP的服務(wù)器。所以,選項D正確。

29.

下列關(guān)于內(nèi)存回收的描述中,正確的是______。A.程序員必須創(chuàng)建一個線程來釋放內(nèi)存B.內(nèi)存回收程序負責(zé)釋放無用內(nèi)存C.內(nèi)存回收程序允許程序員直接釋放內(nèi)存D.內(nèi)存回收程序可以在指定的時間釋放內(nèi)存對象正確答案:B

30.

以下關(guān)于隨機數(shù)的描述中,正確的是______。A.Math.random()可以生成[0,1]內(nèi)的任意小數(shù)B.Random.next(10)可以生成[0,10]內(nèi)的任意整數(shù)C.newjava.util.Random().nextInt(11)可以生成[0,10]內(nèi)的任意整數(shù)D.newjava.util.Math().random()可以生成[0,1)內(nèi)的任意小數(shù)正確答案:C[解析]對于選項A,Math類的random方法的功能是生成[0,1)的小數(shù),不能生成1。因此,選項A錯誤。

對于選項B,Random類沒有next這個方法。因此,選項B錯誤。

對于選項C,nextInt(n)方法的功能是生成[0,n)的整數(shù),所以,nextInt(11)可以生成[0,11),即[0,10]的整數(shù)。因此,選項C正確。

對于選項D,java.util包下沒有Math類,Math類屬于java.lang包。因此,選項D錯誤。

二、論述題1.

確定模塊的功能和模塊的接口是在軟件設(shè)計的哪個階段完成的?正確答案:概要設(shè)計階段。

2.

在HashSet中,equals與hashCode之問的關(guān)系是什么?正確答案:HashSet是存在于java.util包中的類,HashSet中存儲的元素是不能重復(fù)的,由于HashSet中存放的是對象,那么如何判斷兩個對象是否相同呢?主要通過hashCode和equals兩個方法來判斷,所以,對于在HashSet中存儲的對象,對應(yīng)的類最好根據(jù)實際情況實現(xiàn)自己的equals方法和hashCode方法。

每當(dāng)向HashSet中添加一個元素的時候,可以采用下面的方法來判斷兩個對象是否“相同”:

1)如果兩個對象的hashCode值不同,那么說明兩個對象不“相同”。

2)如果兩個對象的hashCode值相同,接著會調(diào)用對象的equals方法,如果equlas方法的返回結(jié)果為true,那么說明兩個對象“相同”,否則,說明兩個對象不“相同”。

有讀者可能對hashCode方法與equals方法不是很理解,其實,hashCode方法和equals方法都定義在Object類中,所有的Java類都繼承這兩個方法。其中,hashCode方法返回一個int類型的數(shù),在Object類中的默認實現(xiàn)是“將該對象的內(nèi)部地址轉(zhuǎn)換成一個整數(shù)返回”。而equals方法主要用于判斷對象的內(nèi)存地址引用是否是同一個地址(是否是同一個對象),如果兩個對象“相同”,那么返回true,否則,返回false。一般情況下需要重寫equals和hashCode方法來實現(xiàn)自己的邏輯,比如String類中的equals方法用來判斷兩個字符串的內(nèi)容是否相同。

HashSet采用上面的邏輯來判斷兩個對象是否“相同”,從而決定一個對象是否應(yīng)該被加入到HashSet中。

示例:下列程序中構(gòu)造了一個Set并且調(diào)用其方法add(),輸出結(jié)果是什么?

publicclassA

{

publicinthashCode(){return1;}

publicBooleanequals(Objectb){returntrue}

publicstaticvoidmain(Stringargs[]){

Setset=newHashSet();

set.add(newA());

set.add(newA());

set.add(newA());

System.out.println(set.size());

}

}

答案:1。

3.

JDBC事務(wù)隔離級別有幾種?正確答案:5種。[解析]為了解決與“多個線程請求相同數(shù)據(jù)”相關(guān)的問題,事務(wù)之間通常會用鎖相互隔離開。現(xiàn)今,大多數(shù)主流的數(shù)據(jù)庫支持不同類型的鎖。因此,JDBCAPI支持不同類型的事務(wù),它們由Connection對象指派或確定。在JDBC中,定義了以下5種事務(wù)隔離級別:

1)TRANSACTIONNONEJDB:不支持事務(wù)。

2)TRANSACTIONREADUNCOMMITTED:未提交讀。說明在提交前一個事務(wù)可以看到另一個事務(wù)的變化。這樣讀“臟”數(shù)據(jù)、不可重復(fù)讀和“虛讀”都是允許的。

3)TRANSACTIONREADCOMMITTED:已提交讀。說明讀取未提交的數(shù)據(jù)是不允許的。這個級別仍然允許不可重復(fù)讀和“虛讀”產(chǎn)生。

4)TRANSACTIONREPEATABLEREAD:可重復(fù)讀。說明事務(wù)保證能夠再次讀取相同的數(shù)據(jù)而不會失敗,但“虛讀”仍然會出現(xiàn)。

5)TRANSACTIONSERIALIZABLE:可序列化。它是最高的事務(wù)級別,它防止讀“臟”數(shù)據(jù)、不可重復(fù)讀和“虛讀”。

備注:讀“臟”數(shù)據(jù):一個事務(wù)讀取了另一個事務(wù)尚未提交的數(shù)據(jù),例如,當(dāng)事務(wù)A與事務(wù)B并發(fā)執(zhí)行時,當(dāng)事務(wù)A更新后,事務(wù)B查詢讀取

溫馨提示

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

最新文檔

評論

0/150

提交評論