自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 资源 (1)
  • 收藏
  • 关注

原创 netty之二次解码MessageToMessageDecoder

目录二次解码ObjectEncoder 如何实现编码1、 writeStreamHeader2、writeClassDescriptor总结protobuf的编码解码过程1、ProtobufVarint32FrameDecoder2、ProtobufDecoder3、ProtobufVarint32LengthFieldPrepender4、ProtobufEncoder总结二次解码我们将数据帧 转为正确的byte数组 我们称之为一次解码将byte

2021-07-27 23:18:04 1697

原创 netty之粘包拆包ByteToMessageDecoder

目录拆包粘包处理的方式netty的处理方式netty实现编码解码1、cumulator.cumulate() 拼接数据包2、callDecode() 解析数据包总结LengthFieldBasedFrameDecoder拆包粘包粘包产生的原因:两个包小于缓存区的大小,传送数据会将两个包都放在缓冲区中一起发送,就会产生粘包的问题。 半包产生的原因:当某一个包的大于缓冲区的大小,会被发送多次,每次就收到的就是一个不完整的数据包。处理的方式n

2021-07-27 23:16:22 905

原创 netty源码之内存池

目录一、DirectBuffer 和 HeapBuffer对外直接内存缓冲堆内存缓冲IO二、Netty的池化池化的好处netty的缓冲池使用1、池化Buffer2、非池化Buffer三、内存分配1、PooledDirectByteBuf对象池的使用2、回收池Recycler原理3、堆外内存的分配四、apache的对象池commons-pool一、DirectBuffer 和 HeapBuffer对外直接内存缓冲direc

2021-07-27 23:15:09 681

原创 netty源码之写数据

目录前言和快递比较一下几种场景发送数据的分类写数据flush数据前言write 是把数据写到buf里flush 是将数据发出去writeAndFlush 写入数据到buf 并立刻发送出去和快递比较一下几种场景1、netty协数据,写不进去了 , 会停止写 , 然后注册一个OP_WRITE事件 , 来通知什么时候可以写进去了再写2、netty批量写数据时,如果想写的都写完了, 接下来会尝试写更多 , 调整maxBytesPerG...

2021-07-27 20:52:39 361

原创 netty源码之业务逻辑处理

目录前言流程1、业务逻辑的入口,read2、从pipeline的链表上依次执行前言红色的部分就是我们这次分析的核心pipeline , 本质上是一个双向的链接,请注意是双向 , 它有head、tail , 中间有很多Context , 每个context 包含了需要执行的handler ,我们可以正向或者反向的查找下一个要执行的handler。流程1、业务逻辑的入口,read业务逻辑的切入点,可以很明确的确认是在读数据.

2021-07-27 20:50:33 175

原创 netty源码之读取数据

目录前话1、读数据的技巧2、简约流程3、读数据的本质流程1、读取数据前话1、读数据的技巧2、简约流程3、读数据的本质流程读数据的轮询和接收连接是一样的 ,都是在NioEventLoop对象的run方法里,但是在最终读的时候,调用了另外一个对象,AbstractNioByteChannel.read 方法1、读取数据//AbstractNioByteChannel public fina...

2021-07-27 20:48:41 762

原创 netty源码之接收连接

