- 博客(131)
- 资源 (17)
- 收藏
- 关注
原创 19年序
今天打开自己的博客一看,最近一篇文章已经是一年前了,感叹时间过的真快,这一年经历了很多,成长了很多。还有五天就是在新公司一年了,在这一年没有时间一直在快速的奔跑,没有时间去想别的事情,没有时间总结,但是俗话说“学而不思则罔,思而不学则怠”,从今天开始通过博客去总结我过去的一年、现在和未来。过去的一年可以用一些关键字进行描述积极主动内心强大正确总结学习拒绝自我认识思辨能力执行力实...
2019-05-12 23:13:19 330
原创 JDK源码分析——SecurityManager安全管理器实例分析
样例github安全管理器简介样例分析样例相关文件调试分析1、直接运行(无参数)2、配置默认安全管理器3、配置默认管理+自定义策略文件(=)4、配置默认管理+自定义策略文件(==)样例githubhttps://github.com/mh47838704/JavaExample参考文章:http://47777205.com/view/24...
2018-05-15 14:20:42 1802
原创 JDK源码分析——类加载器的分析和实战
本篇文章中的实例代码已经放入github的JavaExample中:github地址:https://github.com/mh47838704/JavaExample该文章中的实例代码:https://github.com/mh47838704/JavaExample/tree/master/src/test/java/com/mh/JavaExample/cloader实例放在...
2018-05-02 23:42:40 662
原创 JDK源码分析——Java的SPI机制分析与实战
重点提示:在我博客中的所有的源码分析的实例,我都将会放到github上,感兴趣的朋友可以下载下来调试运行,我相信还是可以有所收获的。我的目的是让所有读到我博客的朋友都可以了解到有价值的东西,学习到java核心的原理,使用起来更加得心应手。所有实例的GitHub地址:https://github.com/mh47838704/JavaExample ,我会不定期的更新代码,所有大家可以长期关注一...
2018-05-01 23:21:52 364
原创 JDK源码分析——ThreadPoolExecutor参数详解
参考文章:JDK源码分析——ThreadPoolExecutor参数详解本篇文章主要对jdk中线程池ThreadPoolExecutor的参数进行详细分析ThreadPoolExecutor已经对上面的各种情况进行了封装处理,并且提供了相应的参数对上述各种情况进行控制,首先我们看一下该类的构造函数,从源码我们可以看出该类的构造函数有很多个,不同的构造函数需要填写的参数不同。针对没有填写的参...
2018-04-28 15:47:40 371
原创 nginx——安装和配置详解
参考文章:nginx安装和配置详解第一章Nginx介绍Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点开发的。 如果需要更加详细的了解nginx,可以通过nginx的官网去了解,下面是nginx的官网地址 一、中文官网地址 https://w...
2018-04-26 23:07:16 48848 2
原创 Java流式处理——实例分析
参考文章:java流式处理实例分析由于在项目中使用了很多流式的处理,但是却对什么是流式处理没有概念,所以闲暇之余看了一下ArrayList的stream的实现,并按照该实现并结合Splitterator的样例实现了一个简单的可以并发的List,该List也支持流式处理的方式。由于本来是为了了解深入的分析一下流式处理而编写的样例,但是个人觉得通过调试分析该样例可以帮助大家对什么流式处理由一个...
2018-04-24 23:00:35 2703
原创 tomcat源码解读——启动过程分析
参考文章:tomcat源码解读——启动过程分析在上一篇文章中介绍了idea中tomcat源码调试环境的搭建,调试环境搭建完成之后首先配置tomcat的启动信息,配置信息如下(具体配置步骤参考源码中的README文件) 配置好了tomcat的启动信息之后,就可以开始从源码启动并调试tomcat了,在深入到tomcat的源码之前,为了对tomcat有一个更加直观的了解,可以首先分析一下tomcat...
2018-04-23 00:07:35 1094 1
原创 tomcat源码解读——Idea调试环境搭建
转载:tomcat源码解读——Idea调试环境搭建由于tomcat源码本身是基于ant构建的,所以如果想要在idea中运行,那么需要重新进行配置。通过在网络上查询相关的资料,找到了相关的配置,通过该配置可以在idea中正常的编译调试。已经添加好了配置文件的tomcat的源码可以在我的github上找到,下面是该源码的地址: https://github.com/mh47838704/...
2018-04-21 15:44:48 1161
原创 深入分析ReentrantLock公平锁和非公平锁的区别
在ReentrantLock中包含了公平锁和非公平锁两种锁,通过查看源码可以看到这两种锁都是继承自Sync,而Sync又继承自AbstractQueuedSynchronizer,而AbstractQueuedSynchronizer又继承自AbstractOwnableSynchronizer,下面是类的继承关系图: 其中AbstractOwnableSynchronizer是提供了设置占...
2018-04-20 00:24:41 23057 3
原创 tomcat源码分析——不同的应用隔离机制
通过为不同的应用创建一个webappclassloader即可实现不同的应用的隔离,避免不同应用之间的class的引用,从而引起的应用安全问题
2018-04-09 00:12:57 1148
原创 mybatis源码分析之Mapper初始化过程(2)
在上一节记录了Mapper的初始化的整个过程,本节将记录一下Mapper的初始化过程中一个子过程:从xml解析Mapper配置。Mapper的使用是首先定义一个mapper接口,在接口里面对mapper的入参和返回值进行定义,然后编写同名的mapper的xml配置文件,并在配置文件中对每一个接口的具体的sql的执行进行配置(当然使用注解也是一个很好的方式,在上一节提到了,注解的方式会覆盖掉xm...
2018-04-08 23:59:14 500
原创 mybatis源码分析之Mapper初始化过程(1)
通过分析MapperRegistry类的addMapper方法,可以看出mapper的生成过程以及初始化的机制:public <T> void addMapper(Class<T> type) { if (type.isInterface()) { if (hasMapper(type)) { throw new BindingExc...
2018-04-08 00:10:46 966
原创 深度剖析spring+shiro认证机制
引言项目中使用了shiro作为用户认证、角色管理、权限管理等,使用起来还是特别方便的,开发者只需要SecurityUtils.getSubject()获取subject就可以实现登录,以及权限验证。这样大大简化了开发者的功能,但是也有点让开发者感觉好奇,shiro是如何做到的呢。本章将会对shiro的认证机制进行深入剖析,由于从官方文档以及其他的一些博客对shiro的使用都做了详细的说明,...
2018-04-02 00:28:05 395
原创 java类加载机制的深入分析
绪jvm类加载机制在很多书籍里面都有讲解,主要介绍了基于委托的类的加载机制、类加载链接初始化的过程、以及类加载时机等,本篇文章通过编写自定义的classloader来对相关概念进行更加具体直观的分析。源码样例分析SelfClassLoader.javapackage cloader;import java.io.File;import java.io.FileInputSt...
2018-03-28 00:49:43 356
原创 LockSupport源码解析
绪今天和朋友讨论Java中的锁机制的时候,谈论到了LockSupport类,在之前一直没有使用过该类,所以当提到该类的时候还是有点陌生,然后看了一下JDK的源码和该类相关的技术博客,整理了一下该类的原理和使用场景。使用package mthread;import org.junit.Test;import java.util.concurrent.TimeUnit;i...
2018-03-26 00:21:53 677
原创 稳定高并发高性能程序设计原则简单总结
稳定性稳定性是第一前提,如系统崩溃恢复容灾备份这些,主要是一些数据保护的机制,还有就是程序参数的校验、异常的处理、事务的回滚、程序边界的设计(合理的边界划分可以避免服务的连锁崩溃)、对账机制等,这些都是日常生活中常用的一些手段在计算机领域的体现,更详细的设计就不深入的分析了。高并发通过多年来对操作系统的研究,以及结合多年来各种语言的编程经验来说,高性能的程序的开发其实都是有规可循的。因...
2018-03-23 00:32:26 3633
原创 ThreadPoolExecutor实现分析
该类是JDK中提供的线程池的实现,可以根据业务需求配置合适的参数,这样可以提高线程池的性能,该线程池的使用在前面的文章中已经讲解过了,本节主要分析其实现的机制是如何的。如果让开发者自己设计线程池,肯定也会提出下面几个问题: 1、在初始化的时候,线程池的初始化大小。 2、当线程池中线程不够用了,线程池如何处理。 3、线程池中只有很少或者没有任务运行的时候,线程池中空闲的线程该如何处理。...
2018-03-13 23:18:35 252
原创 Java引用分类和缓存实现
在JVM中将对象的引用分为了四类: 强引用:在GC阶段不会被垃圾回收 软引用:在GC阶段可能会被回收 弱引用:在GC阶段肯定会被回收 虚引用:不会影响对象的GC,当对象被GC的时候会得到一个通知如果用JVM做缓存的,考虑到缓存的性质,缓存中的数据并不是需要一直存在在jvm的整个生命周期中,所以可以在内存不够用的时候进行回收,所以可以使用软引用、弱引用的数据结构,如WeakHashMap...
2018-03-13 22:40:58 644
原创 阿里云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,以及tomcat的反向代理之后,发现https一直无法使用,这个是因为阿里云的端口的开发需要配置:安全组http...
2018-03-11 22:41:24 1120
原创 Socket高可靠性数据传输
在计算机网络中,TCP/IP保证了数据的可靠性传输,但是该可靠性传输时建立在链路可用的情况下的,也就是说在链路可用的情况下,该协议可用保证数据可靠的传输到对端。socket就是在TCP/IP协议(当然还包含其他协议)之上的更高层次的系统API,socket底层使用了TCP/IP来保证了链路在可用的情况下,数据可靠的传输到对端,那么应用层在使用socket的时候读写数据的时候就一定能保证数据可靠...
2018-03-10 09:30:32 2160
原创 netty源码注解——websocket握手和分片组合
在使用web socket的时候也是需要注意netty引用计数这个机制,否则也容易出现错误本节主要注解了netty中web socket的握手协议处理以及分片组合的实现方式 https://github.com/mh47838704/netty...
2018-03-06 21:11:04 1568
原创 Netty小记——引用计数机制
引用计数机制在很多框架中都有使用,如果在游戏引擎框架coscos2dx中,这种机制可以很简单的进行对象的生命周期的管理,netty引用计数机制原文:http://netty.io/wiki/reference-counted-objects.htmlSince Netty version 4, the life cycle of certain objects are managed by t...
2018-03-05 00:17:18 1422
原创 Hashmap的高性能使用小记
<p>An instance of <tt>HashMap</tt> has two parameters that affect its * performance: <i>initial capacity</i> and <i>load factor</i>. The * <i>
2018-03-01 00:21:44 582
原创 Netty和Mybatis源码中文注释
在上半年我会利用业余的时间,把netty和mybatis的源码看一遍,然后对某些关键的代码予以中文的注释,如果感兴趣的可以从下面的github获取相应的源码。https://github.com/mh47838704/netty 点击我跳转https://github.com/mh47838704/mybatis-3 点击我跳转还有一个基于netty+protobuf的简单的IM服...
2018-02-28 20:54:18 854 1
原创 mybatis深入浅出——连接管理+sql映射+结果集转换
本节主要对mybatis初始化源码的分析,简单的阐述mybatis的设计思想。数据库访问相关的框架是对jdk中的数据库访问相关操作的更高层次的封装,所以如果要探究一个框架的设计原理,那么可以从下而上的进行分析。通过分析jdk中数据库访问的痛点,和分析mybatis的所解决的问题相结合,可以更加透彻的理解框架的意义,从而可以更加高效的使用好框架,更好的整合到项目当中。大部分的数据库访问框架都...
2018-02-25 11:46:12 354
原创 java远程ssh小记——jsch那些坑
jsch是java ssh远程连接的框架,在使用的时候首先看了一下官方的实现,然后看了一下这个框架的源码,发现该源码注释太少了,简直可以说是没有注释,只能老老实实的把相关的关键类看一下,并结合官方例子完成java ssh连接和远程命令的执行,下面是官方的例子(官方的例子加入了一些界面相关的代码,看着比较混乱):/* -*-mode:java; c-basic-offset:2; inden...
2018-02-25 10:38:34 13181 3
原创 mybatis小记——数据库连接池实现
简单实现 说到数据库连接池的实现,可能大家并不陌生,应该都或多或少的实现过,那么先来说说一个简单的数据库连接池的实现。既然是连接池,首先得有连接,然后有池子(废话),连接使用jdk的Connection,池子使用一个List<Connection>即可,需要连接的时候从list中获取,如果list中没有那么就新new一个并加入到list中就可以了。使用完成之后,将连接放回list...
2018-02-10 21:51:16 2775
原创 spring多数据源路由小记
授之以鱼,不如授之以渔首先讲一讲如何实现自己的多数据源的配置和使用。多数据源的配置:这个问题很简单,什么jdbc.url….之类的多来几套即可以了,然后编写一个类读取几套该配置并为每一套连接建立一个连接池即可。如何使用多数据源呢:多个数据源提供统一的获取连接的接口,接口参数是数据源的key,该接口通过key值来找到对应的数据源的连接池,返回相应的连接即可。上面就是一个多数据的配置和
2018-02-03 22:16:20 547
原创 Netty小记——web socket分片聚合实现
在netty中已经对web socket的分片重组进行了相应的实现,具体的实现类是 WebSocketFrameAggregator,该类继承自netty的消息聚合器MessageAggregator。MessageAggregator ...... * @param the type that covers both start message and content messag
2018-02-03 20:46:38 1552
原创 https://www.cnblogs.com/guwei4037/p/5591183.html
关于设计模式https://www.cnblogs.com/guwei4037/p/5591183.html
2018-02-03 14:54:45 369
原创 apache shiro小记
功能介绍 1、shiro提供了session管理,并且默认实现了部分简单的session管理器,并且基于sessionDao的方式,可以方便用户自定义实现更加复杂的session管理器。 2、认证,shiro也提供了用户相关功能,对外提供了统一的认证的接口,具体的认证数据的来源用户可以自定义:支持文本配置、数据源配置、ldap、jndi等授权信息源配置。 3、授权,提供了细粒度的授权机制,可
2018-01-30 08:31:28 1304
原创 jdk源码小记——锁机制(ReentrantLock源码解析)
锁的具体含义和使用方式,在操作系统里面已经有了比较详细的讲解,就不在这里赘述了。本小节主要讲解一下Java当中的锁的实现和使用(其实jvm是用c++写的,所以最终的实现和操作系统提供的锁机制有很大的干系)synchronized 该关键字也是是jdk提供的一种隐性的锁机制,需要特别注意的有以下几点: 1、用在静态方法,锁的是类对象(类本身也是一个对象,是描述对象的对象),即class对象。
2018-01-27 15:30:09 241
原创 加密小记
从目前的了解来说主要包括两种:对称加密和非对称加密,其中非对称加密开销比对称加密开销大。 在连接建立的时候使用非对称加密传输随机生成的对称加密秘钥,在后续的数据加密中就是用随机生成的对称秘钥进行数据的加密传输。 一篇比较好的java的ssl socket文章
2018-01-25 23:08:59 165
原创 基于netty的web socket小记
1、WebSocketProtocolHandler里面包含了handshake过程,并且会在handshake完成之后产生一个用户事件往后面的管道传递,可以通过该事件判断web socket是否建立成功。ping、pong心跳帧已经在该handler中处理,管道后面的handler可以不用处理。2、在web socket服务器开发的时候,会用到http codec相关的handler,这些h
2018-01-22 22:32:24 543
原创 jdk源码分析 ——Selector深入分析
1、spi方式的selector定制化 selector通过SelectorProvider创建的,通常不同安装版本的jdk中已经封装了相应的Select和SelectorProvider了,通过spi的方式进行扩展。(PS:spi是一种jdk提供的低侵入方式的扩展实现,目前已经在大多数的框架中使用了,类似dubbo框架也使用该方式,让用户进行更好的定制化实现)2、selector的原理
2018-01-20 15:46:52 461
原创 web socket协议小记
1、协议upgrade 通过一个handshake进行协议升级,升级为websocket协议(同时不断开tcp连接),只有一次握手协议就可以完成协议升级,然后就可以进行进行websocket帧的发送。3、Extension data 该概念比较混淆,通过看rfc协议文档可知,类似于在握手时进行一些额外的验证,验证所需要的信息就是Extension data
2018-01-19 15:38:34 364
原创 jdk源码分析之ByteBuffer
ByteBuffer位于jdk源码包java.nio中通过对该源码文件的注释的阅读可知该ByteBuffer具有如下的特点: 1、该buffer可以使用直接内存(操作系统内存,不受java虚拟机管理)和间接内存(jdk管理的内存,受java虚拟机管理) PS(关于直接内存和间接内存的好处,网上搜索会出现很多,结论是直接内存比间接内存的I/O效率高,这仅限于在该buffer上有I/O操作,否则最好
2018-01-13 17:47:21 388
原创 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 563
原创 Java线程池深入分析(2)
Executor.java 该接口主要定义将任务提交到线程池的接口方法,为什么在该接口中只定义任务的提交方法,在jdk文档中也给了一个大致的说明(该接口只负责任务提交到线程池,与具体线程池如何执行提交的任务解耦)ExecutorService 该类主要定义了线程池的关闭方式,以及在Executor的基础之上封装了更多类型的任务提交方式,主要有两种方式:一种是单个任务提交执行;一种是批量任务
2018-01-06 22:04:44 200 1
common-pool的eclipse源码+例子
2016-05-05
java网络编程——网络版题库程序
2015-08-25
java ee servlet web connect mysql
2010-12-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人