自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(385)
  • 问答 (2)
  • 收藏
  • 关注

原创 本人博客水平揭示

挺菜的,因为还是个小白,目前的博客都是基于书籍或者他人的经验,主要目的还是为了不断的改写,更新版本,能够有不断复习和理解的东西,好像用 github 也可以,但是感觉也没有太大的要求,只是觉得先把知识的基础框架打好,在以后的实践中能够返回头来进行更改,发现好像都在说国内的博客抄袭严重,所以想要把这些话写在最前面,想要成为一个优秀的可以说程序员吧,不希望有这种虚荣心,希望能够养成虚心好学的精神,承认...

2019-12-19 09:51:56 235 1

原创 抽象类的意义 个人见解

对抽象类和接口的认识,因为有一些个人的见解,不保证正确。

2022-09-12 11:28:19 248

原创 并发的发展哲学意义

我们知道,事物的发展是前进、上升的运动。事物的发展过程必然产生新事物与旧事物之间的矛盾。对于并发而言,并发问题就是并发相对于单线程的矛盾。在并发之前:多级存储系统(缓存机制)解决了处理器与内存速度之间的矛盾具有天然缓存一致性问题。超标量处理器通过乱序执行实现并行处理指令并发时代到来,并发(并行)的特点:实现同一时间段内处理多任务。(产生进程(线程)切换场景)线程之间出现了制约的概率场景。(处理同一任务)新事物与旧事物就此产生矛盾矛盾一 原子性问题场景: 并发处.

2022-09-09 13:47:28 342

转载 final

https://pdai.tech/md/java/thread/java-thread-x-key-final.html修饰类final类不可继承final类方法默认为final方法修饰参数static final 必须在定义的时候进行赋值一个既是static又是final 的字段只占据一段不能改变的存储空间,它必须在定义的时候进行赋值,否则编译器将不予通过。............

2022-09-09 09:50:18 425

原创 volatile

保证可见性变量修改对其他线程立即可见可见性的实现原理

2022-09-09 09:33:42 280

原创 B树和B+树 为什么B+树更适合mysql

B树和B+树 为什么B+树更适合mysql

2022-08-24 12:29:01 837 2

转载 HashMap 源码分析

转载:https://blog.csdn.net/justloveyou_/article/details/62893086讲的很好。一、HashMap 概述Map 是 Key-Value 对映射的抽象接口,该映射不包括重复的键,即一个键对应一个值。HashMap 是 Java Collection Framework 的重要成员,也是Map族(如下图所示)中我们最为常用的一种。简单地说........................

2022-08-12 10:32:26 134

转载 Netty wakeup 唤醒的哲学

场景: NioEventLoop绑定的Selector开始工作执行select方法Selector#select 所在线程为NioEventLoop的工作线程执行select时会将NioEventLoop 的wakenUp原子更新为false进入select的逻辑首先从一个问题开始——Nio的空轮询问题这是由于底层的IO问题导致明明没有请求要处理反而唤醒了selectorNio 的空轮询问题Nio 的空轮转问题JDK空轮询Bug出现原因及解决方法为了解决NIO的空轮询问题,Netty

2022-08-10 12:19:03 122

转载 DefaultSelectStrategy NIOEventLoop执行策略

参考链接:selectStrategy处理逻辑如果 hasTasks 为 true,表示当前 NioEventLoop 线程存在异步任务的情况下,则调用 selectSupplier.get(),否则直接返回 -1。

2022-08-10 11:43:51 128

原创 Netty 线程工作机制—— NioEventLoop

这里会调用当前NioEventLoop工作,执行 eventLoop.execute,通过它的方法继承可以看到其实是使用SingleThreadEventLoop#execute方法NioEventLoop的父类体系很庞大,很多事情都有专门的父类去执行,比如这里的execute通过SingleThreadEventLoop去实现。......

2022-08-10 10:52:25 427

原创 Netty inEventLoop方法的思想延伸

首先来看最常用的场景:NioEventLoop的父类SingleThreadEventExecutor处理刚刚接受的任务时这里的boolean型 inEventLoop 可能有两种情况为false:NioEventLoop第一次使用,因为它在实例化的过程中是没有初始化 thread这个属性的,所以thread为null,无论和哪个线程比较都不会相等。(因为NioEventLoop它此时还没有创建工作线程)以下第一次接受任务(向Selector注册Channel的任务),boolean型 ....

2022-08-09 18:37:33 222

转载 数据模型-数据结构-链表

链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表的长度。作为一种常用数据结构,链表内置在很多高级的编程语言里面,因为Redis使用的C语言并没有内置这种数据结构,所以Redis构建了自己的链表实现。链表在Redis中的应用非常广泛,比如列表键的底层实现之一就是链表。当一个列表键包含了数量比较多的元素,又或者列表中包含的元素都是比较长的字符串时,Redis就会使用链表作为列表键的底层实现。......

