天天看點

面試題(一):Java基礎知識

Java 基礎知識

01. 面向對象的特性有哪些?

答:封裝、繼承和多态。

02. Java 中覆寫和重載是什麼意思?

解析:覆寫和重載是比較重要的基礎知識點,并且容易混淆,是以面試中常見。

答:覆寫(Override)是指子類對父類方法的一種重寫,隻能比父類抛出更少的異常,通路權限不能比父類的小。

被覆寫的方法不能是 private 的,否則隻是在子類中重新定義了一個方法;重載(Overload)表示同一個類中可以有多個名稱相同的方法,但這些方法的參數清單各不相同。

面試官: 那麼構成重載的條件有哪些?

答:參數類型不同、參數個數不同、參數順序不同。

面試官: 函數的傳回值不同可以構成重載嗎?為什麼?

答:不可以,因為 Java 中調用函數并不需要強制指派。舉例如下:

如下兩個方法:

void f(){}    int f(){ return 1;}

隻要編譯器可以根據語境明确判斷出語義,比如在 int x = f();中,那麼的确可以據此區分重載方法。

不過, 有時你并不關心方法的傳回值,你想要的是方法調用的其他效果 (這常被稱為 “為了副作用而調用”),這時你可能會調用方法而忽略其傳回值,是以如果像下面的調用:

fun();

此時 Java 如何才能判斷調用的是哪一個 f( ) 呢?别人如何了解這種代碼呢?是以,根據方法傳回值來區分重載方法是行不通的。

03. 抽象類和接口的差別有哪些?

答:

1. 

抽象類中可以沒有抽象方法;接口中的方法必須是抽象方法;

2. 

抽象類中可以有普通的成員變量;接口中的變量必須是 static final 類型的,必須被初始化 , 接口中隻有常量,沒有變量。

3. 

抽象類隻能單繼承,接口可以繼承多個父接口;

4. 

Java8 中接口中會有 default 方法,即方法可以被實作。

5. 

面試官:抽象類和接口如何選擇?

答:

1. 

如果要建立不帶任何方法定義和成員變量的基類,那麼就應該選擇接口而不是抽象類。

2. 

如果知道某個類應該是基類,那麼第一個選擇的應該是讓它成為一個接口,隻有在必須要有方法定義和成員變量的時候,才應該選擇抽象類。

3. 

因為抽象類中允許存在一個或多個被具體實作的方法,隻要方法沒有被全部實作該類就仍是抽象類。

4. 

04. Java 和 C++ 的差別:

解析:雖然我們不太懂 C++,但是就是會這麼問,尤其是三面(總監級别)面試中。

答:

1. 

都是面向對象的語言,都支援封裝、繼承和多态;

2. 

指針:Java 不提供指針來直接通路記憶體,程式更加安全;

3. 

繼承: Java 的類是單繼承的,C++ 支援多重繼承; Java 通過一個類實作多個接口來實作 C++ 中的多重繼承; Java 中類不可以多繼承,但是!!!接口可以多繼承;

4. 

記憶體: Java 有自動記憶體管理機制,不需要程式員手動釋放無用記憶體。

5. 

05. Java 中的值傳遞和引用傳遞

答:

值傳遞是指對象被值傳遞,意味着傳遞了對象的一個副本,即使副本被改變,也不會影響源對象。引用傳遞是指對象被引用傳遞,意味着傳遞的并不是實際的對象,而是對象的引用。

是以,外部對引用對象的改變會反映到所有的對象上。

06. JDK 中常用的包有哪些?

答:java.lang、java.util、java.io、java.net、java.sql。

07. JDK,JRE 和 JVM 的聯系和差別:

答:

JDK 是 java 開發工具包,是 java 開發環境的核心元件,并提供編譯、調試和運作一個 java 程式所需要的所有工具,可執行檔案和二進制檔案,是一個平台特定的軟體。

JRE 是 java 運作時環境,是 JVM 的實施實作,提供了運作 java 程式的平台。JRE 包含了 JVM,但是不包含 java 編譯器 / 調試器之類的開發工具。

JVM 是 java 虛拟機,當我們運作一個程式時,JVM 負責将位元組碼轉換為特定機器代碼,JVM 提供了記憶體管理 / 垃圾回收和安全機制等。

這種獨立于硬體和作業系統,正是 java 程式可以一次編寫多處執行的原因。

差別:

1. 

JDK 用于開發,JRE 用于運作 java 程式;

2. 

3. 

JDK 和 JRE 中都包含 JVM;

4. 

JVM 是 java 程式設計語言的核心并且具有平台獨立性。

小結:本節主要闡述了 Java 基礎知識點,這些問題主要是一面面試官在考察,難度不大,适當複習下,應該沒什麼問題。

繼續閱讀