閱讀858 返回首頁    go 阿裏雲 go 技術社區[雲棲]


JAVA麵試題100問第一部分

以下是麵試時常問到的JAVA麵試題,能讓你對JAVA麵試有基本的了解。根據我個人的經驗,一個好的麵試官在麵試的時候是不會事先準備一列問題清單,一般來說都從關於JAVA最基本的概念開始,然後再根據你的回答繼續深入討論。

問題:關於JAVA 你知道什麼?

回答:JAVA是一種高級程序設計語言,由詹姆斯·高斯林發明並於1995年發布。JAVA可以在多種平台上運行,如Windows、Mac OS、各種版本的UNIX。

 

問題:JAVA編程語言支持什麼平台?

回答:JAVA可以在多種平台上運行,如Windows、Mac OS、以及各種版本的UNIX/Linux操作係統如HP-Unix, Sun Solaris, Redhat Linux, Ubuntu, CentOS 等。

 

問題:請列舉出JAVA至少5種特性。

回答:JAVA特性包括麵向對象、平台獨立、健壯性、解釋性、多線程等。

 

問題:為什麼JAVA是結構中立的?

回答:JAVA編譯器會生成一種具備結構中立性的目標文件格式。編譯後的程序碼可以在提供Java運行係統的多種不同處理器上麵執行。

 

問題:JAVA如何保證高效性?

回答:JAVA使用即時編譯器來保證高效性。即時編譯器能把Java字節碼轉換成可以直接發送給處理器的指令。

 

問題:為什麼JAVA是動態的?

回答:JAVA能適應不斷升級的環境。JAVA程序帶有大量擴展的運行時信息,這些信息可以用來實時驗證處理對對象的引用。

 

問題:什麼是JAVA虛擬機?它對JAVA的平台獨立性有什麼作用?

回答:當JAVA代碼被編譯的時候,它並不是被編譯成針對某一特定平台的機器碼,而是轉換成平台獨立的字節碼。這些字節碼通過網絡傳送到不同的機器上,不管這些機器運行的是什麼平台,JAVA虛擬機都可以解釋字節碼。

 

問題:列舉兩個JAVA集成編譯環境。

回答:Netbeans、Eclipse

 

問題:列舉幾個JAVA與C/C++不同的關鍵詞。

回答:import、super、finally等

 

問題:什麼是對象?

回答:對象是在運行時的實體,它的狀態儲存於域中,它的行為通過方法實現。方法能夠操作對象內部的數據,也是對象間通信的主要途徑。

 

問題:請給定義類。

回答:類是一張藍圖,對象根據這張藍圖被創建。一個類可以包括數據域和方法,方法可以描述對象的行為。

 

問題:一個類可以包含什麼類型的變量?

回答:包括居於變量,實例變量和類變量。

 

問題:什麼是局域變量?

回答:在方法內、構造函數內或者代碼塊內定義的變量是局域變量。局域變量在函數內聲明和初始化,當函數執行結束時局域變量會被銷毀。

 

問題:什麼是實例變量?

回答:實例變量是在類中但在任何函數之外的變量。實例變量隻有當類實例化後才能被引用。

 

問題:什麼是類變量?

回答:在類中並且在任何函數之外,使用static關鍵詞聲明的變量是類變量。

 

問題:什麼是類的單例模式?

回答:單例類控製對象的生成,一次隻能存在一個對象但兼具靈活性,當條件改變時允許創建多個變量。

 

問題:什麼是構造函數?

回答:當一個新的對象被創建的時候會自動調用構造函數。每個類都有構造函數。如果不顯性聲明構造函數,JAVA編譯器會調用默認構造函數。

 

問題:列舉為類創建對象的過程(三步)。

回答:首先聲明一個對象,然後實例化,再對其初始化。

 

問題:JAVA中字節數據類型的默認值是多少?

回答:0

 

問題:JAVA中float和double的默認值是多少?

回答:float型和double型的默認值與C/C++相同,float是0.0f,double是0.0d。

 

問題:byte類型在什麼時候使用?

回答:byte類型用來在較大的數組中節省儲存空間。使用byte類型替代int型可以節省三倍的空間。

 

問題:什麼是靜態變量?

回答:類變量也叫靜態變量,使用關鍵詞static,在類裏,但在方法、構造函數和代碼塊之外。

 

問題:什麼是訪問控製修飾符?

回答:JAVA提供訪問控製修飾符來修飾類、變量、方法和構造函數的訪問控製屬性。當不寫出訪問控製修飾符時,成員具有默認的訪問權限或者包訪問控製權限。

 

問題:什麼是受保護訪問控製修飾符?

回答:變量、方法和構造函數如果在父類中被聲明為受保護,那麼它們隻能在其它包的子類中或者在該父類的包中被訪問。

 

問題:什麼是同步修飾符?

回答:JAVA在訪問控製修飾符之外還提供同步修飾符,同步修飾符用來限製方法,使方法一次隻能被一個線程調用。

 

問題:在JAVA運算符優先級中,哪個運算符的優先級最高?

回答:圓括號()和下標運算符[]具有最高的優先級。

 

問題:在switch語句中能使用的數據類型包括哪些?

回答:switch中使用的變量隻能是字節型、短整型、整型或字符型。

 

問題:parseInt()函數在什麼時候使用到?

回答:parseInt()函數用於解析字符串返回整數。

 

問題:為什麼說String類是不可變的?

回答:String對象一旦被創建就不可改變,因此可以在多個線程中被安全地引用,這對於多線程的編程來說十分重要。

 

問題:為什麼說StringBuffer類是可變的?

