- 博客(45)
- 资源 (4)
- 收藏
- 关注
原创 java AbstractQueuedSynchronizer介绍以及原理分析
[size=medium][color=red][b]简介[/b][/color][/size][b]提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架。[/b]该同步器(以下简称同步器)[color=blue][b]利用了一个int来表示状态,期望它能够成为实现大部分同步需求的基础。[/b][/color]使用的方法是继承,子类通过继承同步器并需要实现它的方法来管理...
2016-11-18 14:27:41 123
原创 java AtomicInteger基于CAS的乐观锁实现
[color=darkred][b]1. 悲观锁与乐观锁[/b][/color] 我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时间片之间[color=red][b],需要进行cpu切换,也就是会发生进程的切换。[/b][/color]切换涉及到清空寄存器,缓存数据。然后重新加载新的thread所需数据。当一个线程被挂...
2016-11-16 11:13:52 177
原创 java Copy-On-Write容器学习
[color=red][b]Copy-On-Write简称COW[/b][/color],是一种用于程序设计中的优化策略。其基本思路是,[b]从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。[/b]从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是[color=r...
2016-11-16 09:00:58 117
原创 java 深入分析Volatile的实现原理
[color=red][b]引言[/b][/color]在多线程并发编程中synchronized和Volatile都扮演着重要的角色,[color=red][b]Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。[/b][/color]可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。它在某些情况下比syn...
2016-11-16 08:47:43 127
原创 java transient(不会序列化)、static关键字的作用
[size=medium][color=red][b]transient[/b][/color][/size][b]java 的transient关键字的作用是需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。[/b][color=red][b]transient使用小结[/b][/color...
2016-11-16 08:20:22 391
原创 java Guava cache学习笔记
[color=red][b]缓存,在我们日常开发中是必不可少的一种解决性能问题的方法。[/b][/color]简单的说,cache 就是为了提升系统性能而开辟的一块内存空间。 [color=blue][b]缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用。[/b][/color]在日常开发的很多场合,由于受限于硬盘IO的性能或者我们自身业务系统的数据处理和获取...
2016-11-15 18:26:44 136
原创 java Guava cache学习笔记
[color=blue][b]缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用。[/b][/color]在日常开发的很多场合,由于受限于硬盘IO的性能或者我们自身业务系统的数据处理和获取可能非常费时,当我们发现我们的系统这个数据请求量很大的时候,频繁的IO和频繁的逻辑处理会导致硬盘和CPU资源的瓶颈出现。 [b]缓存的作用就是将这些来自不易的数据保存在内存中,当有其他线程或者客户端需要查询相同的数据资源时,直接从缓存的内存块中返回数据[/b],这样不但可以提高系统的
2016-11-15 18:26:44 184
原创 java 通过使用wait和notify进行线程之间通信(代码)
[code="java"]public class Test { private final Operate operate = new Operate(); public static void main(String[] args) { new Thread(new Runnable() { @Overri...
2016-11-14 08:56:36 83
原创 java Netty远程编译代码(收藏学习)
[size=medium][color=red][b]客户端[/b][/color][/size][color=red][b]设置消息的长度:[/b][/color]buffer.writeInt(classByte.length);[color=blue][b]写入消息内容:[/b][/color]buffer.writeBytes(classByte);[color=orang...
2016-11-11 09:23:28 88
原创 java Netty远程编译代码(收藏学习)
writeBytes(classByte);[color=orange][b]传输内容:[/b][/color]channel.write(buffer);[code="java"]package hotswap.client;import hotswap.JavacTool;import hotswap.NamedThreadFactory;import java.net.InetSocketAddress;import java.nio.cha
2016-11-11 09:23:28 140
原创 公钥、私钥和SSL详细说明(生动例子)
[color=red][b]一,公钥私钥[/b][/color] [color=blue][b]1,公钥和私钥成对出现 [/b][/color]2,公开的密钥叫公钥,只有自己知道的叫私钥 [b]3,用公钥加密的数据只有对应的私钥可以解密 [/b][b][color=blue]4,用私钥加密的数据只有对应的公钥可以解密 [/color][/b]5,如果可以用公钥解密,则必然是对应...
2016-11-11 08:43:25 468
原创 公钥、私钥和SSL详细说明(生动例子)
据只有对应的私钥可以解密 [/b][b][color=blue]4,用私钥加密的数据只有对应的公钥可以解密 [/color][/b]5,如果可以用公钥解密,则必然是对应的私钥加的密 6,如果可以用私钥解密,则 必然是对应的公钥加的密 假设一下,我找了两个数字,一个是1,一个是2。我喜欢2这个数字,就保留起来,不告诉你们,然 后我告诉大家,1是我的公钥。 我有一个文件,不能让别人看,我就用1加密了。别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以 他解不开,只有我可以用数字
2016-11-11 08:43:25 234
原创 Netty源码细节之IO线程(EventLoop)
[b]先从一个简单的代码示例开始 [/b]服务端启动代码示例 [code="java"] // Configure the server. EventLoopGroup bossGroup = new NioEventLoopGroup(1); EventLoopGroup workerGroup = new NioEventLoopGroup();...
2016-11-10 19:04:47 129
原创 Netty源码细节之IO线程(EventLoop)
roup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap b = new ServerBootstrap(); b.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) .option(ChannelOption.SO_BACKLOG, 100)
2016-11-10 19:04:47 90
原创 java Hashmap原理分析
[size=medium][color=red][b]1. HashMap的数据结构[/b][/color][/size]数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。[b]数组[/b]数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;[b]链表[/b]链表存储区...
2016-11-10 15:03:47 81
原创 java Hashmap原理分析
存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;[b]链表[/b]链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。[color=red][b]哈希表[/b][/color]那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表。[b]哈希表((Hash table)既满
2016-11-10 15:03:47 50
原创 Netty Server端代码简单分析(转)
[size=medium][color=red][b]Netty源码简单分析: [/b][/color][/size]Netty整体架构清晰的分为两部分: 1.[b]ChannelFactory[/b]:主要负责生产网络通信相关的Channel和ChannelSink实例,NIO Server端一般使用NioServerSocketChannelFactory,用户也可以定制自己的Chan...
2016-11-10 11:37:54 112
原创 Netty Server端代码简单分析(转)
nnelSink实例,NIO Server端一般使用NioServerSocketChannelFactory,用户也可以定制自己的ChannelFactory。 2.[b]ChannelPipelineFactory[/b]:[b][color=blue]主要用来对传输数据的处理[/color][/b],由于对数据的处理属于业务相关,用户应自己实现ChannelPipelineFactory,然后往ChannelPipelineFactory添加自定义的Handler Netty服务端启动步骤
2016-11-10 11:37:54 111
原创 spring ehcache配置以及使用(afterPropertiesSet)
spring 配置ehcache例子:[url]http://blog.csdn.net/linfanhehe/article/details/7693091[/url] [color=red][b]主要特性[/b][/color] 1. 快速. 2. 简单. [b]3. 多种缓存策略[/b] 4. 缓存数据有两级:内存和磁盘,因此无需担心...
2016-11-08 19:24:16 396
原创 java 各个连接池学习总结(DBCP C3P0 PROXOOL)
要了解Java连接池我们先要了解数据库连接池(connection pool)的原理,[color=red][b]Java连接池正是数据库连接池在Java上的应用。[/b][/color]——我们知道,对于共享资源,有一个很著名的设计模式:资源池(Resource Pool)。[b][color=blue]该模式正是为了解决资源的频繁分配﹑释放所造成的问题。[/color][/b]为解决...
2016-11-08 19:00:55 150
原创 java 各个连接池学习总结(DBCP C3P0 PROXOOL)
对于共享资源,有一个很著名的设计模式:资源池(Resource Pool)。[b][color=blue]该模式正是为了解决资源的频繁分配﹑释放所造成的问题。[/color][/b]为解决上述问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。[b]预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需“缓冲池”中取出一个,使用完毕之后再放回去。[/b]我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视
2016-11-08 19:00:55 99
原创 java 过滤器、监听器和拦截器区别
[size=medium][color=red][b]过滤器[/b][/color][/size]Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,[size=medium][color=blue][b]主要的用途是过滤字符编码、做一些业务逻辑判断等。[/b][/color][/size]其工作原理是,只要你在web.xml文件配置好要...
2016-11-08 10:21:59 154
原创 web HTTP TCP UDP协议详情
[size=medium][color=red][b]TCP HTTP UDP[/b][/color][/size]HTTP/TCP/UDP 都是通信协议,也就是通信时所遵守的规则,只有双方按照这个规则“说话”,对方才能理解或为之服务。[size=medium][color=red][b]TCP/HTTP/UDP三者的关系[/b][/color][/size] TCP/I...
2016-11-07 19:44:04 175
原创 java jvm常见配置汇总(Xmx Xms Xss Xmn)
[size=medium][color=red][b]堆设置[/b][/color][/size]-Xms:初始堆大小[color=blue]-Xmx[/color]:最大堆大小[color=red][b]-Xmn2g: 设置年轻代大小为2G。[/b][/color]整个堆大小=年轻代大小 + 年老代大小 +持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老...
2016-11-07 19:15:51 544
原创 java jvm常见配置汇总(Xmx Xms Xss Xmn)
小=年轻代大小 + 年老代大小 +持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大, Sun官方推荐配置为整个堆的3/8。[color=blue][b]-Xss128k: 设置每个线程的栈大小。[/b][/color] JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经
2016-11-07 19:15:51 333
原创 Javascript 总结汇总
[code="Javascript"]var timeoutid = window.setTimeout(function(){ alert(123);},1000);clearTimeout(timeoutid);window.setInterval(function,times);--JSON对象不可扩展但是可以删除Object.preventExtensi...
2016-11-04 15:06:29 79
原创 Activiti 学习总结内容
[size=medium][color=red][b]Activiti总结内容[/b][/color][/size][color=red][b]常用方法汇总[/b][/color]sequenceFlow id='test' sourceRef='' targetRef=''serviceTask id='serviceTaskId' activiti:expression='#{...
2016-11-04 14:50:05 128
原创 Activiti 学习总结内容
iviti:expression='#{beanName.method}'自动调用beanName对应的bean的method方法这个bean还需要在ProcessEngineConfiguration中进行配置--部署一个流程图repositoryService.createDeploy().addClasspathResource(resourceName).deploy();--开启一个流程runtimeService.startProcessInstanceByKey(&
2016-11-04 14:50:05 141
原创 CSS 块对象(独占一行)和内联对象
[size=medium][color=red][b]块对象也称为块级元素,内联元素也称为行内元素[/b][/color][/size]① 块级元素(div,h1-h6,p,ul,dl,dd,form,table)② 行内元素[也叫内联元素](strong,em,span,b,i,a,img,input,iabel)[color=red][b]区别:[/b][/color]① ...
2016-11-03 10:13:52 181
google Guava集合工具类(超实用)
2017-11-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人