
Java
文章平均质量分 93
Java,包含面试题
Zayton Squid
内存虽快,但不持久
展开
-
来聊聊LinkedHashMap
保持遍历顺序和插入顺序一致性。支持按照元素访问顺序排序,适用于封装LRU缓存工具。因为内部使用双向列表,尽管在插入和删除元素时会略微慢于 HashMap ,但在迭代访问时由于可以利用链表结构,随着元素个数增加,迭代效率会比HashMap高很多。LinkedHashMap是在HashMap基础上在各个节点之间增加一条双向链表,使得原先散列在不同bucket、单链表、红黑树上的节点之间可以通过双向链表进行操作,实现有序关联,其逻辑结构如下图所示。原创 2023-07-30 15:31:59 · 329 阅读 · 0 评论 -
HashMap线程安全问题
假设有两个线程A、B都在进行put操作,并且算出来的插入下标一致,当线程A执行完上面这段代码时时间片耗尽被挂起,此线程B抢到时间片完成插入元素,然后线程A重新获得时间片继续往下执行代码,直接插入,这就会导致线程B插入的数据被覆盖,从而线程不安全。因为有next指向,所以当e指向的元素插入到新数组中时指向消失,next指向的元素不会被垃圾清除。然后e指向next,而next为7,再次循环,此时e.next=3,而在上次循环中3.next=7,出现环形链表,构成一个死循环,最终导致CPU100。转载 2023-07-14 16:58:07 · 193 阅读 · 0 评论 -
从CPU缓存一致性到Volatile
举个例子,当一台计算机是由多核CPU构成时,为了性能根据上面所说的写回策略,CPU-01从内存中加载了变量X,并将变量X改为9527(初始值为0)写入L1/L2 Cache中,并没有写入到主内存中,这时CPU-02从内存中读取变量X的值,则会读到错误的值,因为CPU-01没有更新变量X到内存中,此时内存中的值仍旧为0,这就是所谓的缓存一致性问题。举个例子,有个变量s,cpu操作变量s时,先检查 Cache Line里面有没有变量s,如果有则先更新Cache Line中的值,然后再写入到主内存;原创 2023-07-05 21:08:40 · 405 阅读 · 0 评论 -
IDEA常用的快捷键(Windows版)
IDEA常用的快捷键原创 2023-04-26 11:20:53 · 344 阅读 · 0 评论 -
聊聊Java IO中的设计模式
如下图,Something类向拥有Target的行为我们就编写一个适配器,继承Something、Target,用Target方法封装Something。适配器主要用来协调接口不兼容,就比如笔记本电脑端口外界显示屏,端口不匹配,就需要一个适配器来将两边连接起来。,在不改变现有对象结构的情况下,动态地给一个对象添加一些额外的职责的模式,就增加功能来说,装饰模式比生成子类更灵活。中的适配器模式前,我们先了解下适配器分为两种形式:对象适配器和类适配器。类的行为,我们就可以编写一个适配器,将。使用到了观察者模式。原创 2023-04-16 22:05:32 · 151 阅读 · 0 评论 -
Java IO基础知识总结
IO即Input/Output,IO是实现输入和输出的基础,可以方便的实现数据的输入和输出。将数据输出到外部存储的过程叫数据输出。将数据输入到计算机内存的过程叫数据输入。原创 2023-04-14 21:29:32 · 148 阅读 · 0 评论 -
什么是HashMap
HashMap是一种快速的查找并且插入、删除性能都良好的一种 K/V键值对的数据结构,它基于哈希表的 Map 接口实现,是常用的 Java 集合之一,是非线程安全的。HashMap默认的初始化大小为 16。之后每次扩充,容量变为原来的 2 倍。HashMap可以存储 null 的 key 和 value,但 null 作为键只能有一个,null 作为值可以有多个。HashMap的底层在JDK1.8之前采用数组+链表组成,用找到数组索引位置,如果冲突则使用拉链法解决。在JDK1.8之后的HashMap。原创 2023-03-28 09:33:40 · 1022 阅读 · 0 评论