Java 面試前需要回顧的事情
來源:Medium 在本文中,您將找到經驗豐富的開發人員提供的 17 個技巧,這些技巧將在 Java 面試中為您提供幫助。 我在 IT 產業工作了 20 多年,其中大部分時間都在使用 Java。此外,我在面試 Java 開發人員方面獲得了豐富的經驗。儘管 Java 語言不斷發展,但其核心概念基本上保持不變。以下是我想在有抱負的開發人員參加面試之前與他們分享的一些技巧。如果你重複它們,就會避免你犯下嚴重的錯誤。-
Object類別位於 Java 類別層次結構的根部。所有 Java 類別都可以追溯到Object。即使一個類別沒有明確擴展任何類,它也會擴展Object。但是,類別可以自由地明確地擴展Object。
-
在Java中,您只能擴展一個類別(由於不明確,不允許多重繼承)。但是,一個類別可以同時實作任意數量的介面。
-
一個介面擴展另一個介面(與實作相反)。
-
Java中有四種存取修飾符:public(所有人都可用)、protected(僅對子類別可用)、private(僅在單一類別中可用)、default(在單一套件中可用)。需要注意的是,同一個類別的子類別可以位於不同的套件中。父類別和子類別不必屬於同一包。
-
類別字串是不可變的。不變性意味著String類別本身不提供任何替換String引用中的值的方法。如果要替換字串引用的值,則必須使用=運算子明確指派該值。將此與StringBuffer或StringBuilder類別進行比較,後者俱有諸如追加之類的方法,因此您不必在那裡使用=運算符。
-
ConcurrentHashMap比Hashtable更有效率。ConcurrentHashMap對底層資料結構的段進行操作,其中寫入操作僅鎖定特定段(無論鍵屬於哪個段)。然而,在Hashtable中,整個資料結構將被鎖定。
-
ConcurrentHashMap比HashMap慢,因為HashMap沒有實現線程安全。如果一個執行緒迭代HashMap並且另一個執行緒嘗試修改同一個HashMap ,則HashMap可能會拋出ConcurrentModificationException。ConcurrentHashMap這裡不會拋出異常。
-
如何實現您定義的同一類別的兩個物件的相等性?答案:這可以透過重寫hashcode()方法來完成。
-
toString()方法的預設結果是什麼?答案:它是類別名稱、 @符號和hashcode()值的串聯。
-
Java中如何實作多型?實現此目的的一種方法是重載該方法。另一種方法是重寫該方法。
-
如何從子類別呼叫超類別建構函數?答:這可以使用super()關鍵字來完成。不帶參數的super()方法總是會被調用,即使沒有明確指定也是如此。帶參數的super()方法必須明確指定。如果需要呼叫super()(帶或不帶參數),則它的呼叫必須始終位於子類別建構子的第一行。
-
什麼是檢查異常和非檢查異常?答:受檢異常是那些必須在預期拋出的方法中聲明或捕獲的異常。未經檢查的異常沒有此限制。java.io.IOException是受檢查異常的範例。未經檢查的異常來自RunTimeException類別。
-
異常層次結構的根類別是Throwable(它又隱式擴充了Object)。異常和錯誤來自Throwable。
-
從 Java 8 開始,方法可以在介面中實作。預設方法和靜態方法可以有實作。
-
符合抽象條件的類別不能被實例化。任何不為任何方法提供主體的類別都必須聲明為抽象的。即使所有方法都有主體,開發人員也可以將類別聲明為抽象類別 - 但是,不建議這樣做,因為在這種情況下該類別無法實例化。
-
最後一堂課不能延長。最終變數不能被賦予另一個值。最終方法不能被重寫。
-
try-catch-finally結構中需要哪些關鍵字?這可以是try-catch、try-finally或三者兼具。在這種情況下,catch不是必需的關鍵字。
Java 中的枚舉和迭代器有什麼不同?
來源:Rrtutors 這篇文章為您帶來了討論 Java 中枚舉和迭代之間的差異。Java.util 套件提供了兩個遍歷Collection物件元素的介面:Enumeration和Iterator。儘管它們都通過Collection對象,但它們之間仍存在一些差異。枚舉和迭代器之間的區別
-
JDK新增時間:它們是在不同時間引入的。Enum 是在 JDK 1.0 中引入的,而 iterator 是在 JDK 1.2 中引入的。
-
刪除元素:這是兩者之間的主要區別。在Iterator介面中,當迭代Collection物件時,我們可以刪除元素,而當使用Enumeration迭代Collection物件時,我們無法更改它。這是因為Iterator介面有remove()方法,而Enumeration介面沒有。
-
操作類型:迭代器具有快速失敗操作類型,枚舉具有自動失敗操作類型。因此,Iterator在迭代期間修改集合時會拋出ConcurrentModificationException ,除非使用自己的remove()方法,而Enumeration在迭代期間修改集合時不會拋出任何例外。
Java 中的枚舉和迭代器範例
列舉範例
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.List;
import java.util.Vector;
public class Enumeration_Example {
public static void main(String[] args) {
List laptoplist = new ArrayList(Arrays.asList( new String[] {"Samsung", "Lenovo", "Apple", "HP"}));
Vector vectali = new Vector(laptoplist);
delete(vectali, "Samsung");
}
private static void delete(Vector vectali, String laptop) {
Enumeration lapi = vectali.elements();
while (lapi.hasMoreElements()) {
String s = (String) lapi.nextElement();
if (s.equals(laptop)) {
vectali.remove(laptop);
}
}
System.out.println("The Laptop brands includes:");
lapi = vectali.elements();
while (lapi.hasMoreElements()) {
System.out.println(lapi.nextElement());
}
}
}
結論:
迭代器範例:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
public class Iterator_example {
public static void main(String[] args) {
List laptoplist = new ArrayList(Arrays.asList( new String[] {"Samsung", "Lenovo", "HP", "Apple"}));
Vector vectali = new Vector(laptoplist);
delete(vectali, "HP");
}
private static void delete(Vector vectali, String name) {
Iterator a = vectali.iterator();
while (a.hasNext()) {
String s = (String) a.next();
if (s.equals(name)) {
a.remove();
}
}
// Display the names
System.out.println("The laptop brand includes:");
a = vectali.iterator();
while (a.hasNext()) {
System.out.println(a.next());
}
}
}
結論:
GO TO FULL VERSION