JDK源码分析系列--HashMap.TreeNode
这篇可以看作是JDK源码分析系列—HashMap的下篇。java.util.HashMap.TreeNode是HashMap中非常重要的一个类,主要目的在于:当哈希冲突比较严重的时候,提升HashMap的查询效率。尽管实际用到的概率不高,却占了HashMap篇幅的1/4左右。因此在这写一篇单独分析。 ...
阅读更多
个人博客切换服务器(阿里云版)
之前的阿里云服务器是在2020年双十一新用户活动购买的,一晃三年已经到期,高昂的续费价格劝退。本来想要切换到腾讯云,但感觉有点繁琐。恰巧阿里云推出了一年99元新老用户同享的活动,且承诺续费不涨价!遂购买并顺利切换。在此记录下整个过程。 背景我是使用 阿里云服务器+域名+hexo 来搭建的个人博客, ...
阅读更多
Java后端面试题汇总2023
这是2023年年初换工作面试时总结的,汇总了面试时的高频题。每一题都是在搞懂的情况下,用自己的语言回答的。目前内容还不完善,一是技术面不够广,二是研究的还不深入。后面会不断丰富。写这个既是对自己学习的总结,也希望对正准备面试的小伙伴能有所帮助。 Mysql1.mysql索引有哪些类型? 按数据结构 ...
阅读更多
Linux环境ELK系统搭建
项目中的日志系统使用的是ELK(elasticsearch + logstash + filebeat),其中filebeat负责从每个服务器的日志文件中提取数据并发送给logstash,logstash负责数据过滤并存储到es,es负责数据存储和提供查询。 整个搭建与配置过程比较繁琐,想着在这里记 ...
阅读更多
JDK源码分析系列--AbstractExecutorService
上一篇介绍了ThreadPoolExecutor,提供了一个execute方法执行任务,但execute方法没有返回值,不能批量提交任务,不能设置超时时间。AbstractExecutorService是ThreadPoolExecutor的抽象父类,提供了一些额外方法,使得执行任务的功能得到增强。 ...
阅读更多
JDK源码分析系列--ThreadPoolExecutor
线程池是众多池化思想的一种。在Java中,与多线程相关的是java.util.concurrent包,而其中最核心的便是线程池类java.util.concurrent.ThreadPoolExecutor。该类包含了线程池的维护与任务执行的过程。本文主要围绕ThreadPoolExecutor,既 ...
阅读更多
为什么HashMap链表转红黑树的阈值是8
在JDK1.8中,HashMap引入了红黑树结构。当链表(不包括头结点)长度>=8,且数组长度> = 64时,会触发链表转红黑树的逻辑,以提升查询效率。那么为什么是8?又是怎么计算的? 结论 红黑树是一种特殊的平衡二叉树,其时间复杂度是O(log n),链表的时间复杂度是O(n)。在n ...
阅读更多
JDK源码分析系列--LinkedHashMap
引言前面已对java.util.HashMap的源码做了详细的分析。HashMap底层采用哈希表,保证了put和get操作的高效。但也导致了遍历操作是无序的。java.util.LinkedHashMap则是在HashMap的基础上,维护了一条双向链表,记录了节点的插入顺序。使遍历操作可以按插入顺序 ...
阅读更多
JDK和CGLIB动态代理
Java中动态代理代理包括JDK动态代理和CGLIB动态代理。前者通过实现目标类的接口,和反射技术实现。后者不需要实现接口,而是通过继承目标类,并通过方法拦截技术实现。Spring的AOP技术则是集成了这两种动态代理。本文对两种代理的使用方法做一个简要介绍。 代理模式首先介绍下设计模式中的代理模式 ...
阅读更多
JDK源码分析系列--HashMap
java.util.HashMap源码一直是面试必问的项目,包括底层数据结构、扩容机制,以及为什么线程不安全等。本文作为JDK源码分析系列的开端,首先从HashMap开始,对其源码进行剖析。源码基于JDK1.8 关于红黑树的部分,本文由于篇幅有限,不再展开。 数据结构在介绍具体方法前,有必要说明下h ...
阅读更多