Java比较器Comparable接口和Comaprator接口
https://blog.csdn.net/zhushuai1221/article/details/51760663
Java集合框架:
https://www.cnblogs.com/jinlinFighting/p/5775281.html
HashMap:https://www.cnblogs.com/jiuhaoyun/p/8985643.html
HashMap和HashTable的区别:http://www.importnew.com/7010.html
HashMap可以通过下面的语句进行同步:Map m = Collections.synchronizeMap(hashMap);
HashMap和TreeMap的区别
HashMap:数组方式存储key/value,线程非安全,允许null作为key和value,key不可以重复,value允许重复,不保证元素迭代顺序是按照插入时的顺序,key的hash值是先计算key的hashcode值,然后再进行计算,每次容量扩容会重新计算所以key的hash值,会消耗资源,要求key必须重写equals和hashcode方法
默认初始容量16,加载因子0.75,扩容为旧容量乘2,查找元素快,如果key一样则比较value,如果value不一样,则按照链表结构存储value,就是一个key后面有多个value;
TreeMap:基于红黑二叉树的NavigableMap的实现,线程非安全,不允许null,key不可以重复,value允许重复,存入TreeMap的元素应当实现Comparable接口或者实现Comparator接口,会按照排序后的顺序迭代元素,两个相比较的key不得抛出classCastException。主要用于存入元素的时候对元素进行自动排序,迭代输出的时候就按排序顺序输出
https://www.cnblogs.com/xiaoxi/category/929860.html
https://www.cnblogs.com/skywang12345/p/3310928.html
https://www.cnblogs.com/skywang12345/
Java的Collections工具类
https://www.cnblogs.com/fysola/p/6021134.html
内部类可以直接访问外部类中的成员。而外部类想要访问内部类,必须要建立内部类的对象。
java中volatile和synchronized有什么区别?
1.volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取;synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。
2.volatile仅能使用在变量级别;synchronized则可以使用在变量、方法、和类级别的。
3.volatile仅能实现变量的修改可见性,并不能保证原子性;而synchronized则可以保证变量的修改可见性和原子性。
4.volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞。
5.volatile标记的变量不会被编译器优化;synchronized标记的变量可以被编译器优化。
Java的反射:
Class.forName加载类是将类进了初始化,
而ClassLoader的loadClass并没有对类进行初始化,只是把类加载到了虚拟机中。
应用场景:Spring框架中的IOC的实现就是使用的ClassLoader。
而在我们使用JDBC时通常是使用Class.forName()方法来加载数据库连接驱动。
这是因为在JDBC规范中明确要求Driver(数据库驱动)类必须向DriverManager注册自己。
Java的设计模式:
首先明确模式是针对面向对象的,它的三大特性,封装、继承、多态。
面向对象设计模式有5大基本原则:单一职责原则、开发封闭原则、依赖倒置原则、接口隔离原则、Liskov替换原则。
而设计模式都是在面向对象的特性以及5大基本原则的基础上衍生而来的具体实现。
Java类的实例化顺序:
当创建类对象时,先初始化静态变量和静态块,然后是非静态变量和非静态代码块,然后是构造器。由于静态成员只会被初始化一次,所以如果静态成员已经被初始化过,将不会被再次初始化。
num++不是个原子性的操作,而是个复合操作。我们可以简单讲这个操作理解为由这三步组成:
1.读取 2.加一 3.赋值