1. 下面代碼視圖實現單例模式,可是犯了2處明顯的錯誤,請找出這2個錯誤。 java
public class Singleton {
public Singleton() {
System.out.println("Singleton is create");
}
private Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
public static void createString(){
System.out.println("createString in Singleton");
}
}
2. 對代理模式的做用,描述最不恰當的一項是(單選題)
A.控制對象訪問和通訊
B.延遲加載,提高系統性能
C.處於安全目的,保護被訪問者
D.動態擴充對象功能
3.Android UI體系中,事件通知實現的基本思想來源於(單選題):
A.觀察者模式
B.代理模式
C.策略模式
D.裝飾者模式
4. Vector和ArrayList的主要區別是(單選題):
A. ArrayList內部基於鏈表,而Vector是基於數組的
B. Vector的大部分方法作了同步,而ArrayList沒有同步
C. Vector是可串行化的,而ArrayList不是
D. Vector實現了RandomAccess,而ArrayList沒有
5. 若是HashMap發生大量Hash衝突,則會致使(單選題):
A. HashMap崩潰,致使不可用
B. HashMap沒有影響,依然能夠高效的工做
C. HashMap的性能會有一點影響,但整體依然是高效的
D. HashMap依然可用,可是性能受到重創。
6. 下面哪些關鍵字是和多線程併發有關的(多選)
A. volatile
B. synchronized
C. public
D. final
7. ReadWriteLock可以提升併發性能的緣由是(單選):
A. 它是無鎖的操做
B. 它爲每一個線程都提供了一份數據的複本
C. 它可使得讀讀操做真正的併發,無需等待
D. 它自動進行了鎖的粗化
8. 對象池和享元模式的根本不一樣在於(單選):
A. 對象池中的對象能夠複用,享元模式中的對象不能複用
B. 對象池能夠提高系統性能,享元模式不能
C. 對象池中的每一個對象都是等價的,享元模式中的每一個對象是不等價的
D. 對象池中的每一個對象是不等價的,享元模式中的每一個對象是等價的
9.下面哪些是String對象的特性(多選)
A. 不變性
B. 針對常量池的優化
C. 類是final的
D. 用戶可自定義的多態
10.簡要分析String的subString()方法形成內存泄漏的緣由 數組
答案: 安全
1.第2行 public改成private;第6行 加上static。能夠參考《Java程序性能優化》 第2章節-單例模式
2.D (解釋:這個是裝飾者模式的功能)
3.A (與Swing同樣,事件通知,數據變化時使用的廣泛方法是利用觀察者模式) 有關裝飾者模式 能夠參考《Java程序性能優化》 第2章節-裝飾者模式
4.B
5.D (分析:大量衝突時HashMap退化爲鏈表,性能收嚴重影響)有關HashMap的工做原理能夠參考《Java程序性能優化》 第3章節-Map接口。
6.A B
7.C有關對象池和享元模式 能夠參考《Java程序性能優化》 第2章節-享元模式和第2章節-對象複用
8.C有關對象池和享元模式 能夠參考《Java程序性能優化》 第2章節-享元模式和第2章節-對象複用
9.A,B,C有關String的介紹,能夠參考《Java程序性能優化》 第3章節-字符串優化處理
10.簡答:
substring()方法的實現中使用如下形式構造新的字符串:
new String(offset + beginIndex, endIndex - beginIndex, value);
該構造方法實現以下:
String(int offset, int count, char value[]) {
this.value = value;
this.offset = offset;
this.count = count;
}
可見,並無對value進行裁剪,只是設置了偏移量。所以使用subString()會形成泄漏。