2022-08-08 17:14:10 153

转载 redis 事件

mask: 可选值为 AE_READABLE 可读事件, AE_WRITABLE 可写事件, AE_BARRIER 字面意为 屏障事件, 其中可读可写事件比较好理解, AE_BARRIER 事件会影响事件的读写处理顺序为先写后读, 比如beforesleep回调中进行了fsync动作,然后需要把结果快速回复给client。这个情况下就需要用到AE_BARRIER事件,用来翻转处理事件顺序了。......

2022-08-08 17:01:36 122

原创 Spring及Spring boot 第四章-第二节 Spring声明式事务管理 拦截过程

通过AOP创建代理,设置回调,在执行目标方法时进行拦截,遍历回调接口,其中DynamicAdvisedInterceptor作为AOP实现的主要回调接口,跳转到它的intercept方法,开始AOP的advisor处理CglibAopProxy.DynamicAdvisedInterceptor#intercept熟悉这个AOP步骤就会知道其实就是遍历MethodIntecpter然后进行invoke而处理声明式事务专属的Advisor——BeanFactoryTransactionAttri

2022-07-28 10:06:52 275

原创 CGLIb 创建代理

创建代理(通过增强器和回调接口)

2022-07-28 10:06:30 276

原创 Spring及Spring boot 第四章-第二节 Spring声明式事务管理 解析@Transactional

这步属于粗筛,一方面我们都知道@Transactional注解是可以加到方法或者类上的,粗筛会通过把这个类上的所有注解都遍历一下看有没有Transactional.Class类型的注解,只做这一件事,返回个true或者false,不属于真正对@Transactional的处理。@Transactional和@Aspect获取Advisor的不同之处在于它的Advisor一开始便是以Bean的形式存在,不需要通过解析@Aspect注解来将方法转化为Advisor。...

2022-07-28 10:05:10 237

原创 Spring及Spring boot 第四章-第二节 Spring声明式事务管理 @Transactional

