| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 20220510荣耀通开实习面经 -> 正文阅读 |
|
[数据结构与算法]20220510荣耀通开实习面经 |
没答出来的问题: 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. 秒杀问题怎么解决并发安全问题? 参考博客: |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 4:54:14- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |