摘要: 如何“识别”优秀的程序员,Daniel总结了几条关键要素。他写道,“并不是和听起来那么容易。在这儿工作经验的作用是很有限的,因为伟大的程序员不一定要‘正式’的工作经历来证明他们的伟大。许多的工作经历可能会被误导。”以下摘自每日阅读: 1.激情—写代码是你的日常生活,而非工作; 2.自学好学—不会等着公司给你培训; 3.聪明—好的程序员通常可能是你认识的人里最聪明的那个,而且出乎意料的,好的程序员可... 阅读全文
posted @ 2014-03-18 19:55 zengxianxi 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 1、开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。2、里氏代换原则(Liskov Substitution Principle) 里氏代... 阅读全文
posted @ 2014-03-18 16:25 zengxianxi 阅读(276) 评论(0) 推荐(0) 编辑
摘要: 编写多线程程序是为了实现多任务的并发执行,从而能够更好地与用户交互。一般有三种方法,Thread,Runnable,Callable.Runnable和Callable的区别是: (1)Callable规定的方法是call(),Runnable规定的方法是run(). (2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值的 (3)call方法可以... 阅读全文
posted @ 2014-03-18 16:03 zengxianxi 阅读(1329) 评论(0) 推荐(0) 编辑
摘要: ConcurrentHashMap尽可能减小锁粒度实现高并发的支持,在ConcurrentHashMap内部,默认将HashMap分成16段,原后根据Hash算法将数据存入不同的段,每次向HashMap中存入数据时只需要锁住其中的一段,理论上,如果不是存入同一段,可以支持16个线程同时存入数据。 但是ConcurrentHashMap如果执行size方法,则需要分别锁住所有的段进行统计... 阅读全文
posted @ 2014-03-18 16:01 zengxianxi 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 并发List Vector和CopyOnWriteArrayList是两个线程安全的List,Vector读写操作都用了同步,相对来说更适用于写多读少的场合,CopyOnWriteArrayList在写的时候会复制一个副本,对副本写,写完用副本替换原值,读的时候不需要同步,适用于写少读多的场合。并发Set CopyOnWriteArraySet基于CopyOnWriteArrayLis... 阅读全文
posted @ 2014-03-18 15:57 zengxianxi 阅读(4531) 评论(0) 推荐(1) 编辑
摘要: 内部锁: 内部锁就是synchronised,由jvm内部实现管理重入锁: 它可以中断、可定时 重入锁(ReentrantLock),提供公平和非公平两种锁,公平锁保证先进先出,但是有一定的性能省耗 它是一种互斥的实现,一次只能一个线程拿到锁; 如果一个线程试图获取一个已经由它自己持有的锁,那么这个请求会成功,“重入”意味着获取锁的粒度是线程,而不是调用者。... 阅读全文
posted @ 2014-03-18 15:46 zengxianxi 阅读(457) 评论(0) 推荐(0) 编辑
摘要: java的内存模型分为线程工作区内存、线程执行引擎、主内存(共享内存)三部分; 线程执行引擎在执行时,对内存有使用和赋值操作 当线程使用(use)变量时,会触发线程工作区的加载(load)操作,线程工作区的加载(load)操作会触发主内存的读操作(read) 当线程对变量赋值(assgin)时,会触发线程工作区的存储(store)操作,线程工作区的存储(store)会触主内存的write操作。 主... 阅读全文
posted @ 2014-03-18 15:39 zengxianxi 阅读(151) 评论(0) 推荐(0) 编辑