@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Inherited@Documentedpublic @interface Transactional { @AliasFor("transactionManager") String value() default ""; @AliasFor("value") String transactionMa

2022-07-28 10:04:20 183

原创 Spring 声明式事务 事务功能实现

TransactionDefinition封装了事务实现需要的隔离级别、传播行为、超时时间、只读

2022-07-28 10:03:45 2172

原创 Spring及Spring boot 第四章-第二节 Spring声明式事务管理 @Transaction AOP实现

Springboot AOP的意义在于对某个过程的监管,我们熟知的日志技术以及这里的事务管理。这也是声明式事务管理 aop实现过程的意义。doService();加入aopoperation_beforeService();doService();operation_afterService();熟悉事务你就会明白事务的特性在于保证一系列操作的整体有效性,而不是某条语句,这和aop思想不谋而合,aop思想就可以通过将一系列操作织入到具体的流程当中来保证整体的有效性。二者的意义具有共同

2022-07-28 10:03:20 200

原创 Spring及Spring boot 第二章 AOP

AOP是对OOP的补充实现。OOP的执行单元是类,而AOP的执行单元是切面。

2022-07-28 10:02:03 84

原创 Spring AOP的实现方式

aa

2022-07-28 10:01:45 103

原创 Spring及Spring boot 第二章 AOP 源码 AopProxy系列

CglibAopProxygetProxy获得Proxypublic Object getProxy(@Nullable ClassLoader classLoader) { if (logger.isTraceEnabled()) { logger.trace("Creating CGLIB proxy: " + this.advised.getTargetSource()); } try { Cl..

2022-07-28 10:00:27 169

原创 WebApplicationType#deduceFromClasspath

其实就是从类路径中找这几个类,找到了就说明是SERVLET,没找到时其他处理,一般导入web场景是找到的。 static WebApplicationType deduceFromClasspath() { if (ClassUtils.isPresent("org.springframework.web.reactive.DispatcherHandler", (ClassLoader)null) && !ClassUtils.isPresent("org.sp.

2022-07-28 09:50:01 355

原创 Netty selector的运行

终于Selector要开始工作了。NioEventLoop#select private void select(boolean oldWakenUp) throws IOException { //拿到selector Selector selector = this.selector; try { int selectCnt = 0; long currentTimeNanos = System.nan..

2022-07-27 12:08:57 320

转载 redis 网络IO

redis IO 源码

2022-07-26 16:56:07 166

原创 NIO示例

服务端package com.mang.NIO.nsync;import java.io.IOException;import java.io.PrintStream;import java.net.InetAddress;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.CharBuffer;import java.nio.channels.SelectionKey;import.

2022-07-26 16:52:29 111

原创 NIO this.selector.select()

重点:最后执行SelectorImpl.doSelect,在windows平台由WindowsSelectorImpl实现一个个来分析

2022-07-26 16:51:10 329

原创 NIO总结文——一篇读懂NIO整个流程

服务器的工作selector的准备工作1.1 这里以windows平台为例会初始化一个WindowsSelectorImplServerSocketChannel的准备工作2.1向selector注册该ServerSocketChannel3.1 会执行 Selector.register方法,首先在WindowsSelectorImpl的父类SelectorImpl创建一个SelectionsKeyImpl对象,参与到之后的整个注册过程3.2 继续执行WindowsSelecto

2022-07-26 16:48:30 625 2

转载 理解 linux epoll的实现原理

理解 linux epoll的实现原理

2022-07-26 16:40:56 547 1

转载 Linux I/O 多路复用 epoll

SYSCALL_DEFINE1(epoll_create1, int, flags){ return do_epoll_create(flags);}SYSCALL_DEFINE1(epoll_create, int, size){ if (size <= 0) return -EINVAL; return do_epoll_create(0);}static int do_epoll_create(int flags){ int error, fd; struct

2022-07-26 16:37:50 371

原创 java 代理模式——静态代理与动态代理

a代理模式扩展静态代理由程序员创建或由特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。直白来说,代理类是一个独立的类,通过依赖目标类从而完成代理的实现。动态代理静态代理因为其特性所以存在弊端:因为代理需求增加了类的数量,增加了依赖的复杂度,业务的实现会因此变得复杂。静态代理是否可以被替换,当然可以,依赖Java的反射机制实现动态代理,实例不仅可以通过直接实现也能动态生成。JDK代理JDK代理的实现分为两个部分:将增强服务的逻辑封装到Invoc

2022-05-15 14:42:29 376 1

转载 类加载总结文——源码

java源码java.lang.ClassLoaderjava.lang.ClassLoadersun.misc.LauncherAppClassLoaderloadClass(String var1, boolean var2) 加载类进一步理解类加载器工作原理:双亲委派模型示例随便写个类类加载开始 java.lang.ClassLoader#loadClass(java.lang.String)Application ClassLoader 实现loadClass方法

2022-05-15 14:33:23 318

原创 Spring及Spring boot java程序访问数据库 JDBC DriverManager

java的包下getConnection(String url, String user, String password) /** * Attempts to establish a connection to the given database URL. * The <code>DriverManager</code> attempts to select an appropriate driver from * the set of.

2022-05-15 14:31:59 512

原创 Spring及Spring boot java程序访问数据库 JDBC Driver接口及Driver实现类

java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现。在程序中不需要直接去访问实现了 Driver 接口的类,而是由驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实现。com.mysql.cj.jdbc.Driver到底有什么用?在我们编写JDBC以及之后的ORM框架中我们都会定义这四个Property,那么 com.mysql.cj.jdbc.Driver的背后含义

2022-05-15 14:31:42 1374

转载 Spring及Spring boot java程序访问数据库 JDBC

JDBC——规范客户端程序如何来访问数据库的应用程序接口What is JDBC?Java™ database connectivity (JDBC) is the JavaSoft specification of a standard application programming interface (API) that allows Java programs to access database management systems. The JDBC API consists of a s

2022-05-15 14:31:31 846

原创 AOP 拦截器作用过程

我们之前了解到通过创建代理对象集合了目标对象的方法和我们要实现的切面(Cglib通过继承目标对象的方式),所以当执行代理对象重写了目标对线的方法时,会先进入拦截。

2022-05-15 14:28:16 235

原创 AOP自动配置

获取AOP自动配置类解析Aop自动配置类,该导入的Bean导入可以看到AopAutoConfiguration具有两个内部@Component类AspectJAutoProxyingConfiguration和ClassProxyingConfiguration,并且AspectJAutoProxyingConfiguration配置类中又有两个内部@Component类JdkDynamicAutoProxyConfigurationCglibAutoProxyConfiguration

2022-05-15 14:27:56 231

原创 AOP的拦截链

之前我们看到代理对象的目标方法长这个样子,这时就出现一个问题,如果是这种实现,那么像@After和@AfterThrowing这样的Advice是如何判断定位到执行目标方法结束的时机?还是拿之前的示例来看首先是目标方法具有Advisor,然后进入MethodInvocation处理ReflectiveMethodInvocation处理然后进入ReflectiveMethodInvocation的处理,这里有一个currentInterceptorIndex的判断。很重要的一步,之后会回头说明.

2022-05-15 14:27:41 164

原创 AOP创建代理——基于Cglib示例

入口 AbstractAutoProxyCreator#wrapIfNecessary——如果有Advisor说明需要代理跳转到AbstractAutoProxyCreator#createProxy整个过程就是创建了一个ProxyFactory,然后填充相关信息,最终调用ProxyFactory#getProxy源码位置Spring AOP实现入口 AbstractAutoProxyCreatorProxyFactory创建AopProxy......

2022-05-15 14:27:08 177

原创 SpringAop获取Advisor

图示

2022-05-15 14:26:47 52

空空如也

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

TA关注的人

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