Continuation, Actor & Coroutine(协程)

本文部分段落来自互联网。 概述 Actor、Coroutine(协程)和Continuation这三个概念由于并发编程的受关注而被经常提到,这里主要想谈下这三者的区别和联系。 首先,Actor和Coroutine在我看来是两种并发模型,仅针对于并发这个领域,而Continuation则是程序设计领域的一个概念,相比于Actor和Coroutine是一个更基础的概念……

【翻译】你应该知道的5个令人激动的Java项目

本文为译文,原文连接:Five exciting Java Projects you should know about 每个Java领域的开发人员都有可能使用到这5个项目并且从中受益。2011年在圣何塞大会上曾提名过这些项目。我之所以选择这些项目,是因为我在多个项目中都会使用到他们,并且他们能够帮助我解决现实的问题,最为开发人员,他们能帮助我们解决每天……

Netty和Jetty线程模型的对比

Netty boss线程池,前端每个端口一个boss线程,负责accept事件。 worker线程池,固定数量,默认是处理器数量的2倍,每个线程一个select对象,负责read&write事件,并进行handler的执行。 executor,可选,在有长事务的时候,workder线程会返回,将SocketChannel交给executor。 Jetty 2 accept线程:负责处理accept事……

Mina和Netty区别之小结

1. 二者buffer分配方式和分配算法不同。 mina使用heapbytebuffer,每次使用bytebuffer.allocate去分配。同时根据『满则增大一倍,两次一半则缩减一半』。这很大程度上使mina的buffer抖动多,影响io吞吐量。 netty使用directbytebuffer,同时有buffercache的存在,在buffersize不变的情况下,重复使用。分配大小依赖buffe……

浅谈Java日志框架(slf4j, logback, common logging, log4j)

老一代的系统基本使用的都是common logging和log4j的组合,common logging使用Fascade设计模式实现,门面后面可以转接除了log4j等其他多种日志实现,后来,log4j的作者Ceki看到这套实现在一些细节上的缺陷,于是,又开发了slf4j和logback, 但是他们并不属于Apache组织,slf4j用来取代common logging,而logback用来取代lo……

【转载】【经典】Netty和Mina性能测评与分析暨Buffer分配策略对比

原文连接:流行NIO框架Netty和Mina性能测评与分析 测试方法 采用Mina和Netty各实现一个基于NIO的EchoServer,测试在不同大小网络报文下的性能表现。   测试环境 客户端-服务端: model name: Intel(R) Core(TM) i5-2320 CPU @ 3.00GHz cache size: 6144 KB cpu cores: 4 jdk: 1.6.0_30-b12 network: ……

Oracle和Mysql的锁总结

Oracle 按照锁的相容性可将锁分为两类,分别是: 1. X-排他锁:如果对象被一个排他锁给琐住,其他会话就不能够在对这个会话所加锁的对象加任何的锁。 2. S-共享锁:如果对象被一个共享锁给锁住,其他会话除了S锁本身,都不能对这个会话所加锁的对象加任何的锁。 按照锁的粒度,锁类型可以分为三大类: 1.DML Lock……

HBase高表和宽表的设计

Twitter, Facebook, 微博等社交网站的主要构成就是用户关系,其中,最核心的用户关系需要解决下面3个问题: 1. 用户A登陆,需要查看自己关注了谁,以及显示其关注的用户的推文,所以要存储用户A关注了谁? 2. 用户A登陆,想要查看自己的粉丝,所以需要存储谁关注了用户A? 3. 用户A登陆,访问用户B的推特,那么需要知道用……

Linux网络IO相关工具

大部分线上应用基本可以归类为计算密集型应用和IO密集型应用,IO密集型应用又可分为网络IO和磁盘IO,本文主要讨论查看网络IO相关的Linux命令和工具。 1. sar是个多功能的监控工具,不需要管理员权限,可以看到每秒的磁盘存取速度,适合线上排查问题时使用,命令小巧实用。 123456789101112131415161718192021222324252627……

Linux磁盘IO相关工具

大部分线上应用基本可以归类为计算密集型应用和IO密集型应用,IO密集型应用又可分为网络IO和磁盘IO,本文主要讨论查看磁盘IO相关的Linux命令和工具。 1. 测试磁盘顺序IO的存取速度? 在磁盘上放个文件,然后使用如下命令: 1dd if=/home/robert/test-file of=/dev/null bs=512 count=10240000 从结果中就能看出这个磁盘的……

在多个源串中找到同位词

