黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

第一部分 Java基礎(chǔ)
第二部分 Java進階

經(jīng)典Java面試題及答案(1~41企業(yè)真題)

1、下面程序的運行結(jié)果是

public static void main(String[] args) {
    String str1 = "hello";
    String str2 = "he" + new String("llo");
    String str3 = "he" + "llo";
    System.err.println(str1 == str2);
    System.err.println(str1 == str3);
}

運行結(jié)果:

false

true

2、HashSet 里的元素是不能重復(fù)的, 那用什么方法來區(qū)分重復(fù)與否呢?

往集合在添加元素時,調(diào)用 add(Object)方法的時候,首先會調(diào)用Object的 hashCode()方法判斷hashCode 是否已經(jīng)存在,如不存在則直接插入元素;如果已存在則調(diào)用Object對象的 equals()方法判斷是否返回 true,如果為true則說明元素已經(jīng)存在,如為false則插入元素。

3、List ,Set, Map是否繼承來自Collection接口? 存取元素時, 有何差異?

● List、Set 是繼承 Collection 接口; Map不是。

● List:元素有放入順序,元素可重復(fù),通過下標來存取。

● Map:元素按鍵值對存取,無放入順序。

● Set:元素?zé)o存取順序,元素不可重復(fù)(注意:元素雖然無放入順序,但是元素在 set 中的位置是有該元素的 hashCode 決定的,其位置其實是固定的)。

4、簡述 Java 中的值傳遞和引用傳遞?

按值傳遞是指的是在方法調(diào)用時,傳遞的參數(shù)是按值的拷貝傳遞。按值傳遞重要特點:傳遞的是值的拷貝,也就是說傳遞后就互不相關(guān)了示例如下:

class TempTest {
    private void test1(int a) {
        a = 5;
        System.out.println("test1 方法中的 a=" + a);
    }

    public static void main(String[] args) {
        TempTest t = new TempTest();
        int a = 3;
        //傳遞后,test1 方法對變量值的改變不影響這里的 a
        t.test1(a);
        System.out.println("main 方法中的 a =" + a);
    }
}

運行結(jié)果是:

test1 方法中的 a=5

main 方法中的 a =3

按引用傳遞是指的是在方法調(diào)用時,傳遞的參數(shù)是按引用進行傳遞,其實傳遞的是引用的地址,也就是變量所對應(yīng)的內(nèi)存空間的地址。傳遞的是值的引用,也就是說傳遞前和傳遞后都指向同一個引用(也就是同一個內(nèi)存空間)。示例如下:

class TempTest {
    private void test1(A a) {
        a.age = 20;
        System.out.println("test1 方法中的 age=" + a.age);
    }

    public static void main(String[] args) {
        TempTest t = new TempTest();
        A a = new A();
        a.age = 10;
        t.test1(a);
        System.out.println("main 方法中的 age =" + a.age);
    }
}

class A {
    public int age = 0;
}

運行結(jié)果:

test1 方法中的 age=20

main 方法中的 age =20

5、請寫出幾個常見的運行時異常?

NullPointerException - 空指針引用異常

ClassCastException - 類型強制轉(zhuǎn)換異常。

IndexOutOfBoundsException - 下標越界異常

NumberFormatException - 數(shù)字格式異常

6、簡述數(shù)據(jù)庫事務(wù)和實際工作中的作用?

所謂事務(wù)是用戶定義的一個數(shù)據(jù)庫操作序列,這些操作要么全做要么全不做,是一個不可分割的工作單位。

例如在關(guān)系數(shù)據(jù)庫中,一個事務(wù)可以是一條 SQL 語句、一組 SQL 語句或整個程序。簡單舉個例子就是你要同時修改數(shù)據(jù)庫中兩個不同表的時候,如果它們不是一個事務(wù)的話,當?shù)谝粋€表修改完,可是第二表改修出現(xiàn)了異常而沒能修改的情況下,就只有第二個表回到未修改之前的狀態(tài),而第一個表已經(jīng)被修改完畢。而當你把它們設(shè)定為一個事務(wù)的時候,當?shù)谝粋€表修改完,可是第二表改修出現(xiàn)了異常而沒能修改的情況下,第一個表和第二個表都要回到未修改的狀態(tài)!這就是所謂的事務(wù)回滾。

