------------恢復內容開始------------
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
}
}
------------恢復內容結束------------