MyBatis源码学习笔记(一)——核心组件 MyBatis一. demo环境使用Maven搭建的项目,MyBatis版本为3.4.6,使用从 XML 中构建 SqlSessionFactory的方式来使用MyBatis,具体可以参考https://github.com/BrightLoong/mylab/tree/master/mybatis-learn,单元测试代码如下:pack...
记一次MySQL死锁排查 MySQL一. 环境1. 表结构涉及到以下两张表:BIND_RECORDCREATE TABLE `BIND_RECORD` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `bind_uid` bigint(20) NOT NULL COMMENT '被绑uid', `bind_...
Spring中的循环依赖 circle阅读原文请访问我的博客BrightLoong's Blog什么是循环依赖循环依赖就是循环引用,在spring中,就是两个或者多个bean相互之间持有对方。如下图,ClassA引用ClassB,ClassB引用ClassC,ClassC又引用ClassA,最终它们形成了一个环,这就是循环依赖。circleSprin...
设计模式——迭代器模式 Iterator.jpg阅读原文请访问我的博客BrightLoong's Blog一. 概述迭代器模式(Iterator),提供一种方法书序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。迭代器模式为遍历不同的聚集结构提供如开始、下一个、是否结束、当前拿一项等统一的接口。迭代器模式是最为常用的设计模式之一,在Java中已经把这...
设计模式——外观模式 facde阅读原文请访问我的博客BrightLoong's Blog一. 概述外观模式(Facade),为系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式通过向现有的系统添加一个接口,来隐藏系统的复杂性,用一个一致的界面来面向客户端。外观模式是结构型设计模式。其实外观模式...
设计模式——桥接模式 [图片bridge.jpg阅读原文请访问我的博客BrightLoong's Blog一. 概述桥接模式(Bridge ),将抽象部分与它的实现部分分离,使它们都可以独立变化;桥接是用于把抽象化与实现化解耦,使得二者可以独立变化。如何理解“将抽象部分与它的实现部分分离”这句话呢,抽象部分和实现部分不是我们通常认为的父类和子类,接口和实现类...
设计模式——原型模式 Prototype.jpg阅读原文请访问我的博客BrightLoong's Blog一. 概述原型模式(Prototype) ,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。相信大家都都听过Java中的克隆(clone()),所谓的原...
ThreadPoolExecutor源码解析 ThreadPoolExecutor阅读原文请访问我的博客BrightLoong's Blog一. 线程池概述在介绍线程池之前,先说一下为什么在开发中要使用线程池,个人认为主要有一下的原因:开发中使用线程的时候,大部分线程执行的时间很短,频繁的创建、启动、销毁线程带来不必要的资源消耗。线程的创建、挂起、唤醒等操作都需要依靠CPU调度...
Java同步器——AQS学习 AQS阅读原文请访问我的博客BrightLoong's Blog一. 概述AQS(AbstractQueuedSynchronizer),队列同步器,Java中很多同步类都是基于AQS实现的,比如:ReentrantLock、Semaphore、CountDownLatch等。AQS提供了一个实现阻塞锁和相关同步组件的框架,这个框架实现...
自旋锁&CLH锁&MCS锁学习记录 lock阅读原文请访问我的博客BrightLoong's Blog本篇文章主要记录自旋锁、CLH锁、MCS锁的学习所得。关于自旋锁和CLH锁、MCS锁,网上已经有很多内容,而且很类似;学习就是学习前人经验,理解、总结,化为己用,因此,虽然网上有很多相关的内容,我也是参考了这些内容,我依然选择记录下了自己的理解,方便自己查阅。一. 自旋锁...
设计模式——享元模式 FlyWeight阅读原文请访问我的博客BrightLoong's Blog一.概述享元模式(Flyweight Pattern) ,运用共享技术有效的支持大量的细粒度对象。换句话说,使用享元模式对相同或者类似的对象进行复用,以此来减少少相同或者类似的对象的创建数量,从而减少内存占用,提高性能。享元模式属于结构型模式。在具体了解前...
Java中CAS学习记录 CAS阅读原文请访问我的博客BrightLoong's BlogCAS在网上已经有数不清的文章,这里只是自己在学习过程中的一个记录,方便以后查阅。一. 概述Java中CAS全称Compare and Swap,也就是比较交换。在Java同步工具中,经常可以看到CAS的身影。在Doug Lea大神提供的J.U.C并发包中,可以说CAS是实...
设计模式——适配器模式 adapter阅读原文请访问我的博客BrightLoong's Blog一. 概述适配器模式(Adapter) ,将一个类的接口转换为客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那个类可以一起工作。关于适配器,现实生活中也有很多例子,比如电源适配器,中国家庭供电为220V,而手机一般需求是在5V,这里220V就...
ThreadLocal源码分析 threadLocal阅读原文请访问我的博客BrightLoong's Blog一. 简介提醒篇幅较大需耐心。简介来自ThreadLocal类注释ThreadLocal类提供了线程局部 (thread-local) 变量。这些变量与普通变量不同,每个线程都可以通过其 get 或 set方法来访问自己的独立初始化的变量副本。Thread...
设计模式——观察者者模式 builder阅读原文请访问我的博客BrightLoong's Blog一. 概述观察者模式(Observer) ,定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。观察者模式,不论实现方式如何,需要具备最基本的Subject(被观察的主题)、...
关于Java中的WeakReference WeakReference阅读原文请访问我的博客BrightLoong's Blog一. 简介在看ThreadLocal源码的时候,其中嵌套类ThreadLocalMap中的Entry继承了WeakReferenc,为了能搞清楚ThreadLocal,只能先了解下了WeakReferenc(是的,很多时候为了搞清楚一个东西,不得不往上追好...
设计模式——建造者模式 builder阅读原文请访问我的博客BrightLoong's Blog一. 概述建造者模式(Builder),又叫生成器模式,它将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,使用建造者模式,用户就只需指定需要建造的类型就可以得到它们,二具体建造的过...
设计模式——职责链模式 chain阅读原文请访问我的博客BrightLoong's Blog一. 概述一. 概述职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止(个人认为并不一定非要满足这种情况,也可以是每...
设计模式——策略模式 strategy阅读原文请访问我的博客BrightLoong's Blog一. 概述考虑如下情景,超市搞打折活动,对于消费额度不同提供不同的折扣,比如:满200打9折,满400打8折之类的;或者旅行出游的情景,可以考虑骑自行车,坐汽车、火车、飞机等等。如何实现上面描述的情景,当然最直接想到的是使用if...else进行判断,执行不同的操...
设计模式——工厂模式 factory阅读原文请访问我的博客BrightLoong's Blog一.概述工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一,其通过提供对象创建工厂,将创建对象的具体过程屏蔽起来,使调用的客户端不用关心具体的对象创建过程,提高了灵活性。工厂模式属于创建型模式。工厂模式根据抽象层的不用,可以分为以下...