自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 netty NioEventLoopGroup的类图分析

NioEventLoopGroup的类图如下: 各接口功能说明 Executor接口:任务执行器 ExecutorService接口:提供了异步执行任务能力的执行器 ScheduledExecutorService接口:提供了执行定时任务的能力 EventExecutorGroup接口:Exec...

2020-01-20 14:28:30 75 0

原创 netty NioEventLoop中run()方法执行流程分析

NioEventLoop的run方法的执行过程 在创建线程对象的任务中调用了SingleThreadEventExecutor.this#run()方法,使NioEventLoop开始运行,开始处理任务。 NioEventLoop#run()方法如下所示,可以看到run()方法是一个无限循环,直到...

2020-01-20 14:25:56 208 0

原创 netty创建并启动新线程流程分析

本文主要分享服务端ServerSocketChannel所绑定的NioEventLoop的线程的创建过程 在服务端启动流程中当执行到注册操作时,会判断当前线程是否是ServerSocketChannel所绑定的NioEventLoop中的线程,如果不是的话,会将注册操作封装成一个线程任务交给Nio...

2020-01-20 14:24:09 152 0

原创 netty服务端新连接接入的流程分析

由前面的分析可知NioEventLoop的run()方法是一个无限循环,NioEventLoop会不断的调用Selector的select(timeout)方法查询是否有新的IO事件,所以当一个客户端连接进入的时候会被Boss线程select到,故新连接接入流程的入口为Bose线程的select方...

2020-01-20 14:22:02 96 0

原创 netty 服务端的启动过程

服务端的启动过程 ServerBootstrap和Bootstrap的类图如下所示: 可以看到ServerBootstrap和Bootstrap都是继承自抽象类AbstractBootstrap。因为 ServerBootstrap 和 Bootstrap 大部分的方法和职责都是相同的,所以公共...

2020-01-17 16:31:27 106 0

原创 netty UnpooledHeapByteBuf类

UnpooledHeapByteBuf类 UnpooledHeapByteBuf类的类图如下所示,UnpooledHeapByteBuf继承自AbstractReferenceCountedByteBuf类,UnpooledHeapByteBuf是一个基于JVM堆内存进行内存分配的缓冲区,是一个非...

2020-01-09 17:51:01 64 0

原创 netty AbstractReferenceCountedByteBuf类

AbstractReferenceCountedByteBuf 作用 AbstractReferenceCountedByteBuf类提供了引用计数的功能,其所有的子类都可以使用该功能防止内存泄漏。 属性 REFCNT_FIELD_OFFSET:refCnt字段在内存中的地址偏移量 AIF_UPD...

2020-01-09 14:15:20 122 0

原创 netty AbstractByteBuf类

ByteBuf和ByteBuffer的关系 Netty的ByteBuf及其子类可以看做是对JDK提供的ByteBuffer的一种扩展,JDK提供的ByteBuffer类有如下缺点: 长度固定,ByteBuffer类一旦被创建则它的容量是不能被改变的 只有一个标识位置的指针position,对于读...

2020-01-09 10:14:32 55 0

原创 tcp的粘包和拆包

什么是tcp粘包和拆包 因为tcp协议是基于流的传输层协议,他会根据tcp缓冲区的实际情况对数据包进行拆分或合并,所以对于上层应用来说,会发生一个大的数据包被tcp拆分成多个小的数据包或多个小的数据包被tcp合并成一个大的数据包的情况。 导致tcp粘包和拆包原因 要发送的数据大于TCP发送缓冲区...

2020-01-08 10:52:26 121 0

原创 java实现一个本地缓存

