- 博客(91)
- 收藏
- 关注
Atomic Bit Operation in Linux Kernel
Linux Kernel支持atomic bit operation。一个有意思的问题是:为什么有必要保证位操作的原子性?原因在于它会确保每次操作一定生效。例如对某个位进行两次操作,分别是设置0和1,那么这两次操作都会被执行,而不会被优化成一次性设置1。这在概念上有点类似epoll的edge trigger 和 level trigger。此外在Java SE中,由于伪唤醒的存在,我们都会在一个循...
2012-02-08 00:27:04
254
A Hierarchical CLH Queue Lock
A Hierarchical CLH Queue Lock (Victor Luchangco, Daniel Nussbaum, Nir Shavit) 这篇论文值得仔细推敲,虽然未必适合在Java中实际应用,但是至少提供了一种思路。
2012-01-14 19:01:11
246
Inside AbstractQueuedSynchronizer (4)
Inside AbstractQueuedSynchronizer (1)Inside AbstractQueuedSynchronizer (2)Inside AbstractQueuedSynchronizer (3)Inside AbstractQueuedSynchronizer (4) 3.6 ConditionObject Abstra...
2012-01-08 17:06:55
153
Inside AbstractQueuedSynchronizer (3)
Inside AbstractQueuedSynchronizer (1)Inside AbstractQueuedSynchronizer (2)Inside AbstractQueuedSynchronizer (3)Inside AbstractQueuedSynchronizer (4) 3.4 Template Method Abstra...
2012-01-07 23:37:23
139
Inside AbstractQueuedSynchronizer (2)
Inside AbstractQueuedSynchronizer (1)Inside AbstractQueuedSynchronizer (2)Inside AbstractQueuedSynchronizer (3)Inside AbstractQueuedSynchronizer (4) 3 AbstractQueuedSynchronizer ...
2012-01-07 17:54:19
138
Inside AbstractQueuedSynchronizer (1)
Inside AbstractQueuedSynchronizer (1)Inside AbstractQueuedSynchronizer (2)Inside AbstractQueuedSynchronizer (3)Inside AbstractQueuedSynchronizer (4) 1 Overview 如果查看Reentrant...
2012-01-06 11:04:09
136
MySQL Binlog Events Under Different Scenarios
1 TablesCREATE TABLE ta (id int(11) NOT NULL, name varchar(20) DEFAULT NULL, PRIMARY KEY (id)) ENGINE=InnoDB;CREATE TABLE tb (id int(11) NOT NULL, name varchar(20) DEFAULT NULL, PRIMARY KEY (id)...
2011-12-30 14:27:53
127
Gaps in MySQL Auto Increment Values
关于MySQL的AUTO_INCREMENT列出现不连续的原因,本文列出了几个比较常见的场景。MySQL 5.1.42, InnoDB Plugin 1.0.6, innodb_autoinc_lock_mode = 1 Scenario 1CREATE TABLE test(id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(10))...
2011-12-29 23:50:59
146
MySQL Open Replicator
Open Replicator ( http://code.google.com/p/open-replicator/ ) 开源了。Open Replicator是一个用Java编写的MySQL binlog分析程序。Open Replicator 首先连接到MySQL(就像一个普通的MySQL Slave一样),然后接收和分析binlog,最终将分析得出的binlog events以...
2011-12-29 17:05:47
190
Symmentric Coroutine in Lua
1 Symmetric Coroutine Lua支持asymmetric coroutine。对于symmetric coroutine,名为Coroutines in Lua的一篇论文,提供了如下的解决方案:coro = {}coro.main = function() endcoro.current = coro.mainfunction coro.cre...
2011-10-17 22:56:40
146
Code Optimization
当前开发人员在进行编码的时候,可能很少关注纯粹代码级别的优化了。关于优化,或许很多人会说不要过早地进行优化。从某种程度上来说,笔者也认同这个观点。但是当明确了优化对象的时候,我们都有哪些办法呢?以下是几个代码优化的简单例子。 1 Sample 1public class LoopPerf { public static double add1(double a...
2011-10-14 00:11:48
400
Several Frequently Used Commands
sed '/^\s*$/d' a.txt # delete ALL blank linessed '/./,$!d' a.txt # delete all leading blank lines at top of file sed '=' a.txt | sed 'N;s/\n/\t/' # cat -n a.txtsed '/./=' a.txt | sed '/./N; s...
2011-10-13 11:35:12
139
Nothing, Null, Nil, None & Unit in Scala
1 Nothing 是trait,定义为:final trait Nothing extends Any。Nothing处于Scala类型体系的最底层,是所有类型的子类型,Nothing没有实例。 2 Null 是trait,定义为:final trait Null extends AnyRef 。Null是所有引用类型的子类型,唯一的一个实例是null。 3 Nil 是case ...
2011-09-09 15:30:41
130
Distributed Lock
1 Overview 在分布式系统中,通常会避免使用分布式锁。然而在某些场景下,还是存在对分布式锁的需求。跟普通锁相比,分布式锁面需要对的问题更多,例如怎样保证某个进程在持有锁时意外终止之后,其它进程也能够正常地获得锁等等。笔者认为一个比较好的分布式锁实现是Terracotta,但是这不是本文的重点,感兴趣的读者可以参考笔者的Terracotta in Action 系列文章(h...
2011-08-02 22:02:29
530
What's New on Java 7 Phaser
1 Overview Java 7的并发包中推出了Phaser,其功能跟CyclicBarrier和CountDownLatch有些重叠,但是提供了更灵活的用法,例如支持动态调整注册任务的数量等。本文在Phaser自带的示例代码基础上进行一下简单的分析。 2 Glossary2.1 Registration Phaser支持通过register()和bul...
2011-07-29 10:15:26
109
Membase in Action
这几天试用了一下Membase,在这里简单地冒个泡。作为一款分布式的key-value 数据存储,Membase完全兼容memcached(实际上Membase跟memcached也是颇有渊源)。 用于memcached的客户端也同样可以访问Membase,例如spymemcached和xmemcached等。 既然Membase跟memcached兼容,那么可能大多数人都会有这样的疑问...
2011-07-26 21:03:47
117
Sequantial Lock in Java
1 Overview Linux内核中常见的同步机制有Atomic Operation,Spin Locks,Semaphore,Mutex等。其中Spin Locks和Semaphore都支持读/写锁。此外,Linux内核还支持一种更轻量级的读/写锁定机制:Sequential Lock。跟其它读/写锁定机制相比,Sequential Lock有以下特点:在获取锁时偏向写锁。只...
2011-06-07 17:00:41
169
Linux Readling List
Linux in a NutshellLinux System ProgrammingLinux Kernel Development推荐这三本书。一不小心成了Robert Love的粉丝。
2011-05-24 22:51:14
134
Scenarios that could cause deadlocks in MySQL
1 Overview InnoDB自动检测死锁。如果死锁发生,那么InnoDB会回滚权重相对小的事务。实际上,InnoDB中存在以下两种类型的死锁:真正的事务间循环等待。在进行死锁检测的过程中,如果InnoDB认为检测的代价过大(例如需要递归检查超过200个事务等),那么InnoDB放弃死锁检测,并认为死锁发生。 本文中使用的MySQL版本: 5.1.42,I...
2011-03-31 23:36:26
99
Git vs SVN
1 Overview Git作为一种Distributed Version Control System,和传统的Contralized Version Control System(例如SVN,CVS)相比存在很多不同之处,以下笔者认为相对来说比较重要的区别。本文提到的SVN版本为1.5,Git版本为1.7.0。 2 Differences2.1 Data Stor...
2011-02-22 23:22:30
133
原创 Happy new year
It has been a long time that I didn't put down anything on my blog. I was busy implementing a client/server prototype using quickfix/J and Eclipse RCP. This reminds me a lot of things that I‘ve forgo...
2011-01-04 22:54:19
144
MySQL HandlerSocket in Action
1 Overview 最近一篇关于MySQL HandlerSocket的blog吸引了不少人的注意,甚至MySQL Performance Blog上也有关于HandlerSocket的性能评测。该blog中声称对于一个CPU bound而非IO bound的MySQL Server(即绝大部分的数据可以从缓存中取得,例如InnoDB Buffer Pool有接近100%的命中率)...
2010-11-14 23:31:11
106
My Favourite Features of Scala
1 first class function & currying.2 trait. 可以有方法的默认实现,可以限定被mixed into的类型,可以在语义上更精确地限定方法参数的类型等。3 variance. 相比Java Generic中有限的支持,Scala中的variance更加灵活。4 structural type. 基于反射的语法糖,有的时候会发现它非常便利。...
2010-11-01 08:24:27
96
Bloom Filter
1 Overview Bloom filter最早由 Burton Howard Bloom提出,是一种用于判断成员是否存在于某个集合中的数据结构。 Bloom filter的判断基于概率论:如果某个成员存在于集合中,那么Bloom filter不会返回假(即不存在),也就是说false negative是不可能的。如果某个成员实际上不存在于集合中,Bloom filter...
2010-10-19 00:41:21
218
Python‘s Reading List
以下内容仅代表个人观点,绝无广告意图。Learning Python 3rd Edition. 尽管有些厚(英文版700多页),但是不失为Python入门的绝佳书籍之一。Dive into Python. Python进阶,内容比较全面。The Definitive Guide to Django Second Edition. Django入门书籍,内容浅显。 Pro Djan...
2010-09-09 22:33:41
112
The Goal Is the Journey Itself
不到两周的时间内阅读了1000多页的英文文档,编写了300页的ppt,组织了近20小时的培训,平均每天睡眠4~5小时。How did I make it through!
2010-09-02 22:30:25
120
Rounding in Python
本文所有例子均基于Python 3.1.2 1 Overview 首先简单介绍几种常见的舍入模式:ROUND_CEILING : 向正无穷大(Infinity)方向舍入。ROUND_FLOOR : 向正无穷大(–Infinity)方向舍入。ROUND_UP : 向远离0的方向舍入。ROUND_DOWN : 向靠近0的方向舍入。ROUND_HALF_UP ...
2010-08-20 17:04:51
233
Lost and Found
今天突然发现很久以前在JavaEye上发表的Efftive J2ME系列的文章只剩下最后一篇,其余三篇莫名其妙的被失踪了。之前一直以为JavaEye是个保存技术文档的不错选择,现在看来也未必了。无奈只得在网上试试搜索一下,幸亏有别的网站转载了这几篇文章, 于是重新在JavaEye上发表一遍。在重新发表的时候,貌似知道了其中缘由:文档里含有中文BOMB字样(这是因为我写的一个游戏名字叫Bom...
2010-08-10 20:10:08
225
Effective J2ME (4)
本文节选于笔者在数年前开发手机游戏时总结的一份文档。一家之言,贻笑大方。3 J2ME开发中的常见问题 由于J2ME相关资料比较少,所以在开发过程中经常会遇到现象诡异的问题。有些问题解决了,有些绕过了。以下总结了一些比较典型的问题和解决方法。3.1 按键响应迟钝 造成按键响应迟钝的最常见的原因是程序中的其它线程占用了绝大多数的CPU时间,从而导致负责事件转发的系统线程(E...
2010-08-10 17:37:48
141
原创 Effective J2ME (3)
本文节选于笔者在数年前开发手机游戏时总结的一份文档。一家之言,贻笑大方。2.2 规模 通常J2ME设备对Jar文件的大小进行了限制,例如Nokia6610允许最大的Jar大小为64K。因此在开发J2ME应用时,应该尽量编写精简的代码,使用具有可以接受效果的最小的图片。2.2.1 编写精简的代码 很多人都曾提出过在J2ME开发中减小代码大小的建议,例如减少类和方法的个数、...
2010-08-10 17:29:45
163
Effective J2ME (2)
本文节选于笔者在数年前开发手机游戏时总结的一份文档。一家之言,贻笑大方。2 J2ME开发技巧2.1 性能 在模拟器上可以使用JProbe Profiler等分析工具来分析性能瓶颈。但是需要注意的是模拟器的瓶颈与实机中的瓶颈可能存在差别。2.1.1 设计可重用的对象 在Java程序中,对象的创建是个不小的开销。同时过多的无用对象也会导致耗时的垃圾回收。因此在程序中,每...
2010-08-10 16:53:44
107
原创 Effective J2ME (1)
本文节选于笔者在数年前开发手机游戏时总结的一份文档。一家之言,贻笑大方。1 J2ME开发基础1.1 计算几何在J2ME开发中的应用 由于支持J2ME的设备通常不支持浮点运算,所以对于某些特定的问题可以通过计算几何学的方法解决。例如判断两条线段是否相交的算法,在支持浮点运算的设备上可以通过联立方程组求解的方法解决。在不支持浮点运算的设备上则需要通过计算几何的向量运算来解决。常见...
2010-08-10 16:51:14
134
Inside java.lang.Enum
1 Introduction to enum Java SE 5中引入了枚举,同时添加了一个新关键字enum。下面是个枚举的例子:public enum Suit { CLUBS, DIAMONDS, HEARTS, SPADES;} 枚举类型也是普通的Java类,继承自java.lang.Enum并默认实现了java.lang.Comparable接口和jav...
2010-08-04 15:40:14
124
Too much success can kill your business
Companies that can't scale their applications often fail completely. It is ironic, but ture: too much success can kill your business.
2010-07-17 13:52:50
99
Open Addressing
1 Overview Open addressing和Chaining是两种不同的解决hash冲突的策略。当多个不同的key被映射到相同的slot时,chaining方式采用链表保存所有的value。而Open addressing则尝试在该slot的邻近位置查找,直到找到对应的value或者空闲的slot, 这个过程被称作probing。常见的probing策略有Linear pr...
2010-07-07 17:59:38
469
JLine
Overview JLine 是一个用来处理控制台输入的Java类库,目前最新的版本是0.9.94。其官方网址是http://jline.sourceforge.net。在介绍JLine之前,首先还是介绍一下Java 6中的Console类,以便进行对比。 2 Java Console 通过调用System.console()方法可以得到与当前虚拟机对应的Co...
2010-06-17 09:11:14
490
ID Generator
关于ID Generator,想必大多数项目都有应用。跟按需生成ID相比,预生成一定数量的ID并加以缓存的方式更有助于提升性能。预生成ID的时机,通常是在发现缓存的ID用尽的时候。这种方式有个缺陷,即从调用者的角度来看每次取得ID所花费的时间可能并不均等。 如果应用要求每次取得ID时都要尽可能的快且时间均等,那么ID Generator可以在发现缓存的ID用尽之前进行预生成,保持...
2010-06-14 14:45:24
289
The passion of software engineer
If I stop working so hard, would I live longer? No, I just feel longer. By the way, many thanks to Dawei, you named this blog.
2010-04-07 01:46:28
246
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人