例如,在將資金從一個帳戶轉(zhuǎn)移到另一個帳戶的銀行應(yīng)用中,一個帳戶將一定的金額貸記到一個數(shù)據(jù)庫表中,同時另一個帳戶將相同的金額借記到另一個數(shù)據(jù)庫表中。由于計算機可能會因停電、網(wǎng)絡(luò)中斷等而出現(xiàn)故障,因此有可能更新了一個表中的行,但沒有更新另一個表中的行。如果數(shù)據(jù)庫支持事務(wù),則可以將數(shù)據(jù)庫操作組成一個事務(wù),以防止因這些事件而使數(shù)據(jù)庫出現(xiàn)不一致。如果事務(wù)中的某個點發(fā)生故障,則所有更新都可以回滾到事務(wù)開始之前的狀態(tài)。如果沒有發(fā)生故障,則通過以完成狀態(tài)提交事務(wù)來完成更新。

7、已知一棵二叉樹,如果先序遍歷的節(jié)點順序是:ADCEFGHB ,中序遍歷是:CDFEGHAB ,則后序遍歷結(jié)果為:(D)

A.CFHGEBDA

B.CDFEGHBA

C.FGHCDEBA

D. CFHGEDBA

原因:對于二叉樹的遍歷方式一般分為三種先序、中序、后序三種方式:

先序遍歷(根左右)若二叉樹為空,則不進行任何操作,否則

● 訪問根結(jié)點。

● 先序方式遍歷左子樹。

● 先序遍歷右子樹。

中序遍歷 (左根右)若二叉樹為空,則不進行任何操作,否則

● 中序遍歷左子樹。

● 訪問根結(jié)點。

● 中序遍歷右子樹。

后序遍歷 (左右根)若二叉樹為空,則不進行任何操作,否則

● 后序遍歷左子樹。

● 后序遍歷右子樹。

● 訪問根結(jié)點。

因此,根據(jù)題目給出的先序遍歷和中序遍歷,可以畫出二叉樹:

8、下列哪兩個數(shù)據(jù)結(jié)構(gòu),同時具有較高的查找和刪除性能?

A.有序數(shù)組

B.有序鏈表

C.AVL 樹

D.Hash 表

看下圖:

平衡二叉樹的查找,插入和刪除性能都是 O(logN)  ,其中查找和刪除性能較好;哈希表的查找、插入和刪除性能都是 O(1) ,都是最好的。所以最后的結(jié)果選擇:CD。

9、下列排序算法中,哪些時間復(fù)雜度不會超過 nlogn?(BC)

A.快速排序

B.堆排序

C.歸并排序

D.冒泡排序

看下圖:

根據(jù)上圖,觀察平均情況,最好最差情況的時間復(fù)雜度基本可以知道答案了,最后結(jié)果選擇: BC。

10、初始序列為 1 8 6 2 5 4 7 3 一組數(shù)采用堆排序,當建堆(小根堆)完畢時,堆所對應(yīng)的二叉樹中序遍歷序列為:( A )

A. 8 3 2 5 1 6 4 7

B. 3 2 8 5 1 4 6 7

C. 3 8 2 5 1 6 7 4

D. 8 2 3 5 1 4 7 6

初始化序列:1 8 6 2 5 4 7 3,小根堆就是要求結(jié)點的值小于其左右孩子結(jié)點的值,左右孩子的大小沒有關(guān)系,那么小根堆排序之后為:1 2 4 3 5 6 7 8;中序遍歷:左根右,故遍歷結(jié)果為:8 3 2 5 1 6 4 7,故最后選擇的結(jié)果:A

11、當 n = 5 時,下列函數(shù)的返回值是:(A)

int foo(int n) {
    if (n < 2) return n;
    return foo(n - 1) + foo(n - 2);
}

A.5

B.7

C.8

D.1

12、S市 A ,B 共有兩個區(qū),人口比例為 3:5 ,據(jù)歷史統(tǒng)計 A 區(qū)的犯罪率為 0.01% ,B 區(qū)為 0.015% ,現(xiàn)有一起新案件發(fā)生在 S 市,那么案件發(fā)生在A 區(qū)的可能性有多大?

