java面试问题与衍生(个人面试总结)(一)

什么是聚簇索引,什么是非聚簇索引?

mysql中有很多种引擎,常用innodb引擎,其中有两种存储格式,一种是hash索引,一种是b+树索引,以b+树举例,当我们每次插入数据时,mysql会根据主键自动生成索引,而这个索引所对应的叶子节点存储着这条数据,像这种存储了数据的叶子结点就叫做聚簇索引,而非聚簇索引则是指在原表基础上添加了一个新的索引,这时新索引产生的叶子节点存储的不再是完整的数据,而是对应的原数据所在的物理位置,也称之为二次索引,即叶子节点不存数据。

b树和b+树区别,b+树优势?

b+树在b树的基础上在叶子节点之间增加了一个双线连接,目的是让其更加适合范围查询,毕竟mysql中我们进行数据查询时多数情况下都是查批量数据,如果时b树则需要进行中序查询,如果是hash则需要进行大范围的hash查询,而b+树只需要简简单单的进行一次链表查询,极大程度优化了性能。

那既然说到了hash,hashmap应该熟悉吧,讲一下你的理解吧。

首先在每次插入一条数据时,Object类中有hashcode()方法会根据key得到他的hashcode,这是put操作中会根据key的hashcode去模一个值从而获得其对应的槽位,之后如果这个槽中没有数据那么便会直接插入此key的hashcode,key,value,如果有数据则会按顺序进行遍历,如果有hashcode相同的数据则替换,没有则新添,并且会了优化查询速度,默认在某个槽位数据长度小于8时才用链表结构存储数据,大于8时自动重组为红黑树,将查询的时间复杂度从n降成了logn。

hashmap安全吗,有哪些安全策略?

hashmap不安全,当我们同时对一个hashmap进行操作时可能会造成数据冲突,java中有线程安全的hashmap即hashtable,但hashtable是对整个hashmap进行了加锁,即每次新的请求发起时都需要hashmap的锁处于空闲,不然会被挂起,虽然保证了安全,但是一定程度上影响了性能,而针对这一情况进行优化,便是安全hashmap——ConcurrentHashMap,他的核心原理呢则是分段锁,对每一个hashcode取模得到的槽位进行锁操作,即以槽为单位上锁,提升了并发性同时保证了数据的安全和操作的性能。

redis了解吗,为什么那么快?

redis是一款基于内存的key value格式的nosql数据库,因为是完全基于内存所以操作处理速度比较快,基本的存储类型有String,hashmap,list,set,zset(有序集合),一般常用zset实现排行榜功能。

redis集群了解吗,讲一下集群的底层理解?

redis中不管是单例模式还是集群模式都将整个redis看成一个整体进行使用,而redis集群中实现此特性的机制便是一致性hash算法,他将整个取模的槽位转换为一个环进行轮询,当有一个新的数据插入时,则将其计算得到对应的槽位,若此槽位没有服务器节点则向后轮询直到有服务器节点,而当拓展新增一个服务器节点时,则只需要将其之后的一个服务器节点中在此新增服务器所存hashcode内的数据进行迁移,无需多集群所有数据进行迁移,实现高可用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值