天天看點

Java企業面試——Java基礎

1. Java基礎部分

1.1 Java中的方法覆寫(Overwrite)和方法重載(Overloading)是什麼意思?

重載Overload表示同一個類中可以有多個名稱相同的方法,但這些方法的參數清單各不相同(即參數個數或類型不同)。

重寫Override表示子類中的方法可以與父類的某個方法的名稱和參數完全相同,通過子類建立的執行個體對象調用這個方法時,将調用子類中的定義方法,這相當于把父類中定義的那個完全相同的方法給覆寫了,這也是面向對象程式設計的多态性的一種表現。

1.2 接口和抽象類的差別是什麼?

抽象類:含有abstract修飾的類即為抽象類,抽象類不能建立執行個體對象。含有abstract方法的類必須定義為抽象類,抽象類中的方法不必是抽象的。抽象類中定義抽象方法必須在具體子類中實作,是以,不能有抽象構造方法或抽象靜态方法。如果子類沒有實作抽象父類中的所有抽象方法,那麼子類也必須定義為abstract類型。

接口:可以說成是抽象類的一種特例,接口中的所有方法都必須是抽象的。接口中的方法定義預設為public abstract類型,接口中的成員變量類型預設為public static final。

下面比較一下兩者的文法差別

1. 抽象類可以有構造方法,接口中不能有構造方法。

2. 抽象類中可以有普通成員變量,接口中沒有普通成員變量

3. 抽象類中可以包含非抽象的普通方法,接口中的所有方法必須都是抽象的,不能有非抽象的普通方法。

4. 抽象類中的抽象方法的通路類型可以使public、protected和預設類型,但接口中的抽象方法隻能是public類型的,并且預設修飾即為public abstract類型。

5. 抽象類中可以包含靜态方法,接口中不能包含靜态方法

6. 抽象類和接口中都可以包含靜态成員變量,抽象類中的靜态成員變量的通路類型可以任意,但接口中定義的變量隻能是public static final類型,并且預設即為public static final類型。

7. 一個類可以實作多個接口,但隻能繼承一個抽象類。

1.3 建立線程有幾種不通的方式? l 自定義類繼承Thread類方式 l 自定義類實作Runnable接口方式 1.4 Java集合架構的基本接口有哪些? Collection接口 Ø List接口 Ø Set接口 Map接口 1.5 BlockingQueue是什麼? 1.BlockingQueue:支援兩個附加操作的 Queue,這兩個操作是:檢索元素時等待隊列變為非空,以及存儲元素時等待空間變得可用。 2.BlockingQueue 不接受 null 元素。 3.BlockingQueue 可以是限定容量的。 4.BlockingQueue 實作是線程安全的。Queue不是線程安全的。是以可以将Blockingqueue用于用于生産者-消費者模式。 對于BlockingQueue隊列而然,如果BlockQueue是空的,從BlockingQueue取東西的操作将會被阻斷進入等待狀态,直到BlockingQueue進了東西才會被喚醒,同樣,如果BlockingQueue是滿的,任何試圖往裡存東西的操作也會被阻斷進入等待狀态,直到BlockingQueue裡有空間才會被喚醒繼續操作。 1.6 Java中的兩種異常類型是什麼? Error:稱為錯誤,由java虛拟機生成并抛出,包括動态連結失敗,虛拟機錯誤等,程式對其不做處理。 Exception:所有異常類的父類,其子類對應了各種各樣的可能出現的異常事件,一般需要使用者顯示的聲明或捕獲。 Runtime Exception:一類特殊的異常,如被0除、數組下标超範圍等,其産生比較頻繁,處理麻煩,如果顯示的聲明或捕獲将會對程式可讀性和運作效率影響很大。是以由系統自動檢測并将它們交給預設的異常處理程式(使用者可不必對其處理)。 1.7 Final,finallyfinalize的差別? final用于聲明屬性,方法和類,分别表示屬性不可變,方法不可覆寫,類不可繼承。内部類要通路局部變量,局部變量必須定義成final類型。 finally是異常處理語句結構的一部分,表示總是執行。 finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆寫此方法提高垃圾收集時的其他資源回收,例如關閉檔案等。JVM不保證此方法總被調用。 1.8 Java中如何實作序列化,有什麼意義? 序列化就是一種用來處理對象流的機制,所謂對象流也就是将對象的内容進行流化。可以對流化後的對象進行讀寫操作,也可将流化後的對象傳輸于網絡之間。序列化是為了解決對象流讀寫操作時可能引發的問題(如果不進行序列化可能會存在資料亂序的問題)。 要實作序列化,需要讓一個類實作Serializable接口,該接口是一個辨別性接口,标注該類對象是可被序列化的,然後使用一個輸出流來構造一個對象輸出流并通過writeObject(Object)方法就可以将實作對象寫出(即儲存其狀态);如果需要反序列化則可以用一個輸入流建立對象輸入流,然後通過readObject方法從流中讀取對象。序列化除了能夠實作對象的持久化之外,還能夠用于對象的深度克隆。 1.9 都用過什麼設計模式 單例設計模式 工廠設計模式 模闆設計模式 裝飾設計模式 代理設計模式 擴充卡設計模式 1.10 寫一個單例模式出來 餓漢模式

public class Single {
//私有本類中的構造函數
private Single(){}
//建立本類對象
private static Single s = new Single();
//對外提供擷取本來對象方法
public static Single getInstance(){
return s;
}
}           

複制

注意問題:   由于外界無法建立Single對象,沒有對象,那就無法調用getInstance方法,這時需要将getInstance方法靜态化,這樣外界就可以通過類名直接調用該方法。 懶漢模式

public class Single
{
//私有構造函數
private Single(){}
//在本類中建立本類對象
private static Single instance = null;
//對外提供靜态通路方法,擷取本類執行個體對象
public static Single getInstance(){  
if(instance == null )  // 這裡會有線程安全問題
{
instance = new Single();
}
return instance;
}
}
class SingleDemo
{
public static void main(String[] args)
{
//擷取Single類的執行個體對象s
Single s = Single.getInstance();
//擷取Single類的執行個體對象s2
Single s2 = Single.getInstance();
System.out.println(s==s2); //true
}
}           

很感謝大家的觀看,我準備了300g的資料來回饋大家,有前端,大資料,java架構師,等等,轉發文章關注私信我:“我要提升”,即可獲得