1. 程式人生 > >面試題(一):Java基礎知識

面試題(一):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 基礎知識點,這些問題主要是一面面試官在考察,難度不大,適當複習下,應該沒什麼問題。