2020年java面試題(一)- Java基礎部分


------------恢復內容開始------------

1.    Java基礎部分
1.1    在登錄時進行后台驗證,后台獲取到loginpass與數據庫值對比一直?
1.2    Java中的方法覆蓋(Overwrite)和方法重載(Overloading)是什么意思?
重載Overload表示同一個類中可以有多個名稱相同的方法,但這些方法的參數列表各不相同(即參數個數或類型不同)。
重寫Override表示子類中的方法可以與父類的某個方法的名稱和參數完全相同,通過子類創建的實例對象調用這個方法時,將調用子類中的定義方法,這相當於把父類中定義的那個完全相同的方法給覆蓋了,這也是面向對象編程的多態性的一種表現。
1.3    接口和抽象類的區別是什么?
抽象類:含有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.4    創建線程有幾種不通的方式?

   自定義類繼承Thread類方式

   自定義類實現Runnable接口方式

1.5    Java集合框架的基本接口有哪些?
Collection接口
   List接口
    Set接口
Map接口

1.6    BlockingQueue是什么?
1.BlockingQueue:支持兩個附加操作的 Queue,這兩個操作是:檢索元素時等待隊列變為非空,以及存儲元素時等待空間變得可用。
2.BlockingQueue 不接受 null 元素。
3.BlockingQueue 可以是限定容量的。
4.BlockingQueue 實現是線程安全的。Queue不是線程安全的。因此可以將Blockingqueue用於用於生產者-消費者模式。
對於BlockingQueue隊列而然,如果BlockQueue是空的,從BlockingQueue取東西的操作將會被阻斷進入等待狀態,直到BlockingQueue進了東西才會被喚醒,同樣,如果BlockingQueue是滿的,任何試圖往里存東西的操作也會被阻斷進入等待狀態,直到BlockingQueue里有空間才會被喚醒繼續操作。
1.7    Java中的兩種異常類型是什么?
Error:稱為錯誤,由java虛擬機生成並拋出,包括動態鏈接失敗,虛擬機錯誤等,程序對其不做處理。
Exception:所有異常類的父類,其子類對應了各種各樣的可能出現的異常事件,一般需要用戶顯示的聲明或捕獲。
Runtime Exception:一類特殊的異常,如被0除、數組下標超范圍等,其產生比較頻繁,處理麻煩,如果顯示的聲明或捕獲將會對程序可讀性和運行效率影響很大。因此由系統自動檢測並將它們交給缺省的異常處理程序(用戶可不必對其處理)。
1.8    Final,finallyfinalize的區別?
final用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。內部類要訪問局部變量,局部變量必須定義成final類型。
finally是異常處理語句結構的一部分,表示總是執行。
finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆蓋此方法提高垃圾收集時的其他資源回收,例如關閉文件等。JVM不保證此方法總被調用。

1.9    Java中如何實現序列化,有什么意義?
序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化。可以對流化后的對象進行讀寫操作,也可將流化后的對象傳輸於網絡之間。序列化是為了解決對象流讀寫操作時可能引發的問題(如果不進行序列化可能會存在數據亂序的問題)。
要實現序列化,需要讓一個類實現Serializable接口,該接口是一個標識性接口,標注該類對象是可被序列化的,然后使用一個輸出流來構造一個對象輸出流並通過writeObject(Object)方法就可以將實現對象寫出(即保存其狀態);如果需要反序列化則可以用一個輸入流建立對象輸入流,然后通過readObject方法從流中讀取對象。序列化除了能夠實現對象的持久化之外,還能夠用於對象的深度克隆。

1.10    多線程問題
1.11    都用過什么設計模式
單例設計模式
工廠設計模式
模板設計模式
裝飾設計模式
代理設計模式
適配器設計模式
1.12    寫一個單例模式出來
餓漢模式
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
    }
}

更多 java面試題請關注黑馬java論壇

------------恢復內容結束------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM