20220510荣耀通开实习面经

20220510荣耀通开实习面经,第1张

没答出来的问题:

1. HashMap的使用中,equals和hashcode的关系是怎么样的?(基础题,没答出来)

解决:去读一下了HashMap的源码,其中每一个Node都有一个hash字段,由key值算出;当需要重写equals方法来比较键的对象值相等的时候,同时也要去重写hashcode函数的。因为当插入一个新的键值对的时候putVal函数:

先看table是否为空,若为空,则resize();

再看此要插入的键的hash对应的桶是否为空,若为空,直接插入;

最后(看链表的情况)依次比较此桶的链表的每个节点和要插入的新节点:

1)先比较此节点和新节点的hash值(key算出)

2)只有当两个hash值相等时,再比较key的地址是否一样或者key的equals是否相等

3)当两个条件都满足的时候,就会替换调此键值对。

所以,当map.put("hello",1)后,再map.put("hello",2),因为String重写了equals比较值,也重写了hashcode(值相等时,hash值也相等),这样在putVal中的if条件才会满足,那map中的(“hello”,1)会替换成(“hello”,2)。

这样,使用get(key)才能拿到这个唯一的键对应的值。

另外,比较的时候优先使用hash来比较,速度明显会快很多。

参考博客:

Java中重写equals方法为什么要重写hashcode方法? (baidu.com)

2. 并发量更大的时候怎么解决?(简单的乐观锁cas几次不能满足)

3. 秒杀问题怎么解决并发安全问题?

参考博客:

(30条消息) redis解决商品秒杀问题_WHJwhj552200的博客-CSDN博客

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/904863.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-15
下一篇 2022-05-15

发表评论

登录后才能评论

评论列表(0条)

保存