自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring源码解析(七)-Bean属性间的循环依赖

循环依赖分为多种,这里希望大家学习循环依赖的核心,理解其中的三级缓存,学习里面的设计思想,帮助大家解决实际工作中遇到的困难

2022-04-10 15:54:26 1135 21

原创 Spring源码解析(六)-Bean的实例化流程(下)

这一下节主要是延续上一节关于Spring中Bean实例化过程的讲解,本小节与上一小节是Spring中的重点,不管是面试还是工作中,我们都会经常用到里面的知识。

2022-03-27 15:22:55 941 12

原创 Spring源码解析(五)-Bean的实例化流程(上)

Bean的实例化流程主要分为了:1.实例化一个空的对象,此时这个Bean内的属性并不完整;2.给Bean中的属性赋值;3.调用Bean中的初始化相关方法及其一些特定步骤,包括生成代理类等。具体的咱们通过代码解析就可以看明白了,学习源码是痛苦的牡但是学会了后就是很爽的,希望大家能体会到最后那种收获的感觉。

2022-03-20 23:05:14 726 1

原创 常见的排序算法-冒泡排序、选择排序、插入排序

排序算法-选择排序冒泡排序插入排序

2022-03-08 23:34:07 168

原创 Spring源码解析(四)-事件处理器的初始化逻辑ApplicationEventMulticaster

spring源码讲解的第四小节,主要讲解关于spring中事件处理器的初始化逻辑

2022-03-05 16:02:21 527

原创 Spring源码解析(三)-BeanPostProcessor的实例化过程

主要是关于BeanDefinitionRegistryPostProcessor接口的实例化和调用,还有BeanPostProcess的实例化

2022-02-25 22:04:26 475

原创 Spring源码解析(二)-自定义标签的解析

自定义标签的解析源码流程讲解,以<component-scan>为例子

2022-02-20 23:24:09 508

原创 Spring源码解析(一)-初始BeanDefinition

Spring源码解析一个新的源码讲解课题,这个课题会教大家如何读源码,源码中用到了什么样的设计模式,读源码需要注意什么,Spring源码是我们每个Java工程师的必读源码内容,详细大家学习完这个课题会有不一样的收获,也感谢大家的支持!

2022-02-13 12:21:22 358 1

原创 网络编程与Netty(四) Netty源码-(Ⅸ)

关于netty的源码分析,暂时就告一段落了,接下来会开始spring系列的源码讲解,希望大家能从我的文章学到知识,谢谢大家的阅读!

2022-02-09 22:45:48 427

原创 网络编程与Netty(四) Netty源码-(Ⅷ)

