2016-07-28 posted in [JUC包代码]
介绍:
ConcurrentSkipListMap是线程安全的有序的哈希表,适用于高并发的场景。
ConcurrentSkipListMap和TreeMap,它们虽然都是有序的哈希表。但是,第一,它们的线程安全机制不同,TreeMap是非线程安全的,而ConcurrentSkipListMap是线程安全的。第二,ConcurrentSkipListMap是通过跳表实现的,而TreeMap是通过红黑树实现的。
关于跳表(Skip List),它是平衡树的一种替代的数据结构,但是和红黑树不相同的是,跳表对于树的平衡的实现是基于一种随机化的算法的,这样也就是说跳表的插入和删除的工作是比较简单的...
Read more
2016-07-27 posted in []
2016-07-26 posted in [JUC包代码]
介绍:
ConcurrentHashMap是线程安全的hashmap,在多线程的情况下使用ConcurrentHashMap既能保证线程的安全,又能保证性能的最优,hashtable虽然也是线程安全的,可是在多线程的情况下效率低下。
特点:
ConcurrentHashMap在发生冲突的时候和hashmap一样采用链地址法,可是ConcurrentHashMap又多了一种数据结构叫做Segment,每次线程访问的时候只锁其对应的segment,不用的segment可以并发执行。
JDK8对hashmap和ConcurrentHashMap在底层实现上有个重大的改变:JDK...
Read more
2016-07-25 posted in [JUC包代码]
介绍:
CopyOnWriteArraySet相当于线程安全的HashSet,在多线程的情况下可以使用CopyOnWriteArraySet。
特点:
CopyOnWriteArraySet和HashSet虽然都继承于共同的父类AbstractSet;但是,HashSet是通过HashMap实现的,而CopyOnWriteArraySet则是通过CopyOnWriteArrayList实现的,并不是散列表。
Set 大小通常保持很小,只读操作远多于可变操作,需要在遍历期间防止线程间的冲突。
因为通常需要复制整个基础数组,所以可变操作(add()、set() 和 remo...
Read more
2016-07-24 posted in [JUC包代码]
介绍:
CopyOnWriteArrayList 是可以在多线程下使用的list,相当于线程安全的ArrayList。
特点:
它最适合于List 大小通常保持很小,只读操作远多于可变操作,需要在遍历期间防止线程间的冲突。
它是线程安全的。
因为通常需要复制整个基础数组,所以可变操作(add()、set() 和 remove() 等等)的开销很大。
迭代器支持hasNext(), next()等不可变操作,但不支持可变 remove()等操作。
使用迭代器进行遍历的速度很快,并且不会与其他线程发生冲突。在构造迭代器时,迭代器依赖于不变的数组快照。
原理:
...
Read more
2014-06-25 posted in [项目总结]
最近新加入一个项目组,需要使用到oracle数据库,因此花了一段时间把数据库的知识复习了一下,在此总结记录一下oracle数据库的用法。
一、SQL基础
1.1 数据定义语言(DDL)
DDL主要包括数据库对象的创建(create)、删除(drop)和修改(alter)的操作。
1.使用create语句创建表
create table table_name
(
column_name datatype [null|not null],
column_name datatype [null|not null],
...
[constraint]
)
例:
create t...
Read more
2014-06-08 posted in [设计模式]
工厂模式:
首先需要说一下工厂模式。工厂模式根据抽象程度的不同分为三种:简单工厂模式(也叫静态工厂模式)、本文所讲述的工厂方法模式、以及抽象工厂模式。工厂模式是编程中经常用到的一种模式。它的主要优点有:
可以使代码结构清晰,有效地封装变化。在编程中,产品类的实例化有时候是比较复杂和多变的,通过工厂模式,将产品的实例化封装起来,使得调用者根本无需关心产品的实例化过程,只需依赖工厂即可得到自己想要的产品。
对调用者屏蔽具体的产品类。如果使用工厂模式,调用者只关心产品的接口就可以了,至于具体的实现,调用者根本无需关心。即使变更了具体的实现,对调用者来说没...
Read more
2014-06-05 posted in [设计模式]
装饰者模式:动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
装饰者模式类图
事例实现:
题目:星巴兹是以扩展宿舍最快而文明的咖啡连锁店,因为扩张速度实在太快,他们准备更新订单系统,以合乎他们的饮料供应要求。他们又很多类型的咖啡,在购买咖啡时
也可以要求在其中加入各种调料,例如:蒸奶、豆浆、摩卡或者覆盖泡沫。星巴兹会根据加入的调料收取不同的费用。所以订单 系统必须考虑到这些调料的部分。
以装饰者模式构造饮料订单
1.先从Beverage类下手,这不需要改变星巴兹原始的设计。如下所示:
public abstract class B...
Read more
2014-06-04 posted in [设计模式]
1.观察者模式基本介绍
观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
观察者模式类图:
事例实现:
题目:气象监测站:有一个公司想建立一个应用,有三种布告板,分别显示目前状况、气象统计及简单的预报。当WeatherObject对象获得最新的测量数据时,三种布告板必须实施更新。
1.建立接口
public interface Subject{
public void registerObserver(Observer o);
public void removeObserver(Observe...
Read more
2014-06-03 posted in [设计模式]
策略模式:它定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的用户。
策略模式类图
Strategy类定义所有支持算法的公用接口
//抽象算法类或者是接口
abstract class Strategy
{
//算法方法
public abstract void AlgorithmInterface();
}
ConcreteStrategy,封装了具体的算法或行为,继承于Strategy
//具体算法A
class ConcreteStrategyA : Strategy
{
//算法A的实现方法
publi...
Read more
2014-06-02 posted in [项目总结]
做了一年的项目终于要结束了(我只能说研究所的效率实在是太低了),在收尾阶段,作为乙方,需要把做好的工程交付给甲方,可是我不希望他们修改后台的代码,
他们也不需要知道后台代码的实现细节,因此我需要做一个桌面快捷方式,让他们能直接运行我的工程就好。
首先是讲java工程导出为可执行jar包,具体步骤如下图:
1.在需要打包的工程上单击右键,并选中导出(export),如图:
2.在java目录中选中“可运行的jar文件”,并点击下一步,如图:
3.设置jar包的导出目标,并选择启动配置(main函数所在位置),点击完成,如图:
接下来运行一下这个jar包,看看是否导出成...
Read more
2014-05-30 posted in [感想]
前段时间在院群里收到通知,淘米网要来进行实习生招聘,于是看了一下招聘的岗位,有后台开发岗位,而且要求也比较符合我的能力
因此产生了兴趣,想去试一下,一是可以积累下经验,让自己了解到自身的不足,二是如果有可能的话也许就可以去实习(本人研一,老板基本不会同意出去实习的)。于是
愉快的在网上投了自己的简历,等待实习生校招开始。
淘米网的实习生招聘分笔试和面试两部分,面试最多有两轮,如果第一轮面试过了,就可以直接进行二面(HR面),如果第一轮面试悲剧了,那就只能回学校继续努力了。
笔试
笔试是在宣讲会之后进行的,宣讲会主要就是介绍了一下自己的公司,公司的文化,公司的待遇等等,然后就开始了紧...
Read more
2014-05-12 posted in [感想]
3Q大战风波渐渐平息,人们也逐渐的把目光转移到其他的新闻上,可是我觉得我们不应该把这件事当成笑话或者随便骂骂就了事了,我觉得这件事从侧面反映出中国互联网行业甚至中国整个社会存在的某些每个人都清楚却又无力改变的“中国国情”。
作为在5年后即将进入中国互联网行业或者说是中国软件行业的我,在这里想谈谈我对这件事的浅薄之见,仅供大家无聊闲暇时娱乐。
首先,我先要说明这次风波的本质是什么,这次3Q大战的本质就是“利益”,换句话说就是“金钱”,而并不是双方所谓的广大网民。其实奇虎和腾讯的矛盾也不是一天两天的了,应该说是很久以前就有了,而这次3Q大战的导火索就是QQ电脑管家软件。
今年中秋节后腾讯公...
Read more
2014-05-12 posted in [探索天地]
文章内容
1.注册git账号
2.创建一个项目
3.密钥设置
4.下载我的代码
5.安装jekyll
6.修改自己的博客
7.上传代码,生成自己的博客
1.注册git账号
打开github官网,注册一个账号,将我们自己的代码托管在github上。
注册该站点有两个目的:
+托管我们的开源项目;
+在上面建个静态博客吧。
Read more