目录接收链接netty的接收连接前话1、bossGroup 轮询链接事件2、bossGroup 创建socketChannel3、ServerBootstrapAcceptor注册到worker线程4、workerGroup 将 socketChannel 注册到选择的NioEventLoop的selector5、workerGroup 注册读事件接收链接NIO的读事件 while(!stop){//循环遍历selector,休眠时间为1S,当又处于就绪

2021-07-27 20:45:56 220

原创 netty之心跳机制

目录一、前言二、netty的心跳工具三、IdleStatehandler1、构造方法2、handlerAdded3、定时任务4、读事件空闲5、写事件空闲一、前言心跳机制就是定时的给对端发送特殊的数据包 , 对端收到后回复特殊的数据包 , 这一次往返的ping-pong过程 , 就是一次心跳,心跳的目的是为了让双方感知 ,对方还活着。TCP协议层也是有心跳机制的 , 但是他的心跳是2个小时 ,且依赖底层操作系统 ,整体来讲不是很灵活 , 所以一般都是在应用层自由

2021-07-27 20:41:09 1296

原创 netty源码之NioEventLoop

目录一、初始化1、NioEventLoopGroup最终都是调用父类MultithreadEventLoopGroup的构造器2、通过父类MultiThreadEventExecutorGroup构造器创建NioEventLoopGroup实例,内部维护了一个SingleThreadEventExecutor类型的数组,通过newChild()方法进行实例化3、newChild()方法实例化的是NioEventLoop类型的EventLoop对象4、NioEventLoop 打开一个se

2021-07-27 20:39:44 183

原创 netty源码之启动流程

一、前言our thread 就是我们的主线程, boss thread 就是netty的 bossGroup线程 , 也就是reactor的主线程二、启动启动的本质启动的实质是什么?实际上我们只需要找到java nio 的那些代码就可以了1、打开一个selector2、打开一个channel3、绑定一个端口4、将channel 注册到selector 并标明感兴趣的事件netty启动三部曲1、实例化引导程序 ServerBootstrap.

2021-07-27 00:08:09 134

原创 netty之channelPipeline

目录一、channelPipeline二、执行流程三、筛选一、channelPipelineBIO中是面向字节流或者字符流来进行传输的。NIO中是基于块的传输,而且是面向channel的。netty是面向管道的 , 这个管道就是包装之后的nio channel 。一个channel 包含了一个channelPipeline管道对象,pipeline中又维护了一系列handlerContext组成的双向链表,这个链表的头是headContext , 尾部是tailContext

2021-07-26 20:39:15 266

原创 netty之linux零拷贝

一、DMA拷贝Direct Memory Access , 直接内存访问,是一种无须cpu的参与就可以让外设与系统内存进行双向数据传输的硬件机制。DMA拷贝使系统CPU从实际的IO数据传输中解脱出来,从而大大提高系统吞吐率。在数据传输期间,cpu可以并发的执行其他任务。二、传统IO数据copy传统的IO数据拷贝需要经历4次copy 和 3次状态切换四次copy:1、由硬件 经过DMA ——> 内核buffer2、内核buffer ——> 用户buffe..

2021-07-26 20:19:35 189

原创 netty知识总结

目录一、tcp & udp二、tcp如何保证更可靠1、确认应答和序列号2、超时重传3、流量控制4、拥塞控制三、滑动窗口四、状态流转五、粘包、拆包MTU(Maximun Transmission Unit)MSS(Maximun Segment Size)1、引起拆包、粘包的原因2、tcp解决方案3、netty解决方案六、同步、异步、阻塞、非阻塞七、网络IO模型八、BIO、NIO、AIO九、select 、poll 、

2021-07-26 20:13:27 854

原创 netty源码之关闭服务

目录一、前言二、客户端的关闭服务1、进入workerGroup.shutdownGracefully()2、NioEventLoop.run() 关闭的入口3、closeAll()4、confirmShutdown()方法5、cleanup() 关闭selector一、前言这里的关闭包含了boss/worker两个线程,是netty提供的优雅退出。二、客户端的关闭服务1、进入workerGroup.shutdownGracefull..

2021-07-26 20:10:49 855

原创 netty源码之断开连接

目录一、前言二、正常关闭1、关闭前的处理工作2、doClose0调用jdk的close 关闭channel3、fireChannelInactiveAndDeregister 传播关闭、解绑定事件4、doDeregister取消selector上的selectorKey三、异常关闭四、总结一、前言关闭的逻辑是在read方法里 , 当接受的数据<0时,说明没有可接受的数据了,可以关闭了。二、正常关闭1.allocHandle.las

2021-07-26 20:09:48 1240

原创 netty之io模型

前言所有的IO的前戏都是这三部曲1、new socket()2、bind 端口3、监听 端口一、BIOpackage netty.bio;​import java.io.InputStream;import java.net.InetSocketAddress;import java.net.ServerSocket;import java.net.Socket;import java.util.concurrent.TimeUnit;​/** * @a.

2021-07-26 20:07:55 180

原创 netty - 线程模型 reactor

目录线程模型1、传统IO服务模型2、Reactor模式reactor三种模式:总结netty模型执行流程简述线程模型1、传统IO服务模型阻塞的IO模式获取输入数据,每个链接需要独立的线程完成数据传输及处理当并发数较大时,创建大量线程,占用系统资源;线程创建后如无数据读写,将被阻塞2、Reactor模式reactor针对传统的IO模型的两个缺点,解决方案:a、基于IO多路复用模型:多个连接共用一个阻塞对象。应用程序只需要在一.

2021-07-19 20:57:14 1222

原创 mybatis 总结

目录一、jdbc的几个步骤二、什么是mybatis三、什么是ORM四、mybatis优缺点五、mybatis的分页六、分页插件的基本原理七、插件的原理八、如何编写一个插件九、动态sql十、xml映射文件中有哪些标签十一、mybatis是否支持延迟加载十二、mapper.xml对应的dao接口原理十三、#{} 和 ${} 区别十四、.Mybatis执行批量插入,能返回数据库主键列表吗十五、不同xml文件 , id是否可以重复十六、Mybati..

2021-07-10 23:13:28 229 2

原创 mybatis 之 设计模式

目录一、建造者模式二、工厂模式三、单例模式四、代理模式五、适配器模式六、模板方法七、装饰器模式八、责任链模式一、建造者模式建造者模式(builder Pattern) : 使用多个简单的对象一步一步构建成一个复杂的对象。mybatis中以Buidler结尾的对象基本上都是建造者模式。比如 SqlSessionFactoryBuilder,用以构建SqlSessionFactory对象。mybatis中有一个很完整的构造者模式:二、工厂模

2021-07-10 23:12:38 450 4

原创 mybatis 之 插件

目录一、自定义插件二、扫描三、封装四、执行五、应用一、自定义插件mybatis的插件是代理模式 与 责任链模式的结合。 每一个插件以责任链并进行封装,都是一层对Executor的代理@Intercepts({@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class , RowBounds.class , ResultHandler.cla

2021-07-08 19:29:21 188 1

原创 mybatis 之 缓存

目录一、简介 PerpetualCache增强的缓存功能分类二、原理1、PerpetualCache源码2、LRUCache ,装饰器增强的缓存3、CacheKey4、一级缓存、二级缓存三、一级缓存访问&创建删除四、二级缓存开启命名空间划分访问&更新删除一、简介在缓存中有需要的数据,就不用从数据库中获取转而从缓存中获取,这样就大大提高了系统性能。PerpetualCachemyba...

2021-07-08 19:27:54 133 1

原创 mybatis 之 mapper

目录一、mapper解析1、入口2、解析二、注册三、获取四、代理执行一、mapper解析1、入口private void parseConfiguration(XNode root) { try { propertiesElement(root.evalNode("properties")); //issue #117 read properties first typeAliasesElement(root.evalNode("type...

2021-07-08 19:26:06 1408

原创 mybatis 之 执行流程

目录一、使用二、实现原理原生的jdbc执行步骤组件ConfigurationSqlSessionFactorySqlSessionExecutorStatementHandlerParameterHandlerResultSetHandlerTypeHandlerMappedStatementSqlSourceBoundSql三、具体流程1、生成sqlSessionFactory1.1、解析配置文件2、打开一个sqlSe

2021-07-07 23:04:31 820 3

原创 mybatis 之 ognl表达式

一、简介mybatis的动态sql ,是其强大的特性之一,其实现借助了OGNL表达式。标签如下:ifwheretrim(where,set)foreachongl原理ExpressionEvaluator expressionEvaluator = new ExpressionEvaluator();GoodsBiLog log = new GoodsBiLog();log.setId(1);boolean b = expressionEvaluator.evalua

2021-07-07 23:03:44 412

原创 spring源码之scope

启动过程1、非抽象类 && singlton && 非懒加载 , 继续生成beanfor (String beanName : beanNames) { RootBeanDefinition bd = getMergedLocalBeanDefinition(beanName); //正式这段校验 if (!bd.isAbstract() && bd.isSingleton() && !bd.isLazyInit()...

2021-06-24 08:24:08 116

原创 golang源码之channel

channel是golang语言goroutine间的通信方式。一、数据结构1、hchantype hchan struct { qcount uint // 目前队列中的数据数量total data in the queue dataqsiz uint // 队列的容量size of the circular queue buf unsafe.Pointer // 队列points to an array of data...

2021-06-24 08:23:03 358

原创 golang源码之slice

目录一、数据结构二、初始化 makeslice三、添加 append一、数据结构二、初始化 makeslicegolang中有很多初始化slice的方式,我们以make方式,来看一下slice在底层是如何初始化的。func main(){ c := make([]int ,1) c = append(c ,1) fmt.Println(c)}转变一下汇编代码 , 命令如下:go tool compile -S main.go0x...

2021-06-23 20:11:54 299

原创 beego源码解析之Log

例子"github.com/astaxie/beego/logs"​func main1() { //通用的日志输出 logs.Info("日志输出") //多实例日志 log :=logs.NewLogger() log.Info("asdf") beego.Run()}通用日志输出调用链://1、输出日志logs.Info("日志输出")​//2、logs/log.go 中内置了beeLogger , 我们调用Info()方法内部调用...

2021-06-10 20:03:04 228

原创 beego源码解析之cache

目录使用cache顶级接口register实例化cache目前支持memory、file、redis、memcache,这种引擎模式,下文基于memory引擎使用import ( "github.com/astaxie/beego/cache")bm, err := cache.NewCache("memory", `{"interval":60}`)bm.Put("astaxie", 1, 10*time.Second)cache顶级接口t...

2021-06-10 20:02:04 2792

原创 beego源码解析之session

目录组件 package sessionStoreProvoiderRegistermanager流程session开启session回收组件 package session目前session提供了memory、mysql、redis 、file引擎的provider , 下文非特殊标记都是指的memoryStoresession存储仓库的顶级接口type Store interface { Set(key, value interfa...

2021-06-10 20:00:22 4765

原创 golang垃圾回收 三色清除

目录标记清除算法1、标记 (mark phase)2、清除 (mark phase)缺点优化三色标记原理问题:屏障技术原理写屏障删除屏障混合写屏障标记清除算法1、标记 (mark phase)stw ,找到所有不可达的对象,做好标记2、清除 (mark phase)清除未标记的对象缺点1、stw , 暂停整个程序2、标记需要扫描整个heap3、清除数据会产生碎片优化1.3版本前,...

2021-06-09 19:30:59 292

原创 beego源码解析之配置文件

目录组件config.go 公共参数beegoAppConfig structconfig.Configer接口config.Config 接口初始化的流程组件config.go 公共参数var ( // BConfig是程序中s默认的配置变量 BConfig *Config // AppConfig保存着文件中的配置项,使用的是 config包下的接口 AppConfig *beegoAppConfig // AppPath是...

2021-06-09 19:27:02 507

原创 beego源码解析之路由

目录简单的例子路由涉及的重要组件AppControllerRegisterControllerInfoTreeControllerInterfaceController路由表注册流程:路由匹配流程简单的例子func main() { beego.Router("/get", &MainController{}) beego.Run()}​type MainController struct { beego.C..

2021-06-09 19:26:04 289

原创 go内存模型及工具

目录内存结构arenabitmapspansmspan内存管理组件 mcachemcentralmheapGo内存分配流程总结:对象分三种:申请流程:内存结构go程序启动时,会像系统申请一块连续的虚拟内存结构,并划分为如下结构:arenaarena区块是死去模型中的堆区 , 他被划分为page ,每页8k .bitmapbitmap区域标识了arena区域哪些地址保存了对象,并使用4bit标...

2021-06-07 20:25:51 201 1

原创 计算机网络笔记之TCP/IP 协议

目录一、计算机分层结构1、七层协议2、物理层3、数据链路层4、网络层5、传输层6、应用层二、TCP/IP1、TCP/IP含义2、数据包3、数据处理流程三、TCP & UDP1、端口号2、TCP标志位3、三次握手4、四次挥手5、确认应答四、IP协议1、IP地址2、分类3、广播地址4、子网5、子网掩码6、超网7、路由五、IP协议相关技术1、DNS2、ARP (Address Res..

2021-06-02 18:57:08 239 2

原创 值传递、引用传递、址传递

分类从类型的角度来讲 , 类型可以分为值类型和引用类型从传递的角度来讲,分为值传递、址传递、引用传递。传递是在函数或者方法调用时才会提到的概念从参数的角度来讲,分为实参和形参。shic实参 , 是调用时真实传递给函数或者方法的参数 , 如 add(1,2) , 1和2就是实参形参 , 是定义函数或者方法时设立的参数,实际不存在,主要是为了接受主调函数传入的数据,如 func add(a ,b int){} a,b就是形参。值、地址、引用值是一个宽泛的范围 , 一切皆值 .

2021-05-27 20:11:26 1354

原创 虚拟内存和地址空间

目录一、物理内存vs虚拟内存二、物理内存空间和虚拟内存空间三、32bit的地址空间四、cpu位宽和cpu地址总线宽五、虚拟内存地址空间划分六、虚拟地址和物理地址的映射早期的计算机程序都是直接跑在物理内存上的,这就要求程序大小不能超过物理内存的上限;现代计算机为提高CPU使用率、并发执行多个程序、隔离程序间内存地址、打破物理内存上限,采用虚拟内存机制来运行程序一、物理内存vs虚拟内存物理内存就是实实在在的内存条。虚拟内存是一个概念,对于一个程序来说,..

2021-05-26 17:32:04 2212

原创 操作系统内存

目录一、分层存储器结构图二、无存储抽象三、运行多个程序缺点四、地址空间1、基址寄存器和变址寄存器2、交换技术3、虚拟内存分页存在映射的页如何映射未映射的页如何映射MMU页表一、分层存储器结构图主存(RAM) 是一件非常重要的资源,必须要认真对待内存。操作系统中管理内存层次结构的部分称为内存管理器(memory manager),它的主要工作是有效的管理内存,记录哪些内存是正在使用的,在进程需要时分配内存以及在进程完成时回收内存。所有现代操作..

2021-05-25 23:44:51 2537

原创 begoo学习笔记之 - 安装

安装begoo时,报如下错误:go get: module github.com/beego/beego/v2: Get "https://proxy.golang.org/github.com/beego/beego/v2/@v/list": dial tcp 172.217.160.113:443: connectex: A connection attempt failed because the connected party did not properly respond af

2021-05-24 14:41:28 123

原创 sha256加密原理及代码实现

目录一、简介二、SHA256过程详解1、公式2、常量及初始化3、消息预处理STEP1:附加填充比特STEP2:附加长度值4、计算消息摘要消息拆分STEP1:构造64个字(word)STEP2:进行64次循环三、完整的代码实现学习区块链,总是无法避开各种加密算法,因为各种加密算法在实现区块链当中的各个环节都有着不可替代的作用。这里介绍一下在比特币挖矿以及merkle树当中被大量使用的鼎鼎大名的SHA256算法。一、简介一个n位的...

2021-05-19 23:35:56 16131 2

mysql安装过程

这是mysql的安装文档,非常详细,欢迎大家下载谢谢合作

2013-12-26

空空如也

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

TA关注的人

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