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

下載本文檔

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

文檔簡介

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

用深度優(yōu)先遍歷方法遍歷一個有向無環(huán)圖,并在深度優(yōu)先遍歷算法中按退棧次序打印出相應(yīng)的頂點,則輸出的頂點序列是______。A.逆拓?fù)溆行駼.無序C.拓(江南博哥)撲有序D.深度優(yōu)先遍歷序列正確答案:A[解析]對于樹(無環(huán)圖相當(dāng)于樹)的深度優(yōu)先遍歷,其實就是拓?fù)渑判颍绢}中要求“按退棧次序打印出相應(yīng)的頂點”,其實就是逆拓?fù)渑判?。所以,選項A正確。

2.

在主存和CPU之間增加Cache的目的是______。A.增加內(nèi)存容量B.為程序員編程提供方便C.解決CPU與內(nèi)存間的速度匹配問題D.提高內(nèi)存工作的可靠性正確答案:C[解析]計算機的存儲系統(tǒng)由主存、外存和Cache(緩存)組成。Cache存取速度快、容量小,它存儲的內(nèi)容是主存中經(jīng)常被訪問的程序和數(shù)據(jù)的剮本。通過Cache可以提高計算機的運行速度,解決CPU與內(nèi)存之問的速度匹配問題。所以,選項C正確。

對于選項A、選項B和選項D,其描述內(nèi)容均不是Cache的目的。所以,選項A、選項B和選項D錯誤。

3.

下列關(guān)于類方法的描述中,正確的是______。A.在類方法中可用this來調(diào)用本類的類方法B.在類方法中調(diào)用本類的類方法時可直接調(diào)用C.在類方法中只能調(diào)用本類中的類方法D.在類方法中絕對不能調(diào)用實例方法正確答案:B

4.

數(shù)字0.6332的數(shù)據(jù)類型是______。A.FloatB.doubleC.floatD.Double正確答案:B[解析]在Java語言中,默認(rèn)聲明的小數(shù)是double類型的,因此,在對float類型的變量進行初始化時,需要對其進行類型轉(zhuǎn)換。float類型的變量有兩種初始化方法:floatf=1.0f或floatf=(float)1.0。與此類似的是,在Java語言中,直接寫的整型數(shù)字是int類型的,當(dāng)給數(shù)據(jù)類型為long的變量直接賦值時,int類型的值無法表示一個非常大的數(shù)字,因此,在賦值的時候可以通過如下的方法來賦值:longl=26012402244L。

5.

有如下代碼:

publicinterfaceUsb{

}

publicabstractclassInterface{

}

以下關(guān)于接口的使用中,正確的是______。A.publicinterfaceUsb1extendsUsb{}B.publicinterfaceUsb1extendsInterface{}C.publicinterfaceUsb1implementsUsb{}D.publicinterfaceUsb1implementsInterface{}正確答案:A[解析]如果一個類中包含抽象方法,那么這個類就是抽象類。在Java語言中,可以通過把類或者類中的某些方法聲明為abstract來表示一個類是抽象類。接口就是指一個方法的集合,接口中的所有方法都沒有方法體,在Java語言中,接口是通過關(guān)鍵字interface來實現(xiàn)的。

在實際使用時,接口可以繼承接口,抽象類可以實現(xiàn)接口,抽象類也可以繼承具體類。

通過以上分析可知,選項A是正確的,因為接口可以繼承接口。

對于選項B,接口不能繼承抽象類,因為接口中所有的方法不能有方法體,而抽象類中的方法是可以有方法體的。因此,選項B錯誤。

對于選項C,implements關(guān)鍵字是指子類要實現(xiàn)接口中定義的方法,因為接口中的方法是沒有方法體的,所以接口不能用來實現(xiàn)接口。因此,選項C錯誤。

對于選項D,implements只能用來實現(xiàn)接口,而Interface是個抽象類,對于抽象類只能用extends來實現(xiàn)。因此,選項D錯誤。

6.

下列表達式正確的是______。A.byteb=128;B.booleanflag=null;C.floatf=0.9239;D.longa=2147483648L;正確答案:D[解析]在選項A中,byte能表示的取值范圍為[-128,127],因此,不能表示128。在選項B中,boolean的取值只能是true或false,不能為null。在選項C中,0.9239為double類型,需要進行數(shù)據(jù)類型轉(zhuǎn)換。只有選項D的寫法正確。所以,本題的答案為D。

7.

具有n個頂點的有向圖最多有______條邊。A.nB.n(n-1)C.n(n+1)D.n^2正確答案:B[解析]如果圖中的每條邊都是有方向的,則稱為有向圖。在一個有向圖中,邊是由兩個頂點組成的有序?qū)?,有序?qū)νǔS眉饫ㄌ柋硎?,例如<vi,vj>表示一條有向邊,其中vi是邊的始點,vj是邊的終點。在有向圖中,<vi,vj>和<vi,vj>代表兩條不同的有向邊。

在有向圖中,任意兩個結(jié)點之間都可以形成一對有向邊,因此,對于具有n個頂點的有向圖,其邊的條數(shù)為n(n-1)。所以,選項B正確。

8.

