自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 资源 (10)
  • 收藏
  • 关注

原创 Spring @Pointcut切点详解

pointcut就是切点,通知需要在哪些方法处进行增强,在AspectJ中用@Pointcut注解表达式标注。

2023-05-11 22:26:37 975

原创 Spring Advice是如何转换为MethodInterceptor

我们探讨了AOP中几个重要的概率,Advice作为通知抽象的标记接口,有多种实现类,在最终织入到Joinpoint中后都会转换为MethodInterceptor形成拦截器链,以便于统一调用invoke方法,那么这个过程是如何做到的呢?我们接下来就详细分析其过程。

2023-05-09 15:30:34 867 1

原创 Springboot Logger日志适配

spring不是框架的生产商,但spring是框架的搬运工,对于应用的日志系统,spring采用自适应方式自动适配classpath下添加的日志框架jar包。springboot在启动中通过SPI的方式加载日志框架,在启动的各个事件环节中初始化日志框架相关配置属性。在监听器中根据spring上下文启动事件,实现日志系统加载及初始化。

2023-05-08 10:06:48 524

原创 Logback源码分析

logback源码分析

2023-05-08 10:05:34 1074

原创 Slf4j源码分析

Slf4j(simple logging facade for java)是java的日志门面框架,是一套日志接口,其不关心底层实现。它提供我们一个一致的API来使用不同的日志框架,比如: jul,logback,log4j,log4j2等。slf4j使用户可以在运行时嵌入他们想使用的日志框架。从名字中可以看出,它其实使用的是facade设计模式来实现的。

2023-05-08 10:01:32 467

原创 Log4j源码分析

Log4j作为java领域最早的日志工具,其出现填补了行业空白,也为JUL的出现提供了参考,JUL的设计大多参考了Log4j的思路。Logger作为日志记录器,其定义了日志级别,绑定了多个Appender,所有的Logger都交给LoggerRepository管理,在内存中所有的Logger构建成以RootLogger为根节点的单根树形结构,通过RootLogger能方便的找到所有的Logger。

2023-05-07 23:35:04 809

原创 JUL源码分析

JUL日志框架源码分析

2023-05-07 23:33:11 1264

原创 java 日志框架源码分析

java日志框架由于发展历史,形成了多个日志框架实现。日志门面架构及部分源码分析。

2023-05-07 23:22:47 107

原创 SqlSession的初始化过程

Mybatis SqlSession的构建过程

2023-05-07 11:41:10 637

原创 FutureTask中的outcome字段是如何保证可见性的?

最近在阅读我们看到state字段是volatile修改的,但是outcome字段并没有volatile修饰。咋一看,好像看不出什么名堂,这里能清楚得出结论的是state字段在get()方法中是可见的。但是,outcome字段并没有volatile修饰,不能直接得出outcome字段在get()方法中也是可见的这样的结论。

2023-03-10 00:13:35 276

原创 RocketMq消息存储-MappedFileQueue

上一篇我们分析介绍了RocketMq利用对一个文件的操作,这里我们继续分析RocketMq如何管理文件集。

2023-01-15 16:38:27 478

原创 RocketMq文件存储-MappedFile

rocketMq MappedFile源码分析

2023-01-14 21:59:46 668

原创 IO出入口AbstractEndPoint源码分析

