一、基础
1. 多态
指父类的某个方法被子类重写时,可以产生自己的功能行为。
就像一千个人眼里有一千个哈姆雷特。
2. 反射
能够获取到Java中要反射类的字节码。
- 1. Class.forName(className)
- 2. 类名.class
- 3. this.getClass()。
3. Java泛型
| 类型 | 含义 |
|---|---|
<?> |
无界泛型,任意类型都匹配 |
<T extends ClassA> |
有界泛型 - 继承自某父类 |
<T extends InterfaceB> |
有界泛型 - 实现某接口 |
<T extends ClassA & InterfaceB & InterfaceC ... > |
有界泛型 - 多重边界 |
<T super ClassC> |
有界泛型 - 指定类父类 |
4. String能被继承吗?
不可以,因为String类有final修饰符。
5. String, Stringbuffer, StringBuilder 的区别
StringBuffer 字符串变量(线程安全),其也是final类别的。 StringBuilder 字符串变量(非线程安全)。
6. 集合
List:有序、可重复;索引查询速度快;插入、删除伴随数据移动,速度慢;
Set:无序,不可重复;
Map:键值对,键唯一,值多个;
LinkedList、ArrayList、HashSet是非线程安全的,Vector是线程安全的;
HashMap是非线程安全的,HashTable是线程安全的;
StringBuilder是非线程安全的,StringBuffer是线程安的。
- HashMap、HashSet
7. ArrayList 和 LinkedList 区别
ArrayList是基于索引的数据接口,它的底层是数组。 LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用。
8. Map 类的区别
- hashMap
线程不安全。
HashMap是数组+链表+红黑树(JDK1.8增加了红黑树部分)实现的,采用哈希表来存储的。
- Hashtable
采用对象锁(synchronized修饰对象方法),
HashTable的get/put方法都被synchronized关键字修饰,说明它们是方法级别阻塞的。
- ConcurrentHashMap
并发度就是segment的大小,默认为16,这意味着最多同时可以有16条线程操作ConcurrentHashMap。
- 顺序的 Map 实现类
TreeMap和LinkedHashMap是有序的,TreeMap默认升序,LinkedHashMap则记录了插入顺序。
二、多线程
1. 锁
自己整理写的:
也有改编成漫画哈哈
2. 线程池
笔记:
码妞漫画:
3. 线程池怎样复用?
三、JMM
保证共享内存的原子性、可见性、有序性。
线程的工作内存是线程私有内存,线程间无法互相访问对方的工作内存。
- 线程安全