操作系統(tǒng)不執(zhí)行以下操作中的______。A.分配內(nèi)存B.輸出/輸入C.資源回收D.用戶訪問數(shù)據(jù)庫資源正確答案:D[解析]操作系統(tǒng)簡稱OS(OperatingSystem),是管理和控制計算機硬件與軟件資源的計算機程序,是直接運行在“裸”機上的最基本的系統(tǒng)軟件,是計算機硬件和其他軟件的接口,任何其他軟件都必須在操作系統(tǒng)的支持下才能運行。它具有作業(yè)管理、文件管理、存儲管理、設(shè)備管理以及進程管理等功能。以下將分別針對這幾種功能進行介紹。

1)作業(yè)管理主要包括任務(wù)管理、界面管理、人機交互、圖形界面、語音控制和虛擬現(xiàn)實等。

2)文件管理又稱為信息管理。它是操作系統(tǒng)中實現(xiàn)文件統(tǒng)一管理的一組軟件、被管理的文件以及為實施文件管理所需要的一些數(shù)據(jù)結(jié)構(gòu)的總稱,是對文件存儲器的存儲空間進行組織、分配和回收的軟件,負(fù)責(zé)文件的存儲、檢索、共享和保護。

3)存儲管理實質(zhì)上是對存儲“空間”的管理,主要指對內(nèi)存的管理。

4)設(shè)備管理其實是對硬件設(shè)備的管理,其中包括對輸入/輸出設(shè)備的分配、啟動和完成。

5)進程管理也稱為處理器管理,是對處理器執(zhí)行“時間”的管理,即如何將CPU真正地分配給每個任務(wù)。

本題中,選項A中分配內(nèi)存與選項C中資源回收屬于內(nèi)存管理,選項B中輸出/輸入屬于輸入設(shè)備管理,選項D中的用戶訪問數(shù)據(jù)庫資源是由用戶對數(shù)據(jù)庫系統(tǒng)發(fā)起的操作,不屬于操作系統(tǒng)的作用范疇。所以,選項D正確。

9.

在集合框架中,要實現(xiàn)對集合里的元素進行自定義排序,要實現(xiàn)的接口是______。A.CloneableB.ThreadC.SerializableD.Comparator正確答案:D[解析]在Java語言中,如果要對集合對象或數(shù)組對象進行排序,就需要實現(xiàn)Comparator接口的compare方法,從而實現(xiàn)自定義類的比較。下面給出一個對自定義的類進行排序的例子(通過年齡大小按行排序),實現(xiàn)代碼如下:importjava.util.ArrayList;importjava.util.Collections;importjava.util.Comparator;importjava.util.List;classStudent{privateStringname;privateintage;publicStudent(Stringname,intage){=name;this.age=age;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}}classStudentComparatorimplementsComparator<Student>{@Overridepublicintcompare(Students1,Students2){if(s1.getAge()>s2.getAge())return1;elsererun-1;}}publicclassExample{publicstaticvoidmain(String[]args){List<Student>stus=newArrayList<Student>();stus.add(newStudent("name1",5));stus.add(newStudent("name2",6));stus.add(newStudent("name3",4));Collections.sort(stus,newStudentComparator());for(Studentstu:stus){System.out.println(stu.getName());}}}程序的運行結(jié)果為:name3name1name2

本題中,對于選項A,當(dāng)一個類需要實現(xiàn)復(fù)制功能時,需要實現(xiàn)Cloneable接口。所以,選項A錯誤。

對于選項B,當(dāng)需要實現(xiàn)一個線程時可以繼承Thread類。所以,選項B錯誤。

對于選項C,Runnable是用來實現(xiàn)多線程的接口。所以,選項C錯誤。

對于選項D,Serializable是用來實現(xiàn)序列化的接口。在對Student的對象進行排序時,使用的是自定義的比較方法。所以,選項D正確。

10.

若干個等待訪問磁盤者依次要訪問的磁道為19,43,40,4,79,11,76,當(dāng)前磁頭位于40號柱面,若用最短尋道時間優(yōu)先磁盤調(diào)度算法,則訪問序列為______。A.19,43,40,4,79,11,76B.40,43,19,11,4,76,79C.40,43,76,79,19,11,4D.40,19,11,4,79,76,43正確答案:B[解析]磁盤調(diào)度:在多道程序設(shè)計的計算機系統(tǒng)中,各個進程可能會不斷提出不同的對磁盤進行讀/寫操作的請求。由于有時候這些進程的發(fā)送請求的速度比磁盤響應(yīng)的還要快,因此,有必要為每個磁盤設(shè)備建立一個等待隊列。常用的磁盤調(diào)度算法有以下四種:先來先服務(wù)算法(FCFS)、最短尋道時問優(yōu)先算法(SSTF)、掃描算法(SCAN)和循環(huán)掃描算法(CSCAN)。

最短尋道時間優(yōu)先算法(ShortestSeekTimeFirst,SSTF)要求訪問的磁道與當(dāng)前磁頭所在的磁道距離最近,以使每次的尋道時間最短,該算法可以得到比較好的吞吐量,但不能保證平均尋道時間最短。其缺點是對用戶的服務(wù)請求的響應(yīng)機會不是均等的,因而導(dǎo)致響應(yīng)時間的變化幅度很大。在服務(wù)請求很多的情況下,對內(nèi)外邊緣磁道的請求將會無限期地被延遲,有些請求的響應(yīng)時間將不可預(yù)期。

本題中,當(dāng)采用最短尋道時間優(yōu)先磁盤調(diào)度算法時,每次訪問的磁道都應(yīng)該是上一次訪問的磁道最近的,所以,只有選項B滿足要求。因此,選項B正確。

