- 博客(60)
- 资源 (4)
- 收藏
- 关注
原创 设计模式学习(四) — 行为模式
设计模式学习(四) — 行为模式 行为模式主要侧重与类与类或对象与对象之间的交互过程 个人主页:tuzhenyu’s page 原文地址:设计模式学习(四) — 行为模式 (0) 基本概念行为模式是类与类或者对象与对象之间交互方式的设计总结行为模式主要包括责任链模式,观察者模式,状态模式(1) 责任链模式责任链模式主要是使多个对象有机会处理请求从而避免请求的发送者
2017-12-14 20:57:13
667
原创 设计模式学习(三) — 结构型模式
设计模式学习(三) — 结构型模式 结构型模式主要是侧重于类之间结构构建的设计经验总结 个人主页:tuzhenyu’s page 原文地址:设计模式学习(三) — 结构型模式 (0) 基本概念结构型设计模式侧重于类之间的结构构建,用来解决模块之间的耦合问题;结构型设计模式主要包括装饰器模式,适配器模式,代理模式等;(1) 装饰器模式装饰器模式是动态地给一个对象添加一些
2017-12-14 20:56:11
2479
原创 设计模式学习(二) — 创建型模式
设计模式学习(二) — 创建型模式 创建型设计模式主要是用来构建对象实例,是在对象实例创建过程中的一些经验总结; 个人主页:tuzhenyu’s page 原文地址:设计模式学习(二) — 创建型模式 ](http://www.tuzhenyu.top/article/66)(0)基本概念创建型模式隐藏了类对象实例创建的细节,在创建什么(What),由谁创建(Who),
2017-12-14 20:51:54
480
原创 设计模式学习(一) — 概述
设计模式学习(一) — 概述 设计模式是一套编码经验总结,在编码过程中不是一定要用上,而是在特定情况下使用特定的设计模式会增强代码的可用性和可读性;(0) 基本概念什么是设计模式设计模式是一套被反复使用,经过了实践检验的的代码设计经验总结,是为了保证代码的可用性,同时也让代码更容易被人理解;设计模式的分类创建型模式:对象实例化的模式,侧重于对象实例化的过程;结构型模式:把类或者对象结合在
2017-12-14 20:42:41
484
原创 Netty源码分析(九)—IO事件处理流程
Netty源码分析(九)—IO事件处理流程 Netty的IO事件主要包括Read读事件,Write写事件和Connect连接事件; 个人主页:tuzhenyu’s page 原文地址:Netty源码分析(九)—IO事件处理流程 (0) 读写事件实例服务端监听8080端口,如果收到客户端的时间查询指令则返回当前时间到客户端public class
2017-11-24 19:58:07
1360
原创 Netty源码分析(八)—内存池分析
Netty源码分析(八)—内存池分析 Netty内存池是将内存的分配管理起来减少内存碎片和避免内存浪费,Netty内存池参考了Slab分配和Buddy分配思想;Slab分配是将内存分割成大小不等的内存块,在用户线程请求时根据请求的内存大小分配最为贴近size的内存快,减少了内存碎片同时避免了内存浪费;Buddy分配是把一块内存块等量分割,回收时候进行合并,尽可能保证系统中有足够大的连续内存
2017-11-24 19:53:57
5550
1
原创 Netty源码分析(七)—Recycler对象池分析
Netty源码分析(七)—Recycler对象池分析 Netty中实现轻量级的对象池技术,用来减少因为频繁的对象创建销毁而触发的内存分配和GC带来的性能消耗;Recycler是netty轻量级对象池的具体实现; Netty使用ThreadLocal变量实现对象池的线程隔离进而实现对象池的无锁线程安全,相当于每个线程都维护着各自的小线程池 个人主页:tuzhenyu’s
2017-11-24 19:49:18
1138
原创 Netty源码分析(六)—Future和Promis分析
Netty源码分析(六)—Future和Promis分析 Future用来在异步执行中获取提前执行的结果 个人主页:tuzhenyu’s page 原文地址:Netty源码分析(六)—Future和Promis分析 (0) JDK中的Callable/Future模型Callable与Runnable的区别在于Callable线程执行有返回值,Callab
2017-11-24 19:42:13
1032
1
原创 Netty源码分析(五)—ByteBuf源码分析
Netty源码分析(五)—ByteBuf源码分析 在进行数据传输时往往需要使用缓冲区,Java NIO中使用Buffer作为缓冲区;七种基本数据类型都有自己的缓冲区实现,最常使用的是ByteBuffer,但是ByteBuffer也有局限性; Netty实现了缓冲区的池化技术,在一定程度上减少了频繁内存分配和GC带来的性能损耗 个人主页:tuzhenyu’s page
2017-11-23 19:16:44
1489
原创 Netty源码分析(四)—线程池EventLoopGroup源码分析
Netty源码分析(四)—线程池EventLoopGroup源码分析 Netty中的EventLoopGroup是对线程池的封装,采用Reactor模型实现了Netty多线程高性能; 个人主页:tuzhenyu’s page 原文地址:Netty源码分析(四)—线程池EventLoopGroup源码分析 (0) Reactor模型Reactor模型是一种经
2017-11-23 19:09:53
3327
原创 Netty源码分析(三)—数据管道ChannelPipeline源码分析
Netty源码分析(三)—数据管道ChannelPipeline源码分析 ChannelPipeline数据管道是ChannelHandler数据处理器的容器,负责ChannelHandler的管理和事件的拦截与调度 个人主页:tuzhenyu’s page 原文地址:Netty源码分析(三)—数据管道ChannelPipeline源码分析 (0) Channe
2017-11-22 15:46:00
4428
1
原创 Netty源码分析(二)—客户端初始化
Netty源码分析(二)—客户端初始化 传统Java NIO在客户端启动时会涉及到SocketChannel,Selector,selectorKey等类;Netty对Java NIO基础类进行了封装,减少用户开发工作量,降低开发难度; 个人主页:tuzhenyu’s page 原文地址:Netty源码分析(二)—客户端初始化 (0)客户端初始化客户端初始
2017-11-22 15:38:53
908
原创 Netty源码分析(一)—服务端初始化
Netty源码分析(一)—服务端初始化 传统Java NIO在服务端启动时会涉及到ServerSocketChannel,Selector,selectorKey等类;Netty对Java NIO基础类进行了封装,减少用户开发工作量,降低开发难度; 个人主页:tuzhenyu’s page 原文地址:Netty源码分析(一)—服务端初始化 (0) 服务端
2017-11-22 15:31:21
3929
1
原创 Netty学习(六)—WebSocket通信
Netty学习(六)—WebSocket通信 WebSocket是一种将Socket套接字引入到B/S架构中,使浏览器和服务器之间可以通过套接字建立持久连接,双方都能发送即时消息给对方,而不是传统模式下请求应答通信方式; 个人主页:tuzhenyu’s page 原文地址:Netty学习(六)—WebSocket通信 (0) 原理HTTP协议的弊端HT
2017-11-22 14:58:40
928
原创 Netty学习(五)—IdleStateHandler心跳机制
Netty学习(五)—IdleStateHandler心跳机制 Netty的IdleStateHandler心跳机制主要是用来检测远端是否存活,如果不存活或活跃则对空闲Socket连接进行处理避免资源的浪费; 个人主页:tuzhenyu’s page 原文地址:Netty学习(五)—IdleStateHandler心跳机制 (0)基础心跳机制心跳是在
2017-11-21 13:53:30
78455
7
原创 Netty学习(四)—LengthFieldBasedFrameDecoder解码器
Netty学习(四)—LengthFieldBasedFrameDecoder解码器 LengthFieldBasedFrameDecoder和LengthFieldPrepender组合是解决TCP粘包和拆包问题的最佳方案,通过将消息分为消息头和消息体记录消息长度解决读半包问题; 个人主页:tuzhenyu’s page 原文地址:Netty学习(四)—LengthFie
2017-11-20 20:24:15
2245
原创 Netty学习(三)—Codec编解码基础
Netty学习(三)—Codec编解码基础 Codec框架无论是decoder还是encoder本质上都是ChannelHandler处理器,用来将字节转换成基本数据类型或者将基本数据类型转换成字节; 个人主页:tuzhenyu’s page 原文地址:Netty学习(三)—Codec编解码基础解码器解码器用来将输入数据流按照特定的格式转换成目标程序格式,解码器
2017-11-20 16:24:20
2528
原创 Netty学习(二)—拆包粘包问题
Netty学习(二)—拆包粘包问题 无论是服务端还是客户端在进行数据发送收取的时候需要考虑TCP底层的粘包/拆包机制,因为如果不进行处理会造成收取的数据和预想的不一致; 个人主页:tuzhenyu’s page 原文地址:Netty学习(二)—拆包粘包问题(0) 拆包粘包的原因TCP粘包发生的原因粘包现象出现的根本原因是TCP协议是一个面向数据流的通信协
2017-11-20 13:49:44
999
原创 Netty学习(一)—基本使用
Netty学习(一)—基本使用 Netty是基于Java NIO实现的Socket通信框架,相比于Java NIO操作更加简便同时一些改进也使其性能相对更好; 个人主页:tuzhenyu’s page 原文地址:Netty学习(一)—基本使用(0) 基于Netty服务端的创建服务端启动创建NioEventLoopGroup线程池实例来处理事件,如接受连接,读
2017-11-19 16:38:39
1432
原创 Java多线程系列(十一)—ReentrantReadWriteLock源码分析
Java多线程系列(十一)—ReentrantReadWriteLock源码分析 ReentrantReadWriteLock读写锁是基于AQS的独占模式和共享模式实现的,是为了优化ReentrantLock互斥锁的并发性能; 个人主页:tuzhenyu’s page 原文地址:Java多线程系列(十一)—ReentrantReadWriteLock源码分析 (
2017-10-24 13:28:29
529
原创 Java多线程系列(十)—Semaphore源码分析
Java多线程系列(十)—Semaphore源码分析 Semaphore是计数信号量,用来控制并发数量,允许n个任务同时访问某个资源,可以将信号量看做是在向外分发使用资源的许可,只有成功获取许可才能使用资源; 个人主页:tuzhenyu’s page 原文地址:Java多线程系列(十)—Semaphore源码分析 (0) Semaphore信号量的使用三个线
2017-10-23 15:41:06
322
原创 Java多线程系列(九)—CountDownLatch源码分析
Java多线程系列(九)—CountDownLatch源码分析 CountDownLatch是多线程辅助类,主要用作栅栏功能,也就是让一个线程等待其他线程完成之后再执行; 个人主页:tuzhenyu’s page 原文地址:Java多线程系列(九)—CountDownLatch源码分析 (0) CountDownLatch的实例class MyThrea
2017-10-22 20:49:01
301
原创 Java多线程系列(八)—CyclicBarrier源码分析
Java多线程系列(八)—CyclicBarrier源码分析 CyclicBarrier是一个同步辅助类,允许一组相关线程相互等待,直到所有线程都到达某个公共屏障点;因为该屏障点在释放后可以循环重用,所以称为循环屏障; 个人主页:tuzhenyu’s page 原文地址:Java多线程系列(八)—CyclicBarrier源码分析(0) CyclicBarrier循环
2017-10-22 15:37:40
300
原创 Java多线程系列(七)—ReentrantLock源码分析
Java多线程系列(七)—ReentrantLock源码分析 ReentrantLock是一个可重入的互斥锁,在一个时间点只能被被一个线程持有,同时可重入的特性又异味着一把锁能够被同一个线程多次获取;同时ReentrantLock又分为公平锁和非公平锁,公平锁下线程排队依次获取锁,非公平锁机制下在锁是可获取的情况下不管自己是否在队列头都会获取锁; 个人主页:tuzhenyu’s
2017-10-21 20:20:26
238
原创 Java多线程系列(六)—AQS源码分析
Java多线程系列(六)—AQS源码分析 AbstractQueuedSynchronizer同步器是基于LockSupport和CAS实现的同步器,是实现锁机制和其他同步类的基础; 个人主页:tuzhenyu’s page 原文地址:Java多线程系列(六)—AQS源码分析1. AbstractQueuedSynchronizer内部数据结构AQS同步器内部维护
2017-10-18 21:03:12
697
原创 Java多线程系列(五)—LockSupport源码分析
Java多线程系列(五)—LockSupport源码分析 LockSupport类是实现锁机制和其他同步类的基础,提供了基本线程阻塞和恢复的原语; LockSupport中的park() 和 unpark() 的作用分别是阻塞线程和解除阻塞线程,而且park()和unpark()不会遇到“Thread.suspend 和 Thread.resume所可能引发的死锁”问题
2017-10-17 15:16:42
386
原创 Java多线程系列(四)—CAS操作和Automic原子类
Java多线程系列(四)—CAS操作和Automic原子类 由于线程安全需要保证原子性和可见性,而volatile关键字修饰的变量仅能保证可见性不能保证原子性,因此像i++这种非原子操作就是非线程安全的;为了保证原子性,JDK引入了原子操作类,放在在java.util.concurrent.automic包下; Automic原子类底层是通过CAS实现,线程的重试会造成效率较低,
2017-10-17 10:31:56
2532
原创 Java多线程系列(三)—生产者消费者模型
Java多线程系列(三)—生产者消费者模型 生产者消费者模型是一种基于等待/通知模式的经典多线程模型; 个人主页:tuzhenyu’s page 原文地址:Java多线程系列(三)—生产者消费者模型(1) 生产者消费者模型生产者消费者模型关注以下几点:生产者在存储未满的时候生产,消费者在存储未空的时候消费;生产者执行生产任务之后会唤醒消费者进行消费,消
2017-10-16 15:00:58
484
原创 Java多线程系列(二)—线程安全
Java多线程系列(二)—线程安全 多线程下对共享的(多个线程可以访问相同的资源)可变的(没有final关键词修饰)容易出现非线程安全情况,因此对象的线程安全性与其共享性和可变性有关; 个人主页:tuzhenyu’s page 原文地址:Java多线程系列(二)—线程安全1.线程安全的定义线程安全的定义:如果你的代码在多线程下执行和在单线程下执行永远都能获得一样
2017-10-15 15:25:36
326
原创 Java多线程系列(一)—多线程基础
Java多线程系列(一)—多线程基础 线程是CPU调度的最小单元,单核时代多线程可以在IO密集型操作时有更高的效率,在如今这个多核为主的时代,多线程更能有效的发挥多核的优势,充分利用CPU资源; 个人主页:tuzhenyu’s page 原文地址:Java多线程系列(一)—多线程基础1. 线程基础(1) 线程和进程进程是系统资源分配的基本单位,线程是CP
2017-10-13 18:13:24
477
1
原创 深入理解MyBatis(八)—Spring和MyBatis集成
深入理解MyBatis(八)—Spring和MyBatis集成 Spring通过IOC和AOP技术极大简化了对象实例的生成和依赖的注入; MyBatis通过对象映射,自定义SQL等功能实现了灵活的数据库操作; Spring框架与MyBatis框架集成后,不需要手动载入配置文件生成会话工厂SqlSessionFactory,也不需要再手动从会话工厂获取SqlSession会话,也不
2017-10-11 18:57:45
961
原创 深入理解MyBatis(七)—MyBatis事务
深入理解MyBatis(七)—MyBatis事务 MyBatis可以通过XML配置文件设定是否进行事务管理, 事务管理主要包括事务的提交,回滚等; 本文主要介绍了事务的入口,MyBatis事务操作对数据库SELECT操作和UPDATE操作的影响等; 个人主页:tuzhenyu’s page 原文地址:深入理解MyBatis(七)—MyBatis事务(0) M
2017-10-10 14:26:51
35069
原创 Spring源码阅读(十二)—事务
Spring源码阅读(十二)—事务 事务是指多个数据库操作组成的整体,只有全部操作执行成功整体才成功,一旦有操作实行失败整体回滚到开始的状态; 事务的四大特性:原子性,一致性,隔离性,持久性 事务的四种隔离级别:未提交读,提交读,可重复读,可串行化 事务的七种传播行为:propagation_required,propagation_supports,prop
2017-10-09 10:07:01
428
原创 Spring源码阅读(十一)—AOP补充
Spring源码阅读(十一)—AOP补充 AOP面向切面编程是面向对象编程的一种补充,广泛应用于事务,日志等场景; AOP实现的关键在于AOP框架能够为目标类创建AOP代理,AOP代理根据创建的形式分为静态代理和动态代理; 静态代理是指在编译期间生成代理类,也成为编译时增强;动态代理是指运行期间借助JDK动态代理或者CGLIB等在内存中临时生成动态代理类,也称为运行时增
2017-10-08 15:19:52
301
原创 深入理解Redis(三)—多机数据库
深入理解Redis(三)—多机数据库 个人主页:tuzhenyu’s page 原文地址:深入理解Redis(三)—多机数据库一, Redis复制用户可以通过slaveof命令让一个服务器作为从服务器复制另一服务器数据,并随之主服务器的变动而变动;(1) 旧版复制功能的实现salveof的底层实现是通过SYNC命令实现复制功能Redis的复制功能分为同步和命
2017-09-27 17:07:29
331
原创 深入理解Redis(二)—单机数据库
深入理解Redis(二)—单机数据库 Redis单机数据库是一种典型的key-value数据库,数据存储在内存中大大提升了数据库操作速度,同时RDB和AOF持久化策略解决了内存型数据库的宕机后数据恢复问题. 个人主页:tuzhenyu’s page 原文地址:深入理解Redis(二)—单机数据库(1)数据库服务端实现整体流程初始化服务器Redis的服务器进程是
2017-09-20 14:27:15
267
原创 深入理解Redis(一)—基本数据结构
深入理解Redis(一)—基本数据结构 Redis相比于其他内存数据库的一个很明显的特点就是丰富的数据结构为开发提供了很大的便利,本文主要整理了Redis几种基本的数据结构以及具体的底层实现; 个人主页:tuzhenyu’s page 原文地址:深入理解Redis(一)—基本数据结构一,基本数据结构Redis的数据结构包括内部数据结构,内存映射数据结构;内部
2017-09-16 16:45:39
581
原创 跳跃表
跳跃表 跳跃表是redis底层数据结构之一,具有较好的性能;本文主要整理了跳跃表的的基本原理以及JAVA实现的具体流程. 个人主页:tuzhenyu’s page 原文地址:跳跃表(0) 概念跳跃表是一组带有指针数组指向后续节点的有序链表;跳跃表和红黑树,AVL树等类似都是一种基于排序的索引结构,效率和红黑树差不多但是实现原理比红黑树简单;跳跃表的另一个特点
2017-09-16 16:30:19
432
原创 深入理解MyBatis(六)—MyBatis的缓存机制
深入理解MyBatis(六)—MyBatis的缓存机制 频繁的数据库查询操作是非常耗费性能的额,因为数据库查询底层依靠文件存储机制的IO操作,而IO操作的速度相比于内存作要慢几个量级,因此更好的解决方案是把相同的查询语句的结果存储在内存中,下次再查询时直接从内存中读取; 个人主页:tuzhenyu’s page 原文地址:深入理解MyBatis(六)—MyBatis的缓存机
2017-09-10 21:27:58
641
原创 深入理解MyBatis(五)—MyBatis的插件机制
深入理解MyBatis(五)—MyBatis的插件机制 MyBatis提供了插件机制用于自定义的拓展,其实质是实现了拦截器的功能; 个人主页:tuzhenyu’s page 原文地址:深入理解MyBatis(五)—MyBatis的插件机制(0) 插件机制MyBatis允许使用插件拦截具体的方法调用,具体的拦截点包含四类:Executor:update(),q
2017-09-09 20:29:36
1256
C高级实用程序设计
2016-10-07
C陷阱与缺陷-建议与答案
2016-10-07
origin函数绘图应用软件
2014-03-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人