1. 程式人生 > >Java面試題彙總(100題)Ⅱ

Java面試題彙總(100題)Ⅱ

26 Math.round(11.5)和Math.round(-11.5)等於多少

round方法返回與引數最接近的長整數
Case1:小數點後第一位 = 5
正數:Math.round(11.5) = 12
負數:Math.round(-11.5) = -11
Case2:小數點後第一位 < 5
正數:Math.round(11.49) = 11
負數:Math.round(-11.49) = -11
Case3:小數點後第一位 > 5
正數:Math.round(11.51) = 12
負數:Math.round(-11.51) = -12

27 String s=new String (“xyz”)建立了幾個String Object

先new 了一個“xyz”,再new了個s,再把xyz指向s

28 啟動一個執行緒是用run()還是start()?

29 常用Web伺服器

BEA WebLogic Server;
IBM WebSphere Application Server;
JBoss;
Tomcat ;

30 常見runtime exception

31 介面是否可繼承介面?抽象類是否可以實現(implments)介面,抽象類是否可繼承實體類?

介面可以繼承接。抽象類可以實現介面,抽象類也可以繼承實體類前提是實體類必須有明確的建構函式。

32 List、Set、Map是否繼承自Collection介面?

List和Set是的,而Map沒有繼承自collection介面,而實現Map介面的子類同時也可以實現Collection介面。

33 說出資料連線池(datasource)的工作機制是什麼

伺服器啟動時候會建立一定數量的池連線,並且一直維持不少於此數目的池連線。客戶端程式需要連線時,池驅動程式會返回一個未使用的池連線並且將其標記為忙。如果當前沒有空閒連線,池驅動程式就新建一定數量的連線,新建連線的數量由配置引數決定。當使用的池連線呼叫完成後,池驅動程式將此連線標記位空閒,其他呼叫就可以使用這個連線。

34 abstract class 的method是否可以同時是static,是否可以同時是native,是否可以同時是synchronized?

都不能

35 Set裡的元素能重複嗎?如何用什麼方法來區分重複與否呢?用==還是equals()?它們有什麼區別?

Set中的元素是不能重複的,用iterator()方法來區分重複與否。equals判斷兩個set元素是否相等,==表示是否是在記憶體同一位置(相同物件)

36 構造器constructor是否可以被override?

構造器constructor不能被繼承,因此不能重寫,但是可以被過載。

37 switch()括號裡的表示式可否是byte/long/String 型別的?

括號內的表示式是一個整數表示式。因此傳遞給switch和case語句的引數應該是int/short/char/byte,long/String都不能作用於Switch

38 try{}裡邊有一個return語句,那麼緊跟在這個try後的finally{}裡的code會不會被執行,什麼時候被執行

會執行,在return前執行

39 用最有效率的方法算出2乘以8等於幾

2<<3,左移三位

40 兩個物件值相同(x.equals(y)==true),他們的hashcode相同嗎?

41 當一個物件被當做引數傳遞到一個方法後,此方法可以改變這個物件的屬性,並且可以返回變化後的結果,那麼這裡到底是值傳遞還是應用傳遞

值傳遞,java只有值傳遞引數。當一個物件例項作為一個引數被傳遞到方法中時,引數的值就是對該物件的引用。物件的內容可以在被呼叫的方法中改變,但物件的引用是不會改變的。

42 當一個執行緒進入一個物件的synchronized方法後,其他執行緒可否進入此物件的其他方法?

不能,一個物件的一個synchronized方法只能由一個執行緒訪問。

43 寫出一個Singleton出來

Singleton模式主要作用是保證在Java應用程式中,一個類Class只能有一個例項存在。
一般Singleton模式通常有幾種形式:
1.定義一個類,它的建構函式為private的,它有一個static的private的該類變數,在類初始化的時候例項化,通過一個getInstance方法獲取對它的引用,繼而呼叫其中的方法。

public class Singleton{
    private Singleton(){
        //在內部定義了一個自己的例項
        private static Singleton instance = new Singleton();
        public static Singleton getInstance(){
            return instance;
        }
    }
}

2.

//這個方法比第一個方法有所改進,不用每次都生成物件,只是第一次使用的時候生成例項,提高了效率
public class Singleton{
    private static Singleton instance = null;
    public static synchronized Singleton getInstance(){
        if (instance==null){
            instance=new Singleton();
            return instance;
        }
    }
}

3.其他方法:定義一個類,他的構造方法是private的,所有方法是static的。

44 Java的介面和C++虛類的相同或者不同處

