Redis开发与运维之内存优化

2022-09-22
阅读 5 分钟
1.4k
type:表示当前对象使用的数据类型,主要就是 string、hash、list、set、zset 五种。4 表示占 4 个 bit 位。📢:使用 type [key] 命令可以查看对象的所属类型,返回的是值对象的类型,键都为 string 类型。
封面图

Redis设计与实现之简单动态字符串

2022-08-16
阅读 3 分钟
1k
Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组),而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型,并将 SDS 用作 Redis 的默认字符串表示。
封面图

Spring源码之容器的功能扩展和refresh方法解析

2022-06-17
阅读 36 分钟
1.1k
在之前文章中我们了解了关于Spring中bean的加载流程,并一直使用BeanFactory接口以及它的默认实现类XmlBeanFactory,在Spring中还提供了另一个接口ApplicationContext,用于扩展BeanFactory中现有的功能。
封面图

Spring源码之Bean的加载(五) populateBean 和 DisposableBean

2022-06-08
阅读 22 分钟
1.2k
前一篇文章主要讲解了创建 bean 中的 createBeanInstance 方法和实例化过程。本文继续讲解关于 bean 的加载过程中属性注入和注册 DisposableBean。
封面图

Spring源码之Bean的加载(四)

2022-06-07
阅读 25 分钟
1.4k
之前文章我们说过在经历了 resolveBeforeInstantiation 方法后,程序会有两个选择,如果创建了代理或者重写了 InstantiationAwareBeanPostProcessor 中的 postProcessBeforeInstantiation 方法并在方法 postProcessBeforeInstantiation 中改变了 bean,则会直接返回,否则会进行常规 bean 的创建。
封面图

Spring源码之Bean的加载(三)

2022-06-03
阅读 6 分钟
1.2k
之前文章主要讲解了从bean的实例中获取对象,准备过程以及实例化的前置处理。实例化bean是一个非常复杂的过程,本文主要讲解Spring是如何解决循环依赖。
封面图

Spring源码之Bean的加载(二)

2022-06-02
阅读 14 分钟
942
之前文章主要对 getBean 方法进行简单的介绍,和 FactoryBean 的作用,以及是如何从缓存中获取 bean。本文继续讲解 bean 的加载流程。
封面图

Spring源码之Bean的加载(一)

2022-05-30
阅读 14 分钟
958
bean 的加载之前文章主要分析了对 XML 配置文件的解析,接下来就是对 bean 的加载进行分析,同样开始用最开始的代码为入口。入口代码 getBean {代码...} 从这里我们快速先大致了解一下是如何实现的。从 BeanFactory 接口中我们选择对应实现类为 AbstractBeanFactory。 {代码...} {代码...} {代码...} 可以看到该方法代码...
封面图

Spring源码之默认标签解析及BeanDefinition注册

2022-04-07
阅读 36 分钟
1.4k
开篇上一篇讲解了 Spring 中的标签包含自定义标签和默认标签,这两种方式存在较大不同,所以本文主要讲解默认标签的解析过程。默认标签的解析是在 parseDefaultElement 方法中。该方法分别对不同标签做不同处理。 {代码...} Bean 标签的解析及注册这四种中,我们主要关注对 bean 标签的解析。bean 标签的解析是最复杂且...
封面图

Spring源码之容器的基本实现

2022-03-21
阅读 17 分钟
1.5k
开篇本文主要基于SpringFramework5.2.0.RELEASE版本,源码的下载步骤在别的文章中已经讲过,这里就不再赘述。容器的基本用法我们先创建一个简单的示例来看一下容器的基本用法。创建一个简单的 Java Bean。 {代码...} 创建一个简单 Spring 配置文件。 {代码...} ok,编写一个测试类进行测试。 {代码...} 运行之后可以看到...
封面图

Java JUC ThreadPoolExecutor解析

2022-02-09
阅读 14 分钟
1.3k
线程池主要解决两个问题:一是当执行大量异步任务时线程池能够提供较好的性能。在不使用线程池时,每当需要执行任务时就需要 new 一个线程来执行,频繁的创建与销毁非常消耗性能。而线程池中的线程是可以复用的,不需要在每次需要执行任务时候都重新创建和销毁。二是线程池提供了资源限制和管理的手段,比如可以限制线程...
封面图

Java JUC PriorityBlockingQueue解析

2022-02-07
阅读 8 分钟
1.5k
PriorityBlockingQueue 是一个带有优先级的无界阻塞队列,每次出队返回的都是优先级最高或者最低的元素。在内部是使用平衡二叉树堆实现,所以遍历元素不保证有序。
封面图

Java JUC LinkedBlockingQueue解析

2022-01-26
阅读 8 分钟
1.4k
上篇介绍了使用CAS算法实现的非阻塞队列ConcurrentLinkedQueue,本篇介绍的是使用独占锁实现的阻塞队列LinkedBlockingQueue。
封面图

Java JUC ConcurrentLinkedQueue解析

2022-01-25
阅读 10 分钟
1.6k
ConcurrentLinkedQueue 是线程安全的无界非阻塞队列,底层使用单向链表实现,对于入队和出队操作使用 CAS 实现线程安全。
封面图

Java JUC ReentrantReadWriteLock解析

2022-01-24
阅读 13 分钟
1.6k
ReentrantReadWriteLock 和 ReentrantLock 的区别是,ReentrantLock 是独占锁,同一时间只能有一个线程获取锁,但在实际中更多的是读多写少的情况,显然 ReentrantLock 满足不了该情况,而 ReentrantReadWriteLock 采用了读写分离的策略,可以允许多个线程同时进行读取。
封面图

Java JUC ReentrantLock解析

2022-01-21
阅读 8 分钟
1.3k
它具有与synchronized相同的基本行为和语义,但 ReentrantLock 更灵活、更强大,增加了轮询、超时、中断等高级功能,并且还支持公平锁和非公平锁。
封面图

Java JUC CopyOnWriteArrayList 解析

2022-01-11
阅读 6 分钟
1.8k
在 Java 并发包中的并发 List 只有 CopyOnWriteArrayList,CopyOnWriteArrayList 是一个线程安全的 ArrayList,对其进行的修改操作都是在底层的一个复制的数组(快照)上进行的,也就是使用了写时复制策略。
封面图

Java JUC ThreadLocalRandom类解析

2022-01-03
阅读 8 分钟
1.5k
首先我们先了解一下 Random 类。在 JDK7 以前到现在,java.util.Random 类都是使用较为广泛的随机数生成工具类,而且 java.lang.Math 的随机数生成也是使用的 java.util.Random 类的实例,下面先看看如何使用 Random 类。
封面图