缓存接口定义: import java.util.Iterator; /** * @author lijiaxing * @Title: GatewayCache * @ProjectName gateway * @date 2019/12/4下午4:11 * @Description...

2019-12-13 16:16:25 47 0

原创 HashMap源码学习

HashMap的成员属性 //数组的默认初始化容量 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; //哈希表的最大容量 static final int MAXIMUM_CAPACITY = 1 << 30; //默...

2019-09-05 16:30:16 44 0

原创 红黑树

什么是红黑树 红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构。红黑树和AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。它虽然是复杂的,但它的最坏情况运行时间也是非常良好的,并且在实践中是高效的:...

2019-09-02 16:51:49 77 0

原创 ArrayBlockingQueue源码学习

ArrayBlockingQueue介绍 ArrayBlockingQueue是采用数组实现的有界阻塞线程安全队列。如果向已满的队列继续塞入元素,将导致当前的线程阻塞。如果向空队列获取元素,那么将导致当前线程阻塞。 ArrayBlockingQueue类的几个主要成员属性: final Objec...

2019-08-30 16:01:57 158 0

原创 ReentrantLock的await/signal机制源码学习

测试代码如下: public class ConditionTest { static ReentrantLock lock = new ReentrantLock(); //创建锁对象 static Condition condition = lock.newCondi...

2019-08-29 20:37:42 277 0

原创 ReentrantLock公平锁的获取和释放源码学习

ReentrantLock公平锁的测试代码如下: public static void main(String[] args) { ReentrantLock lock = new ReentrantLock(true);//创建一个公平锁 lock.loc...

2019-08-28 17:48:26 66 0

原创 ReentrantLock非公平模式下获取和释放锁的源码学习

ReentrantLock类 A reentrant mutual exclusion Lock with the same basic behavior and semantics as the implicit monitor lock accessed using synchronized...

2019-08-13 15:44:40 69 2

原创 实现一个简单的单向链表

什么是单向链表 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始;链表是使用指针进行构造的列表;又称为结点列表,因为链表是由一个个结点组装起来的;其中每个结点都有指针成员变量指向列表中的下一个结点 单向链表的结构图 代码 因为实现比较简单所...

2018-10-09 11:41:02 989 0

原创 使用栈来实现字符串符号平衡的检测

什么是联机算法? 联机算法是在任意时刻算法对要操作的数据只读入(扫描)一次,一旦被读入并处理,它就不需要在被记忆了。而在此处理过程中算法能对它已经读入的数据立即给出相应子序列问题的正确答案。 该算法仅需要常量空间并以线性时间运行,因此联机算法几乎是完美的算法。 优点 占用空间少...

2018-10-09 11:31:22 620 0

原创 mybatis-generator插件的使用

做个记录,方便用到时查询 1、在pom文件中引入插件 &lt;!--引入mybatis-generator的插件--&gt; &lt;build&gt; &lt;plugins&gt; &l...

2018-08-09 11:45:48 724 0

原创 Caused by: java.sql.SQLException: Unknown system variable 'tx_isolation'

问题出现的原因是数据库的版本比连接驱动的版本高很多,因此将mysql-connector-java升级到最新版本就解决了问题. Caused by: java.sql.SQLException: Unknown system variable 'tx_isolation'...

2018-08-09 10:32:52 1461 0

转载 mysql Client does not support authentication protocol requested by server; consider upgrading MySQL

容器:docker 18.03.1 镜像:mysql 8.0 连接方式:Navicat 11.0.16 提醒一句:如果直接 mysql 是 镜像市场直接下载的 记得配置: MYSQL_ROOT_PASSWORD:你的密码 错误: Client does not support aut...

2018-08-08 16:24:12 129 0

转载 为什么要读书?

2018-06-02 15:21:59 157 0

原创 LinkedList源码学习笔记

LinkedList简介 LinkedList是一个实现了List接口和Deque接口的双端链表。 LinkedList除了可以当做链表来操作外,它还可以当做栈、队列和双端队列来使用。 LinkedList同样是非线程安全的,只在单线程下适合使用。 LinkedList实现了Serial...

2018-05-06 09:36:23 196 0

原创 java8中的default关键字

在学习集合代码时发现在Iterable接口中使用了default关键字。 default关键字介绍 default是在java8中引入的关键字,也可称为Virtual extension methods——虚拟扩展方法。是指,在接口内部包含了一些默认的方法实现(也就是接口中可以包含方法...

2018-05-05 09:56:29 33693 18

原创 ArrayList源码学习笔记------常用API

本文的源码来自于jdk1.8版本,然而并不会涉及jdk8新特性。 ArrayList简介 ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。 ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Coll...

2018-04-30 11:31:31 327 1

原创 springBoot的项目集成springDataRedis

第一步,导入maven依赖

2018-03-16 17:24:59 1207 0

原创 mysql中更新时间和创建时间的自动更新

需求: 当新增记录的时候,mysql自动将系统的当前时间set到创建时间和更新时间这两个字段中。 当更新记录的时候,mysql只update更新时间字段的时间,而不修改创建时间字段对应的值。方案: 找到表中对应的创建时间和更新时间的字段,将其修改为下列代码所示。 创建时间字段`creat_...

2018-03-08 15:58:45 31986 8

原创 Javascript中对象的创建

1、Object构造函数和字面量的方式创建对象通过Object构造函数的方式创建对象,代码如下:var person = new Object(); person.name="张三"; person.age=24;通过字面量的方式创建对象,代码如下:var someone = ...

2018-03-08 14:39:38 118 0

原创 一个实用的数据库和redis的心跳检测工具类

先贴代码,然后再演示,代码非常简单。代码public class TestHeartBeat { public static void main(String[] args) throws Exception { databaseHeartBeatCheck(); ...

2018-03-03 11:09:52 1543 0

原创 spring boot:run控制台输出中文乱码问题的解决

自己搭的spring boot在控制台输出中文的时候会出现乱码的情况,如下图所示: 解决方法: 在pom文件中增加配置,增加一项虚拟机参数,完整代码如下:<plugin> <groupId>org.springframework.boot</g...

2018-02-24 14:08:55 17095 2

原创 jsp页面title乱码的处理方案

情况如下图,页面的title中的中文为乱码 解决方案: 第一步,先检查自己的ide工具的编码是否正确 第二步,检查<meta>标签中的charset设置是否正确,当前页面中的charset设置为utf-8,正确。 <meta charset="utf-8&qu...

2018-02-23 15:22:14 2361 0

转载 线程的生命周期状态

线程的声明周期状态图如下: Java 线程的状态可以使用监控工具查看,也可以通过Thread.getState() 调用来获取。Thread.getState() 的返回值类型Thread.State 是一 个枚举类型( Enum)。 Thread.State所定义的线程状态包括以下几种:...

2018-02-18 11:53:41 714 0

原创 两种线程创建方式的区别

创建一个新的线程有两种方式,第一种方式为通过继承Thread类,并实现Thread类中的run()方法。第二种创建线程的方式是通过实现Runnable接口来创建一个新的线程。 下面总结一下两种创建线程方式的区别: 从面向对象编程的角度来看:通过继承Thread类创建线程使用的是基于继承的技术,而...

2018-02-17 17:49:23 287 0

转载 fastjson中一些很实用的序列化属性

也就是这个方法:JSONObject.toJSONString(Object object, SerializerFeature… features)Fastjson的SerializerFeature序列化属性QuoteFieldNames———-输出key时是否使用双引号,默认为trueWri...

2018-02-05 17:41:27 1838 0

原创 一篇文章搞定springMVC中的请求映射

本文中的内容大都来自spring官方文档,官方文档的访问地址为spring官方文档地址, 本文中所有的demo代码在https://github.com/singedli/request_mapping_demo.git可以下载。实验的项目是采用默认配置的spring boot项目,使用的工具为...

2018-02-04 18:56:19 3139 0

原创 javascript中数组类型使用总结(一)------数组的创建

虽然javascript语言和java语言有很多的相似之处,但是对于数组(即Array)类型,二者还是有些许的不同点,异同点主要如下: 在java和javascript中,数组都是数据的有序列表。 java中的数组只能保存同一类型的变量,而javascript中的数组则可以保存任意类型的变量。 j...

2018-01-31 10:51:31 983 0

原创 linux不解压日志压缩包直接搜索里面的内容

gzip -dc 文件名 | grep “搜索条件” 可以做到不解压日志压缩包直接搜索里面的内容

2018-01-09 17:42:40 6067 0

原创 linux永久关闭防火墙

环境是centos71、检查防火墙当前的状态 service iptables status2、永久关闭实验机的防火墙 chkconfig iptables off3、打开防火墙 chkconfig iptables on4、设置后不会立即生效,需要重启系统 reboot

2017-12-31 08:10:53 3997 0

原创 在git上拉取代码之后如何在idea右下方显示当前操作分支

可以看到已经可以显示了,当前分支是开发分支dev

2017-12-30 16:41:13 5879 0

转载 (搬运)Mybatis中传参包There is no getter for property named 'XXX' in 'class java.lang.String'

原blog地址 http://blog.csdn.net/woshixuye/article/details/8820387一、发现问题 select num,name,phone from student AND num = #{num} Mybatis查询传入一...

2017-12-29 10:47:47 165 0

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