目录
1.HashMap的实现原理,hash冲突如何解决
HashMap本质是一个数组,数组的每一项是一个链表,而链表的每一项就是一个entry。
通过hash算法对key进行计算,然后决定key-value所在的位置,如果该位置上已有数据,则加在链表的开头,并持有对下一个元素的指针。
2.ArrayList与LinkedList的区别
ArrayList底层是一个数组,而LinkedList底层是一个双向链表。因此:
a.ArrayList添加元素,在没有超过长度限制时很快,而超过长度了就要扩容,那样效率就低了,而LinkedList添加元素只需要修改指针,因此效率很高。
b.ArrayList可以通过索引获得到元素,而LinkedList必须遍历,因此ArrayList在改,查方面效率高于LinkedList。
c.ArrayList删除越往后的元素效率越高,而LinkedList删除两端的效率高。
3.知道哪些索引
从数据结构角度
1、B+树索引(O(log(n)))
2、hash索引
3、FULLTEXT索引(全文索引,现在MyISAM和InnoDB引擎都支持了)
4、R-Tree索引(用于对GIS数据类型创建SPATIAL索引)
1、聚集索引(clustered index)
2、非聚集索引(non-clustered index)
1、主键索引:主键索引是一种特殊的唯一索引,不允许有空值
2、普通索引或者单列索引
3、多列索引(复合索引):复合索引指多个字段上创建的索引
4、唯一索引或者非唯一索引
5、空间索引:空间索引是对空间数据类型的字段建立的索引
4.什么情况下索引失效
1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)
注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引
2.对于多列索引,不是使用的第一部分,则不会使用索引
3.like查询是以%开头
4.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引
5.如果mysql估计使用全表扫描要比使用索引快,则不使用索引
5.redis有哪些数据类型
String , Hash , List, Set , SortedSet