11.

在Java語言中,打印語句System.out.println("3"+4)的輸出結(jié)果是______。A.34B.7C.3D.4正確答案:A[解析]本題中,由于“3”是字符串,因此,在執(zhí)行"3"+4的過程中,首先把4轉(zhuǎn)換為字符串“4”,然后再執(zhí)行字符串拼接,結(jié)果為“34”,因此,程序的運行結(jié)果為34。所以,選項A正確。

如果把題目改成System.out.println(3+4),由于+操作兩邊的變量都是int類型,因此,此時會先執(zhí)行加操作,結(jié)果為7,然后把7輸出。

12.

下列關(guān)于abstract的描述中,正確的是______。A.abstract修飾符可修飾屬性、方法和類B.抽象方法的方法體必須用一對大括號括住C.抽象方法的方法體(大括號)可有可無D.聲明抽象方法不可寫出大括號正確答案:D[解析]抽象方法是指在類中存在沒有方法體的方法,在Java語言中,當(dāng)用abstract來修飾一個方法時,該方法就是抽象方法。由此可見,抽象方法不能用大括號{}括住(一旦有大括號就表明這個方法有了方法體)。因此,選項D正確,選項B和選項C錯誤。對于選項A,abstract只能修飾類和方法,不能修飾字段。因此,選項A錯誤。

13.

下列關(guān)于MAC地址的表示中,正確的是______。A.00-e0-fe-01-23-45B.00e0.fe01.2345C.00e.0fe.-012.345D.00e0.fe112345正確答案:A[解析]MAC(MediaAccessControl或者MediumAccessControl)中文翻譯為媒體訪問控制,或稱為物理地址、硬件地址,用來定義網(wǎng)絡(luò)設(shè)備的位置。在OSI(OpenSystemInterconnection,開放系統(tǒng)互聯(lián))模型中,第三層網(wǎng)絡(luò)層負(fù)責(zé)IP地址,第二層數(shù)據(jù)鏈路層則負(fù)責(zé)MAC地址。因此,一個主機會有一個MAC地址,而每個網(wǎng)絡(luò)位置會有一個專屬于它的IP地址。

MAC地址格式通常為6個字節(jié)的二進制代碼(以6組16進制數(shù)表示),格式為XX-XX-XX-XX-XX-XX。所以,選項A正確。

14.

下列運算符合法的是______。A.&&B.<>C.whileD.:=正確答案:A[解析]計算機的最基本用途之一就是執(zhí)行數(shù)學(xué)運算,作為一門計算機語言,Java也提供了一套豐富的運算符來操縱變量??梢园堰\算符分成以下幾組:算術(shù)運算符(+、-、*、/、%、++、--等)、關(guān)系運算符(==、!=、>、<、>=、<=等)、位運算符(&、|、^、~、<<、>>、>>>等)、邏輯運算符(&&、||、!等)、賦值運算符(=、+=、-=、*=、/=、(%)=、<<=、>>=、&=、&=、|=等)、其他運算符(條件運算符?:、instanceof運算符等)。

本題中,對于選項A,&&是邏輯操作符,x&&y的運算邏輯如下:當(dāng)x和y均為true時,其結(jié)果是true,否則,結(jié)果是false。所以,選項A正確。

對于選項B,<>不是Java語言的運算符,其作用是用來表示泛型,例如List<String>表示這個列表中存放的是String類型的變量。所以,選項B不正確。

對于選項C,while是Java語言的關(guān)鍵字,用于流程控制,它不是運算符。所以,選項C不正確。

對于選項D,:=不是Java語言的運算符。所以,選項D不正確。

15.

有如下代碼:

publicclassTest

{

publicstaticvoidmain(String[]args)

{

Strings;

System.out.println("s="+s);

}

}

上述代碼的輸出結(jié)果是______。A.代碼得到編譯,并輸出“s=null”B.代碼得到編譯,并輸出“s=”C.由于Strings沒有初始化,代碼不能編譯通過D.代碼得到編譯,但捕獲到NullPointException異常正確答案:C[解析]在Java語言中,任何變量只有被初始化后才能被使用,如果沒有被初始化就直接使用,是無法編譯通過的。本題中,由于Strings沒有初始化,代碼不能編譯通過。所以,選項C正確。

16.

有以下一個對象:

importjava.io.Serializable;

publicclassDataObjectimplementsSerializable

{

privatestaticinti=0;

privateStringword="";

publicvoidsetWord(Stringword)

{

this.word=word;

}

publicvoidsetI(inti)

{

DataObject.i=i;

}

}

創(chuàng)建一個如下方式的DataObject:

DataObjectobject=newDataObject();

object.setWord("123");

object.setI(2);

將此對象序列化,并在另一個JVM中讀取文件,進行反序列化,此時讀出的DataObject對象中的word和i的值分別是______。A.“”,2B.“”,0C.“123”,2D.“123”,0正確答案:D[解析]Java序列化指的是把Java對象轉(zhuǎn)換為字節(jié)序列的過程,而Java反序列化指的是把字節(jié)序列恢復(fù)為Java對象的過程。由于Java語言在序列化的時候不會序列化static變量,因此,上述代碼只實例化了變量word,而沒有實例化變量i。在反序列化的時候,只能讀取到變量word的值,而變量i的值仍然為默認(rèn)值,該默認(rèn)值為0。所以,word的值為“123”,i的值為0,選項D正確。