不考虑字母顺序,含有相同字符的单词称为同位词, 也有人称为兄弟单词,例如army和mary。本算法把输入的字符串按照字母顺序排序,然后,放入hash表,hash表的key是按字母顺序排序的字符串,值则是一个列表,列表是这些字母组成的多个同位词。 假设源数组有n个字符串,构造hash表需要O(n)的时间复杂度,查找则需要O(1)的复……

一亿个数字求top10

凡是求top多少的问题,基本都是使用堆排序,因为堆每次调整只需要log2k的时间复杂度,k是堆的大小,在此类题中是求最大或者最小的那些数字的数量,因此会将复杂度极大的进行简化。 假设一共有n个数字,求top k的数字,那么复杂度是O(nlog2k), 如果n = 100000000, k = 10, 计算得到100000000*log2^10 = 300000000, 也就是……

JDK启动时检查设置的最大堆内存

大家都知道Xms和Xmx是设置JVM堆的最小值和最大值,给人的印象是启动时候只要有Xms这么大的内存既可,随着内存占用变大,会占用更多的内存,那么如果启动的时候系统没有Xmx这么大的内存,但是有Xms这么大的内存,Jvm会继续运行吗? 答案是No,如果Jvm启动的时候发现Xmx大于系统总体内存,则提示这个内存设置值大于系统可表……

为浏览器禁止缓存

很多时候,让IE或其它浏览器缓存页面,可以提高页面的打开速度,这也是前端优化的一个重要途径,但是,在部分特殊的场合,让浏览器缓存,会影响网页的部分功能,就比如说,当页面中使用无刷新技术的时候,如果浏览器缓存了内容,那么,将不会显示即时的数据,严重影响网站功能,因此,这个时候,绝对不让能浏览器缓存,典……

三种常见的网站攻击方法(SQL注入, 跨站脚本攻击XSS, 跨站请求伪造CSRF)以及防范措施

本文简单的介绍三种常见的网站攻击,以及应对方法,事实上,网上有很多网站都不同程度的存在这些漏洞,其实,这些问题已经很显而易见了,解决办法也很简单,只要在网站建设中稍加注意都能有效的防止这些攻击。 SQL注入图解 此图来自互联网。 SQL注入案例 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或页面请求的查……

在Oracle和Mysql中查询锁定的表以及如何解锁

在RDBMS中锁是一个重要的概念,只要数据发生争用,锁是必须要用到的一种机制来保证数据访问的正确性,锁从数据访问类型可分为读锁和写锁,从范围可分为全局锁,表锁和行锁,从应用的角度还可以分为乐观锁和悲观锁,这些基础知识并不在本文讨论范围之内,我会在一篇单独的文章中讨论锁的类型,这篇文章将介绍Oracle和Mysql……

代理模式(Proxy)和装饰者(Decorator)模式的区别

想必大家每个开发人员都懂得设计模式,也都用过设计模式,感觉追捧设计模式就像武林中的剑宗只重视剑法,而不重视气功的修炼,例如,很多人知道代理模式,也知道装饰者模式,如果把这两个模式放在一起,对比下UML图,就会发现,两者的结构惊人的相似,所以又很少有人说出两者的区别,本文仅仅通过对比代理模式(Proxy)和装……

浅析Javascript和Java闭包(Closure)

随着大数据分析和并行计算逐渐的流行起来,函数式编程由于其语法简单,易于使用,因此变得必不可少,函数式编程中炒得如火如荼的概念就是闭包,听起来第一印象就让人想到大学时候数学里面的闭包,让人晦涩难懂,本文通过大家熟悉的Javascript和Java语言如何支持闭包来帮助大家理解闭包的特点和其应用场景。 首先看一下Jav……

Java语言中一个字符占几个字节

一直以来,我坚定的认为Java中的字符使用Unicode16作为内码,Unicode16是16位定长字符编码。有一天一个新同事和我说Unicode16不是定长的,不会吧?难道世界观又要被改变,经过新同事的介绍,并且介绍了一篇知呼文章,终于理解了什么为什么Unicode16是变长字符集,原来在Unicode16规范定义若干年后又扩展了“增补字符集”,……

实用类LoopNum的设计与实现

在文章使用均等概率产生(0,1)的函数实现均等概率产生(0,1,2)的函数的解法1中,通过对原始概率函数运算,分别生成g1=g()+1和g2=g()*2两个函数,和原始函数一起组成3个函数的集合(g, g1, g2), 并对这个集合中的3个函数进行轮询,产生概率相等的(0,1,2),代码如下: 12345678910111213141516171819202122232425262728293031p……