自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 CompletableFuture实际操作的源码追究

CompletableFuture实际操作的源码追究在此之前整体框架:Completion:封装了执行任务,以及该任务所依赖的其他任务的结果,在执行任务时进行不同的操作。CompletableFuture:对任务结果的一些操作的封装,以及构建和处理Completion任务依赖的关系。任务初始化:supplyAsync public static <U> CompletableFuture<U> supplyAsync(Supplier<U> suppl

2020-09-04 19:54:48 542

原创 Spring:事务处理的实现

事务处理的实现Spring在对事务进行统一处理其实底层还是使用到了aop,TransactionProxyFactoryBean将对事务的处理事件使用aop做增强和织入。对数据源的事务处理(提交、回滚)的实现是通过事务管理器TransactionManager来进行支持的。通过TransactionAspectSupport来赋予TransactionManager的事务处理可以通过aop进行操作。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cRDeUXmk-1599

2020-09-03 14:54:42 504 1

原创 Spring: AOP的实现

Spring: AOP的实现ProxyFactoryBeanProxyFactoryBean是一个能够构建proxy的工厂bean,是aop真正的实现部分。它需要advisor,target,和interface。其中Advisor是将advice和pointcut结合起来,也就是哪个通知在哪个关注点使用。这是一个工厂bean,会通过getobject方法创建代理的对象,也有保存一些有与代理相关的信息。getObject方法创建代理对象,将创建单例和多例代理对象分开进行创建。// ProxyFac

2020-08-30 10:13:43 223

原创 Spring:ioc容器的设计

ApplicationContext容器的设计编程式使用ioc容器创建ioc配置文件信息的抽象资源(通过io途径获得bean信息):Resource。创建一个BeanFactory,即用来存储bean的容器创建一个载入BeanDefinition的读取器:XmlBeanDefinitionReader。并通过回调配置给BeanFactory。使用读取器将Resource中的资源读取,解析成bean,并注册到BeanFactory中进行管理。ioc容器的初始化过程ioc容器的初始化是由ref

2020-08-28 17:46:48 198

原创 多机数据库的实现

复制(备份数据 负载均衡)redis通过设置 slaveof选项或运行 slaveof命令让一个服务器去复制另一个服务器。旧版复制功能同步(sync)当客户向从服务器发送slaveof命令,从服务器进行同步操作,即将从服务器的数据库状态更新至主服务器当前所处的数据库状态。从服务器对主服务器的同步通过sync命令:从服务器向主服务器发送sync命令。收到sync的主服务器执行bgsave命令,生成一个RDB数据快照文件。对快照之后进行的写操作保持一致性,使用一个缓冲区记录写命令。当主服务器的

2020-07-06 20:51:07 219

原创 单机数据库的实现

数据库服务器状态结构redis服务器将所有的数据库都保存在服务器状态 redis.h/redisServer结构的db数组中,db数组的每一个项都是一个redis.h/redisDb结构,代表一个数据库。struct redisServer { //... //一个数组,保存着服务器中的所有数据库. redisDb *db; //服务器的数据库数量,初始化服务器时,会根据该属性决定有多少数据库。 int dbnum; //...};客户端状态结构客户端可以通过执行

2020-07-06 20:47:49 1125

原创 Redis基本对象

对象redis的对象系统实现了基于引用计数技术的内存回收机制,当程序不再使用某个对象的时候,这个对象所占用的内存就会被自动释放。redis通过引用计数技术实现了对象共享机制,这一机制可以在适当的条件下,通过让多个数据库键共享同一个对象来节约内存。redis对象带有访问时间记录信息,可以计算数据库键的空转时长,在服务器启用了maxmemory功能情况下,空转时长大的键可能会被有限删除。redisObjecttypedef struct redisObject {//类型:指定对象的类型unsig

2020-07-06 20:44:25 129

原创 Redis数据结构

简单动态字符串(SDS)当redis需要的是一个可以被修改的字符串值时,redis就会使用SDS来表示字符串值。使用场景redis数据库中,包含字符串值的键值对在底层都是由SDS实现的。缓冲区:AOF模块中的AOF缓冲区,以及客户端状态中的输入缓冲区。SDS定义struct sdshdr {//记录buf 数组中已使用字节的数量//等于SDS所保存字符串的长度int len;//记录buf数组中未使用字节的数量int free;//字节数组,用于保存字符串char buf[];

2020-07-06 20:43:41 137

原创 查询性能优化(高性能MySQL读书笔记)

优化数据访问 确认应用程序是否在检索大量超过需要的数据。这通常意味着访问了太多的行,或访问了太多的列。 确认MySQL服务器层是否分析大量找过需要的数据行。 向数据库请求不需要的数据 查询不需要的记录 多表关联时返回全部列 总是取出全部列 重复查询相同的数据 MySQL扫描额外的记录衡量查询开销的指标: 响应时间 服务时间和排队时间之和。 服务时间:数据库处理这个查询真正花了多长时间。 排队时间:服务器因为等待某些资源而没有真

2020-06-26 09:53:53 227

原创 创建高性能索引(高性能MySQL读书笔记)

索引基础索引是在存储引擎层,而不是在服务层。索引的类型B-Tree索引使用B树数据结构来存储数据(实际上很多存储引擎使用的是B+树,即每一个叶子结点都包含指向下一个叶子节点的指针,从而方便叶子结点的范围索引)。MyISAM InnoDB 使用前缀压缩技术使得索引更小 按照源数据格式进行存储 通过数据的物理位置引用被索引的行 根据主键引用被索引的行 B树通常意味着所有的值都是按顺序存储的,并且每一个叶子页到根的距离相同。索引生效的情况:原则

2020-06-26 09:52:15 146

原创 MySQL数据类型(高性能MySQL读书笔记)

选择优化的数据类型字段的选择 选择简单的数据类型,但确保没有低估需要存储的值的范围。 减少占用的磁盘、内存和CPU缓存,并且在处理的时候需要的CPU周期也更少。 尽量避免null。 null的列使得索引、索引统计和值比较都更为复杂。可为null的列会占用更多的存储空间,在MySQL中也需要特殊处理。例如:MyISAM当可为null的列被索引时,每个索引记录需要一个额外的字节(InnoDB存储null使用单独的位)。整数类型数字有两种类型:整数和实数。整数类型:可以使用

2020-06-25 11:11:49 105

原创 FutureTask源码分析

目录FutureTask的类变量和实例变量源码run方法: 执行任务setException方法: 设置异常结果set方法: 设置正常结果finishCompletion方法get方法: 获取任务的结果awaitDone方法: 阻塞调用get的线程removeWaiter方法FutureTask的类变量和实例变量/** * The run state of this task, initially NEW. The run state * transitions to a terminal st

2020-06-11 23:02:38 115

原创 ConcurrentHashMap源码分析

目录介绍源码分析字段的含义sizeCtlnextTableForwardingNode构造方法tabkeSizeFor方法tabAt方法initTable方法spread方法resizeStamp方法putVal方法addCount方法transfer方法介绍相对线程安全:相对线程安全就是我们通常意义上所讲的线程安全,它需要保证对这个对象单次的操作是线程安全的,我们在调用的时候不需要进行额外的保障措施,但是对于一些特定顺序的连续调用,就可能需要在调用端使用额外的同步手段来保证调用的正确性。数据结构:数

2020-06-07 22:06:30 137

原创 LongAdder和AtomicLong源码分析

概述介绍AtomicLongLongAdder使用do-while循环进行CAS操作直到数据操作成功将变更的大小存储在base中,如果存在竞争,每个线程的变更都存储在所属线程的cell中。CAS样例代码 public final native boolean compareAndSetLong(Object o, long offset, long expected,

2020-06-05 15:42:44 193

原创 LinkedHashMap源码阅读(略带HashMap源码)

目录LinkedHashMap源码阅读预先描述创建LinkedHashMap<1>、super(initialCapacity, loadFactor):初始化<2>、tableSizeFor(initialCapacity):确定threshold2.1>、Integer.numberOfLeadingZeros(cap - 1)过程的例子`initialCapacity=10`一些小tips存入k-v:put(k-v)调用过程put方法hash(Object key)方法p

2020-05-26 01:25:34 325 1

原创 BIO(二)、ServerSocket的accept()方法

BIO(二)、ServerSocket的accept()方法accept()方法的源码public Socket accept() throws IOException { if (isClosed()) throw new SocketException("Socket is closed"); if (!isBound()) throw new SocketException("Socket is not bound y

2020-05-24 15:09:56 1828

原创 BIO(一)、ServerSocket的bind()方法

BIO(一)、ServerSocket的bind()方法BIO是同步阻塞的IO方式。同步/异步是操作系统级别:操作系统在收到程序的IO请求之后,如果IO资源没有准备好的话,如何响应给程序?同步异步操作系统在IO资源准备好之前不响应给程序先返还给程序一个标志,这个标志用于当IO资源准备好后通过事件机制发送的内容应该到什么地方阻塞/非阻塞是程序级别:程序在向操作系统进行IO请求时,如果IO资源未准备好,程序应该如何处理?阻塞非阻塞程序什么都不做,一直等待I

2020-05-24 13:16:07 3345

原创 Channel(二):可被多路复用的的能力

NIO的Channel可被多路复用的能力Selector根据Channel的状态来分配任务,所以Channel使用register(Selector,int,Object)方法将自己和相应的状态注册到Selector中。register方法会返回一个SelectionKey来代表这Channel在Selector上的状态。事实上最终是将SelectionKey注册到Selector上。1、注册使用Channel的register(Selector,int,Object),并返回注册成功的Selectio

2020-05-11 20:43:56 1418

原创 Channel(一):可中断的能力

NIO的Channel可中断的能力解读AbstractInterruptibleChannel类:可中断Channel的基本实现类public abstract class AbstractInterruptibleChannel implements Channel, InterruptibleChannel{1、AbstractInterruptibleChannel实现了Channel和InterruptibleChannel接口1)、public interface Channe

2020-05-11 17:09:44 435

原创 浅析JWT

浅析JWTJSON Web令牌的结构标头有效载荷默认提供的字段签名JSON Web令牌如何工作JSON Web令牌的问题和趋势JSON Web令牌的结构JSON Web令牌以紧凑的形式由三部分组成:表头.有效载荷.签名标头标头是一个描述JWT元数据的JSON对象,通常由两部分组成:令牌的类型和使用的签名算法。使用Base64 URL算法将上述JSON对象转换成为字符串形成令牌的第一部分。...

2020-05-01 21:06:17 207

原创 JDK动态代理和cglib动态代理

一、JDK动态代理实现方式JDK动态代理通过反射的方式实现代理。只能对实现接口的类进行代理。1、创建接口public interface B { void foo(String name);}2、创建被代理类(需要实现该接口)public class BImpl implements B { @Override public void fo...

2020-03-28 14:24:17 127

原创 Spring与SpringBoot开启事务方式

Spring与SpringBoot开启事务方式## Springaop切面类:具有事务通知或增强功能的类(对切入点进行增强和通知)。1、基于xml的aop实现事务控制(用于自定义通知) <!-- 配置bean --> <bean id="HelloWorld" class="com.target.TargetImpl"></bean>...

2020-03-27 15:14:28 481

原创 ApplicationContext与BeanFactory

ApplicationContext与BeanFactoryApplicationContext三个实现类: AnnotationConfigApplicationContext:读取注解创建的容器 FileSystemXmlApplicationContext:加载磁盘任意位置下的配置文件 ClassPathXmlApplicationContext:...

2020-03-27 15:13:20 65

原创 Mybatis缓存

mybatis缓存一级缓存(默认开启)1、介绍一级缓存是SqlSession级别的缓存。在操作数据库时需要构造 sqlSession对象,在对象中有一个(内存区域)数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。2、缓存作用时机2.1、使用缓存的时机同一个session执行两次完全相同的sql语句,第...

2020-03-27 15:05:44 84

空空如也

空空如也

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

TA关注的人

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