zoukankan      html  css  js  c++  java
  • 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
    

    JAVA为什么两个不同对象的hashCode有可能相同

    2、HashMap理解和源码解读,HashMap有很多细节,尤其是1.7和1.8有着很大差别

    1. hashmap的结构是hash表,采用了链地址法,就是数组(table)+ 加链表的方式,
      数据既可以放在数组中,也可以放在链表中
    2. 在扩容时,条件size > length * 0.75,所以说数组不会满,相反很可能超过一半为空,
      这是由于减少hash碰撞。
    3. 1.7时key不能为null,直接丢弃,1.8时可以,放在数组的0位置上。
    4. 1.7在扩容时会重新计算hash值,也就是rehash过程,而1.8没有,添加了一位(自身相关参数计算)
    5. 1.7有rehash过程,多线程情况下可能出现死循环,1.8则不会,但是会出现数据丢失(返回null)
      等问题,多线程安全可以专门分析一下
      hashmap的容量是链表加数组吗_看完这篇,终于搞懂HashMap的源码了

    3、多线程安全问题

    日进有功
  • 相关阅读:
    E
    D
    C
    B
    Python
    IDEA 设置资源目录
    光猫指示灯含义
    IO模型
    Linux 总目录
    Linux python 使用
  • 原文地址:https://www.cnblogs.com/Robin008/p/15587040.html
Copyright © 2011-2022 走看看