自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 19年序

今天打开自己的博客一看,最近一篇文章已经是一年前了,感叹时间过的真快,这一年经历了很多,成长了很多。还有五天就是在新公司一年了,在这一年没有时间一直在快速的奔跑,没有时间去想别的事情,没有时间总结,但是俗话说“学而不思则罔,思而不学则怠”,从今天开始通过博客去总结我过去的一年、现在和未来。 过去的...

2019-05-12 23:13:19 77 0

原创 JDK源码分析——SecurityManager安全管理器实例分析

样例github 安全管理器简介 样例分析 样例相关文件 调试分析 1、直接运行(无参数) 2、配置默认安全管理器 3、配置默认管理+自定义策略文件(=) 4、配置默认管理+自定义策略文件(==) 样例github https://github.com/mh478387...

2018-05-15 14:20:42 856 0

原创 JDK源码分析——类加载器的分析和实战

本篇文章中的实例代码已经放入github的JavaExample中: github地址:https://github.com/mh47838704/JavaExample 该文章中的实例代码: https://github.com/mh47838704/JavaExample/tree/ma...

2018-05-02 23:42:40 410 0

原创 JDK源码分析——Java的SPI机制分析与实战

重点提示:在我博客中的所有的源码分析的实例,我都将会放到github上,感兴趣的朋友可以下载下来调试运行,我相信还是可以有所收获的。我的目的是让所有读到我博客的朋友都可以了解到有价值的东西,学习到java核心的原理,使用起来更加得心应手。 所有实例的GitHub地址:https://github...

2018-05-01 23:21:52 182 0

原创 JDK源码分析——ThreadPoolExecutor参数详解

参考文章:JDK源码分析——ThreadPoolExecutor参数详解 本篇文章主要对jdk中线程池ThreadPoolExecutor的参数进行详细分析 ThreadPoolExecutor已经对上面的各种情况进行了封装处理,并且提供了相应的参数对上述各种情况进行控制,首先我们看一下该类的...

2018-04-28 15:47:40 242 0

原创 nginx——安装和配置详解

参考文章:nginx安装和配置详解 第一章Nginx介绍 Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点开发的。 如果需要更加详细的了解nginx...

2018-04-26 23:07:16 17164 1

原创 Java流式处理——实例分析

参考文章:java流式处理实例分析 由于在项目中使用了很多流式的处理,但是却对什么是流式处理没有概念,所以闲暇之余看了一下ArrayList的stream的实现,并按照该实现并结合Splitterator的样例实现了一个简单的可以并发的List,该List也支持流式处理的方式。 由于本来是为了...

2018-04-24 23:00:35 1880 0

原创 tomcat源码解读——启动过程分析

参考文章:tomcat源码解读——启动过程分析 在上一篇文章中介绍了idea中tomcat源码调试环境的搭建,调试环境搭建完成之后首先配置tomcat的启动信息,配置信息如下(具体配置步骤参考源码中的README文件) 配置好了tomcat的启动信息之后,就可以开始从源码启动并调试tomcat了...

2018-04-23 00:07:35 551 0

原创 tomcat源码解读——Idea调试环境搭建

转载:tomcat源码解读——Idea调试环境搭建 由于tomcat源码本身是基于ant构建的,所以如果想要在idea中运行,那么需要重新进行配置。 通过在网络上查询相关的资料,找到了相关的配置,通过该配置可以在idea中正常的编译调试。 已经添加好了配置文件的tomcat的源码可以在我的g...

2018-04-21 15:44:48 742 0

原创 深入分析ReentrantLock公平锁和非公平锁的区别

在ReentrantLock中包含了公平锁和非公平锁两种锁,通过查看源码可以看到这两种锁都是继承自Sync,而Sync又继承自AbstractQueuedSynchronizer,而AbstractQueuedSynchronizer又继承自AbstractOwnableSynchronizer,...

2018-04-20 00:24:41 11987 0

原创 tomcat源码分析——不同的应用隔离机制

通过为不同的应用创建一个webappclassloader即可实现不同的应用的隔离,避免不同应用之间的class的引用,从而引起的应用安全问题

2018-04-09 00:12:57 769 0

原创 mybatis源码分析之Mapper初始化过程(2)

在上一节记录了Mapper的初始化的整个过程,本节将记录一下Mapper的初始化过程中一个子过程:从xml解析Mapper配置。 Mapper的使用是首先定义一个mapper接口,在接口里面对mapper的入参和返回值进行定义,然后编写同名的mapper的xml配置文件,并在配置文件中对每一个接...

2018-04-08 23:59:14 211 0

原创 mybatis源码分析之Mapper初始化过程(1)

