1.HashMap底层+扩展JDK1.8中HashMap底层是数组+链表+红黑树。当发生hash冲突时,使用zipper方法解决冲突。链表存储在数组中。链表的每个节点都是一个Entry,每个Entry存储Key、Value、hash值,以及对下一个元素的引用。当hashMap中的元素个数超过[数组大小*加载因子],新的Entry落在非空位置时,数组将被扩充,创建一个比原HashMap大一倍的数组,并且原始对象到新位置。默认情况下,数组的大小为16,加载因子的默认值为0.75。需要注意的是,hashmap扩容的判断并不一定意味着比例超过0.75就会扩容。如果初始数组为16,直接插入8个hashcode相同的不同元素,此时链表不会转红黑。树,但是一直扩展到容量至少扩展到64。参考文章:https://www.jianshu.com/p/c36...https://blog.csdn.net/wanderl...https://blog.csdn.net/wdyliux...2.MySQL索引数据结构MySQL使用B+树作为索引。它是B-tree的一个变种,所以是在B-tree的基础上改进的。B+数的特点B+树索引中的所有数据都存储在叶子节点中,数据按顺序排列。B+树的非叶子节点上不存储数据,只存储索引。因为数据是按顺序排列的。因此,B+树在范围搜索、排序搜索、分组搜索和去重搜索方面效率很高。参考文章:https://cloud.tencent.com/dev...3.索引失败情况下如果条件中有or,即使有带索引的条件也不会被使用(如果你想要使用or,你想让索引生效,只能在or条件中的每一列加一个索引)对于多列索引,如果不是第一个使用的部分(第一个),索引就不会使用(最左前缀原则)像查询以%开头如果列的类型是字符串,没有单引号会导致失败。如果mysql估计使用全表扫描比使用索引快,请不要使用索引对索引列进行计算、函数和类型转换。参考文章https://cloud.tencent.com/dev...https://blog.csdn.net/guoxing...https://segmentfault.com/a/11...4。最左匹配原则(abcd联合索引,可以查bcd)最左匹配原则是指在一个联合索引中,如果你的sql语句使用了联合索引中的最左索引,那么这条sql语句就可以使用这个联合索引进行匹配。5.并发数据库事务引起的问题ReaduncommittedReaduncommittedReadcommittedReadsubmittedRepeatablereadRepeatablereadSerializable序列化参考文章https://cloud.tencent.com/dev...如有侵权请联系删除