17.

某進程在運行過程中需要等待從磁盤上讀入數(shù)據(jù),此時進程的狀態(tài)將______。A.從就緒變?yōu)檫\行B.從運行變?yōu)榫途wC.從運行變?yōu)樽枞鸇.從阻塞變?yōu)榫途w正確答案:C[解析]在操作系統(tǒng)中,進程的基本狀態(tài)有就緒狀態(tài)、運行狀態(tài)和阻塞狀態(tài)三種。以下將分別對這三種狀態(tài)進行分析。

(1)就緒(Ready)狀態(tài)

進程已經(jīng)具備運行條件,但是CPU還沒有得到分配。也就是說,當(dāng)進程已分配到除CPU以外的所有必要資源后,只要再獲得CPU,便可立即執(zhí)行,此時進程的狀態(tài)稱為就緒狀態(tài)。在一個系統(tǒng)中,處于就緒狀態(tài)的進程可能有多個,通常將這些處于就緒狀態(tài)的進程排成一個隊列,稱為就緒隊列。

(2)運行狀態(tài)

進程已獲得CPU,其程序正在執(zhí)行。在單處理機系統(tǒng)中,只有一個進程處于運行狀態(tài),在多處理機系統(tǒng)中,則有多個進程處于運行狀態(tài)。

(3)阻塞狀態(tài)

當(dāng)正在運行的進程由于發(fā)生某事件而暫時無法繼續(xù)執(zhí)行時,便放棄處理機而處于暫停狀態(tài),亦即程序的執(zhí)行受到阻塞,把這種暫停狀態(tài)稱為阻塞狀態(tài),有時也稱為等待狀態(tài)或封鎖狀態(tài)。

三種進程之間的轉(zhuǎn)換圖如圖所示。

三種進程之間的轉(zhuǎn)換圖

以下將針對這個狀態(tài)轉(zhuǎn)換圖的條件進行討論與分析:

(1)就緒→運行

對于就緒狀態(tài)的進程,當(dāng)進程調(diào)度程序按一種選定的策略從中選中一個就緒進程,并為之分配了處理機后,該進程便由就緒狀態(tài)變?yōu)檫\行狀態(tài)。

(2)運行→阻塞

如果正在運行的進程因發(fā)生某等待事件而無法執(zhí)行,則進程由執(zhí)行狀態(tài)變?yōu)樽枞麪顟B(tài),例如進程提出輸入/輸出請求而變成等待外部設(shè)備傳輸信息的狀態(tài),進程申請資源(主存空間或外部設(shè)備)得不到滿足時變成等待資源狀態(tài),進程運行中出現(xiàn)了故障(程序出錯或主存儲器讀寫錯等)變成等待干預(yù)狀態(tài)等。

(3)阻塞→就緒

處于阻塞狀態(tài)的進程,當(dāng)其等待的事件已經(jīng)發(fā)生,例如輸入/輸出完成,資源得到滿足或錯誤處理完畢時,處于阻塞狀態(tài)的進程并不會馬上轉(zhuǎn)入運行狀態(tài),而是先轉(zhuǎn)入就緒狀態(tài),然后再由系統(tǒng)進程調(diào)度程序在適當(dāng)?shù)臅r候?qū)⒃撨M程轉(zhuǎn)為運行狀態(tài)。

(4)運行→就緒

正在運行的進程,因為時間片用完而被暫停執(zhí)行,或在采用搶先式優(yōu)先級調(diào)度算法的系統(tǒng)中,當(dāng)有更高優(yōu)先級的進程要運行而被迫讓出處理機時,該進程便由運行狀態(tài)轉(zhuǎn)變?yōu)榫途w狀態(tài)。

以上4種情況可以相互正常轉(zhuǎn)換,那么為什么阻塞狀態(tài)無法直接轉(zhuǎn)換為運行狀態(tài)呢?為什么就緒狀態(tài)無法直接轉(zhuǎn)換為阻塞狀態(tài)呢?其實,即使給阻塞進程分配CPU,也無法執(zhí)行,因為操作系統(tǒng)在進行調(diào)度時,不會在阻塞隊列中進行挑選,其調(diào)度的選擇對象為就緒隊列,而就緒狀態(tài)根本就沒有執(zhí)行,是進入不了阻塞狀態(tài)的。

本題中,進程在運行過程中,進入I/O操作,則處理阻塞。所以,此時進程的狀態(tài)將從運行變?yōu)樽枞?。所以,選項C正確。

18.

有如下代碼:Integeri=newInteger(4);Longl=newLong(4);Doubled=newDouble(4.0);

下面選項中,返回結(jié)果為true的是______。A.i==dB.d==lC.i==lD.i.equals(d)E.d.equals(l)F.i.equals(l))G.l.equals(4L)正確答案:G[解析]在Java語言中,判等符“==”用來比較對象的地址是否相同,進行比較的對象必須是類型相同的對象。對于本題而言,變量i、l和d是不同類型的對象,因此,在使用判等符“==”比較的時候,編譯器會報錯。因此,選項A、選項B和選項C錯誤。

equals方法用來比較對象的值是否相同。Integer類的equals方法的描述為:只有當(dāng)參數(shù)不為null而且參數(shù)為Integer類型且有相同的int值的時候,才返回true,否則,返回false。Long類與Double類的equals方法的描述類似。

