1、List 和 Set 的区别
我们为什么要使用List和Set(List,Set详解)
2、HashSet 是如何保证不重复的
HashSet 是借助 HashMap来实现的,利用的HashMap中Key的唯一性,来 保证HashSet中不存在重复值。
HashSet类是如何实现添加元素保证不重复的—哈希码的原理
3、HashMap 是线程安全的吗,为什么不是线程安全的(最好画图说明多线程环境下不安全)?
HashMap为什么线程不安全
①多个线程某一时刻同时操作HashMap并执行put,hash值同,需解决 冲突。
②put()方法不是同步的
③addEntry()方法不是同步的
④resize()扩容方法不是同步的
补充:
面试总结hashmap
4、HashMap 的扩容过程
5、HashMap 1.7 与 1.8 的 区别,说明 1.8 做了哪些优化,如何优化的?
6、final finally finalize
7、强引用 、软引用、 弱引用、虚引用
《JVM虚拟机》
强引用:Object obj = new Object();只要强引用存在,垃圾回收器就永远不会回收掉被引用的对象。jvm宁愿抛出OutOfMemory异常也不会去回收该对象
软引用:有用但不是必需的对象。对于软引用关联的对象,系统发生内存溢出异常之前,会把这些对象列入回收范围中进行二次回收,如果回收后还是没有足够内存,就会抛出内存溢出的异常。SoftReference
弱引用:描述非必需对象,只不过更弱了。只能生存到下次垃圾收集发生之前。一旦垃圾收集开始工作,不管内存是否充足,都会回收掉只被弱引用关联的对象。WeakReference
虚引用:最弱的。不影响对象的生命周期。该对象在被回收时收到一个系统通知。RhantomReference。
参考博客:
Java 的强引用、弱引用、软引用、虚引用
8、Java反射
SpringIOC控制反转使用了工厂+反射
9、Arrays.sort 实现原理和 Collection.sort 实现原理
Collections.sort()和Arrays.sort()排序算法选择
Arrays.sort和Collections.sort实现原理解析
1、Arrays.sort()
该算法是一个经过调优的快速排序,此算法在很多数据集上提供N*log(N)的性能,这导致其他快速排序会降低二次型性能。
2、Collections.sort()
该算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素效益高子列表中的最低元素,则忽略合并)。此算法可提供保证的N*log(N)的性能,此实现将指定列表转储到一个数组中,然后再对数组进行排序,在重置数组中相应位置处每个元素的列表上进行迭代。这避免了由于试图原地对链接列表进行排序而产生的n2 log(n)性能。
来自 <https://blog.csdn.net/yemou_blog/article/details/50292287>
还是不太明白
10、LinkedHashMap的应用
11、cloneable接口实现原理
12、异常分类以及处理机制
13、wait和sleep的区别
14、数组在内存中如何分配