A.37.5%

B.32.5%

C.28.6%

D.26.1%

做這道題首先得了解犯罪率是什么?犯罪率就是犯罪人數(shù)與總?cè)丝跀?shù)的比。因此可以直接得出公式:( 3 0.01% ) / ( 30.01% + 5 * 0.015% ) = 28.6%,當然如果不好理解的話,我們可以實例化,比如B區(qū)假設(shè) 5000 人,A區(qū) 3000 人,A 區(qū)的犯罪率為 0.01%,那么 A 區(qū)犯罪人數(shù)為 30 人,B 區(qū)的犯罪率為 0.015% ,那么 B 區(qū)的犯罪人數(shù)為 75 人 ,求發(fā)生在 A 區(qū)的可能性,就是說 A 區(qū)的犯罪人數(shù)在總犯罪人數(shù)的多少,也就是 30/(30+75)=0.2857,當然,也可以回歸到我們高中遺忘的知識:

假設(shè) C 表示犯案屬性

在 A 區(qū)犯案概率:P(C|A)=0.01%

在 B 區(qū)犯案概率:P(C|B)=0.015%

在 A 區(qū)概率:P(A)=3/8

在 B 區(qū)概率:P(B)=5/8

犯案概率:P(C)=(3/80.01%+5/80.015%)

根據(jù)貝葉斯公式:P(A|C) = P(A,C) / P(C) = [P(C|A) P(A)] / [ P(C|A) P(A)+ P(C|B) P(B) ] 也可以算出答案來,最后結(jié)果選擇為: C

13、Linux系統(tǒng)中,哪些可以用于進程間的通信?(ABCD )

A.Socket

B.共享內(nèi)存

C.消息隊列

D.信號量

管道(Pipe)及有名管道(named pipe):管道可用于具有親緣關(guān)系進程間的通信,有名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關(guān)系進程間的通信;

信號(Signal):信號是比較復(fù)雜的通信方式,用于通知接受進程有某種事件發(fā)生,除了用于進程間通信外,進程還可以發(fā)送信號給進程本身;linux 除了支持 Unix 早期信號語義函數(shù) sigal 外,還支持語義符合 Posix.1 標準的信號函數(shù) sigaction(實際上,該函數(shù)是基于 BSD 的,BSD 為了實現(xiàn)可靠信號機制,又能夠統(tǒng)一對外接口,用 sigaction 函數(shù)重新實現(xiàn)了 signal 函數(shù));

報文(Message)隊列(消息隊列):消息隊列是消息的鏈接表,包括 Posix 消息隊列 system V 消息隊列。有足夠權(quán)限的進程可以向隊列中添加消息,被賦予讀權(quán)限的進程則可以讀走隊列中的消息。消息隊列克服了信號承載信息量少,管道只能承載無格式字節(jié)流以及緩沖區(qū)大小受限等缺點。

共享內(nèi)存:使得多個進程可以訪問同一塊內(nèi)存空間,是最快的可用 IPC 形式。是針對其他通信機制運行效率較低而設(shè)計的。往往與其它通信機制,如信號量結(jié)合使用,來達到進程間的同步及互斥。

信號量(semaphore):主要作為進程間以及同一進程不同線程之間的同步手段。

套接口(Socket):更為一般的進程間通信機制,可用于不同機器之間的進程間通信。起初是由 Unix 系統(tǒng)的 BSD分支開發(fā)出來的,但現(xiàn)在一般可以移植到其它類 Unix 系統(tǒng)上:Linux 和 System V 的變種都支持套接字。

故最后選擇的結(jié)果為: ABCD

14、靜態(tài)變量通常存儲在進程哪個區(qū)?( C )

A.棧區(qū)

B.堆區(qū)

C.全局區(qū)

D.代碼區(qū)

原因:靜態(tài)變量的修飾關(guān)鍵字:static,又稱靜態(tài)全局變量。故最后選擇的結(jié)果為: C

15、如何提高查詢 Name 字段的性能( B )

