1.Java中Class.forName()和ClassLoader.loadClass()的區(qū)別
Class.forName方法有要不要初始static變量的參數(shù),而ClassLoader.loadClass()沒有;
2. HashMap和HashTable的區(qū)別
(1).HashMap不是線程安全的,HashTable是線程安全的
(2).HashMap執(zhí)行效率比HashTable效率高
(3).HashMap允許null key和null value,而HashTable不允許
3. ConcurrentHashMap
采用的是分段鎖的機制,是線程安全的,效率比HashTable高。
4.foreach和for
foreach效率沒有for的效率高。
foreach不能修改數(shù)據(jù)
5.volatile
1:保證此變量對所有線程的可見性
2:禁止指令重排序優(yōu)化
6.線程同步
1.針對每個類,也有一個鎖,所以synchronized static方法可以在類的范圍內(nèi)防止對static數(shù)據(jù)的并發(fā)訪問。
7.線程池
FixedThreadPool
創(chuàng)建固定數(shù)量線程的線程池
CachedThreadPool
創(chuàng)建一個可緩存的線程池,如果現(xiàn)有線程沒有可用的,則創(chuàng)建一個新線程并添加到池中,終止并從緩存中移除那些已有60秒鐘未被使用的線程。
SingleThreadExecutor
創(chuàng)建一個單線程化的Executor
ScheduledThreadPool
創(chuàng)建一個支持定時以及周期性的任務(wù)執(zhí)行的線程池
8.equels方法需要滿足:
自反性,對稱性,傳遞性,一致性。
9.動態(tài)代理
(1)JDK動態(tài)代理
編寫接口類
實現(xiàn)InvocationHandler接口的invoke方法,
Moveable proxy=(Moveable)Proxy.newProxyInstance(
m.getClass().getClassLoader(),
m.getClass().getInterfaces(),
handler);
(2)cglib 動態(tài)代理
編寫父類
實現(xiàn)MethodInterceptor接口的 intercept方法
Enhancer enhancer=new Enhancer();
enhancer.setSuperClass(clazz);
enhancer.setCallback(this);
enhancer.create(); 返回代理對象
10.ArrayList的默認大小為10,擴容的大小為 (舊容量 * 3 / 2) + 1
11.Java大數(shù)運算
BigInteger 支持任意精度的整數(shù)
BigDecimal 支持任意精度的定點數(shù)