最近面试java后端开发的感受:如果就以平时项目经验来面试,通过估计很难——再论面试前的准备

这包含了内存,String存储方式等诸多知识点。     2 HashMap里的hashcode方法和equal方法什么时候需要重写?如果不重写会有什么后果?对此大家可以进一步了解HashMap(甚至ConcurrentHashMap)的底层实现。     3 ArrayList和LinkedList底层实现有什么差别?它们各自适用于哪些场合?对此大家也可以了解下相关底层代码。     4 volatile关键字有什么作用?由此展...

JVM调试常用命令——jmap、jstat(2)

48 java.lang.reflect.Method 3: 81976 1967424 java.lang.String 4: 53592 1714944 java.util.concurrent.ConcurrentHashMap$Node 5: 6321 1502344 [I 6: 13505 1500784 java.lang.Class 7: 2457 1079936 [B 8: 19475 779000 java.ut...

曹工说JDK源码(3)--ConcurrentHashMap,Hash算法优化、位运算揭秘

了一个转换,把高位的作用利用起来。 我们仅仅异或了从高位移动下来的二进制位,用最经济的方式,削减系统性能损失,同样,因为数组大小的限制,导致高位在索引计算中一直用不到,我们通过这种转换将其利用起来。ConcurrentHashMap如何优化在concurrentHashMap中,其主要是: final V putVal(K key, V value, boolean onlyIfAbsent) { if (key == nul...

曹工说JDK源码(2)--ConcurrentHashMap的多线程扩容,说白了,就是分段取任务

包部分的源码(可自由增加注释,修改代码并debug)文章中,我改过的代码放在:https://gitee.com/ckl111/jdk-debugsizeCtl field的初始化大家知道,concurrentHashMap底层是数组+链表+红黑树,数组的长度假设为n,在hashmap初始化的时候,这个n除了作为数组长度,还会作为另一个关键field的值。 /** * Table initialization and r...

曹工说JDK源码(1)--ConcurrentHashMap,扩容前大家同在一个哈希桶,为啥扩容后,你去新数组的高位,我只能去低位?

为旧表的一倍,这里旧表为4,那新表就是8.那,新表建立起来了,旧表里的元素,就得搬到新表里面去,等所有元素都搬到新表了,就会把新表和旧表的指针交换。如下:java.util.concurrent.ConcurrentHashMap#transfer private transient volatile Node<K,V>[] nextTable; transient volatile Node<K,V>[] table; if...

理解ConcurrentHashMap1.8源码

ConcurrentHashMap源码分析其实ConcurrentHashMap我自己已经看过很多遍了,但是今天在面试阿里的时候自己在描述ConcurrentHashMap发现自己根本讲不清楚什么是ConcurrentHashMap,以及里面是怎么实现的,搞的我突然发现自己什么都不懂,所以我想要再次的来分析一下这个源码,完全理解ConcurrentHashMap,而不是以为自己懂了,实际上自己不懂。首先我们看一下put方法,p...

HashMap和ConcurrentHashMap的区别

为了线程安全,ConcurrentHashMap 引入了一个 “分段锁” 的概念。具体可以理解把一个大的 map 拆分成 N 个小的 Map 。最后再根据 key.hashcode( )来决定放到哪一个 hashmap 中去。 hashmap 本质是数组+链表,根据 key.hashcode( ) 计算出数组对应下标。如果多个 key 对应同一个下标,用一个链表串起来,新数据在前面。 ConcurrentHashMap :在 ha...

JDK1.8 ConcurrentHashMap源码阅读

1.  带着问题去阅读 为什么说ConcurrentHashMap是线程安全的?或者说 ConcurrentHashMap是如何防止并发的? 2.  字段和常量 首先,来看一下ConcurrentHashMap中的一些字段和常量,这些在接下来的操作中会用得到 2.1.  常量 从中,我们可以获得以下信息: 数组的默认容量是16,最大容量是1<<30 当添加元素的时候,将列表转成树的阈值是8。也就是说,相同位置上多个元素是以链表的形...

HashMap和ConcurrentHashMap和HashTable的底层原理与剖析

hsah map是线程不安全的 这时我们的Hashtable 出现了 hashtable不接受key 或者 value为空 线程安全 但是 是线程安全的 但在高并发 或者负载均衡的轮询等 效率太 低 ConcurrentHashMap 采用的是分段锁 在并发的概念中 有一个编程思想是CAS方式 采用无锁的方式 保证线程的安全 保证了原子性 效率比 synchronized 高 接下来我们对比一下HashMap 和 Concurre...

曹工说JDK源码(4)--抄了一小段ConcurrentHashMap的代码,我解决了部分场景下的Redis缓存雪崩问题

曹工说JDK源码(1)--ConcurrentHashMap,扩容前大家同在一个哈希桶,为啥扩容后,你去新数组的高位,我只能去低位?曹工说JDK源码(2)--ConcurrentHashMap的多线程扩容,说白了,就是分段取任务曹工说JDK源码(3)--ConcurrentHashMap,Hash算法优化、位运算揭秘什么是缓存雪崩基本概念梳理这个基本也是redis 面试的经典题目了,然而,网上不少博客对这个词的定义都含糊...
© 2020 LMLPHP 关于我们 联系我们 友情链接 耗时0.040785(s)
2020-07-13 04:25:21 1594585521