A.在 Name 字段上添加主鍵

B.在 Name 字段上添加索引

D.在 Age 字段上添加索引

16、IP地址 192.168.14.69 是一個(B)類 IP 地址

17、瀏覽器訪問某頁面,HTTP協(xié)議返回狀態(tài)碼為 403 時表示:( B )

A.找不到該頁面

B.禁止訪問

C.內(nèi)部服務(wù)器訪問

D.服務(wù)器繁忙

18、TCP 和 IP 分別對應(yīng)了 OSI 中的哪幾層?(CD)

A.Application layer

B.Presentation layer

C.Transport layer

D.Network layer

19、一個棧的入棧序列是 A,B,C,D,E,則棧的不可能的輸出序列是?(C)

A.EDCBA

B.DECBA

C.DCEAB

D.ABCDE

堆棧分別是先進后出,后進先出,選項 a 是 abcde 先入棧,然后依次出棧,正好是 edcba。選項 b 是 abcd 先依次入棧,然后d出棧, e再入棧, e出棧選項c是錯誤的,不可能a先出棧。選項 d 是 a 入棧,然后 a 出棧;b 再入棧, b 出棧。依此類推。最后的結(jié)果選擇 C。

20、同一進程下的線程可以共享以下?(BD)

A.stack

B.data section

C.register set

D.file fd

● 線程共享的內(nèi)容包括:

進程代碼段

進程的公有數(shù)據(jù)(利用這些共享的數(shù)據(jù),線程很容易的實現(xiàn)相互之間的通訊)

進程打開的文件描述符

信號的處理器

進程的當前目錄和進程用戶 ID 與進程組 ID

● 線程獨有的內(nèi)容包括:

線程 ID

寄存器組的值

線程的堆棧

錯誤返回碼

線程的信號屏蔽碼

所以選擇為 BD。

21、遞歸函數(shù)最終會結(jié)束,那么這個函數(shù)一定?(B)

A.使用了局部變量

B.有一個分支不調(diào)用自身

C.使用了全局變量或者使用了一個或多個參數(shù)

D.沒有循環(huán)調(diào)用

22、編譯過程中,語法分析器的任務(wù)是(BCD)

A.分析單詞是怎樣構(gòu)成的

B.分析單詞串是如何構(gòu)成語言和說明的

C.分析語句和說明是如何構(gòu)成程序的

D.分析程序的結(jié)構(gòu)

● 詞法分析(lexical analysis)詞法分析是編譯過程的第一個階段。這個階段的任務(wù)是從左到右的讀取每個字符,然后根據(jù)構(gòu)詞規(guī)則識別單詞。詞法分析可以用 lex 等工具自動生成。

● 語法分析(syntax analysis)語法分析是編譯過程的一個邏輯階段。語法分析在詞法分析的基礎(chǔ)上,將單詞序列組合成各類語法短語,如“程序”,“語句”,“表達式”等等。語法分析程序判斷程序在結(jié)構(gòu)上是否正確。

● 語義分析(semantic analysis)屬于邏輯階段。對源程序進行上下文有關(guān)性質(zhì)的審查,類型檢查。如賦值語句左右端類型匹配問題。

所以 BCD 都屬于詞法分析,選擇結(jié)果為 BCD。

23、同步機制應(yīng)該遵循哪些基本準則?(ABCD)

A.空閑讓進

B.忙則等待

C.有限等待

D.讓權(quán)等待

24、進程進入等待狀態(tài)有哪幾種方式?(D)

A.CPU 調(diào)度給優(yōu)先級更高的線程

B.阻塞的線程獲得資源或者信號

C.在時間片輪轉(zhuǎn)的情況下,如果時間片到了

D.獲得 spinlock 未果

25、設(shè)計模式中,屬于結(jié)構(gòu)型模式的有哪些?(BC)

A.狀態(tài)模式

B.裝飾模式

C.代理模式

D.觀察者模式

26、下面代碼的運行結(jié)果是(C)

public class Test {
    public static void main(String[] args) {
        List<String> a = null;
        test(a);
        System.out.println(a.size());
    }

    public static void test(List<String> a) {
        a = new ArrayList<String>();
        a.add("abc");
    }
}

