Java 面試題個人總結

一.單例開發模式

1.構造器私有化

2.對象只能通過方法中獲取

例子:

餓漢模式:

不管你什麼情況,我都先把對象new出來

public class Product {
	private static Product product = new Product();
	
	private Product() {
		
	};
	
	public static Product getProduct() {
		return product;
	}
}

懶漢模式:

只有需要的時候,我纔想到要new個新對象

public class Product {
	private static Product product;
	
	private Product() {
		
	};
	
	public static Product getProduct() {
		if(product == null) {
			synchronized (Product.class) {   //雙檢鎖,解決高併發下,單例模式的線程安全
				if(product == null) {
					product = new Product();
				}
			}
		}
		return product;
	}
}

二.static 靜態代碼塊

static代碼塊,完全可以看做一個沒有參數,沒有名稱,沒有返回值的靜態方法.它會在類加載時自動調用,並在main方法前面調用。

靜態代碼塊與靜態方法區別:

靜態代碼塊:自動調用

靜態代碼方法:被動調用

三.java正則表達式

在java.util.regex.*包下,主要由Pattern和Mathcher這倆個類組成

Pattern:如下官方文檔的例子,很容易可以得知,主要調用類裏面的compile的方法,傳入正則的規則

Mathcher:這就是真正影響搜索內容的類

官方實例:

 Pattern p = Pattern.compile("a*b");
 Matcher m = p.matcher("aaaaab");
 boolean b = m.matches();

注意:如果輸入的內容爲空,將會報空指針異常

java中不只只Pattern類支持regex正則,

String類中的部分方法也同樣支持正則,如mathes(),splite(),replaceAll(),repalceFirst()

四.多線程 synchronized關鍵字,wait(),notify(),sleep()

Thread線程

synchronized:  當多個線程同時使用一個對象的時候,這是時候需要加上synchonized(同步鎖);

wait(): 調用後會釋放掉對象的鎖,之後線程需要通過notify()喚醒

sleep():休眠,不會釋放對象的鎖


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章