- 浏览: 530260 次
- 性别:
- 来自: 杭州
-
最新评论
-
liuwuhen:
...
Pushlet的工作原理 -
fbwfbi:
fengchuizhuming 写道楼主的完全正确。鉴定完毕楼 ...
硬件同步原语(CAS)理论 -
passerby_whu:
uule 写道这个测试后结果为:“testPageConten ...
FutureTask的使用方法和使用实例 -
fengchuizhuming:
楼主的完全正确。鉴定完毕
硬件同步原语(CAS)理论 -
edwardjuice:
FutureTask的使用方法和使用实例
文章列表
CopyOnWriteArrayList顾名思义,在写入操作时,copy源数组到新的数组中,而读取时,是从源数组去读的,因为写入操作是在另外一个数组中执行,因此在读取时,不用进行线程同步,但是要注意一点,copy数组的开销在数据量大的情况下,非常耗资源,因此,它的使用场景,适合于读取远大于写入操作的场景。当然,在写入时,是有锁的,JDK中的实现是采用重入显式锁进行锁定的。当写操作完成以后再将源数组的引用指向copy的数组,最后释放锁。
主要方法如下:
public boolean add(E e)
public void add(int index, E element)
p ...
1.装饰器模式
1.1 定义
动态地给对象添加新的功能,相比子类继承方式有更大的灵活性。比如Java中的InputStream,使用了BufferedInputStream进行了包装实现了buffer data的功能。
使用装饰器模式,符合Open-Closed 原则,对修改封闭,对扩展(增加)开放。
1.2 使用场景
装饰器模式适用于完成类似的功能
2.代理模式
2.1 定义
有时候,我们需要对实际对象的访问进行控制,我们对这个层的访问进行重新封装成一个新的对象,让客户端直接访问这个新的对象。
2.2 使 ...
指令名称 : chmod
使用权限 : 所有使用者
使用方式 : chmod [-cfvR] [--help] [--version] mode file...
说明 : Linux
/Unix 的档案存取权限分为三级 : 档案拥有者、群组、其他。利用 chmod 能藉以控制档案怎么被他人所存取。
把计 :
mode : 权限设定字串,格式如下 : [ugoa...][[+-=][rwxX]...][,...],其中u 表示该档案的拥有者,g 表示和该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
+ 表示增加权限、- 表示取消权 ...
Cat有三大功能:
1.一次性显示文档所有的内容
cat filename
常见参数如下
1)为每行加上行号并输出:cat -n filename或者cat --number filename
2)显示文档所有的内容包括换行符,tab符: cat -A filename或者cat --show-all filename
3)当遇见有连续两行以上的空白行,就代换为一行的空白行:cat -s filename 或者cat --squeeze-blank filename
2.创建文档
cat > fileName
3.合并文档
cat ...
工厂模式把对象的创建和使用分离,这样做的好处是分离具体对象的创建和使用,达到了尽量少的代码修改。
简单工厂模式又被称之为静态工厂方法模式,它是通过一个静态方法进行对象的实例化。
下面是一个数据库的操作工厂类,里面有三种数据库的操作类,如果直接使用对象:
MySqlOperate mySqlOperate = new MySQLOperate();
当数据库改成Oracle时,客户端的代码需要修改,而如果使用工厂模式:
DataOperate dataOperate = DataOperateFactory.getInstance();
这样做客户端代码就 ...
设计一个数据库连接池,不是非常难的事情,但是要做一个好的连接池,不容易。
1.连接池出现的背景
传统的JDBC连接,当应用程序需要connection的时候,就去创建,使用完了销毁。这种模式,对于稍微大一点的应用,频繁的创建和销毁连接,会给系统带来性能的问题,最终会成为性能的瓶颈。
连接池的基本原理如下:
创建一个pool,初始化时,预先把创建好的连接存在Pool里面,当需要连接时,从Pool取出一个,当使用完毕以后再把它放到池子里面。连接池应该有下面很重要的属性:
1)initialSize
初始化连接的数目
2)MaxIdle
最大的处于闲置状态的连接数 ...
架构设计必须遵循一些原则,这个原则是经过很多年先辈们的总结,好的架构,必须先了解好的软件设计原则,遵循这些原则可以做出更好的架构。
今天首先讨论DRY-Don't repeat yourself
DRY 也被称之为DIE,复制即是魔鬼,在我们软件开发过程中,会经常遇到这个问题,copy&paste。
DRY
是一个最简单的法则,也是最容易被理解的。但它也可能是最难被应用的(因为要做到这样,我们需要在泛型设计上做相当的努力,这并不是一件容易的事)。它意
味着,当我们在两个或多个地方的时候发现一些相似的代码的时候,我们需要把他们的共性抽象出来形一个唯一的新方法,并 ...
Semaphore可以用来控制能够同时发给你问某个特定资源的活动的数量或者同时给定操作的数量。计数信号量可以用来实现资源池或者一个容器限定边界。
一个Semaphore管理一个有效许可集合。许可的初始量通过构造函数传递给Sema ...
FutureTask是一种可以取消的异步的计算任务。它的计算是通过Callable实现的,它等价于可以携带结果的Runnable,并且有三个状态:等待、运行和完成。完成包括所有计算以任意的方式结束,包括正常结束、取消和异常。
Future有个get方法而获取结果只有在计算完成时获取,否则会一直阻塞直到任务转入完成状态,然后会返回结果或者抛出异常。
Executor框架利用FutureTask来完成异步任务,并可以用来进行任何潜在的耗时的计算。一般FutureTask多用于耗时的计算,主线程可以在完成自己的任务后,再去获取结果。
FutureTask有下面几个重要的方法 ...
CountDownLatch
CountDownlatch,是一种Sychronizer,它可以延迟线程的进度直到线程的进度到线程到达终止状态。
它本身而言是Java并发包中非常有用的一个类,它可以让某些任务完成以后再继续运行下面的内容,每个任务本身执行完毕后让计数器减一,直到计数器清零后,以下的内容才可以继续运行,否则将阻塞等待。
想了一下,这个场景非常适合用于项目中这样的场景:
我们有个项目,它需要三个第三方的API,并把结果拿到,在一个线程中顺序去拿结果没有问题,但是这里这三个任务是非常耗时的操作,如果顺序获取性能非常差,因此可以考虑用三个线程,当三个线程 ...
1.
定义
定义了算法的基本骨架,把一些步骤的实现延迟到子类中进行,它可以让子类不改变基本算法的数据结构而优化或者精加工(
refine
)某个特定的算法步骤。
2.
优点
模板方法设计模式有如下优点:
1)
减少了冗余的代码,重用代码部分通过父类完成
2)
将某个特定的算法步骤延迟到子类实现,不会影响父类的功能
3)
易于扩展,子类通过实现某个特定的方法而形成自己特定的算法逻辑,易于扩展
4)
子类不能修改父类算 ...
这个是跟一个朋友聊起的话题,面向对象有什么好处,当然我们回答的其实都不是很好,回家仔细想了一下,也查阅了一些好的资料。
说到面向对象的好处,首先要说到面向对象的特征,然后根据这些特诊来叙述面向对象的好处,也比较自然一点。
1.面向对象的特征
1)封装性
封装性很重要,它可以避免外部对象修改对象内部的状态,从而引起对象本身的稳定性,因此在代码编写过程中,要尽量考虑到对象的每个属性,不需要暴露的,尽量不要暴露。
2)继承
继承性,使不同的类,有相同的方法,这样可以最大程度地重用代码。
3)多态
多态使得我们可以使用相同的方法处理不同对象的行为 ...
今天跟同事讨论起怎么做好一个内部系统,别的系统会跟这个系统进行对接。
整理如下:
1.从API上的设计原则来说,以下的问题需要考虑:
1)API的扩展性要足够好,比如说,满足A用户的同时,假设用户B有新的需求,代码改动以后,不能影响A的客户端代码。常见的扩展性比较好的格式有XML API和Json,而WSDL比较差,一旦结构改动,客户端的调用代码也必须重构。
2)API的设计要考虑性能,比如说对于核心业务,或者访问比较频繁的API应该提供Combine的功能,可以让request一起发,结果可以一起返回。
3)如果给别的系统提供的是客户端的Jar包,要考虑别的系统通常 ...
DB,FileLock,zookeeper,memcached
谈到分布式环境下的并发控制策略,其实就是在分布式系统下,如何在一个集中点获取锁,分布系统中的server可以通过集中点获取锁:
1.使用Memcached
Server A获取锁lock1,过程如下:
1)调用MemcachedClient.get("lock1"),如果为空或者等于0,则表示没有其它server争用这把锁
2)调用MemcachedClient.put("lock1","1"),表示有人获取到锁并正在使用
3)使用完毕后,释放 ...
1. get是从服务器上获取数据,post是向服务器传送数据。
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML Body内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
4. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。