一、JAVA异常
1、runtime exception(一般不需要捕获,除数是0)
2、checked exception(空指针),throws与throw
二、泛型(public static <T extend Comparable & Serializable> T min(T t))
1、虚拟机没有泛型类型对象-所有对象都是普通类。当程序调用泛型方法时,如果擦除返回类型,编译器插入强制类型转换。
1 import java.util.*; 2 public class ErasedTypeEquivalence { 3 public static void main(String[] args) { 4 Class c1 = new ArrayList<String>().getClass(); 5 Class c2 = new ArrayList<Integer>().getClass(); 6 System.out.println(c1 == c2); //泛型擦除 7 } 8 }/* Output: 9 true 10 *///:~
2、解决泛型擦除
1)通配符
<? super T>逆变指明泛型类持有T的基类,则T肯定可以放入
<? extends T>指明泛型类持有T的导出类,则返回值一定可作为T的协变类型返回
2)定义接口实现
三、反射
在运行状态中,对于任意一个类,都能得到其所有属性和方法,对于任何一个对象都能调用其方法(动态调用对象方法的功能)
clazz.getClass()
四、类加载
1、类加载机制
(1) 装载:查找和导入Class文件;
(2) 链接:把类的二进制数据合并到JRE中;
(a)校验:检查载入Class文件数据的正确性;
(b)准备:给类的静态变量分配存储空间;
(c)解析:将符号引用转成直接引用;
(3) 初始化:对类的静态变量,静态代码块执行初始化操作
2、类加载的三种方式
1)new Date()
2)Class.forName("")-->Class.forName(className, true, this.getClass().getClassLoader())。第二个参数,是指Class被loading后是不是必须被初始化。Class.forName(com.mysql.cj.jdbc.Driver);
3)ClassLoader.loadClass(className)实际上调用的是ClassLoader.loadClass(name, false),第二个参数指Class是否被link。
3、类加载器和双亲委派模型
1)Bootstrap ClassLoader : 将存放于<JAVA_HOME>\lib目录中的,只有符合类库的才会被加载。
2)Extension ClassLoader : 将<JAVA_HOME>\lib\ext目录下的,或者被java.ext.dirs系统变量所指定的路径中的所有类库加载。开发者可以直接使用扩展类加载器。
3)Application ClassLoader : 负责加载用户类路径(ClassPath)上所指定的类库,开发者可直接使用。它负责将系统类路径java -classpath或-Djava.class.path变量所指的目录下的类库加载到内存中。
五、集合
1、Collection(实现了Iterable接口)
2、链表 将每个对象存放在独立的节点,每个节点还存放序列中下一个节点的引用,添加删除快,数组添加删除慢,需要数组复制。
3、数组列表 ArrayList,底层数组,随机查找快。
4、散列集 HashSet底层HashMap
5、树集 TreeSet 红黑树
6、对象比较 Comparable 接口,得实现这个接口才能比较,compareTo(T);Comparator Compare(T1, T2)
7、队列与双端队列 ArrayDeque(非线程安全,访问快)、Stack(extend Vector)
8、映射表 HashMap 初始16 大小为2^n,JDK7底层数组,数组每一项都是Entry,Hash碰撞解决是拉链法->位桶+链表;JDK8底层数组,数组每一项都是Node,Hash碰撞解决->位桶+链表/红黑树
六、多线程
1、继承Thread、实现Runnable
2、中断线程
3、线程的状态
1)NEW
2)RUNNABLE start()之后
3)BLOCKED locked之后
4)WAITING wait()、join()
5)TIMED WAITING wait(time)
6)TERMINAL
4、线程优先级以及守护线程(当没有其他线程执行时结束)
5、Volatile
6、ThreadLocal
7、线程间通信
1)利用最基本的synchronized
、notify
、wait
2)利用Lock
和Condition
3)信号量a、CyclicBarrier(预定线程数达到后)b、CountDownLatch(计数器减为0)c、Semaphore(允许访问限制资源的线程数)
8、执行器
1)newSingleThreadExecutor:
2)newFixedThreadPool:
3)newCachedThreadPool:
4)newScheduledThreadPool:
5)ThreadPoolExecutor:
五、数据库
1、事务
1)事务特性(ACID)atomacity、consistency、isolation、durability
2)事务隔离级别 (脏读、非重复读、幻想读、丢失修改)--> 未提交读、已提交读、可重复读、串行读
3)锁 共享锁、更新锁、独占锁
4)索引:直接创建(建表时创建)和间接创建(建表后创建)