常见面试题

目录

1.HashMap的实现原理,hash冲突如何解决

2.ArrayList与LinkedList的区别

3.知道哪些索引

4.什么情况下索引失效 

5.redis有哪些数据类型

6.线程的生命周期


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 

6.线程的生命周期

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值