AbstractEndpoint这个类的目的就是作为处理Socket套接字IO的基础,从命名上来看其要意是处理TCP连接的两端的数据,这也是两台机器之间通信的端点。AbstractEndpoint针对不同的IO模型有不同的实现:AbstractEndpoint源码public abstract class AbstractEndpoint<S> { // ----------------------------------------------------------

2021-12-25 19:39:46 565

原创 事务与AOP的结合

与spring aop的结合有两种方式使用@Aspect注解拦截匹配的类 实现Advisor接口并加入到ioc容器中spring推荐用户使用AspectJ的方式,而其内部更多的是采用第二种方式,即实现Advisor,spring事务也是通过这种方式实现。实现spring事务中有一个重要的类BeanFactoryTransactionAttributeSourceAdvisor,其就是打通编程式事务和AOP的桥梁,从而实现了申明式事务。通过已有的基础认知,BeanFactoryTransact

2021-11-13 15:08:00 878

原创 事务API实现demo

业务开发中我们常常使用申明是事务,那么申明式事务到底是如何运作的呢,这就像一个黑盒,我们可以参考编程式事务的方式来了解其具体实现。只有一个事务操作public static DataSource getDs() { DruidDataSource ds = new DruidDataSource(); ds.setUsername("root"); ds.setPassword("root"); ds.setUrl("jdbc:mysql://192...

2021-11-13 15:04:11 657

原创 事务管理的两大工具类

TransactionSynchronizationManager和DataSourceUtils是事务管理中处理线程上下文信息及连接的重要工具。TransactionSynchronizationManagerTransactionSynchronizationManager内部主要使用ThreadLocal变量,将当前事务的信息绑定到线程,便于执行的过程中获取资源,以及处理事件回调。public abstract class TransactionSynchronizationManage

2021-11-13 15:02:38 668

原创 事务管理器的具体实现DataSourceTransactionManager

前文我们讨论了抽象的TransactionManager实现AbstractPlatformTransactionManager,其定义诸多模板方法,主要目的是处理事务的传播行为,在合适的时机挂起当前事务,本事务完成后重放挂起的事务,参见AbstractPlatformTransactionManager解析,而DataSourceTransactionManager作为抽象类的具体实现,就是实现了对与DB数据源如何创建事务,提交事务等等,也就是对抽象类中抽象方法的实现。doGetTra...

2021-11-13 14:59:38 2029

原创 AbstractPlatformTransactionManager抽象事务管理器分析

上文简单看了spring为了管理事务而定义的几个重要接口规范,见spring事务接口规范,而这些规范具体的执行,就是今天要分析的一个非常重要的执行类AbstractPlatformTransactionManager,其定义了事务的具体执行逻辑,把TransactionDefinition和TransactionStatus关联了起来。该类主要的行为:提供方法根据事务定义TransactionDefinition创建事务,并返回事务执行状态对象TransactionStatus 提供对事务传播行为

2021-11-13 14:49:00 1337

原创 spring事务接口规范

spring事务管理现阶段主要通过三个重要接口规范,TransactionDefinition事务定义,主要定义事务的名称,传播属性,事务隔离级别,是否只读,超时时间等;TransactionStatus事务执行中的状态,主要封装保存事务执行过程中的数据及状态;TransactionManager事务管理器,管理事务的执行(开启事务,提交或回滚事务)。TransactionDefiniton事务定义TransactionDefiniton规范是通过jdk8以上采用默认方法实现。主要定...

2021-11-13 14:38:54 1712 1

原创 Spring AOP名词解释Advice,Pointcut,Advisor,Joinpoint,Advised是什么?

Adviceadvice解释为通知,需要执行的增强逻辑方法。advice规范接口如图,分为了before,after等等,为什么没有around呢,因为是通过interceptor实现的。这里可以看出,AfterAdvice最终会被转换包装成MethodBeforeAdviceInterceptor实现类进行适配桥接,同理BeforeAdvice也会被包装成MethodBeforeAdviceInterceptor最终调用MethodIntercepter#invoke()方法进行适配。

2021-10-22 23:14:47 3139 2

原创 自定义任意类型排序工具

#include<stdio.h>typedef struct Stu { char name[20]; int age;} stu;void sort(void *base, int size, int width, int(*compare)(void *, void *));int comp_int(const int *a, const int *b);int comp_double(const double *a, const double *b);.

2021-10-01 11:59:08 82

原创 mysql8.0主从复制搭建

上节我们说了mysql8.0.26在centos8上的安装,这节我们说说高可用方案里主从复制的搭建。1.首先在主库和从库上安装好相同版本的mysql 安装见上文。2.配置主库 官方文档:MySQL :: MySQL 5.7 Reference Manual :: 16.1 Configuring Replication 主要配置,编辑my.cnf文件vim /etc/my.cnf#在mysqld下增加配置server_i...

2021-09-25 22:08:57 259

原创 centos8安装mysql8.0

一、mysql安装包下载:下载安装文档:MySQL :: MySQL 8.0 Reference Manual :: 2.2 Installing MySQL on Unix/Linux Using Generic Binaries下载页面:MySQL :: Download MySQL Community Serverwget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.26-linux-glibc2.12-x...

2021-09-20 10:53:25 137

原创 reids滑动窗口限流(踩坑记)

滑动窗口算法 滑动窗口算法作为限流算法之一,运用非常广泛,最经典的运用当属于TCP协议的滑动窗口算法,加上拥塞控制,从而保证了高效的可靠传输,让世界得以互联(虽然我身处墙域网),让我等有口饭吃。 说回正题,这里要讨论的仅仅是滑动窗口算法,生产上有这样的场景,业务上需要调用第三方,例如,我们需要批量发送短信,那么就需要将手机号批量发送到三方系统,但是由于三方系统在并发吞吐量上存在性能瓶颈,所以需要我们控制避免单位时间内送号过猛,压垮三方服务,所以在单位时间内(一分钟)我们需...

2021-08-24 22:37:46 1143

原创 开发环境关闭@EnableScheduling

上一章我们分析了Spring定时任务Schedule的源码,这里我们在做一个控制定时任务的案例。 业务开发中经常使用spring的schedule作为应用定时任务,但是由于@EnableScheduling注解的滥用,导致项目中到处都可能加了该注解,若是在本项目中那么可以通过全局搜索进行排除,只留一个来作为项目内是否开启定时任务的开关,但是若项目中依赖的maven模块中,因为非源码里面添加的@EnableScheduling注解我们就没办法排除,为了在开发环...

2021-07-23 22:02:12 1804 2

原创 Spring-Schedule定时任务调度源码分析

定时任务是我们平常业务开发中常用的工具,凌晨统计数据,清理历史日志等等。spring非常友好的给我们提供了定时任务调度基础设施。我们平常经常这样配置定时任务:@EnableScheduling // 开启定时任务@Componentpublic class Sch01 { private final Logger logger = LoggerFactory.getLogger(getClass()); @Scheduled(cron = "* * * * * ...

2021-07-21 22:51:13 478

原创 mysql分组排序

在平常开发中我们经常可能会遇到这样的问题,如在一个年级中,我们需要根据根据班级成绩排名,选出每个班前三名同学,那么这个地方就涉及到分组排序,那么对于mysql来说如何实现分组排序呢。我们以学生表student为例,找出每个班成绩排名前三的同学姓名及成绩。学生表:在mysql低版本中不支持类似于sqlserver中row_number() over(partition by ...)等语句,那么只能采用变量的形式曲线救国。select * from ( select x.cla.

2021-07-17 00:45:49 12483

原创 设计模式(行为型)- 访问者模式

假设我们从网站上爬取了很多资源文件,它们的格式有三种:PDF、PPT、Word。我们现在要开发一个工具来处理这批资源文件。这个工具的其中一个功能是,把这些资源文件中的文本内容抽取出来放到 txt 文件中。实现这个功能并不难,不同的人有不同的写法,其中一种代码实现,ResourceFile 是一个抽象类,包含一个抽象函数 extract2txt()。PdfFile、PPTFile、WordFile 都继承 ResourceFile 类,并且重写了 extract2txt() 函数。...

2021-07-14 23:01:12 84

原创 设计模式(行为型)- 命令模式

命令模式是一个高内聚的模式,其定义为:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请 求排队或者记录请求日志,可以提供命令的撤销和恢复功能。UML:示例:多功能遥控器public interface Command { void exec(); void undo();}public class NullCommand implements Command { @Override public void exec() {.

2021-07-14 20:49:44 49

原创 设计模式(结构型) - 代理模式

在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象。例如,购买火车票不一定要去火车站买,可以通过 12306 网站或者去火车票代售点买。又如找女朋友、找保姆、找工作等都可以通过找中介完成。在软件设计中,使用代理模式的例子也很多,例如,要访问的远程对象比较大(如视频或大图像等),其下载要花很多时间。还有因为安全原因需要屏蔽客户端直接访问真实对象,如某单位的内部数据库等。代理模式分为静态代理,动态代理静态代...

2021-07-12 23:10:43 167

原创 设计模式(结构型)- 门面模式

我们都知道类与类之间的耦合越低,那么可复用性就越好,如果两个类不必彼此通信,那么就不要让这两个类发生直接的相互关系,如果需要调用里面的方法,可以通过第三者来转发调用。外观模式非常好的诠释了这段话。外观模式提供了一个统一的接口,用来访问子系统中的一群接口。它让一个应用程序中子系统间的相互依赖关系减少到了最少,它给子系统提供了一个简单、单一的屏障,客户通过这个屏障来与子系统进行通信。通过使用外观模式,使得客户对子系统的引用变得简单了,实现了客户与子系统之间的松耦合。但是它违背了“开闭原则”,因为...

2021-07-12 20:01:58 124

原创 设计模式(结构型)- 组合模式

组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。意图:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。主要解决:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元

2021-07-11 22:57:44 71

原创 设计模式(结构型)- 装饰器模式

动态地给一个对象添加一些额外的职责,就增加功能来说,装饰者模式比生成子类更为灵活。——《设计模式:可复用面向对象软件的基础》UML图:下面我们以人为基础说明装饰器模式,人可以有房子(有房的人),车子(有车的人),票子(有钱的人)....public interface Man { String manDesc();...

2021-07-11 11:54:53 56

原创 设计模式(结构型)- 桥接模式

桥接模式,又叫桥梁模式,顾名思义,就是有座“桥”,那这座桥是什么呢?就是一条聚合线(下方UML图),比如我们下面会举的例子,手机有手机品牌和手机游戏等等,每个手机品牌都有多款游戏,那是不是二者之间就是聚合关系了,这是合成/聚合复用原则的体现,当我们发现类有多层继承时就可以考虑使用桥接模式,用聚合代替继承。 桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都可以独立地变化。UML结构图如下:示例:画图,这里有一个画笔,可以画正方形、长方形、圆形。同时可以给图形上色,...

2021-07-11 10:13:43 147

原创 设计模式(结构型)- 适配器模式

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,公司现有一个开放接口api功能,但是新的公司接入时需要增加或则减少某些数据那么就需要进行新的开发,我们为了复用之前的代码,那么我们就需要一个中间类来将已有的实现做一些转换,这个类就是适配器类。分类类适配器 对象适配器 接口适配器类适配器...

2021-07-10 20:55:25 60

原创 设计模式(2)- 工厂模式

工厂模式作为建造类型模式的一种,工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。该模式用于封装和管理对象的创建,是一种创建型模式。本文从一个具体的例子逐步深入分析,来体会三种工厂模式的应用场景和利弊。1. 简单工厂模式简单工厂由名称就知道最为简单,其只对具体的产品做一层很薄的封装,根据指定的类型来创建对象,idea画出的UML类型:手机接口规范:package com.pat...

2021-07-09 23:52:50 102

原创 可重入分布式锁-redis实现

public class RedisReentrantLock { private static final String script = "if (ARGV[1] = redis.call('get', KEYS[1])) " + "then " + "redis.call('del', KEYS[1]) " + "return 1; " + ...

2021-07-03 17:51:23 241

原创 设计模式(1) - 单例模式

单例模式在平常业务及框架开发中使用非常广泛,例如jdk中的Runtime,JVM类,Mybatis中SessionFactory,一些开放文档如阿里云OSS上传客户端等等这些相对配置属性较多,不轻易改变的类常常采用单例模式设计。 单例模式有多种写法1.恶汉式//恶汉式public class VillainMode { private static final VillainMode instance = new VillainMode(); ...

2021-07-03 12:06:10 58

原创 设计模式(0) - 七大设计原则

一天进步一点点二十四天学完设计模式设计模式的目的原则,其实就是在编程时,应当遵守的原则,也是各种设计模式的基础(即:设计模式为什么这样设计的依据) ,设计模式是为了程序具有更好的代码的重用性 可读性 可扩展性(可维护性) 可靠性(增加新功能后对...

2021-06-30 22:24:24 108

原创 spring-依赖查找

书接上回,IOC示例,在原有基础上详细罗列分析spring依赖查找的类型及范围,spring大致可以分为以下多种查找类型:单一类型的依赖查找 集合类型的依赖查找 层次性依赖查找 延迟依赖查找 安全依赖查找 内建可查找的依赖一:单一类型查找(BeanFactory)根据名称:getBean(String) getBean(String,Object...) 2.5-根据Bean类型: 事实查找get...

2021-06-23 22:11:16 503

jvm原理分析课程笔记

jvm原理

2023-04-24

spring-lessons-master.zip

spring-lessons-master.zip

2021-06-12

CLion-2021.1.2.win.zip

cccc

2021-06-05

Application.zip

Application.zip

2021-06-03

Snipaste-2.5.5-Beta-x64.zip

截图工具

2021-04-01

cxuan-os-修改.pdf

操作系统

2021-03-31

computer-basic_1.pdf

计算机基础

2021-03-31

MySQL性能优化总结.pdf

MySQL性能优化总结.pdf

2021-03-26

MySQL索引深入剖析.pdf

MySQL索引深入剖析.pdf

2021-03-26

MySQL事务与锁详解.pdf

msql

2021-03-26

【课堂笔记】MySQL架构与SQL执行流程.pdf

【课堂笔记】MySQL架构与SQL执行流程.pdf

2021-03-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除