Java基础
1.Java中Class.forName()和ClassLoader.loadClass()的区别
Class.forName方法有要不要初始static变量的参数,而ClassLoader.loadClass()没有;
2. HashMap和HashTable的区别
(1).HashMap不是线程安全的,HashTable是线程安全的
(2).HashMap执行效率比HashTable效率高
(3).HashMap允许null key和null value,而HashTable不允许
3. ConcurrentHashMap
采用的是分段锁的机制,是线程安全的,效率比HashTable高。
4.foreach和for
foreach效率没有for的效率高。
foreach不能修改数据
5.volatile
1:保证此变量对所有线程的可见性
2:禁止指令重排序优化
6.线程同步
1.针对每个类,也有一个锁,所以synchronized static方法可以在类的范围内防止对static数据的并发访问。
7.线程池
FixedThreadPool
创建固定数量线程的线程池
CachedThreadPool
创建一个可缓存的线程池,如果现有线程没有可用的,则创建一个新线程并添加到池中,终止并从缓存中移除那些已有60秒钟未被使用的线程。
SingleThreadExecutor
创建一个单线程化的Executor
ScheduledThreadPool
创建一个支持定时以及周期性的任务执行的线程池
8.equels方法需要满足:
自反性,对称性,传递性,一致性。
9.动态代理
(1)JDK动态代理
编写接口类
实现InvocationHandler接口的invoke方法,
Moveable proxy=(Moveable)Proxy.newProxyInstance(
m.getClass().getClassLoader(),
m.getClass().getInterfaces(),
handler);
(2)cglib 动态代理
编写父类
实现MethodInterceptor接口的 intercept方法
Enhancer enhancer=new Enhancer();
enhancer.setSuperClass(clazz);
enhancer.setCallback(this);
enhancer.create(); 返回代理对象
10.ArrayList的默认大小为10,扩容的大小为 (旧容量 * 3 / 2) + 1
11.Java大数运算
BigInteger 支持任意精度的整数
BigDecimal 支持任意精度的定点数