由於Java不支援多繼承,而有可能某個類或者物件要使用分別在幾個類或者物件裡的方法,現有的單繼承機制不能滿足要求。
與繼承相比,介面具有更高的靈活性,因為介面中沒有任何實現程式碼。當一個類實現了介面以後,該類要實現接口裡邊的所有方法和變數,並且接口裡邊的變數在預設狀態下都是public static,所有方法預設情況下是public。

45 Java中的異常處理機制的簡單原理和應用

當程式違反了語義規則時,虛擬機器就會將發生的錯誤表示為一個異常。
違反語義規則包括兩種情況:
1.Java類庫內建的語義檢查。例如陣列下標越界,會引發IndexoutOfBoundsException;訪問null的物件時會引發NullPointerException。另一種情況就是Java允許程式設計師擴充套件這種語義檢查,程式設計師可以建立自己的異常,並且自由選擇在何時使用throw關鍵字引發異常。所有的異常都是java.lang.Throwable子類。

46 垃圾回收器

Java語言的一個顯著的特點是引入了垃圾回收機制,是c++程式設計師最頭痛的記憶體管理問題迎刃而解。
因為有垃圾回收機制,Java中的物件不再有作用域的改變,只有物件的引用才有作用域。
垃圾回收期通常是一個單獨的低級別的執行緒與西寧,不可預知的情況下對堆記憶體中已經死亡的或者長時間沒有使用的物件進行清除和回收,程式設計師並不會實時的呼叫垃圾回收器對某個物件或者所有物件進行垃圾回收。
回收機制有如下幾種:
**分代垃圾回收
標記垃圾回收
增量垃圾回收**

47 說出你所知道的執行緒同步的方法

wait():使一個執行緒處於等待狀態,並且釋放所持有的物件的lock
sleep():使一個正在執行的執行緒處於睡眠狀態,是一個靜態方法,呼叫此方法要catch InterruptedException方法
notify():喚醒一個處於等待狀態的執行緒,注意的是呼叫此方法的時候,並不能確切的喚醒哪一個等待狀態的執行緒,而是由JVM確定喚醒哪個執行緒。
Allnotify():喚醒所有處於等待狀態的執行緒,注意並不是給所有喚醒執行緒一個物件的鎖,而是讓他們競爭。

48 你所知道的集合類都有哪些?

List和Map,List的具體實現包括ArrayList和Vector,他們是可變大小的列表,比較適合構建、儲存和操作任何型別物件的元素列表。List適用於查詢。
Map提供了一個更為通用的元素儲存方法。Map集合類用於儲存鍵值對,其中每個key對映到一個value。Map的用途非常廣泛。

49 描述下JVM載入class檔案的原理機制

Java 中的所有類,必須被裝載到JVM中才能執行,這個裝載工作是由JVM中的classLoader類裝載器完成的,classLoader所做的工作實質上是把類檔案從硬碟讀取到記憶體中。
Java中的類大致上分為三種:系統類、擴充套件類、程式設計師自定義的類。
類的裝載方式有兩種:
1、隱式裝載:程式在執行過程中當碰到new等方式生成物件時,隱式呼叫classLoader載入對應的類到JVM中。
2、顯式裝載:通過class.forname()等方法,顯式的載入需要的類

類載入的動態性體現:
一個應用程式總是由多個類組成,java程式啟動時,並不是一次性把所有的類全部載入後再執行,它總是先把保證程式執行的基礎類一次性載入到JVM中,其他類等到JVM用到的時候再載入,這樣的好處是節省了記憶體的開銷,因為java最早就是為嵌入式系統設計的,而用到時候再載入也是java動態性的表現。

Java類載入器
Java中的類載入器實質上也是累,功能是把類載入jvm彙總,值得注意的是jvm的類載入器並不是一個而是三個
Bootstrap Loader 負責載入系統類;
ExtClassLoader負責夾雜擴充套件類
APPClassLoader負責載入應用類

類載入器之間是如何協調工作的?
Java採用了委託模型機制,這個機制簡單來講就是類裝載器有載入類的需求時會先請示其parent使用其搜尋路徑幫忙載入,如果parent找不到那麼才由自己依照自己的搜尋路徑搜尋類

BootstrapLoader <—(Extends)—-AppClassLoader <—(Extends)—-ExtClassLoader

50 char型變數中能否儲存一個漢字?

沒問題,中文可以用Unicode編碼,而且佔2個位元組,而一個char佔16個位元組,所以char放一個漢字是沒有問題的。