JDK源码分析系列--HashMap.TreeNode置顶||技术源码|Java这篇可以看作是JDK源码分析系列–HashMap的下篇。java.util.HashMap.TreeNode是HashMap中非常重要的一个类,主要目的在于:当哈希冲突比较严重的时候,提升HashMap的查询效率。尽管实际用到的概率不高,却占了HashMap篇幅的1/4左右。因此在这写一篇单独分析。 ...
阅读更多
为什么HashMap链表转红黑树的阈值是8置顶||技术Java|数据结构在JDK1.8中,HashMap引入了红黑树结构。当链表(不包括头结点)长度>=8,且数组长度> = 64时,会触发链表转红黑树的逻辑,以提升查询效率。那么为什么是8?
对话
回答这个问题前,先看一组对话。
我:请问HashMap中什么时候会出现红黑树?
小Z:当哈希冲突严重时,链表 ...
阅读更多
记一次Redis Cluster故障转移后的问题|技术|教程出于数据安全的考虑,我们项目中的Redis集群是自己部署的,未使用云服务。有天运维突然打来电话,线上redis挂了,重启了也不行。心想不可能,高可用架构怎么会出错?
背景
我使用三台服务器部署了redis的cluster三主三从集群。为避免单点故障,采用交叉部署,如下图所示
问题
排查发现, ...
阅读更多
秒杀场景下对象池化引发的思考|Java池化|技术秒杀场景下,涉及到短时间大量请求,虽然最终落到数据库的请求很少,但这过程会涉及到许多临时对象的创建(如订单请求DTO、库存DTO),导致频繁youngGC。Young GC在Stop-The-World(STW)期间,JVM必须暂停所有线程,会导致请求延迟飙升,违背秒杀系统的低延迟要求。因此需要引入 ...
阅读更多
JDK源码分析系列--J.U.C并发工具类|技术|源码-Java本文从实际场景出发,对j.u.c包下的四个并发工具的使用进行演示。相信看完以后会对他们的区别和关联有更多了解。
CyclicBarrier
j.u.c.CyclicBarrier中文翻译循环栅栏,即可以在多个线程都执行完成后再触发,且支持循环使用。
场景一
下面场景是5个客人相约到饭店吃饭,只 ...
阅读更多
个人博客切换服务器(阿里云版)|问题|教程之前的阿里云服务器是在2020年双十一新用户活动购买的,一晃三年已经到期,高昂的续费价格劝退。本来想要切换到腾讯云,但感觉有点繁琐。恰巧阿里云推出了一年99元新老用户同享的活动,且承诺续费不涨价!遂购买并顺利切换。在此记录下整个过程。
背景
我是使用 阿里云服务器+域名+hexo 来搭建的个人博 ...
阅读更多
KaTeX公式异常问题解决|问题|教程自建博客最大的问题就是麻烦。因为很多组件都依赖开源网站,一会浏览量数据没了,一会评论功能不能用,今天发现数学公式也不能展示了
背景
一般的MarkDown工具都支持LaTeX 语法,可以直接将文本转换成公式,比图片高级。比如
E=mc2E=mc^2
E=mc2
更复杂一点的有
limx→∞1x ...
阅读更多
JDK源码分析系列--ThreadPoolExecutor|技术源码|源码线程池是众多池化思想的一种。在Java中,与多线程相关的是java.util.concurrent包,而其中最核心的便是线程池类java.util.concurrent.ThreadPoolExecutor。该类包含了线程池的维护与任务执行的过程。本文主要围绕ThreadPoolExecutor,既 ...
阅读更多
Linux部署系列--ELK|技术|部署-ELK项目中的日志系统使用的是ELK(elasticsearch + logstash + filebeat),其中filebeat负责从每个服务器的日志文件中提取数据并发送给logstash,logstash负责数据过滤并存储到es,es负责数据存储和提供查询。
整个搭建与配置过程比较繁琐,想着在这里记 ...
阅读更多
JDK源码分析系列--LinkedHashMap|技术源码|源码 引言
前面已对java.util.HashMap的源码做了详细的分析。HashMap底层采用哈希表,保证了put和get操作的高效。但也导致了遍历操作是无序的。java.util.LinkedHashMap则是在HashMap的基础上,维护了一条双向链表,记录了节点的插入顺序。使遍历操作可以按插入 ...
阅读更多