在上一小节的讲解中,我们对doBind方法中的initAndRegister()方法进行了底层源码的分析,而在这小节中主要是对doBind方法中另一个比较重要的方法调用做讲解—doBind0()方法,这个方法做了实际的绑定工作:private static void doBind0( final ChannelFuture regFuture, final Channel channel, final SocketAddress localAddress,

2022-02-04 14:14:47 964

原创 网络编程与Netty(四) Netty源码-(Ⅶ)

netty的启动流程源码讲解!!!

2022-01-16 15:14:47 204

原创 网络编程与Netty(四) Netty源码-(Ⅵ)

netty中重要组件EventLoop部分源码详细讲解过程

2022-01-03 22:23:39 430

原创 Redis笔记(五)- 手写Redis

Redis的通信协议-RESPRedis的客户端使用的是RESP协议与Redis的服务器进行通信交互,这个协议不仅仅在Redis中使用,我们也可以用于其他的C-S软件项目,RESP主要的特点如下:①实现简单②解析快速③人类可读接下来,我们围绕着RESP协议写几段代码来讲解它,这样应该能更深刻的理解RESP协议。一、RESP协议传输的数据内容(结构)是怎样的?RESP 底层采用的是 TCP 的连接方式,我们只需要使用Jedis作为客户端,自己模拟一个Socke作为服务端来接收Jedis发送过来的内容,

2021-12-28 16:24:42 570

原创 Redis笔记(四)

前面一小节讲到了在抢票场景中使用Redis的分布式锁,接下来这个场景会相对的复杂一些,模拟博客网站,提供发布和点赞功能,用到了String,Hash,Set,Zset四种数据结构。具体要求如下:提供发布、点赞、查看文章列表的功能文章列表按照发布时间或者分值进行排序每个用户点赞即可增加文章10点分值(分值的增加方式也可以是其它的,如评论、浏览量等)文章只允许在发布后的三天内被点赞,超过三天就不能再点赞了文章发布,默认自己给当前文章点赞上面大概就是这次笔者写的案例需求,接下来看看代码,会有比较详

2021-12-28 16:24:07 228

原创 网络编程与Netty(四) Netty源码-(Ⅴ)

Netty之Unsafe系列源码

2021-12-13 21:59:52 510

原创 Redis笔记(三)

Redis的分布式锁-模拟抢票系统

2021-12-12 23:37:31 764

原创 Redis笔记(二)

Redis慢查询、事务、发布订阅

2021-12-12 14:42:22 948

原创 Redis笔记(一)

在CentOS7环境下安装Redis

2021-12-08 23:17:32 523

原创 网络编程与Netty(四) Netty源码-(Ⅳ)

这是Netty源码的第四篇文章,喜欢的读者可以点个赞支持下,谢谢!欢迎文章末尾留言支持不足和提问!

2021-12-01 22:26:04 336 2

原创 网络编程与Netty(四) Netty源码-(Ⅲ)

Channel 系列源码分析​ 我们用到了两种Channel----NioServerSocketChannel和NioSocketChannel,先来看这两个类的关系图:NioServerSocketChannelNioSocketChannel​ 看到这两个类的关系图可以发现,其实他们都有共同的父类(或实现的接口)Channel、AbstractChannel、AbstractNioChannel,而不同的是NioServerSocketChannel继承的是AbstractNioMessa

2021-11-21 23:44:06 820

原创 网络编程与Netty(四) Netty源码-(Ⅱ)

ChannelHandlerContext​ ChannelHandlerContext 代表了一个 ChannelHandler 和 ChannelPipeline 之间的关系,Netty会把 ChannelHandler 包装进 ChannelHandlerContext 的实例 DefaultChannelHandlerContext, 然后把 ChannelHandlerContext 作为元素来组成链表。所以 ChannelHandler 中一定有获得ChannelHandler 和 Chann

2021-11-18 23:35:22 552

原创 网络编程与Netty(四) Netty源码-(Ⅰ)

前面主要是介绍了在Netty中每个组件的使用和作用,在运行的时候,Netty中组件一起基于Netty的网络通信做出了贡献,而且也有说到一些并未给出证据的结论,例如,在每个EventLoop中是否真的是有一个线程和一个队列?在ChannelPipeline中是否真的默认会有一个head和一个tail共两个ChannelHandler?那么接下来我们来一一解析Netty中的组件,包括ChannelPipeline、ChannelHandlerContext、ChannelHandler、EventLoop、Ch

2021-11-09 22:05:38 580

原创 网络编程与Netty(三) 初识Netty-(Ⅳ)

ByteBuf​ ByteBuf API的优点:它可以被用户自定义的缓冲区类型扩展通过内置的复合缓冲区类型实现了透明的零拷贝容量可以按需增长(类似于JDK的StringBuilder)在读和写两种模式之间切换不需要调用ByteBuffer的flip()方法读和写使用了不同的索引支持方法的链式调用支持引用计数支持池化​ ByteBuf维护了两个不同的索引,名称以read或者write开头的ByteBuf方法,将会推进其对应的索引,而名称以set或者get开头的操作则不会。​

2021-11-06 14:39:20 148

原创 网络编程与Netty(三) 初识Netty-(Ⅲ)

ChannelPipeline 和 ChannelHandlerContextChannelPipeline 接口​ 当Channel被创建时,它将会自动的分配一个新的ChannelPipeline,并且是不可替换的。Channel不能附加到另一个ChannelPipeline。这个分配工作是由netty完成的,不需要开发人员操作。​ 当数据在ChannelHandler中被处理,然后传递下到下一个ChannelHandler,实际上就是在Pipeline中传递,而传递的顺序由它们被添加的顺序所决定的

2021-10-31 15:04:12 179

原创 网络编程与Netty(三) 初识Netty-(Ⅱ)

进一步了解Netty重要组件上一节中学习了Netty中比较常用且重要的组件,并且通过编写了"Hello netty"的小案例来使用这些组件。现在我们在上一节课的基础上,来更深层次的去了解Netty中重要的组件。Channel我们都知道在java的原生网络编程中,我们通过使用Socket进行网络通信,但是使用起来还是有些复杂的,而Channel提供的API,可以用于所有的IO操作,大大降低了直接使用Socket类的复杂性。每个Channel在创建的时候都会被注册到一个EventLoop中,那就意味着他有

2021-10-23 12:47:21 289

原创 网络编程与Netty(三) 初识Netty-(Ⅰ)

Netty简介

2021-10-18 22:50:17 120

原创 走进网络编程与Netty(二)

网络编程与Netty(二) java原生网络编程常见知识点​ socket:是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。将复杂的TCP/IP协议族隐藏在socket接口后面,而我们只需要让socket去组织数据,达到符合指定的协议要求。​ 短连接:传统的HTTP是无状态的,浏览器和服务器没进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。也就是说短连接是指socket连接后发送数据然后接收完数据后马上断开连接。​ 长连接:长链接就是在建立socket连接后不管是否在

2021-10-12 23:38:26 112

原创 走进网络编程与Netty(一)-下

网络编程与Netty(一) 计算机网络基础部分-下TCP概述​ TCP是面向连接的通信协议,通过三次握手建立连接才能开始数据的读写,通讯完成时要断开连接,由于TCP是面向连接的,所以只能用于端对端的通讯。​ TCP提供的是一种可靠的数据流服务,数据有可能被拆分后发送,那么采用超时重传机制和应答确认机制是组成TCP可靠传输的关键设计。​ 在超时重传机制里面有个很重要的指标—重传超时的时间限定。网络环境并不是人为可以控制的,有时网络十分顺畅,有时有十分的卡顿,那么这个时间限定如果设置为一个固定值,是不科

2021-10-11 23:27:06 136 2

原创 走进网络编程与Netty(一)-上

网络编程与Netty(一) 计算机网络基础部分计算机网络体系OSI七层模型​ 开放系统互连参考模型 (Open System Interconnect 简称 OSI)是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型,为开放式互连信息系 统提供了一种功能结构的框架。其目的是为异种计算机互连提供一个共同的基础和标准框架,并为保持相关标准的一致性和兼容性提供共同的参考。这里所说的开放系统,实质上指的是遵循 OSI 参考模型和相关协议能够实现互连的具有各种应用目的

2021-10-10 23:57:57 605

原创 一起认识Spring

Spring的AOPspring中最重要的两个东西就是IOC(DI)和AOP,今天我们主要讲解有关AOP相关的知识,在了解AOP前,希望读者先了解动态代理的相关知识。AOP我主要讲解通过注解的方式进行AOP的:1.开启@Aspect注解,我们要让这个注解被扫描到,我们可以添加@EnableAspectJAutoProxy这个注解@Configuration@EnableAspectJAutoProxy(proxyTargetClass = true,exposeProxy = true)publ

2020-08-20 14:32:41 477

原创 一起走进多线程(六)

3.ThreadLocal​ 前面提到了synchronized关键字,ThreadLocal与synchronized关键字都是用来处理并发访问的,但是synchronized是利用了锁机制,同一时间只有一个线程能访问方法或代码块。而ThreadLocal为每个线程提供了变量的副本,每个线程访问自己的并非同一个变量。用到ThreadLocal的地方有很多,例如读写锁中的每个线程重入读锁的次数就是存在线程自身的ThreadLocal中。ThreadLocal的使用主要是下面四个方法:public T

2020-08-14 10:55:58 125

原创 一起认识Mybatis-缓存

缓存模块相信大家都了解并且使用过mybatis的一级缓存和二级缓存,我们先来看看mybatis缓存模块的做了哪些事,然后再去分析它是如何实现的。1.Mybatis缓存模块的实现是基于HashMap的,通过map来读写数据是缓存的核心功能。2.我们在开启缓存的时候,可以配置一些额外的功能,如:添加缓存清空策略(LRU,FIFO等)、序列化功能、日志功能、缓存定时清空功能等。3.上面提到的附加功能可以根据需求自由组合搭配使用,十分灵活。Mybatis在缓存模块主要做了以上三件事,而第三点提到的附加功能

2020-08-14 10:51:16 134

原创 一起认识Mybatis-数据源

Mybatis(二) —数据源DataSource使用过数据库连接的读者对数据源都不会陌生,我们是通过数据源去拿到数据库连接的,本文主要从两个方面去介绍Mybatis中数据源这个模块:1.数据源的创建。2.数据库连接池技术。数据源的创建数据源对象是比较复杂的对象,其创建过程相对比较复杂,对于 MyBatis 创建一个数据源,主要有一下三个难点:1.我们常见的数据源组件(C3P0,druid,DBCP等)都实现了javax.sql.DataSource 接口。2.Mybatis要能集成第三方的数

2020-08-13 00:46:12 808

原创 一起认识Mybatis-日志

Mybatis(一)这是我在这个专题下的第一篇blog,这个专题主要讲解对Mybatis的源码和实际运用相关知识,相信有一部分人都使用过JDBC来连接数据库,大致的过程可以是注册驱动、获取连接、编写一个sql、然后执行sql并获取返回值。如果每次都需要按上述的步骤来编写代码访问数据库,是十分麻烦的。所以我们就使用Mybatis这个半自动的ORM框架,他有三大要素:SQL、映射规则和POJO。首先我们对Mybatis的日志模块进行分析:1、Mybatis并没有提供日志的实现类,需要接入第三方的日志组件,

2020-08-11 10:10:41 458

原创 一起走进多线程(五)

多线程(五)关于多线程基础部分就主要在前面四节讲解了,如果还有小伙伴有疑问或者笔者梳理的有问题的话,欢迎在下方评论区指正,大家一起学习共同进步。结束了基础知识,我们进入到并发工具和锁的学习。...

2020-08-08 09:47:03 127

原创 一起走进多线程(四)

多线程(四)前面说到了线程的创建和终止相关的内容,下面主要讲讲线程的其他相关方法:yield( )方法:“谦让”,即让出cpu的执行权,线程重新进入到就绪状态,与其他线程争抢CPU的执行权,并可能再去获得CPU资源。所以说并不能百分百保证yield( )达到谦让效果。调用该方法不会释放锁资源。sleep()方法:“睡眠”,这个方法有一个参数表示睡眠的毫秒数,线程在睡眠期间会让出时间片,但不会释放所资源。yield( )和sleep( )两者对比:假设有一群人在公司中午需要使用微波炉热饭,那大家就定

2020-08-01 11:44:55 238

原创 一起走进多线程(三)

多线程(三)上一篇讲了多线程的创建,那么今天主要讲讲线程的终止。线程的终止:说完了线程的开始咱们接下来说说线程的结束​ 推荐使用的方法是调用interrupt( )方法来进行中断操作。大致的意思就是在线程A中调用线程B的interrupt( )方法,看作是A跟B说"你要中断啦!",然后B会在合适的时间进行中断,但他也完全可以不中断继续工作。因为java中的线程是协作式的,不是抢占式的,线程通过检查自身的中断标志位来判断是否中断。​ 这里面涉及到几个方法:​ interrupt( ):发起中断请

2020-07-20 18:58:01 161

原创 一起走进多线程(二)

多线程(二)这是本人的java多线程系列的第二篇博客,如果有什么疑问欢迎大家评论区提出讨论。初识Java并发编程首先了解下线程的生命周期:这里借用了https://blog.csdn.net/pange1991/article/details/53860651中的图线程主要就有这六种状态:初始(NEW)、运行(RUNNABLE)、等待(WAITING)、超时等待(TIMED_WAITING)、阻塞(BLOCKED)、终止(TERMINATED)。关于这六个状态转化过程中涉及到的方法,接下来会讲解

2020-07-08 14:55:41 158

原创 一起走进多线程(一)

多线程(一)这是我写的第一篇blog。我是一名刚毕业的本科生,对各方面的知识并不是很了解,希望可以通过写这类型的文章加深印象,同时带给有需要的人去查看进程与线程首先先要了解进程与线程的概念,我在学习的过程中,听过最多的一句话就是:进程是资源分配的最小单位,线程是cpu调度的最小单位。对于比较了解线程和进程的人来说这句话其实挺好理解的,但是对于初学者来说这句话还是比较抽象的。我们日常生活中天天都有坐过地铁,对地铁肯定就比较了解。如果我们将进程看成一趟地铁,那么每个地铁车厢就是该进程内的一个线程,如果这个

2020-07-07 00:13:17 783

空空如也

空空如也

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

TA关注的人

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