美团校招内推,可查可咨询!


meituan到店事业群平台技术部,秋招火热进行中!
内推方式1:

点击链接看内推二维码,扫码投 简历   https://www.cnblogs.com/CATHY-MU/p/15102097.html

内推方式2:

登陆官网投递(  https://campus.meituan.com/ )填写内推码( OYkaHKQ)

平台技术部校招咨询qq群 821133476

java7和java8差别

  • Java7 中 ConcurrentHashMap 使用的分段锁,也就是每一个 Segment 上同时只有一个线程可以操作,每一个 Segment 都是一个类似 HashMap 数组的结构,它可以扩容,它的冲突会转化为链表。但是 Segment 的个数一但初始化就不能改变。
  • Java8 中的 ConcurrentHashMap 使用的 Synchronized 锁加 CAS 的机制。结构也由 Java7 中的 Segment 数组 + HashEntry 数组 + 链表 进化成了 Node 数组 + 链表 / 红黑树,Node 是类似于一个 HashEntry 的结构。它的冲突再达到一定大小时会转化成红黑树,在冲突小于一定数量时又退回链表。

put

  • 根据 key 计算出 hashcode 。
  • 判断是否需要进行初始化。
  • 即为当前 key 定位出的 Node,如果为空表示当前位置可以写入数据,利用 CAS 尝试写入,失败则自旋保证成功。
  • 如当前位置的 hashcode == MOVED == -1,则需要进行扩容。
  • 如果都不满足,则利用 synchronized 锁写入数据。
  • 如果数量大于 TREEIFY_THRESHOLD 则要转换为红黑树。

get

  • 根据 hash 值计算位置。
  • 查找到指定位置,如果头节点就是要找的,直接返回它的 value.
  • 如果头节点 hash 值小于 0 ,说明正在扩容或者是红黑树,查找之。
  • 如果是链表,遍历查找之。
#美团##校招##秋招##内推#
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务