通过分析MapperRegistry类的addMapper方法,可以看出mapper的生成过程以及初始化的机制: public <T> void addMapper(Class<T> type) { if (type.isInter...

2018-04-08 00:10:46 492 0

原创 深度剖析spring+shiro认证机制

引言 项目中使用了shiro作为用户认证、角色管理、权限管理等,使用起来还是特别方便的,开发者只需要SecurityUtils.getSubject()获取subject就可以实现登录,以及权限验证。这样大大简化了开发者的功能,但是也有点让开发者感觉好奇,shiro是如何做到的呢。 本章将会对...

2018-04-02 00:28:05 203 0

原创 java类加载机制的深入分析

绪 jvm类加载机制在很多书籍里面都有讲解,主要介绍了基于委托的类的加载机制、类加载链接初始化的过程、以及类加载时机等,本篇文章通过编写自定义的classloader来对相关概念进行更加具体直观的分析。 源码样例分析 SelfClassLoader.java package cload...

2018-03-28 00:49:43 139 0

原创 LockSupport源码解析

绪 今天和朋友讨论Java中的锁机制的时候,谈论到了LockSupport类,在之前一直没有使用过该类,所以当提到该类的时候还是有点陌生,然后看了一下JDK的源码和该类相关的技术博客,整理了一下该类的原理和使用场景。 使用 package mthread; import org.j...

2018-03-26 00:21:53 382 0

原创 稳定高并发高性能程序设计原则简单总结

稳定性 稳定性是第一前提,如系统崩溃恢复容灾备份这些,主要是一些数据保护的机制,还有就是程序参数的校验、异常的处理、事务的回滚、程序边界的设计(合理的边界划分可以避免服务的连锁崩溃)、对账机制等,这些都是日常生活中常用的一些手段在计算机领域的体现,更详细的设计就不深入的分析了。 高并发 通过...

2018-03-23 00:32:26 2307 0

原创 ThreadPoolExecutor实现分析

该类是JDK中提供的线程池的实现,可以根据业务需求配置合适的参数,这样可以提高线程池的性能,该线程池的使用在前面的文章中已经讲解过了,本节主要分析其实现的机制是如何的。 如果让开发者自己设计线程池,肯定也会提出下面几个问题: 1、在初始化的时候,线程池的初始化大小。 2、当线程池中线程不够用...

2018-03-13 23:18:35 137 0

原创 Java引用分类和缓存实现

在JVM中将对象的引用分为了四类: 强引用:在GC阶段不会被垃圾回收 软引用:在GC阶段可能会被回收 弱引用:在GC阶段肯定会被回收 虚引用:不会影响对象的GC,当对象被GC的时候会得到一个通知 如果用JVM做缓存的,考虑到缓存的性质,缓存中的数据并不是需要一直存在在jvm的整个生命周期...

2018-03-13 22:40:58 446 0

原创 阿里云nginx的https配置

域名是在腾讯备的案:可以申请相应的证书,证书的安装步骤见https://cloud.tencent.com/document/product/400/4143#2.-nginx-.E8.AF.81.E4.B9.A6.E9.83.A8.E7.BD.B2 根据上面的配置配置好了nginx,以及tom...

2018-03-11 22:41:24 952 0

原创 Socket高可靠性数据传输

在计算机网络中,TCP/IP保证了数据的可靠性传输,但是该可靠性传输时建立在链路可用的情况下的,也就是说在链路可用的情况下,该协议可用保证数据可靠的传输到对端。 socket就是在TCP/IP协议(当然还包含其他协议)之上的更高层次的系统API,socket底层使用了TCP/IP来保证了链路在可...

2018-03-10 09:30:32 1217 0

原创 netty源码注解——websocket握手和分片组合

在使用web socket的时候也是需要注意netty引用计数这个机制,否则也容易出现错误 本节主要注解了netty中web socket的握手协议处理以及分片组合的实现方式 https://github.com/mh47838704/netty...

2018-03-06 21:11:04 1168 0

原创 Netty小记——引用计数机制

引用计数机制在很多框架中都有使用,如果在游戏引擎框架coscos2dx中,这种机制可以很简单的进行对象的生命周期的管理,netty引用计数机制原文:http://netty.io/wiki/reference-counted-objects.html Since Netty version 4,...

2018-03-05 00:17:18 983 0

原创 Hashmap的高性能使用小记

<p>An instance of <tt>HashMap</tt> has two parameters that affect its * performance: <i>init...

2018-03-01 00:21:44 389 0

原创 Netty和Mybatis源码中文注释

在上半年我会利用业余的时间,把netty和mybatis的源码看一遍,然后对某些关键的代码予以中文的注释,如果感兴趣的可以从下面的github获取相应的源码。 https://github.com/mh47838704/netty 点击我跳转 https://github.com/mh478...

2018-02-28 20:54:18 581 1

原创 mybatis深入浅出——连接管理+sql映射+结果集转换

本节主要对mybatis初始化源码的分析,简单的阐述mybatis的设计思想。 数据库访问相关的框架是对jdk中的数据库访问相关操作的更高层次的封装,所以如果要探究一个框架的设计原理,那么可以从下而上的进行分析。通过分析jdk中数据库访问的痛点,和分析mybatis的所解决的问题相结合,可以更加...

2018-02-25 11:46:12 200 0

原创 java远程ssh小记——jsch那些坑

jsch是java ssh远程连接的框架,在使用的时候首先看了一下官方的实现,然后看了一下这个框架的源码,发现该源码注释太少了,简直可以说是没有注释,只能老老实实的把相关的关键类看一下,并结合官方例子完成java ssh连接和远程命令的执行,下面是官方的例子(官方的例子加入了一些界面相关的代码,看...

2018-02-25 10:38:34 8232 2

原创 mybatis小记——数据库连接池实现

简单实现 说到数据库连接池的实现,可能大家并不陌生,应该都或多或少的实现过,那么先来说说一个简单的数据库连接池的实现。 既然是连接池,首先得有连接,然后有池子(废话),连接使用jdk的Connection,池子使用一个List<Connection>即可,需要连接的...

2018-02-10 21:51:16 2341 0

原创 spring多数据源路由小记

授之以鱼,不如授之以渔 首先讲一讲如何实现自己的多数据源的配置和使用。 多数据源的配置:这个问题很简单,什么jdbc.url….之类的多来几套即可以了,然后编写一个类读取几套该配置并为每一套连接建立一个连接池即可。 如何使用多数据源呢:多个数据源提供统一的获取连接的接口,接口参数是数据源的k...

2018-02-03 22:16:20 367 0

原创 Netty小记——web socket分片聚合实现

在netty中已经对web socket的分片重组进行了相应的实现,具体的实现类是 WebSocketFrameAggregator,该类继承自netty的消息聚合器MessageAggregator。 MessageAggregator ...... * @param the typ...

2018-02-03 20:46:38 652 0

原创 https://www.cnblogs.com/guwei4037/p/5591183.html

关于设计模式 https://www.cnblogs.com/guwei4037/p/5591183.html

2018-02-03 14:54:45 217 0

原创 apache shiro小记

功能介绍 1、shiro提供了session管理,并且默认实现了部分简单的session管理器,并且基于sessionDao的方式,可以方便用户自定义实现更加复杂的session管理器。 2、认证,shiro也提供了用户相关功能,对外提供了统一的认证的接口,具体的认证数据的来源用户可以自定义:...

2018-01-30 08:31:28 173 0

原创 jdk源码小记——锁机制(ReentrantLock源码解析)

锁的具体含义和使用方式,在操作系统里面已经有了比较详细的讲解,就不在这里赘述了。本小节主要讲解一下Java当中的锁的实现和使用(其实jvm是用c++写的,所以最终的实现和操作系统提供的锁机制有很大的干系) synchronized 该关键字也是是jdk提供的一种隐性的锁机制,需要特别注意的有以...

2018-01-27 15:30:09 117 0

原创 加密小记

从目前的了解来说主要包括两种:对称加密和非对称加密,其中非对称加密开销比对称加密开销大。 在连接建立的时候使用非对称加密传输随机生成的对称加密秘钥,在后续的数据加密中就是用随机生成的对称秘钥进行数据的加密传输。 一篇比较好的java的ssl socket文章

2018-01-25 23:08:59 80 0

原创 基于netty的web socket小记

1、WebSocketProtocolHandler里面包含了handshake过程,并且会在handshake完成之后产生一个用户事件往后面的管道传递,可以通过该事件判断web socket是否建立成功。ping、pong心跳帧已经在该handler中处理,管道后面的handler可以不用处理。...

2018-01-22 22:32:24 365 0

原创 jdk源码分析 ——Selector深入分析

1、spi方式的selector定制化 selector通过SelectorProvider创建的,通常不同安装版本的jdk中已经封装了相应的Select和SelectorProvider了,通过spi的方式进行扩展。(PS:spi是一种jdk提供的低侵入方式的扩展实现,目前已经在大多数的框架中...

2018-01-20 15:46:52 273 0

原创 web socket协议小记

1、协议upgrade 通过一个handshake进行协议升级,升级为websocket协议(同时不断开tcp连接),只有一次握手协议就可以完成协议升级,然后就可以进行进行websocket帧的发送。 3、Extension data 该概念比较混淆,通过看rfc协议文档可知,类似于在握手时...

2018-01-19 15:38:34 224 0

原创 jdk源码分析之ByteBuffer

ByteBuffer位于jdk源码包java.nio中通过对该源码文件的注释的阅读可知该ByteBuffer具有如下的特点: 1、该buffer可以使用直接内存(操作系统内存,不受java虚拟机管理)和间接内存(jdk管理的内存,受java虚拟机管理) PS(关于直接内存和间接内存的好处,网上...

2018-01-13 17:47:21 172 0

原创 Java多线程之—ForkJoinPool源码分析

首先推荐阅读ForkJoinPool的作者Doug Lea的一篇文章《A Java Fork/Join Framewor》 http://gee.cs.oswego.edu/dl/papers/fj.pdf 英文原文下载地址 还推荐一个不错的资源java并发编程文章资源 下面将首先介绍一下...

2018-01-08 21:07:10 362 0

原创 Java线程池深入分析(2)

Executor.java 该接口主要定义将任务提交到线程池的接口方法,为什么在该接口中只定义任务的提交方法,在jdk文档中也给了一个大致的说明(该接口只负责任务提交到线程池,与具体线程池如何执行提交的任务解耦) ExecutorService 该类主要定义了线程池的关闭方式,以及在Exec...

2018-01-06 22:04:44 98 1

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