對于選項D、選項E和選項F,調(diào)用方法的對象與參數(shù)的類型都不相同,因此,返回值為false。所以,選項D、選項E和選項F錯誤。

對于選項G,對象l的類型為Long,而4L的類型也為Long,它們有相同的值,因此,返回值為true。所以,選項G正確。

19.

IP地址1是一個______IP地址。A.A類B.B類C.C類D.D類正確答案:B

20.

以下關(guān)于被訪問控制符protected修飾的成員變量的描述中,正確的是______。A.可以被三種類所引用:該類自身、與它在同一個包中的其他類、在其他包中的該類的子類B.只能被同一個包中的類訪問C.可以被兩種類訪問和引用:該類本身、該類的所有子類D.只能被該類自身所訪問和修改正確答案:A

21.

IPv6地址占______個字節(jié)。A.32B.4C.8D.16正確答案:D[解析]IP地址是Internet上主機或路由器的數(shù)字標(biāo)識,用來唯一地標(biāo)識該設(shè)備。IPv4(InternetProtocolversion4,互聯(lián)網(wǎng)協(xié)議版本4)是一個被廣泛使用的互聯(lián)網(wǎng)協(xié)議,而IPv6是下一版本的互聯(lián)網(wǎng)協(xié)議。隨著互聯(lián)網(wǎng)的迅速發(fā)展,IPv4定義的有限地址空間將被耗盡,地址空間的不足必將妨礙互聯(lián)網(wǎng)的進一步發(fā)展。為了擴大地址空間,擬通過IPv6重新定義地址空間。

IPv6采用128位(合16個字節(jié))地址長度,幾乎可以不受限制地提供地址。IPv6不僅解決了地址短缺的問題,還考慮了在IPv4中存在的端到端IP連接、服務(wù)質(zhì)量、安全性、多播、移動性及即插即用等問題。所以,選項D正確。

22.

應(yīng)用程序PING發(fā)出的是______報文。A.ICMP應(yīng)答B(yǎng).TCP請求C.TCP應(yīng)答D.ICMP請求正確答案:A[解析]PING命令主要是為了檢查網(wǎng)絡(luò)是否通暢,它通過向計算機發(fā)送ICMP(InternetControlMessageProtocol,Internet控制報文協(xié)議)應(yīng)答報文并且監(jiān)聽回應(yīng)報文的返回,以校驗與遠程計算機或本地計算機的連接。對于每個發(fā)送報文,PING最多等待的時間為1s,并打印發(fā)送和接收報文的數(shù)量。比較每個接收報文和發(fā)送報文,以校驗其有效性。如果能夠成功校驗IP地址,但不能成功校驗計算機名,則說明名稱分析存在問題。默認(rèn)情況下,發(fā)送四個回應(yīng)報文,每個報文包含64字節(jié)的數(shù)據(jù)(周期性的大寫字母序列)。

通過以上的分析,選項A正確。

23.

paint()方法使用的參數(shù)類型是______。A.GraphicsB.Graphics2DC.StringD.Color正確答案:A

24.

當(dāng)線程1使用某個對象,而此對象又需要線程2修改后才能符合線程1的需要,這時線程1就要等待線程2完成修改工作,這種現(xiàn)象稱為______。A.線程的同步B.線程的調(diào)度C.線程的就緒D.線程的互斥正確答案:A[解析]對于選項A,同步就是協(xié)同步調(diào),按預(yù)定的先后次序進行運行。例如你說完,我再說。該定義正好與題目描述一致。所以,選項A正確。

對于選項B,假設(shè)計算機的CPU在任意時刻都只能執(zhí)行一條機器指令,線程只有獲得CPU的使用權(quán)才能執(zhí)行對應(yīng)的操作,多線程的并發(fā)運行原理為:各個線程輪流獲得CPU的使用權(quán),來執(zhí)行對應(yīng)的操作。線程調(diào)度是指按照特定機制為多個線程分配CPU的使用權(quán)。所以,選項B錯誤。

對于選項C,線程有多個狀態(tài),就緒是指這個線程已經(jīng)有了除CPU外所有的資源,在等待獲取CPU,一旦獲取到CPU的控制權(quán)就可以立即執(zhí)行。所以,選項C錯誤。

對于選項D,線程互斥是指某一資源同時只允許一個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。所以,選項D錯誤。

25.

有如下代碼:publicclassTest{publicstaticinttestException(inti)throwsException{try{returni/5;}catch(Exceptione){thrownewException("exceptioninaaMethod");}finally{System.out.pfintf("finally");}}publicstaticvoidmain(String[]args){try{testException(0);}catch(Exceptionex){System.out.printf("exceptioninmain");}System.out.printf("finished");}}

以上這段代碼編譯運行后,輸出的結(jié)果是______。A.finallyexceptioninmainfinishedB.finallyfinishedC.exceptioninmainfinallyD.finallyexceptioninmainfinished正確答案:B[解析]在Java語言的異常處理中,finally語句塊的作用就是為了保證無論出現(xiàn)什么情況,finally語句塊里的代碼一定會被執(zhí)行。由于當(dāng)程序執(zhí)行到return語句的時候就意味著結(jié)束對當(dāng)前方法的調(diào)用并跳出這個方法體,因此,任何語句要執(zhí)行都只能在return語句前執(zhí)行(除非碰到exit方法),所以,finally塊里的代碼也是在return前執(zhí)行的。此外,如果try-finally或者catch-finally中都有return語句,則finally塊中的return語句將會覆蓋別處的return語句,最終返回到調(diào)用者那里的是finally中return的值。