A.0

B.1

C.java.lang.NullPointerException

D.以上都不正確

27、Linux下查看進程占用的 CPU 的百分比,使用工具(A)

A.ps

B.cat

C.more

D.sep

28、JVM 內(nèi)存里哪個區(qū)域不可能發(fā)生OutOfMerncyError( A)

A.程序計數(shù)器

B.堆

C.方法區(qū)

D.本地方法棧

29、下面關(guān)于阻塞隊列(java.util.concurrent.BlockingQueue)的說法不正確的是(C)

A.阻塞隊列是線程安全的

B.阻塞隊列的主要應(yīng)用場景是“生產(chǎn)者-消費者”模型

C.阻塞隊列里的元素不能為 null

D.阻塞隊列的實現(xiàn)必須顯示地設(shè)置容量

30、如果現(xiàn)在需要創(chuàng)建一組任務(wù),他們并行的執(zhí)行工作,然后進行下一個步驟之前等待,直至所有的任務(wù)都完成,而去這種控制可以重用多次, 這種情形使用 java.util.concurrent包中引入哪種同步工具最適合(B)

A.CountDownLatch

B.CyclicBarrier

C.Semaphore

D.FutureTask

31、java 中, 為什么基類不能做為 HashMap 的鍵值, 而只能是引用類型,把引用類型作為 HashMap 的鍵值,需要注意哪些地方?

引用類型和原始類型的行為完全不同,并且它們具有不同的語義。引用類型和原始類型具有不同的特征和用法,它們包括:大小和速度問題,這種類型以哪種類型的數(shù)據(jù)結(jié)構(gòu)存儲,當引用類型和原始類型用作某個類的實例數(shù)據(jù)時所指定的缺省值。對象引用實例變量的缺省值為 null,而原始類型實例變量的缺省值與它們的類型有關(guān)。

32、編寫一個工具類 StringUtil, 提供方法 int compare(char[] v1 ,char[] v2)方法,比較字符串v1,v2 ,如果按照字符順序 v1>v2 則 return 1 ,v1=v2 則 return 0, v1<v2 則 return-1 。

class StringUtil {
    int compare(char[] v1, char[] v2) {
        String str1 = new String(v1);
        String str2 = new String(v2);
        int result = str1.compareTo(str2);
        return result == 0 ? 0 : (result > 0 ? 1 : -1);
    }
}

33、Java 出現(xiàn) OutOfMemoryError(OOM)的原因有那些?出現(xiàn) OOM 錯誤后,怎么解決?

觸發(fā) java.lang.OutOfMemoryError:最常見的原因就是應(yīng)用程序需要的堆空間是大的,但是 JVM 提供的卻小。這個的解決方法就是提供大的堆空間即可。

除此之外還有復(fù)雜的原因:內(nèi)存泄露:特定的編程錯誤會導(dǎo)致你的應(yīng)用程序不停的消耗更多的內(nèi)存,每次使用有內(nèi)存泄漏風(fēng)險的功能就會留下一些不能被回收的對象到堆空間中,隨著時間的推移,泄漏的對象會消耗所有的堆空間,最終觸發(fā)java.lang.OutOfMemoryError: Java heap space 錯誤。

解決方案:你應(yīng)該確保有足夠的堆空間來正常運行你的應(yīng)用程序,在 JVM 的啟動配置中增加如下配置:-Xmx1024m,流量/數(shù)據(jù)量峰值:應(yīng)用程序在設(shè)計之初均有用戶量和數(shù)據(jù)量的限制,某一時刻,當用戶數(shù)量或數(shù)據(jù)量突然達到一個 峰 值 , 并 且 這 個 峰 值 已 經(jīng) 超 過 了 設(shè) 計 之 初 預(yù) 期 的 閾 值 , 那 么 以 前 正 常 的 功 能 將 會 停 止 , 并 觸 發(fā)java.lang.OutOfMemoryError: Java heap space 異常解決方案,如果你的應(yīng)用程序確實內(nèi)存不足,增加堆內(nèi)存會解決 GC overhead limit 問題,就如下面這樣,給你的應(yīng)用程序 1G 的堆內(nèi)存:java -Xmx1024m com.yourcompany.YourClass。

