2021年面试常问的JAVA基础知识点包含容器、多线程、垃圾回收机制、反射JVM等
14页1、JAVA基础知识1 容器1.1 容器有哪些?JAVA的容器主要分为两大类:Collection和Map。Java中的容器集合分为两大阵营,一个是Collection,一个是MapCollection下分为Set,List,QueueSet的常用实现类有HashSet,TreeSet等List的常用实现类有ArrayList,LinkedList等Queue的常用实现类有LinkedList,ArrayBlockingQueue等Map下没有进一步分类,它的常用实现类有HashMap,ConcurrentHashMap等1.2 Collection 和 Collections 有什么区别?Collection是一个集合接口,提供了一系列对集合对象进行基本操作的通用方法,所有集合都是他的子类。Collections是一个工具类,它服务于Collection框架,它用于对集合对象进行排序、搜索等操作。1.3 List、Set和Map的区别?区别:元素是否可以重复、元素是否有序。1.4 HashMap和HashTable的区别?1) HashMap不是线程安全的,HashTable是线程安全的
2、,因此HashMap的效率略高。2) HashMap允许键值为空,HashTable不允许。3) HashTable是同步的,HashMap不是同步的。4) HashMap的底层数组默认是16,一定是2的指数;hashtable默认是11,每次扩充2+15) 一般不建议使用Hashtable(1)HashTable是遗留类,内部实现很多没优化和冗余。(2)即使在多线程环境下,现在也有同步的ConcurrentHashMap替代,没有必要因为是多线程而用HashTable。HashMap和TreeMap的区别:TreeMap在可以实现按照键值排序。LinkedHashMap:输入和输出的顺序相同。Weakhashmap:key采用弱引用,key不再被外部引用时就会被GC回收,而hashmap是强引用,只有key从hashmap删除才会被GC回收。1.5 HashMap的原理:HashMap 基于 Hash 算法实现的,我们一般用HashMap存储key-value类型的数据,它的底层是一个数组,当我们调用put(key,value)方法的时候,首先会对key进行计算得出一个hash值,然
3、后根据hash值计算出(key,value)存放在数组上的位置这个时候我们会遇到两种情况:一是数组上该位置为空,可以直接放入数据;还有一种情况是该位置已经存放值了,这就发生了哈希冲突。在现在使用较为普遍的JDK1.8中是这样处理哈希冲突的:先用链表把冲突的元素串起来,如果链表的长度达到了8,并且哈希表的长度大于64,则把链表转为红黑树。(在JDK1.7中没有转化为红黑树这一步,只用链表解决冲突)细节:HashMap如何确定Key存放在数组的位置?Key的hashcode()得到hash值(4字节),然后把hash值的高16位和低16位异或的结果与数组的长度-1的值进行按位与操作得到的结果就是key在数组里存放的下标。为什么不直接用key的hashcode而要把高16位和低16位异或?通常数组的长度不会超过216,如果不异或的话高16位就不会起作用了。所以把高16位和低16位异或,使得高位的影响稀释到低位中,使得计算key位置的操作能够充分散列均匀。为什么要把链表转为红黑树?阈值为啥是8?在极端情况下,比如说key的hashCode()返回的值不合理,或者多个密钥共享一个hashCode
4、,很有可能会在同一个位置产生严重的哈希冲突。这种情况下,如果我们仍然使用链表把多个冲突的元素串起来,这些元素的查询效率就会从O(1)下降为O(N)。为了能够在这种极端情况下仍保证较为高效的查询效率,HashMap选择把链表转换为红黑树,红黑树是一种常用的平衡二叉搜索树,添加,删除,查找元素等操作的时间复杂度均为O(logN)至于阈值为什么是8,这是HashMap的作者根据概率论的知识得到的。当key的哈希码分布均匀时,数组同一个位置上的元素数量是成泊松分布的,同一个位置上出现8个元素的概率已经接近千分之一了,这侧面说明如果链表的长度达到了8,key的hashCode()肯定是出了大问题,这个时候需要红黑树来保证性能,所以选择8作为阈值。HashMap的扩容原理?Hashmap里面维护了一个容量值和一个加载因子,当数组里的元素个数超过容量值*加载因子后就会触发扩容机制。,默认每次扩充为原来的二倍。首先得到新的容量值和新的扩容阈值,默认都是原来大小的两倍。然后根据新容量创建新的数组最后把元素从旧数组中迁移到新数组中在JDK1.7中,迁移数据的时候所有元素都重新计算了hash,并根据新的ha
《2021年面试常问的JAVA基础知识点包含容器、多线程、垃圾回收机制、反射JVM等》由会员孙盼分享,可在线阅读,更多相关《2021年面试常问的JAVA基础知识点包含容器、多线程、垃圾回收机制、反射JVM等》请在金锄头文库上搜索。
2021年国企面试数据库必备知识点包含索引、范式、事务、封锁、引擎等
PCA_实验报告(含代码、实验流程图结果分析等)
2021年面试常问的计算机网络知识点期末考试
2021年面试常问的40个数据库小知识点
SVM支持向量机实验报告(含代码、实验流程图结果分析等)
2021年面试常问的C++知识点
2021年国企面试大数据必备知识点包含spark、RDD、数据倾斜、spark调优等
人工智能社交软件调查问卷_2
2021年面试常问的JAVA基础知识点包含容器、多线程、垃圾回收机制、反射JVM等
人工智能社交软件调查问卷_1
2021年面试JAVA必备知识点《JAVA面试宝典》笔记
2021年面试常问的死锁、三次握手、四次挥手
面试JAVA必备知识点《JAVA面试宝典》笔记
面试常问的JAVA基础知识点包含容器、多线程、垃圾回收机制、反射JVM等
2023-08-28 32页
2023-08-14 14页
2023-05-06 1页
2022-09-13 53页
2022-06-04 1页
2022-06-04 3页
2022-06-04 6页
2022-05-20 10页
2022-04-05 14页
2021-12-16 20页