1、設計模式算法
一、單例模式:數據庫
對於頻繁使用的對象,能夠省略建立對象所花費的時間,減小內存使用頻率,減輕GC壓力。設計模式
單例模式相比靜態類的優點:能夠繼承、被繼承、實現接口,面向對象風格;靜態類不行,是面向過程風格的。數組
二、代理模式:緩存
由於安全緣由,屏蔽客戶端直接訪問真實對象;遠程調用,隱藏遠程調用的細節;提高性能,實現延遲加載 (如 Hibernate )。安全
實現方式:JDK動態代理、CGLIB等網絡
三、享元模式:數據結構
節省重複建立對象的開銷;對系統內存要求少,GC壓力小。併發
四、裝飾者模式:負載均衡
既繼承又委託。動態添加對象功能。如加緩衝優化IO:FileOutputStream -> BufferedOutputStream
五、觀察者模式:
UI上的Onclick 事件,JMS 的onMessage 事件等。
2、優化組件和方法
一、緩衝 Buffer:
如IO中的BufferWriter,BufferReader 等
二、緩存 Cache:
EHCache、OSCache等
三、對象複用池:
數據庫鏈接池 C3P0 、DBCP 等
四、負載均衡:
Apache + Tomcat 集羣,Session 能夠複製 (可是容易形成網絡繁忙)。
Terracotta + Tomcat 集羣,實現Session共享,效率高。
五、事件換空間:
不引入多餘變量,實現數字 a、b 交互
a = a+b; (此時1爲和sum)
b= a-b; (sum- 舊b =舊a)
a= a-b; (sum- 新B = sum - 舊A = 舊B =新A )
六、空間換時間
好比緩存。
3、字符串優化
一、字符串分割
StringTockenizer 比直接的split() 方法好
二、StringBuffer 、StringBuilder
StringBuffer 同步 、StringBuilder 非同步。
在初始化時候指定容量,如 new StringBuilder (20);
4、核心數據結構優化
一、List
ArrayList 基於數組、LinkedList 基於鏈表
二、Map
HashMap:基於hash算法
LinkedHashMap:有序的HashMap,按照插入順序排序
TreeMap:繼承自SortedMap,基於紅黑樹(一種平衡二叉樹),能夠自定義排序規則 (元素繼承Coparable)
三、Set: Set 是Map 的一種封裝,其內部實現跟Map相同
HashSet:基於hash算法
LinkedHashSet: 有序的HashSet,按照插入順序排序
TreeSet: 繼承自SortedSet,基於紅黑樹(一種平衡二叉樹),能夠自定義排序規則 (元素繼承Coparable)
四、NIO
DirectBuffer 能夠直接訪問系統物理內存,不須要在JVM的堆上分配空間,銅過設置 -XX:MaxDirectMemorySize=100M 設置
五、引用類型
強引用:
軟引用:
弱引用:例子,WeakHashMap,能夠做爲緩存
虛引用:
六、其餘編碼技巧
慎用異常
成員變量轉化爲局部變量
位移運算代替乘除法
使用arrayCopy
5、並行程序設計模式
一、Future 模式
Future 用於實現Callable 接口的class中
FutureTask 既實現 Callable 又實現 Runnable
二、 Master-Worker 模式
三、Guarded Suspension 模式
四、不變模式
五、生產者-消費者模式
6、JDK多任務框架
一、簡單線程池實現
二、Executor 框架
三、自定義線程池、擴展ThreadPoolExecutor
7、JDK 併發集合
一、CopyOnWriteArrayList、CopyOnWriteArraySet
二、ConcurrentHashMap
三、ConcurrentLinkedQueue
四、LinkedBlockingQueu 用於生產者-消費者模式
五、LinkedBlockingDeque
8、併發控制方法
一、volatile
二、synchronized
三、Lock、ReadWriteLock
四、Condition
五、Semaphore
六、ThreadLocal
9、鎖的優化
一、避免死鎖
二、減少鎖持有時間
三、減少鎖粒度
四、讀寫鎖分離來替換獨佔鎖
五、鎖分離
10、JVM 調優
一、
二、
三、