最近在面试时遇到了一些数据库相关的问题,补下一些数据库相关的一些基本知识
TreeMap源码实现分析
有序的哈希表,允许被插入的元素按照自然顺序或者特殊指定的比较器的顺序进行排序,底层基于红黑树的数据结构实现,支持O(log n)
时间复杂度进行get
,put
,remove
等些操作
LinkedHashMap源码实现分析
LinkedHashMap
是基于HashMap
实现的子类,支持get
, put
等些基本操作O(1)
时间复杂度的支持,允许null
的mapping
,但与HashMap
不同的一点是,其支持按照mapping
被添加进来的顺序进行遍历(底层使用额外的双链表储存了各个被添加的元素)。还有特殊的一点,如果该map
是以access-ordered
方式构建的,可以用来构建简单的LRU(最近最少使用)
的缓存,在满足一定条件时,map
自动淘汰一些过期元素
HashMap源码原理及实现
基于jdk11
源码分析哈希表的实现,主要包含:哈希表的内部储存的数据结构是怎样的?哈希表是如何让get
,put
等些操作在常数时间内实现的,在当前哈希表”满”时,哈希表是如何进行扩容(resize
)的?负载因子(load factor)
与容量(capacity)
这2个重要指标是如何影响哈希表的性能的?哈希表是如何让各个元素(element or entry)
比较均与地散落在各个桶(bucket)
上的?当存在较多冲突时,新版jdk
的HashMap
是如何优化的?