java基础问题总结-高频面试题
基础的东西永远是最重要的,值得反复学习,面试时,这点也能看出一个人的基本功力。
1、关于HashCode和HashMap以及equals()方法的理解
1. hashcode的默认实现是地址的hash散列,既然是hash散列,
从大范围映射至小范围,就可能出现hash碰撞
2. 部分对象对hashcode进行了重写,比如String,字符串的hash散列,
要获取对象的堆地址,并不像c,c++那么容易,需要sun.misc.Unsafe类,jvm再表。
3. 确定对象是否相同时,还得使用equals方法。根据equals()和hashcode()的规范,
就是类似原值和散列值的关系。
4. hashcode()方法重写应该遵循不变性,如果变化了,在HashXxx中,会有bug
2、HashMap理解和源码解读,HashMap有很多细节,尤其是1.7和1.8有着很大差别
- hashmap的结构是hash表,采用了链地址法,就是数组(table)+ 加链表的方式,
数据既可以放在数组中,也可以放在链表中 - 在扩容时,条件size > length * 0.75,所以说数组不会满,相反很可能超过一半为空,
这是由于减少hash碰撞。 - 1.7时key不能为null,直接丢弃,1.8时可以,放在数组的0位置上。
- 1.7在扩容时会重新计算hash值,也就是rehash过程,而1.8没有,添加了一位(自身相关参数计算)
- 1.7有rehash过程,多线程情况下可能出现死循环,1.8则不会,但是会出现数据丢失(返回null)
等问题,多线程安全可以专门分析一下
hashmap的容量是链表加数组吗_看完这篇,终于搞懂HashMap的源码了
3、多线程安全问题
日进有功
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义