equals和hashCode方法的使用约定 发表于 2017-01-24 | Java的Object类中提供了两个重要的方法,equals和hashCode, 在map和set中这两个方法起到了至关重要的作用,以下是使用和重写这两个方法时的约定 如果两个对象通过equals比较的结果为true, 那么它们的hashCode也必须一样 如果两个对象的hashCode相等,那 ... 阅读全文 »
Memcached 发表于 2017-01-24 | Memcached命令格式123456 <command> <key> <flags> <expireTime> <bytes> <datablock>e.g. set name 0 0 8 suny ... 阅读全文 »
RabbitMQ的HA方案 发表于 2017-01-24 | RabbitMQ的HA方案默认情况下,queue可以认为是只存在于它被声明的那个节点中,但是broker和binding可以认为存在于集群中的所有节点中. 可以通过镜像的方式,将queue复制到其它的节点中,以此来提高可用性 镜像队列之间彼此形成了一主多从的关系,当主镜像队列因为某些原因消失时,一 ... 阅读全文 »
迭代器模式 发表于 2017-01-24 | 迭代器模式迭代器模式中涉及到两个关键的组件, 集合类与迭代器. 迭代器简化了遍历集合类元素的操作,使得外界可以不用了解集合类中的数据组织情况就可以访问其中的所有元素, 它的UML图比较简单,如下所示, UML图中定义了两个抽象接口,Aggregate和Iterator, 分别对应于上面所说的集合类 ... 阅读全文 »
Spring的IoC框架 发表于 2017-01-24 | 容器的含义Spring中的ApplicationContext继承自BeanFactory, 除了提供了BeanFactory的功能外,还额外提供了依赖管理,消息、生命周期监听等等功能,它就是所谓的“容器” Bean定义Bean在容器的定义由BeanDefinition定义. 具体的内容包括: 完 ... 阅读全文 »
多线程进阶 发表于 2017-01-24 | 多线程进阶 锁对象synchronized关键字内部使用的是一种较为简单的重入锁机制,可以通过Lock接口来实现相应的功能。Lock接口的好处在于在尝试获取对象锁时,可以直接返回或者等待一段时间后再返回,更为灵活 另外,读写锁提供了更为精巧的方式来控制同时读写的问题,它特别适合于解决读写互斥,写写互 ... 阅读全文 »
ThreadPoolExecutor源码解析 发表于 2017-01-04 | ThreadPoolExecutor(TPE)源码解析1. Ctl变量TPE的状态由ctl变量定义和追踪,ctl的低位(29位)定义了当前正在运行的工作线程数,而高位(3位)定义了当前线程池的状态 Running: 正在运行,并且接受新的任务 Shutdown: 不接受新的任务,但会执行已提交的任 ... 阅读全文 »
JUC 发表于 2016-12-29 | JUC并发包又可以进一步细分为: 原子操作 线程池 并发集合 锁及工具类 其中, 原子操作和LockSupport共同提供了CAS操作机制,它们共同为AQS的实现提供了基石. 而AQS框架进一步可以被封装成各种Lock实现,为线程池、并发集合提供支持. AtomicOperation, ... 阅读全文 »
Redis和Memcached的区别 发表于 2016-12-22 | Redis和Memcached的区别 支持的数据类型不一样Redis除了支持key-value之外,还支持Set, sortedSet, List以及Map类型,这些不同的类型使得redis可以应对更丰富的场景;Memcached只支持key-value的形式,因此它比较适合做缓存的场景 网络IO ... 阅读全文 »