Java---Java的面試題(一),java---java面試題
-
- 1、什麼是Java虛擬機?為什麼Java被稱作是“平台無關的編程語言”?
- Java虛擬機是一個可以執行Java字節碼的虛擬機進程。Java源文件被編譯成能被Java虛擬機執行的字節碼文件。
- Java被設計成允許應用程序可以運行在任意的平台,而不需要程序員為每一個平台單獨重寫或者是重新編譯。Java虛擬機讓這個變為可能,因為它知道底層硬件平台的指令長度和其他特性。
- 2、”static”關鍵字是什麼意思?Java中是否可以覆蓋(override)一個private或者是static的方法?
- “static”關鍵字表明一個成員變量或者是成員方法可以在沒有所屬的類的實例變量的情況下被訪問。
- Java中static方法不能被覆蓋,因為方法覆蓋是基於運行時動態綁定的,而static方法是編譯時靜態綁定的。static方法跟類的任何實例都不相關,所以概念上不適用。
- 3.創建線程有幾種不同的方式?你喜歡哪一種?為什麼?
- 有三種方式可以用來創建線程:
- 繼承Thread類
- 實現Runnable接口
- 應用程序可以使用Executor框架來創建線程池
- 實現Runnable接口這種方式更受歡迎,因為這不需要繼承Thread類。在應用設計中已經繼承了別的對象的情況下,這需要多繼承(而Java不支持多繼承),只能實現接口。同時,線程池也是非常高效的,很容易實現和使用。
- 4.Java集合類框架的基本接口有哪些?
- Java集合類提供了一套設計良好的支持對一組對象進行操作的接口和類。Java集合類裡面最基本的接口有:
- Collection:代表一組對象,每一個對象都是它的子元素。
- Set:不包含重復元素的Collection。
- List:有順序的collection,並且可以包含重復元素。
- Map:可以把鍵(key)映射到值(value)的對象,鍵不能重復。
- 5.如何權衡是使用無序的數組還是有序的數組?
- 有序數組最大的好處在於查找的時間復雜度是O(log n),而無序數組是O(n)。有序數組的缺點是插入操作的時間復雜度是O(n),因為值大的元素需要往後移動來給新元素騰位置。相反,無序數組的插入時間復雜度是常量O(1)。
- 6.Java集合類框架的最佳實踐有哪些?
- 根據應用的需要正確選擇要使用的集合的類型對性能非常重要,比如:假如元素的大小是固定的,而且能事先知道,我們就應該用Array而不是ArrayList。
- 有些集合類允許指定初始容量。因此,如果我們能估計出存儲的元素的數目,我們可以設置初始容量來避免重新計算hash值或者是擴容。
- 為了類型安全,可讀性和健壯性的原因總是要使用泛型。同時,使用泛型還可以避免運行時的ClassCastException。
- 使用JDK提供的不變類(immutable class)作為Map的鍵可以避免為我們自己的類實現hashCode()和equals()方法。
- 編程的時候接口優於實現。
- 底層的集合實際上是空的情況下,返回長度是0的集合或者是數組,不要返回null。
- 7、什麼是Java優先級隊列(Priority Queue)?
- PriorityQueue是一個基於優先級堆的無界隊列,它的元素是按照自然順序(natural order)排序的。在創建的時候,我們可以給它提供一個負責給元素排序的比較器。
- PriorityQueue不允許null值,因為他們沒有自然順序,或者說他們沒有任何的相關聯的比較器。最後,PriorityQueue不是線程安全的,入隊和出隊的時間復雜度是O(log(n))。
- 8、30.你了解大O符號(big-O notation)麼?你能給出不同數據結構的例子麼?
- 大O符號描述了當數據結構裡面的元素增加的時候,算法的規模或者是性能在最壞的場景下有多麼好。
- 大O符號也可用來描述其他的行為,比如:內存消耗。因為集合類實際上是數據結構,我們一般使用大O符號基於時間,內存和性能來選擇最好的實現。大O符號可以對大量數據的性能給出一個很好的說明。
*****************************************************************************************