牛客605421456号
牛客605421456号
全部文章
分类
Java基础(49)
算法(1)
集合类(30)
面试主观题(1)
面试题_Java开发工程师(6)
归档
标签
去牛客网
登录
/
注册
牛客605421456号的博客
全部文章
(共68篇)
ConcurrentHashMap是怎么分段分组的?
get操作: Segment的get操作实现非常简单和高效,先经过一次再散列,然后使用这个散列值通过散列运算定位到 Segment,再通过散列算法定位到元素。get操作的高效之处在于整个get过程都不需要加锁,除非读到空的值才会加锁重读。原因就是将使用的共享变量定义成 volatile 类型。 pu...
Java
2022-04-29
0
532
介绍一下ConcurrentHashMap是怎么实现的?
JDK 1.7中的实现: 在 jdk 1.7 中,ConcurrentHashMap 是由 Segment 数据结构和 HashEntry 数组结构构成,采取分段锁来保证安全性。Segment 是 ReentrantLock 重入锁,在 ConcurrentHashMap 中扮演锁的角色,HashE...
Java
2022-04-28
0
350
HashMap与ConcurrentHashMap有什么区别?
HashMap是非线程安全的,这意味着不应该在多线程中对这些Map进行修改操作,否则会产生数据不一致的问题,甚至还会因为并发插入元素而导致链表成环,这样在查找时就会发生死循环,影响到整个应用程序。 Collections工具类可以将一个Map转换成线程安全的实现,其实也就是通过一个包装类,然后把所有...
Java
2022-04-28
0
260
说一说HashMap和HashTable的区别?
Hashtable是一个线程安全的Map实现,但HashMap是线程不安全的实现,所以HashMap比Hashtable的性能高一点。 Hashtable不允许使用null作为key和value,如果试图把null值放进Hashtable中,将会引发空指针异常,但HashMap可以使用null作...
Java
2022-04-27
0
234
为什么 Spring和IDEA 都不推荐使用 @Autowired 注解?
链接解答一 链接解答二
Java
2022-04-27
0
245
算法复杂度如何描述?
在描述算法复杂度时,经常用到o(1), o(n), o(logn), o(nlogn)来表示对应算法的时间复杂度, 这里进行归纳一下它们代表的含义: 这是算法的时空复杂度的表示。不仅仅用于表示时间复杂度,也用于表示空间复杂度。 语法:O后面的括号中有一个函数,指明某个算法的耗时或者耗空间与数据增长量...
Java
2022-04-27
0
355
Spring中的Bean默认是单例还是多例?如何保证并发安全?
Spring的bean默认都是单例的,某些情况下,单例是并发不安全的 保证并发安全的五种解决方案: 单例变原 线程隔离类ThreadLocal 尽量避免使用成员变量 使用并发安全的类 分布式或微服务的并发安全 链接详见
Java
2022-04-27
0
299
什么是操作系统的“原子操作”?
原子操作是不可分割的,在执行完毕不会被任何其它任务或事件中断,分为两种情况(两种都应该满足) 在单线程中, 能够在单条指令中完成的操作都可以认为是" 原子操作",因为中断只能发生于指令之间。 在多线程中,不能被其它进程(线程)打断的操作就叫原子操作。
Java
2022-04-27
0
267
HashMap为什么用红黑树而不用B树?
B/B+树多用于外存上时,B/B+也被成为一个磁盘友好的数据结构。 HashMap本来是数组+链表的形式,链表由于其查找慢的特点,所以需要被查找效率更高的树结构来替换。如果用B/B+树的话,在数据量不是很多的情况下,数据都会“挤在”一个结点里面,这个时候遍历效率就退化成了链表。
Java
2022-04-26
1
1748
HashMap中的循环链表是如何产生的?
在多线程的情况下,当重新调整HashMap大小的时候,就会存在条件竞争,因为如果两个线程都发现HashMap需要重新调整大小了,它们会同时试着调整大小。在调整大小的过程中,存储在链表中的元素的次序会反过来,因为移动到新的bucket位置的时候,HashMap并不会将元素放在链表的尾部,而是放在头部,...
Java
2022-04-26
0
422
首页
上一页
1
2
3
4
5
6
7
下一页
末页