回答:String類是不可變的,因此一個String對象一旦被創建就不可改變。如果需要對字符串進行頻繁的修改,那麼就應該使用StringBuffer。

 

問題:StringBuffer和StringBuilder類的區別在哪?

回答:盡可能使用StringBuilder,因為它運行時比StringBuffer快。但如果需要強調線程安全,那就應該使用StringBuffer。

 

問題:那個包使用正則表達式來實現模式匹配?

回答:包java.util.regex。

 

問題:java.util.regex包括那些類?

回答:包括三個類:Pattern類、Matcher類和PatternSyntaxException類。

 

問題:什麼是finalize()方法?

回答:finalize()方法在一個對象被垃圾回收機製銷毀前調用,可以保證對象被徹底地銷毀。

 

問題:什麼是Exception?

回答:Exception是當程序運行過程中遇到的異常。異常由方法調用棧中的Handler捕獲。

 

問題:什麼是受檢查的異常?

回答:受檢查異常通常為用戶操作的異常,不能被程序員預見。例如,在打開一個文件的時候,無法找到文件就發生了異常,這樣的異常在編譯的時候不能被跳過。

問題:什麼是運行時間異常?

回答:運行時間異常在編程時可以預見並避免。與受檢查異常不同,運行時間異常在編譯時可以被跳過。

 

問題:Exception類的兩個子類是什麼?

回答:Exception類有兩個主要的子類:IOException類和RuntimeException類。

 

問題:關鍵詞throws在什麼情況下使用?

回答:如果一個方法沒有使用handler處理異常,那麼這個方法必須使用throws關鍵詞聲明。關鍵詞throws用於方法簽名之後。

 

問題:關鍵詞throw在什麼時候使用?

回答:不論是新實例化的異常還是剛捕獲的異常,都可以通過使用關鍵詞throw拋出異常。

 

問題:finally關鍵詞在異常處理中如何使用?

回答:關鍵詞finally用來在try代碼塊後再加一個代碼塊,不管有沒有發生異常,finally代碼塊內的語句都會被執行。

 

問題:當自己創建異常類的時候應該注意什麼?

回答:當創建異常類時應該注意:

  • 所有的異常類都應該是Throwable類的子類。

2.寫一個遵循處理與聲明規則的受檢查異常類時,應該加上extend Exception。

3.寫一個運行時間異常類,需要加上extend RuntimeException。

 

問題:什麼是繼承?

回答:繼承指的是一個類獲得另一個類的屬性的過程。數據屬性和行為按從父類到子類的順序繼承,便於管理。

 

問題:關鍵詞super什麼時候使用?

回答:如果一個方法重寫了父類的方法,被重寫的父類方法可以通過關鍵詞super調用。super也可以用來調用被隱藏的域。

 

問題:什麼是多態?

回答:多態是一個對象同時具有多種形態的能力。在麵向對象編程中,多態最常見的應用是將一個父類指針指向一個子類的對象。

 

問題:什麼是抽象?

回答:抽象是在麵向對象編程中將一個類抽象化的過程。抽象能夠降低複雜性,提高係統可維護性。

 

問題:什麼是抽象類?

回答:抽象類不能被實例化,可以被部分實現接口。抽象方法是沒有函數體的方法聲明,抽象類含有一個或多個抽象方法。

 

問題:抽象方法什麼時候被使用?

回答:當想要讓類包含一個方法,但想要讓方法的具體實現由子類決定,那麼就可以在父類中聲明抽象方法。

 

問題:什麼是封裝?

回答:封裝是將數據域設為私有,提供公共方法來處理私有的數據域。如果一個域被設為私有,那麼在類外就不能訪問該數據域,這樣就把數據域隱藏在類內部。因此封裝也被稱為數據隱藏。

 

問題:封裝最主要的優點是什麼?

回答:最主要的優點是允許修改實現的借口,同時不用修改他人使用接口的代碼。封裝使得代碼具可維護性、靈活性和擴展性。

 

問題:什麼是接口?

回答:接口是一係列抽象方法的集合,一個類實現接口,也就從接口中繼承了這些抽象方法。

 

問題:接口具有什麼特性?

回答:1.接口不能被實例化

2.接口不含任何構造函數

3.接口中的函數都是抽象函數

 

問題:什麼是包?

回答:包包含相關的類型(類、接口、枚舉和注釋),提供訪問保護和命名空間管理。

 

問題:為什麼要使用包?

回答:JAVA中使用包可以避免命名空間矛盾,控製訪問權限,便於定位和使用類、接口、枚舉和注釋等。

 

問題:什麼是多線程編程?

回答:多線程編程包含兩個或者更多個可以同時運行的部分,這些部分被叫做線程。每個線程有獨立的執行路徑。

 

問題:創建線程的兩種方式是什麼?

回答:通過實現Runnable接口或者繼承Thread類。

 

問題:什麼是applet?

回答:applet是一個運行在Web瀏覽器上的JAVA程序。由於它帶有整個JAVA的API,因此可以實現JAVA提供的所有功能。

 

問題:applet繼承哪個類?

回答:applet繼承了java.applet.Applet 類。

 

問題:解釋下JAVA的垃圾回收機製。

回答:JAVA垃圾回收機製能夠清理不再被引用的對象,從而來釋放內存。

 

問題:什麼是不可變對象?

回答:不可變對象一旦被創建就不能再改變。

最後更新:2017-05-22 16:01:35

  上一篇:go  Java I/O : Java中的進製詳解
  下一篇:go  讓科學的“可重複性流程”重回數據科學