- 博客(140)
- 资源 (14)
- 问答 (2)
- 收藏
- 关注
原创 我是如何阅读JDK源码的?
1. 前言 之前断断续续读过一部分 JDK 常用类的源码,这里想把过程中的一些心得和方法记录下来,如果能帮到需要的小伙伴就再好不过了!本文主要分享一下我的阅读工具和阅读顺序。PS: 由于...
2020-10-07 10:00:00 1047 1
原创 Redis 分布式锁遇到的序列化问题
场景描述最近使用 Redis 遇到了一个类似分布式锁的场景,跟 Redis 实现分布式锁类比一下,就是释放锁失败,也就是缓存删不掉。又踩了一个 Redis 的坑……这是什么个情况、又是怎样...
2021-03-24 08:40:00 268
原创 Spring 如何创建 bean 对象?
前情回顾 前文「Spring 如何从 IoC 容器中获取对象?」从整体上分析了如何从 Spring IoC 容器获取一个 bean 对象。该逻辑由 AbstractBeanFactory#...
2021-03-08 08:40:00 372
原创 Spring 如何从 IoC 容器中获取对象?
前情回顾 前面几篇文章主要分析了 Spring IoC 容器如何初始化,以及解析和注册我们定义的 bean 信息。其中,「Spring 中的 IoC 容器」对 Spring 中的容器做了一...
2021-03-01 08:40:00 3581 10
原创 春节假期如流水
时间总是过得很快,假期更是如此。这不,一眨眼功夫就全都没了。以往都是朴实无华且枯燥的技术文,这次先水文一篇吧。主要是想证明我不是一个木得感情的机器人,我也是一个普普通通、真实の人。看了看万...
2021-02-23 08:40:00 1238 14
原创 Spring 是如何解析 <bean> 标签的?
前情回顾 上回「Spring IoC 容器初始化(2)」说到了 Spring 如何解析我们定义的 <bean> 标签,代码跟进了一层又一层,跋山涉水,最终来到了 BeanDef...
2021-02-18 08:40:00 180
原创 Redis遇到的那些坑
前言 Redis 作为当前最流行的 NoSQL 之一,想必很多人都用过。Redis 有五种常见的数据类型:string、list、hash、set、zset。讲真,我以前只用过 Redi...
2021-02-05 09:00:00 289
原创 Spring IoC 容器初始化(2)
前情回顾 前文「Spring IoC 容器初始化」 以 IoC 容器中的 ClassPathXmlApplicationContext 为例进行了深入分析。Spring 从我们的配置文件...
2021-02-01 08:30:00 94
原创 Spring IoC 容器初始化
概述 上篇文章「Spring 中的 IoC 容器」从整体介绍了 Spring IoC 容器的相关概念和大致实现流程,本文要进入源码来一探究竟了。这里仍以前文的代码为例进行分析,测试代码如...
2021-01-25 08:30:00 114
原创 Spring 中的 IoC 容器
概述 对于 Java 后端开发而言,Spring 框架的重要性不言而喻。而 Spring 中最核心的无非就是 IoC 和 AOP。相关的概念不再赘述,网上可以找到很多对它们的介绍。这里想...
2021-01-18 08:30:00 185 4
原创 最近的一些Java面试小结
前言前段时间陆续面试了一些大中小公司,踩了不少坑,挂了很多,同时也有不少感悟和收获。这里想把那段经历记录一下,如果能对亲们有所帮助就再好不过了。面试的过程其实也是一个自我认识和学习的过程...
2021-01-11 08:30:00 444
原创 一个产品需求的研发流程是怎样的?
1. 前言以前在不足百人的小公司待过,产品需求的研发并没有什么正规的流程,通常是产品提了需求之后,技术部门简单评审一下就开始写代码,本地和测试环境没问题就直接发布线上了。后来去了某二线互...
2020-12-28 08:30:00 2899
原创 ThreadLocal到底有没有内存泄漏?从源码角度来剖析一波
1. 前言 ThreadLocal 也是一个使用频率较高的类,在框架中也经常见到,比如 Spring。有关 ThreadLocal 源码分析的文章不少,其中有个问题常被提及:Thread...
2020-07-06 08:30:00 599 2
原创 JVM笔记-后端编译与优化
1. 概述 前面分析了 JVM 的前端编译器 Javac,本文分析后端编译器:即时编译器(JIT 编译器)和提前编译器(AOT 编译器)。其实二者都不是 JVM 必需的组成部分。但是,后...
2020-04-16 08:30:00 445
原创 JVM笔记-前端编译与优化
1. 概述 所谓”编译“,通俗来讲就是把我们写的代码“翻译“成机器可以读懂的机器码。而编译器就是做这个翻译工作的。Java 技术中的编译器可以分为如下三类:前端编译器:把 *.java...
2020-04-08 08:30:00 386
原创 JVM笔记-类加载机制
JVM 不和包括 Java 在内的任何语言绑定,它只与 "Class文件" 这种特定的二进制文件格式所关联。而 Class 文件也并非只...
2020-03-20 08:30:00 284 1
原创 JVM笔记-内存分配策略
1. 概述 1.1 简述Java 技术体系的自动内存管理,最根本的目标就是解决两个问题:「自动化」地给对象分配、回收内存空间。内存回收策略主要就是前面介绍的各种垃圾回收机制;而对象内存分...
2020-03-09 08:30:00 146
原创 JVM笔记-HotSpot的算法细节实现
1. 根节点枚举 1.1 暂停用户线程迄今为止,所有收集器在根节点枚举这一步骤都是必须暂停用户线程的。即便是号称停顿时间可控、或者(几乎)不会发生停顿的 CMS、G1、ZGC 等收集器,...
2020-02-24 08:30:00 401
原创 JVM笔记-垃圾收集算法与垃圾收集器
1. 一些概念 1.1 垃圾&垃圾收集垃圾:在 JVM 语境下,“垃圾”指的是死亡的对象所占据的堆空间。垃圾收集:所谓“垃圾收集”,就是将已分配出去、但不再使用的内存回收回来,以...
2020-01-22 08:00:00 825 4
原创 JVM笔记-运行时内存区域划分
1. 概述 Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分为若干个不同的数据区域。它们各有用途,有些随着虚拟机进程的启动一直存在(堆、方法区),有些则随着用户线程的启...
2020-01-14 08:00:00 278
原创 JVM笔记-Java技术体系与JVM概述
1. 简述 Java 不仅仅是一门编程语言,还是一个由一系列计算机软件和规范组成的技术体系。Java 的广告词为 "一次编写,到处运行",之所以能够做到"跨平台&...
2020-01-08 08:00:00 256
原创 JDK源码分析初步整理
1. 啰嗦一下不知不觉一年又到了尾声,从年初开始写 「JDK 源码分析」这个系列,而今已经过了大半年,文章也写了几十篇,虽说不多但也不算太少(好像还是有点少????),为便于查看,这里简...
2019-12-19 08:00:00 182
原创 Java反射机制与动态代理
1. 概述Java 反射机制与动态代理我们平时写代码可能用得比较少,但在各种常见的框架(Spring、MyBatis 等)中却屡见不鲜。有句话叫“无反射,不框架;无代理,不框架”。由于以...
2019-12-16 08:00:00 403
原创 JDK源码分析-CopyOnWriteArrayList
1. 概述CopyOnWriteArrayList,从名字可以看出它跟 ArrayList 有点关系,可以理解为线程安全的 ArrayList。它的类签名和继承结构如下:public c...
2019-12-05 08:00:00 168
原创 JDK源码分析-ReentrantReadWriteLock
概述前面分析过 ReentrantLock「JDK源码分析-ReentrantLock」,它是一种互斥的可重入锁,可用于处理并发场景下的线程安全问题。而很多时候会出现“读多写少”的情况,若用 ReentrantLock 会降低并发量,此时就比较适合 ReentrantReadWriteLock 出场了。ReentrantReadWriteLock 是读写锁,它维护了一对锁:一...
2019-11-19 08:00:00 1884 8
原创 JDK源码分析-ScheduledThreadPoolExecutor
概述ScheduledThreadPoolExecutor 也是一个线程池类,是线程池类ThreadPoolExecutor 的子类。除了ThreadPoolExec...
2019-10-28 08:00:00 177
原创 JDK源码分析-DelayQueue
概述DelayQueue 也是一种队列,它内部的元素有“延迟”,也就是当从队列中获取元素时,如果它的延迟时间未到,则无法取出。DelayQueue 的类签名和继承结构如下...
2019-10-16 08:00:00 190
原创 JDK源码分析-ScheduledExecutorService
概述接口的继承结构如下:下面分析这几个接口的定义。Executor从名字来看,Executor 可译为“执行器”,它的作用就是执行任务。该接口只有一个 execute 方...
2019-09-25 08:00:00 397
原创 MySQL笔记-索引
概述简单来说,索引的出现是为了提高查询效率,就像书的目录一样。MySQL 的索引是在「存储引擎」层实现的,因此没有统一的标准,同一种类型的索引,在不同存储引擎之间实现可能也不同。本文主要分析 InnoDB 存储引擎的索引结构。索引模型索引模型就是索引的实现形式(也可以理解为索引的数据结构),常见的索引模型有下面三种:1. 哈希表(散列表)键值对形式(类似...
2019-09-18 08:00:00 3100 1
原创 JDK源码分析-FutureTask
概述FutureTask 是一个可取消的、异步执行任务的类,它的继承结构如下:它实现了 RunnableFuture 接口,而该接口又继承了 Runnable 接口和 Future 接口,因此 FutureTask 也具有这两个接口所定义的特征。FutureTask 的主要功能:1. 异步执行任务,并且任务只执行一次;2. 监控任务是否完成、取消任务;3. 获取...
2019-09-12 08:00:00 332
原创 MySQL笔记-基本架构
说明本文以及接下来的几篇 MySQL 笔记是本人在「极客时间」的专栏『MySQL实战45讲』和掘金小册「MySQL 是怎样运行的:从根儿上理解 MySQL」的学习笔记整理...
2019-09-05 08:00:00 222
原创 JDK源码分析-ThreadPoolExecutor
概述ThreadPoolExecutor 是 JDK 中线程池的实现类,它的继承结构如下:本文主要分析ThreadPoolExecutor类的主要方法和实现原理(部分...
2019-08-28 08:00:00 178
原创 JDK源码分析-PriorityBlockingQueue
概述前文「JDK源码分析-PriorityQueue」分析了优先队列 PriorityQueue,它既不是阻塞队列,而且线程不安全。本文分析线程安全的阻塞优先队列 Pri...
2019-08-14 08:30:00 229
原创 JDK源码分析-PriorityQueue
概述PriorityQueue 意为优先队列,表示队列中的元素是有优先级的,也就是说元素之间是可比较的。因此,插入队列的元素要实现 Comparable 接口或者 Com...
2019-08-09 08:00:00 231
原创 JDK源码分析-LinkedBlockingQueue
概述前文「JDK源码分析-ArrayBlockingQueue」分析了 ArrayBlockingQueue 的代码实现,LinkedBlockingQueue 也是阻塞...
2019-08-02 08:00:00 423
原创 JDK源码分析-ArrayBlockingQueue
概述前文「JDK源码分析-BlockingQueue」简要分析了 BlockingQueue 接口的主要方法,ArrayBlockingQueue 就是该接口的一个主要实...
2019-07-24 08:00:00 377
原创 JDK源码分析-BlockingQueue
概述BlockingQueue 意为“阻塞队列”,它在 JDK 中是一个接口。所谓阻塞,简单来说就是当某些条件不满足时,让线程处于等待状态。例如经典的“生产者-消费者”模...
2019-07-17 08:00:00 194
原创 JDK源码分析-Semaphore
概述Semaphore 是并发包中的一个工具类,可理解为信号量。通常可以作为限流器使用,即限制访问某个资源的线程个数,比如用于限制连接池的连接数。打个通俗的比方,可以把 ...
2019-07-10 08:00:00 120
SourceTree
2016-01-08
Beginning iOS 7 Development: Exploring the iOS SDK 源码
2015-08-29
Visual Studio Code
2015-06-15
Eclipse Running Android Lint 问题
2015-06-03
Android Studio 不能新建项目,且已有项目不能运行
2015-06-03
TA创建的收藏夹 TA关注的收藏夹
TA关注的人