Night Field's Blog

Make it work, make it right, make it fast.

MyBatis内置DataSource连接池实现原理

前言 MyBatis是一个流行的ORM框架,它简单易用,支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。 作为一款优秀的持久层框架,连接池是必不可少的。本文将分析MyBatis内置的数据源是如何实现连接池功能的(源码基于MyBatis3.4.5)。 JDBC对数据库的操作 回忆一下,我们用原生的JDBC来操作数据库的一般...

Redis的键过期策略以及内存淘汰策略

Redis Redis是高性能的基于内存的NoSQL数据库。因为内存是比较宝贵的资源,无法无限制使用,所以Redis提供了: 键过期策略来防止内存饱和。 内存淘汰策略来使得内存饱和之后继续对外提供服务。 内存过期策略 expire命令 Redis提供了expire命令来给一个键(key)设置过期时间: 1 2 3 4 5 6 redis> SET foo "bar" "...

Hotspot早期的垃圾收集器简介

前言 很多人的博文里面会提到JVM三种垃圾收集器:串行,并行和并发。这么分类也不能说错,但事实上也没有这么简单。本文简要介绍Hotspot早期的垃圾收集器(Garbage Collector)。 名词解释 年轻代和老年代:JVM中不同的对象,生命周期是不同的。比如线程中的临时变量,在方法结束之后便会被销毁;而静态变量,则会一直存在直到其所对应的类被销毁为止。基于这样的事实,才有了...

记一次由Netty的ChannelPool导致内存泄漏的排查经历

背景 接到了线上机器的报警,登上服务器,发现是Java进程挂了,看日志报了OOM: 1 java.lang.OutOfMemoryError: Java heap space 问题描述 内存溢出,那当然是看dump文件了。这里推荐大家在产线机器上都加上JVM参数-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath={path}/{to}/{...

自定义Classloader导致ClassCastException

背景 1 java.lang.ClassCastException: cn.com.nightfield.Plugin cannot be cast to cn.com.nightfield.Plugin 相同的class,竟然不能cast?这是什么鬼? 问题描述 自定义类加载器(Classloader)是很常见的,它可以让我们从自定义的文件系统目录,网络甚至是数据库的各种文件类型(...

Linux, NIO和Netty中的零拷贝(Zero-Copy)

背景 零拷贝(Zero Copy)是一个耳熟能详的术语,众多高性能的网络框架如Netty,Kafka,Rocket MQ都将零拷贝标榜为其特性。那么究竟什么是零拷贝? 零拷贝 Wikipedia上对零拷贝的解释如下: “Zero-copy” describes computer operations in which the CPU does not perform the ta...

Quartz Task在Tomcat中重复运行

问题描述 Spring Quartz是很常用的定时任务框架。把一个Quartz的工程部署到Tomcat中启动,意外地发现,每个Task都在同一时间跑了两次,而本地在开发的过程中却没有问题。 问题排查 为了防止多线程问题,有部分Task上是加了锁的,类似如下方式: 1 2 3 4 5 6 7 8 9 10 11 12 13 @Component public class ExampleT...

设计模式总结

经过了两个多月的时间,终于,将常见的设计模式结合例子过了一遍,在此做一个简单的小结。 设计模式小结 不难发现,应用各种设计模式所带来的好处,都会提到解耦二字。开闭原则要求我们的系统对扩展开放,对修改关闭。高内聚,低耦合的系统,有更高的稳定性与灵活性,也更易于维护。如何来解耦模块之间的关系呢?如果只用一句话来概括的话,那就是:将变与不变分离。细看下来,设计模式通常通过增加一个中间抽象层的方...

行为模式之责任链模式

1 概述 责任链模式(Chain of Responsibility Pattern)是常见的行为模式,它将处理器封装成一条处理链,让请求可以在链上传递。链上的处理器自行决定是否对请求进行处理。 2 责任链模式 一个典型的责任链模式的使用场景是,当一个事件或请求需要被多个处理器处理时。应用责任链模式,将所有的处理器串在一起,然后把请求从链的头部开始传送。各个处理器可以对请求进行判断,选...

行为模式之备忘录模式

1 概述 备忘录模式(Memento Pattern),又叫Token模式,它提供了一种方式,来捕捉对象某一时刻的内部状态,并将其保存成备忘录(Memento),如此一来,对象可以根据此备忘录恢复到之前的状态。 2 备忘录模式 几乎所有的编辑器都支持撤销功能,这其实就是备忘录模式的例子,撤销操作,使得文本得以恢复到之前的状态。面向对象设计中,备忘录模式的实现一般需要三个角色: 发...