???????34、下列關(guān)于棧的描述錯誤的是(B)

A.棧是先進后出的線性表

B.棧只能順序存儲

C.棧具有記憶功能

D.對棧的插入和刪除操作中,不需要改變棧底指針

???????35、對于長度為 n 的線性表,在最壞的情況下,下列個排序法所對應(yīng)的比較次數(shù)中正確的是(D)

A.冒泡排序為 n/2

B.冒泡排序為 n

C.快速排序為 n

D.快速排序為 n(n-1)/2

36、閱讀下列代碼后,下列正確的說法是(A)

class Person {
    int arr[] = new int[10];
    public static void main(String args[]) {
        System.out.println(arr[1]);
    }
}

A.編譯時將產(chǎn)生錯誤

B.編譯時正確,運行時將產(chǎn)生錯誤

C.輸出空

D .輸 出 0

???????37、執(zhí)行以下程序后輸出的結(jié)果是(D)

public class Test {
    public static void main(String[] args) {
        StringBuffer a = new StringBuffer("A");
        StringBuffer b = new StringBuffer("B");
        operator(a, b);
        System.out.println(a + "," + b);
    }

    public static void operator(StringBuffer x, StringBuffer y) {
        x.append(y);
        y = x;
    }
}

A.A,A

B.A,B

C.B,B

D.AB,B

???????38、下列不屬于持久化的是(A)

A.把對象轉(zhuǎn)換成為字符串的形式通過網(wǎng)絡(luò)傳輸,在另一端接收到字符串把對象還原出來

B.把程序數(shù)據(jù)從數(shù)據(jù)庫中讀出來

C.從 XML 配置文件中讀取程序的配置信息

D.把程序數(shù)據(jù)保存為文件

39、???????下列代碼輸出的結(jié)果是(C)

int x = 0;
int y = 10;
do {
    y--;
    ++x;
} while (x < 6);
System.out.println(x + "," + y);

A. 5,6

B. 5,5

C. 6,4

D. 6,6

40、下列程序段輸出的結(jié)果是(B)???????

public static void complicatedexpression_f() {
    int x = 20, y = 30;
    boolean j;
    j = x > 50 && y > 60 || x > 50 && y < -60 || x < -50 && y > 60 || x < -50 && y < -60;
    System.out.println(j);
}

A.true

B.false

C.1  

D.001

41、???????一個棧的輸入序列為123,則下列序列中不可能是棧輸出的序列的是(C)

A. 2 3 1

B. 3 2 1

C. 3 1 2

D. 1 2 3?????????????????????

全部教程
主站蜘蛛池模板: 一个人看的www片免费高清中文 | 亚洲国产成人成上人色 | 亚洲精品在线免费观看视频 | 性xxx69xxx视频在线观看 | 成人免费看黄网站无遮挡 | 精品国模一区二区三区 | 99热精品国产麻豆 | 日本精品视频一区 | 黄网站在线免费 | 国产极品一区 | 亚洲国产va | 女人牲交视频一级毛片 | 亚洲精品第五页中文字幕 | 91精品在线国产 | 日本一区二区不卡在线 | 日本亚洲视频 | 日韩中文字幕高清在线专区 | 国产1区二区 | 国产线路一 | 成人黄色在线观看视频 | 亚洲视频在线网站 | 欧美日韩精品一区二区三区不卡 | 日韩中文字幕视频在线观看 | 韩国理伦片在线理伦韩国 | 久久成人亚洲香蕉草草 | 亚洲欧美精品网站在线观看 | 免费人成激情视频在线观看冫 | 天天综合天天做天天综合 | 欧美日韩视频一区三区二区 | 色y情视频免费看 | 国产第一福利精品导航 | 91短视频在线观看免费最新 | 在线亚洲小视频 | 日本天堂在线 | 欧美一级亚洲一级 | 国产精品久久久亚洲动漫 | 午夜在线观看免费视频 | 九九免费观看全部免费视频 | 看真人视频一一级毛片 | 国产69精品久久久久9牛牛 | 亚洲成人黄色片 |