對于本題而言,在調(diào)用testException方法時不會拋出異常,雖然testException方法體內(nèi)調(diào)用return返回這個方法,但是Java虛擬機要保證finally塊的代碼必須執(zhí)行,因此,在調(diào)用testException方法時會輸出finally,接著方法調(diào)用結(jié)束后,在main方法中會輸出finished。因此,選項B正確。

26.

操作系統(tǒng)的一些特別端口要為特定的服務(wù)做預(yù)留,以下關(guān)于必須要root權(quán)限才能打開的端口的描述中,正確的是______。A.端口號在64512~65535之間的端口B.所有小于1024的每個端口C.RFC標(biāo)準(zhǔn)文檔中已經(jīng)聲明特定服務(wù)的相關(guān)端口,例如HTTP服務(wù)的80端口、8080端口等D.所有端口都可以不受權(quán)限限制打開正確答案:B[解析]端口是計算機與外界通信交流的出口。其中硬件領(lǐng)域的端口又稱接口,例如,USB端口、串行端口等。軟件領(lǐng)域的端口一般指網(wǎng)絡(luò)中面向連接服務(wù)和無連接服務(wù)的通信協(xié)議端口,是一種抽象的軟件結(jié)構(gòu),包括一些數(shù)據(jù)結(jié)構(gòu)和I/O(基本輸入/輸出)緩沖區(qū)。

具體而言,操作系統(tǒng)一共有65535個端口可用。一般用到的是1~65535,其中,0不使用,1~1023為系統(tǒng)端口,也叫保留端口,這些端口只有系統(tǒng)特許的進程才能使用,被分配給一些常見的重要服務(wù)(例如HTTP、FTP和SSH等)。1024~65535為用戶端口,又分為臨時端口(1024~5000)和服務(wù)器(非特權(quán))端口(5001~65535),其中,一般的應(yīng)用程序使用1024~4999來進行通信。服務(wù)器(非特權(quán))端口,用來給用戶自定義端口。大于1024的端口作為隨機分配之用。

根據(jù)以上描述可知,系統(tǒng)端口為小于1024的端口。所以,選項B正確。

27.

一棵二叉樹有1000個結(jié)點,則該二叉樹的最小高度是______。A.9B.10C.11D.12正確答案:B

28.

在MySQL主從結(jié)構(gòu)的主數(shù)據(jù)庫中,不可能出現(xiàn)______。A.錯誤日志B.事務(wù)日志C.中繼日志D.Redolog正確答案:C[解析]對于選項A,錯誤日志在MySQL數(shù)據(jù)庫中很重要,它記錄著mysqld(mysqld是用來啟動MySQL數(shù)據(jù)庫的命令)啟動和停止,以及服務(wù)器在運行過程中發(fā)生的任何錯誤的相關(guān)信息。所以,選項A正確。

對于選項B,事務(wù)日志是一個與數(shù)據(jù)庫文件分開的文件。它存儲著對數(shù)據(jù)庫進行的所有更改操作過程,并全部記錄插入、更新、刪除、提交、回退和數(shù)據(jù)庫模式變化。事務(wù)日志還被稱為前滾日志,是備份和恢復(fù)的重要組件,也是使用SQLRemote或復(fù)制數(shù)據(jù)所必需的。所以,選項B正確。

對于選項C,MySQL在從結(jié)點上使用了一組編了號的文件,這組文件被稱為中繼日志。當(dāng)從服務(wù)器想要和主服務(wù)器進行數(shù)據(jù)的同步時,從服務(wù)器將主服務(wù)器的二進制日志文件復(fù)制到自己的主機,并放在中繼日志中,然后調(diào)用SQL線程,按照復(fù)制中繼日志文件中的二進制日志文件執(zhí)行以便達到數(shù)據(jù)同步的目的。中繼日志文件是按照編碼順序排列的,從000001開始,包含所有當(dāng)前可用的中繼文件的名稱。中繼日志的格式和MySQL二進制日志的格式一樣,從而更容易被mysqlbinlog客戶端應(yīng)用程序讀取。因此,中繼日志只有在從服務(wù)器中存在。所以,選項C錯誤。

對于選項D,Redolog中文名為重做日志,包含在線重做日志(OnlineRedolog)和歸檔日志(Archivelog)。其中,在線重做日志主要用于以下情形:數(shù)據(jù)庫所在服務(wù)器突然掉電、突然重啟或者執(zhí)行shutdown、abmt等命令使得在服務(wù)器重新啟動之后,數(shù)據(jù)庫沒有辦法正常地啟動實例。歸檔日志主要用于硬件級別的錯誤:磁盤的壞道導(dǎo)致無法讀寫、寫入的失敗、磁盤受損導(dǎo)致數(shù)據(jù)庫數(shù)據(jù)丟失。所以,選項D正確。

所以,本題的答案為C。

29.

如果希望控件在界面上按表格行分列排列,應(yīng)使用的布局管理器是______。A.BoxLayoutB.GridLayoutC.FlowLouLayoutD.BorderLayout正確答案:B[解析]Swing是一個用于開發(fā)Java應(yīng)用程序用戶界面的開發(fā)工具包。利用Swing豐富、靈活的功能和模塊化組件,開發(fā)人員可以只用很少的代碼來創(chuàng)建優(yōu)雅的用戶界面。

