摘要: SnowflakeID组成SnowflakeID有64bits长,由以下三部分组成:time—42bits,精确到ms,那就意味着其可以表示长达(2^42-1)/(1000360024*365)=139.5年,另外使用者可以自己定义一个开始纪元(epoch),然后用(当前时间-开始纪元)算出time... 阅读全文
posted @ 2014-07-17 15:42 外星猿 阅读(10048) 评论(0) 推荐(2) 编辑
摘要: 行为类模式包括责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法、访问者模式,我去,好多。。。下面主要挑选几个比较容易混淆且比较重要的模式进行对比说明。一、命令模式VS策略模式1、关注点不同策略模式关注的是算法替换的问题:一个新的算法投产,... 阅读全文
posted @ 2014-06-08 22:25 外星猿 阅读(396) 评论(0) 推荐(0) 编辑
摘要: Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器,JDK1.6中Sun HotSpot虚拟机的垃圾收集器如下:图中如果两个垃圾收集器直接有连线,则表明这两个... 阅读全文
posted @ 2014-05-28 16:30 外星猿 阅读(168) 评论(0) 推荐(0) 编辑
摘要: java application项目(非web项目)改进前:-Xms128m-Xmx128m-XX:NewSize=64m-XX:PermSize=64m-XX:+UseConcMarkSweepGC-XX:CMSInitiatingOccupancyFraction=78-XX:ThreadSta... 阅读全文
posted @ 2014-05-28 16:07 外星猿 阅读(1100) 评论(0) 推荐(0) 编辑
摘要: 本篇文章介绍下redis排序命令.redis支持对list,set和sorted set元素的排序。排序命令是sort 完整的命令格式如下:SORT key [BY pattern] [LIMIT start count] [GET pattern] [ASC|DESC] [ALPHA] [STOR... 阅读全文
posted @ 2014-05-28 11:12 外星猿 阅读(397) 评论(0) 推荐(0) 编辑
摘要: 下面要讲到的8种排序都属于内部排序,既在内存中完成,主要从理论原理方面来分析的。 插入排序①直接插入排序例:六个数12 15 9 20 6 31 24 用直接插入排序,如下图:思路:第一步:从给出的六个数中,随便拿出一个数,比如12,形成一个有序的数据序列(一个数当然是有序的数据序列了,不看12之外... 阅读全文
posted @ 2014-05-15 10:42 外星猿 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁(后面的章节还会谈到锁)。锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等... 阅读全文
posted @ 2014-05-07 11:02 外星猿 阅读(4039) 评论(0) 推荐(0) 编辑
摘要: Redis使用总结之与Memcached异同http://www.cnblogs.com/ceecy/p/3279407.htmlRedis是什么?两句话可以做下概括:1. 是一个完全开源免费的key-value内存数据库2. 通常被认为是一个数据结构服务器,主要是因为其有着丰富的数据结构 stri... 阅读全文
posted @ 2014-04-25 10:49 外星猿 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 关于CPU,有3个重要的概念:上下文切换(context switchs),运行队列(Run queue)和使用率(utilization)。 上下文切换: 目前流行的CPU在同一时间内只能运行一个线程,超线程的处理器可以在同一时间运行多个线程(包括多核CPU),Linux内核会把多核的处理器当作多个单独的CPU来识别。 一个标准的Linux内核可以支持运行50~50000个进程运行,对于普通的CPU,内核会调度和执行这些进程。每个进程都会分到CPU的时间片来运 行,当一个进程用完时间片或者被更高优先级的进程抢占后,它会备份到CPU的运行队列中,同时其他进程在CPU上运行。这个进程切换的... 阅读全文
posted @ 2014-04-07 18:47 外星猿 阅读(2156) 评论(0) 推荐(0) 编辑
摘要: 在高性能编程时,经常接触到多线程. 起初我们的理解是, 多个线程并行地执行总比单个线程要快, 就像多个人一起干活总比一个人干要快. 然而实际情况是, 多线程之间需要竞争IO设备, 或者竞争锁资源,导致往往执行速度还不如单个线程. 在这里有一个经常提及的概念就是: 上下文切换(Context Switch).上下文切换的精确定义可以参考: http://www.linfo.org/context_switch.html. 下面做个简单的介绍. 多任务系统往往需要同时执行多道作业.作业数往往大于机器的CPU数, 然而一颗CPU同时只能执行一项任务, 如何让用户感觉这些任务正在同时进行呢? 操作系统 阅读全文
posted @ 2014-04-04 16:13 外星猿 阅读(442) 评论(0) 推荐(0) 编辑