自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 AQS源码分析

要研究AQS源码,需要从两个方向入手:1.他是啥?能干啥?2.怎么干?第一个问题,他是啥,能干啥:为实现依赖于先进先出 (FIFO) 等待队列的阻塞锁和相关同步器(信号量、事件,等等)提供一个框架。此类的设计目标是成为依靠单个原子int值来表示状态的大多数同步器的一个有用基础。子类必须定义更改此状态的受保护方法,并定义哪种状态对于此对象意味着被获取或被释放。假定这些条件之后,此...

2019-09-27 14:37:21 234

原创 Kerberos协议详解

协议的安全主要依赖于参加者对时间的松散同步和短周期的叫做Kerberos票据的认证声明。 下面是对这个协议的一个简化描述,将使用以下缩写:AS(Authentication Server)= 认证服务器 KDC(Key Distribution Center)= 密钥分发中心 TGT(Ticket Granting Ticket)= 票据授权票据,票据的票据 TGS(Ticket Gra...

2019-09-06 09:34:33 1017

原创 重拾算法->最大子数组的动归解法

public class Solution { public int maxSubArray(int[] array){ return dpImpl(array); } private int dpImpl(int[] array){ Result[] results=new Result[array.length+1]; ...

2019-08-30 16:02:22 228

原创 基于注解的序列化框架实现,支持json,xml,properties等众多序列化方式,支持自定义

占坑

2019-08-14 19:27:12 264 1

原创 基于ThreadLocal实现的内存池

占坑

2019-08-14 19:25:35 245

原创 go看起来有点奇怪的特性:向nil channel读写数据会永久堵塞该goroutine,正确使用该特性!!

附上两篇链接:下面这篇文章讲述了该特性的奇怪之处,以及简单用法https://studygolang.com/articles/3710下面这篇文章附以了更为常见的例子:https://blog.csdn.net/weixin_33834679/article/details/86026664总结:nil的channel不是初始化完成后故意做成是nil,相反初始化完成...

2019-06-06 23:02:14 2221

原创 对java中类加载及类加载器的稍微深入一点的理解

首先,本文并不是一篇入门的有关类加载的科普文章,相关类加载入门文章:https://www.ibm.com/developerworks/cn/java/j-lo-classloader/index.html上文较为深入的解释了类加载的相关概念和API,但没有解决的问题如下:1.整个java程序的类加载是如何启动的,哪些地方触发了类加载2.对于加载进来的类,如何判断谁是该类的真正类...

2019-04-17 09:33:30 269

原创 redis基于增量模式的优化

redis是一款基于内存的存储系统,掉电后数据将会全部丢失,为此redis支持一定的数据持久化能力,仅是持久化至本地磁盘。在持久化时,支持全量模式和增量模式;全量模式即将此时内存中数据做一次快照全部存储与本地磁盘中,由于本地磁盘大小往往远大于内存大小,且新生成的快照信息会覆盖旧的快照信息,因此不会存在什么磁盘溢出的危险。缺点是每次全量的将内存数据写入至磁盘且redis是一个单线程执行请...

2019-02-27 09:02:38 842

原创 mysql存储引擎的区别

命令行模式下通过 show engines ;命令可以查看当前mysql服务器预装支持的存储引擎,可以自己添加存储引擎可以看到当前所支持的存储引擎在 事务,XA,保存点的区别,更详细的区别:MyISAM是MySQL的默认数据库引擎(5.5版之前,新版本是InnoDB),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所...

2019-02-24 10:19:11 803

原创 关于netty实现的channelHandler线程安全探究以及可能导致不线程安全的例子

首先,netty的处理模型是存在一组IO线程,去处理IO事件,如read,connect,write等等,对于服务端接收到的每个channel,都会将该channel映射到一条IO线程。当一个channel被建立之后,需要将其初始化,包含给他创建pipleline并填充channelhandler;给channel附以channelOptions和channelAttrs等,其中填充channel...

2019-02-11 10:13:19 3648

原创 队列同步器,重入锁,读写锁,Condition相关API及实现

占坑

2019-02-04 14:07:47 376

转载 mybatis 动态sql实现

https://blog.csdn.net/asdasdasd123123123/article/details/81022666暂时记录

2019-01-28 10:58:11 141

原创 tomcat bio请求处理流程图

2018-12-26 23:21:06 349

原创 (tomcat)当启用nio的时候,却配置serverSocketChannel.blocking=true?

最近在观察tomcat源码。发现了这么一个现象:如上是当tomcat启用nio的connector的时候,会创建NioEndpoint去处理底层socket连接,在绑定操作中却发现,serverSocket配置的是非阻塞模式,当时十分震惊,明明启用的是nio,却还要设置阻塞?其实上述操作没什么问题,考虑我们为什么使用nio,而放弃bio.因为bio的accept是个阻塞方法,而且wri...

2018-12-26 08:37:34 901

原创 常量池是如何处理装箱类型的。

在java8实战中遇到了这样一种情景,当时的代码是这样的:输出已经列在后面了,但是解释的不是很对:因为当我更换其他装箱类型如Integer时,输出与其不同,如下: 后经查阅得知: 详细内容参见:https://blog.csdn.net/qq_34743420/article/details/73732892辛勤记录! ...

2018-11-25 21:49:15 160

原创 关于java代码中对类进行重定义的探究(即匿名内部类)。包含字段定义,方法重写,追加方法

写这篇博客的时候是在看java8实战,其中发现了一段代码,感觉很奇怪,之前虽然接触过方法的动态重写,但是没见过此种代码大致长这样:问题的关键不在于这是一个lambda表达式,而是后面大括号内直接追加代码,最后实现的效果跟你新建一个HashMap,然后在调用两次它的put方法外面看起来差不多,但是其实有很大区别,在遇到此类代码时,我一眼想起来的是方法的动态重写,类似这样:在这之前一直...

2018-11-23 17:18:26 789 1

原创 JVM synchronized关键字锁的基本原理(hotspot)

首先祭出上图,上图是线程获取锁和锁升级的基本流程但是其中还有几个点没有列举清楚,旁边标着有数字标号问题如下:1.CAS操作怎么失败的?考虑这样一种情景,我们假设线程1是第一个获得此锁对象的线程,一开始线程1进入同步代码块,检查到是无锁态,因此Compare null,Set 他自己的threadID,成功设置,当然可能也设置不成功,可能有其他线程在竞争锁,但是CAS操作一定会有...

2018-11-20 22:53:45 524

原创 编译原理词法分析,语法分析,抽象语法树的生成

https://gitee.com/wukangio/helison.archer参上!

2018-11-13 16:58:09 6787

原创 可达性分析算法与理解误区

摘引《深入理解JVM》:在主流的商用程序语言中(Java和C#),都是使用可达性分析算法判断对象是否存活的。这个算法的基本思路就是通过一系列名为GC Roots的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的,下图对象object5, object6, object7...

2018-11-04 22:01:10 2401 4

原创 子类父类成员的初始化顺序以及遇见的错误

引用:https://blog.csdn.net/moakun/article/details/80564311文中提到子类的初始化过程。    父类static修饰的模块        |    子类static修饰模块        |    父类实例变量和非static块        |    父类对应构造函数。当子类对应构造函数中没有显示调用时调用...

2018-11-01 16:16:03 467

原创 关于双重检查加锁(DCL)的理解

双重检查加锁的一般形式:class SomeClass { private Resource resource = null; public Resource getResource() { if (resource == null) { synchronized { if (resource == nu...

2018-09-06 18:15:21 2434 1

原创 访问者模式与双重分发

 真正

2018-09-01 10:09:17 369

原创 对各种DTO,VO,POJO等的理解

首先复制一下:JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性。众所周知,属性名称符合这种模式,其他Java 类可以通过自身机制发现和操作这些JavaBean 的属性。VO即value object值对象主要体现在视图的对象,对于一个WEB...

2018-08-31 20:25:00 2876

原创 正确理解“桥接模式”

首先分析桥接模式的目的:用于将类的功能层次结构与实现层次结构分离开来;使之能相对独立的变化;两个名词的解释:实现层次结构:比如你定义了一个接口(或者抽象类)Flyable,内部定义了void fly(),你是用FlyWithSwing这个类去实现了这个接口,并未增加相对Flyable的新的增强的方法,关于这一点,什么事增强方法,不是随便在实现类里边定义一个接口没声明的方法(往往是pub...

2018-08-30 10:45:20 1242 1

原创 对“状态模式”的认识

顾名思义,这个模式是当类的行为基于其内部状态的时候,并且可以根据状态的改变而改变它的相关行为的时候主要在代码上的表现就是代码中包含着许多If else语句,这时候或者你就应该提前想想是不是该使用状态模式了;稍后将会对状态模式进行分析首先看一个错误的例子(Head First设计模式书中,我抄上吧),虽然它名字上体现了State,但实际上并不是状态模式,或者说没能达到状态模式的精髓;p...

2018-08-29 17:50:37 165

原创 关于“装饰者模式”的一点粗浅理解

装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构(主要目的在于增强接口,而不是扩展接口)。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。黑体字就是关键字,要想用好该模式,就必须体会着几个关键字的意图;在 Head First设计模式 书中提了这样一个例子,原先有各种饮料,饮料具有Beverage基类,在该基类下有好几个实现...

2018-08-29 12:32:40 263

原创 关于实现 “监听者模式" 类似模式的一点理解

监视者模式,观察者模式,监听器模式,本质上都是一个东西,其简单实现类图如下:上图是经典的push类型的观察者模式,Observer对象往往提供一个类似support(Event)类型的方法来表示当前Observer对什么类型的事件感兴趣,当Subject发生变化时,Subject对象会调用notify方法通知在其注册的所有Observer,实现方法是,遍历List<Observer&...

2018-08-28 20:45:02 967

原创 CyclicBarrier与CountDownLatch使用

首先查看CyclicBarrier的类图 发现CyclicBarrier并没有超类和实现接口,因此CyclicBarrier只是一个工具类,用以协调线程运行;与之类似 CountDownLatch也是一个工具类,下面列举了其主要方法至于两者,对CyclicBarrier比较在意其await方法,而CountDownLatch则比较在意其await与countDown方法...

2018-08-13 19:17:42 140

原创 Exchanger的工作原理与实例

先上一个小demopublic class Main { public static void main(String[] args) throws InterruptedException { Exchanger<String> exchanger=new Exchanger<String>(); People li=new...

2018-08-08 19:14:35 816

原创 关于java并发容器使用的一点理解

首先,java并发容器是线程安全的,但这只是对所使用的并发容器类来说的,对于客户代码,并不总是成立,因为在客户代码中一个原子操作很有可能包含除并发容器之外的其他共享变量,而其他共享变量并不一定是线程安全的,纵使是线程安全的,也不能保证该操作是线程安全的,如下:import net.jcip.annotations.NotThreadSafe;import java.util.Map;i...

2018-08-07 18:09:13 213

原创 关于volatile关键字与内存可见性的一点理解

在日常写java代码的环境下(不是研究计算机理论的情况)是会观测到内存可见性所带来的一些问题,比如下面这段代码:public class ReorderingDemo { static boolean flag = false; public static void main(String[] args) throws Exception { new T...

2018-08-06 19:40:11 917

原创 spring xml中的String值是怎么转化成我们所需要类型的

在Spring的配置中,使用配置类还稍微好理解一点,毕竟直接使用的就是相对应的对象,但是使用XML时就稍稍有点难理解,在XML解析时里面的像这样的子元素<property name="" value=""/>value值统统都会转化成String值,我们有时候对应的property对应的类型是int将其转换成int也就罢了,但有时候不是int,而是像Date,Resource...

2018-08-01 18:51:25 1707

原创 Spring功能之外的实用类

1.Assert类 目的:主要用于检测参数合法性,若参数不合法,将会抛出非受检异常!从而接下来的需要参数合法的操作将不能执行接口一览:2.StringUtils 目的:String的解析3.Resource Resources等 目的 对文件系统,类路径下,二进制数组等文件进行解析4....

2018-08-01 09:50:06 149

原创 关于spring中environment注入为null的一点理解

最近在学习spring的源码 ,在学习中经常出现一件事,就是自动注入的某些属性不知道忘了那些配置经常会出现null的现象,现在做一些统一整理:首先:spring中的bean从注入方式上会分成三种,一种是普通的javaBean,就是自己在配置文件中写好的放在容器中的,在一种就是系统环境bean,包括三个,Environment,SystemPropertits,SystemEnvironment...

2018-07-31 19:15:20 10880 1

原创 spring lookup-method 子元素的使用方法

该方式注入称之为获取器注入 ,他把一个方法声明为返回某种类型的bean,但实际返回的bean是在配置文件里面返回的,此方法可以用在设计具有可插拔的功能上,解除程序依赖,示例如下:bean的声明:public abstract class Man {    public abstract void showMe();} Teacher和Student是Man的两种不同实现:p...

2018-07-30 10:16:54 505

原创 Map中环路检测

Map是一种键值对的集合,因为键值在使用时很有可能呼互换,比方说键K1对应的值时V1,然而V1又能作为键,而之前的K1将会作为K1对应的值,就产生了环路了,在很多情况下。产生环路可能会使程序无休止的执行下去造成严重后果,因此需要检测环路产生,当新插入的键值对会使原先的Map产生环路,就拒绝这次插入环路检测有很多种做法,我最喜欢的一种是:当存在环路时必然是有(K1,V1)存在且(V1,K1)...

2018-07-29 15:49:17 313

原创 写高效的java代码2

10.并发(1)同步访问共享的可变数据,而对于不可变数据,不要同步(2)避免过度同步,建立线程池(3)用新的并发包吧骚年 java.util.concurrent包的Excutor框架 放弃thread吧,新的并发包提供了更强大的功能(4)慎用延迟初始化。如果使用,请针对那些大对象或者像需要IO操作的对象11.序列化用的少没啥说的...

2018-07-26 19:06:25 261

原创 写高效的java代码

如何书写高效的java代码一直以来就是从初级程序员升级为中高级程序员的关键。effective java这本书带给了我很多启发,以下是读书整理:首先整体上一个java程序运行,从代码上看,有创建对象,对象初始化(赋值),对象执行相关方法,方法运行时需要考虑运行环境(单线程,多线程),方法运行时出现异常,对象跨jvm执行,方法执行完成考虑销毁对象,程序运行结束因此关于以上的程序运行的每个步骤...

2018-07-26 19:00:46 1914

原创 mybatis-spring学习总结

为了解决mybatis与spring的兼容问题,mybatis推出了mybatis-spring的jar包以实现兼容该jar包可以从maven上面获取 网址:http://mvnrepository.com/artifact/org.mybatis/mybatis-spring为了确保程序运行,还需加入spring的相关jar包根据mybatis,sqlSession,sqlSessi...

2018-07-23 17:02:53 367 1

原创 mybatis association collection关键字

如欲转载,请注明出处                   ----------------------------原创 wksdu对于级联操作,很多框架给出了相应的实现方案,其中Hibernate直接给出onetoone manytomany等一系列注解 简单直接 但是使用mybatis如何实现呢?mybatis并没有给出类似hibernate简单直接的一对一 一对多的显式声明 但给予了两...

2018-07-18 16:43:41 1043

空空如也

空空如也

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

TA关注的人

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