具體而言,Swing中主要有如下幾種布局容器:

1)FlowLayout:把控件按照由左向右順序水平放置在容器中,如果在一行無法放下,就放到下一行。

2)BorderLayout:將整個容器劃分成東南西北中五個方位來放置控件,放置控件時需要指定控件放置的方位。

3)BoxLayout:可以指定在容器中是否對控件進行水平或者垂直放置,它是比FlowLayout要更為靈活的一個布局容器。

4)GridLayout:將整個容器劃分成一定的行和一定的列,可以指定控件放在某行某列上。

5)GridBagLayout:GridBagLayout是Swing當(dāng)中最靈活也是最復(fù)雜的布局管理器,可對控件在容器中的位置進行比較靈活的調(diào)整。

通過上面的分析可知,選項B正確。

30.

Java語言的接口java.util.Collection定義了許多方法,以下方法中,不是Collection接口所定義的是______。A.booleancontainsAll(Collectionc)B.intsize()C.compareTo(Objectobj)D.booleanequals(Object0)正確答案:C[解析]java.util.Collection是一個集合接口,它提供了對集合對象進行基本操作的通用接口方法。Collection接口在Java類庫中有很多具體的實現(xiàn)。具體而言,Collection主要方法見下表。Collection主要方法方法描述add(Ee)把對象e添加到容器中addAll(Collection<?extendsE>c)把c中的所有對象添加到容器中clear()清空容器contains(Objecto)如果容器中有對象o,那么返回true,否則,返回falsecontainsAll(Collection<?>c)如果容器中包含c中所有的對象,那么返回true,否則,返回falseequals(Objecto)判斷對象o是否和容器相等hashCode()返回容器的hash值isEmpty()如果容器為空,返回trueiterator()返回這個容器的迭代器remove(Objecto)從列表中刪除對象oremoveAll(Collection<?>c)從列表中刪除那些在c中存在的對象retainAll(Collection<?>c)列表中移除未包含在指定Collection中的所有元素size()返回容器中元素的個數(shù)toArray()返回一個數(shù)組,數(shù)組中包含容器中所有的元素toArray(T[]a)與方法toArray類似,不同之處為返回數(shù)組的類型與參數(shù)指定的類型相同

所以,本題的答案為C。

二、論述題1.

如何實現(xiàn)鏈表的反轉(zhuǎn)?正確答案:為了正確地反轉(zhuǎn)一個鏈表,需要調(diào)整指針的指向,而與指針操作相關(guān)代碼總是非常容易出錯的。先舉個例子看一下具體的反轉(zhuǎn)過程,例如,i,m,n是3個相鄰的結(jié)點,假設(shè)經(jīng)過若干步操作,已經(jīng)把結(jié)點i之前的指針調(diào)整完畢,這些結(jié)點的next指針都指向前面一個結(jié)點?,F(xiàn)在遍歷到結(jié)點m,當(dāng)然,需要調(diào)整結(jié)點的next指針,讓它指向結(jié)點i,但需要注意的是,一旦調(diào)整了指針的指向,鏈表就斷開了,因為已經(jīng)沒有指針指向結(jié)點n,沒有辦法再遍歷到結(jié)點n了,所以為了避免鏈表斷開,需要在調(diào)整m的next之前要把n保存下來。接下來試著找到反轉(zhuǎn)后鏈表的頭結(jié)點,不難分析出反轉(zhuǎn)后鏈表的頭結(jié)點是原始鏈表的尾結(jié)點,即next為空指針的結(jié)點。下面給出非遞歸方法實現(xiàn)鏈表的反轉(zhuǎn)的實現(xiàn)代碼。

publicvoidReverseIteratively(Nodehead){

NodepReversedHead=head;

NodepNode=head;

NodepPrev=null;

while(pNode!=null){

NodepNext=pNode.next;

if(pNext==null)

pReversedHead=pNode;

pNode.next=pPrev;

pPrev=pNode;

pNode=pNext;

}

this.head=pReversedHead;

2.

強制類型轉(zhuǎn)換的注意事項有哪?正確答案:Java語言在涉及byte、short和char類型的運算時,首先會把這些類型的變量值強制轉(zhuǎn)換為int類型,然后對int類型的值進行計算,最后得到的值也是int類型。因此,如果把兩個short類型的值相加,最后得到的結(jié)果是int類型;如果把兩個byte類型的值相加,最后也會得到一個int類型的值。如果需要得到short類型的結(jié)果,就必須顯式地把運算結(jié)果轉(zhuǎn)換為short類型,例如對于語句shorts1=1;s1=s1+1,由于在運行時會首先將s1轉(zhuǎn)換成int類型,因此s1+1的結(jié)果為int類型,這樣編譯器會報錯,所以,正確的寫法應(yīng)該shorts1=1;s1=(short)(s1+1)。

有一種例外情況?!?=”為Java語言規(guī)定的運算法,Java編譯器會對其進行特殊處理,因此,語句shorts1=1;s1+=1能夠編譯通過。

3.

假設(shè)有一個中央調(diào)度機,有n個相同的任務(wù)需要調(diào)度到m臺服務(wù)器上執(zhí)行,由于每臺服務(wù)器的配置不一樣,因此,服務(wù)器執(zhí)行一個任務(wù)所花費的時間也不同。現(xiàn)在假設(shè)第i個服務(wù)器執(zhí)行一個任務(wù)需要的時間為t[i]。例如,有2個執(zhí)行機a與b,執(zhí)行一個任務(wù)分別需要7min和10min,有6個任務(wù)待調(diào)度。如果平分這6個任務(wù),即a與b各3個任務(wù),則最短需要30min執(zhí)行完所有。如果a分4個任務(wù),b分2個任務(wù),則最短28min執(zhí)行完。請設(shè)計調(diào)度算法,使得所有任務(wù)完成所需要的時間最短。輸入m臺服務(wù)器,每臺機器處理一個任務(wù)的時間為t[i],完成n個任務(wù),輸出n個任務(wù)在m臺服務(wù)器的分布。intestimate_process_time(int[]t,intm,intn)。正確答案:本題可以采用貪心法來解決,具體實現(xiàn)思路如下:

申請一個數(shù)組來記錄每臺機器的執(zhí)行時間,初始化為0。在調(diào)度任務(wù)的時候,對于每個任務(wù),在選取機器的時候采用如下的貪心策略:對于每臺機器,計算機器已經(jīng)分配任務(wù)的執(zhí)行時間+這個任務(wù)需要的時間,選用最短時間的機器進行處理。實現(xiàn)代碼如下:

publicclassTest

{

publicstaticvoidmain(String[]args)

{

intt[]={7,10};

intn=6;

intproTime[]=calculate_orocess_time(t,n);

if(proTime==null)

{

System.out.println("分配失敗");

return;

}

inttotalTime=proTime[0];

for(inti=0;i<proTime.length;i++)

{

System.out.println("第"+(i+1)+"臺服務(wù)器有"+proTime[i]/t[i]

+"個任務(wù),執(zhí)行總時間為:"+proTime[i]);

if(proTime[i]>totalTime)

totalTime=proTime[i];

}

System.out.println("執(zhí)行完所有任務(wù)所需的時間為"+totalTime);

}

/**

*@paramt

每個服務(wù)器處理的時間

*@paramn

任務(wù)的個數(shù)

*@return各個服務(wù)器執(zhí)行完任務(wù)所需的時間

*/

privatestaticint[]calculate_process_time(int[]t,intn)

{

if(t==null||n<=0)

returnnull;

intm=t.length;

intminlndex;

intminTime;

int[]proTime=newint[m];

for(inti=0;i<n;i++)

{

minTime=proTime[0]+t[0];//把任務(wù)給第j個機器上后這個機器的執(zhí)行時間

minIndex=0;

//把任務(wù)給第minIndex個機器上

for(intj=1;j<m;j++)

{

//分配到第j臺機器上后執(zhí)行時間更短

if(minTime>proTime[j]+t[j])

{

minTime=proTime[j]+t[j];

minIndex=j;

}

}

proTime[minIndex]+=t[minIndex];

}

returnproTime;

}

}

程序的運行結(jié)果為:

第1臺服務(wù)器有4個任務(wù),執(zhí)行總時間為:28

第2臺服務(wù)器有2個任務(wù),執(zhí)行總時間為:20

執(zhí)行完所有任務(wù)所需的時間為28

4.

面向?qū)ο笈c面向過程有什么區(qū)別?正確答案:面向?qū)ο笾械膶ο蟛皇侵概笥?,它是一種編程術(shù)語。面向?qū)ο笫钱?dāng)今軟件開發(fā)方法的主流方法之一,它是把數(shù)據(jù)及對數(shù)據(jù)的操作方法放在一起,作為一個相互依存的整體,即對象。對同類對象抽象出其共性,即類,類中的大多數(shù)數(shù)據(jù),只能被本類的方法進行處理。類通過一個簡單的外部接口與外界發(fā)生關(guān)系,對象與對象之間通過消息進行通信。程序流程由用戶在使用中決定,例如,站在抽象的角度,人具有身高、體重、年齡、血型等一些特征,人會勞動、人都會直立行走、人都會吃飯、人都會用自己的頭腦去創(chuàng)造工具等這些方法,人僅僅只是一個抽象的概念,它是不存在的實體,但是所有具備人這個群體的屬性與方法的對象都叫人,這個對象人是實際存在的實體,每個人都是人這個群體的一個對象。

而面向過程是一種以事件為中心的開發(fā)方法,就是自頂向下順序執(zhí)行,逐步求精,其程序結(jié)構(gòu)是按功能劃分為若干個基本模塊,這些模塊形成一個樹狀結(jié)構(gòu),各模塊之間的關(guān)系也比較簡單,在功能上相對獨立,每一模塊內(nèi)部一般都是由順序、選擇和循環(huán)3種基本結(jié)構(gòu)組成,其模塊化實現(xiàn)的具體方法是使用子程序,而程序流程在寫程序時就已經(jīng)決定。以五子棋為例,面向過程的設(shè)計思路就是首先分析問題的步驟:第一步,開始游戲;第二步,黑子先走;第三步,繪制畫面;第四步,判斷輸贏;第五步,輪到白子;第六步,繪制畫面;第七步,判斷輸贏;第八步,返回第二步;第九步,輸出最后結(jié)果。把上面每個步驟用分別的函數(shù)來實現(xiàn),就是一個面向過程的開發(fā)方法。

具體而言,面向?qū)ο笈c面向過程主要有以下幾個方面的不同之處。

1)出發(fā)點不同。面向?qū)ο蠓椒ㄊ怯梅铣R?guī)思維的方式來處理客觀世界

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論