- 浏览: 270736 次
- 性别:
- 来自: 云南
最新评论
-
airu:
这里要补充一下,如果接口里面有函数重载,也就是相同函数名,那么 ...
使用 CXF 构建WebService中的问题分享 -
hot66hot:
写程序,这么说吧,如果是制造行业,仅仅是车间工人的工作Are ...
创业之路(一) -
airu:
mordecai 写道楼主茶叶店地址在哪哈哈,IT人,茶叶也叫 ...
时间去哪儿了 -
mordecai:
楼主茶叶店地址在哪
时间去哪儿了 -
zhangjianhong118:
人其实是可以活在虚拟世界里的,画家活着画板的虚拟世界,音乐家五 ...
最伟大的职业
文章列表
Java-NIO-Selector
- 博客分类:
- Java-NIO
Selector 的出现,大大改善了多个 Java Socket的效率。在没有NIO的时候,轮询多个socket是通过read阻塞来完成,即使是非阻塞模式,我们在轮询socket是否就绪的时候依然需要使用系统调用。而Selector的出现,把就绪选择交给了操作系统(我们熟知的selec函数),把就绪判断和读取数据分开,不仅性能上大有改善,而且使得代码上更加清晰。
Java NIO的选择器部分,实际上有三个重要的类。
1,Selector 选择器,完成主要的选择功能。select(), 并保存有注册到他上面的通道集合。
2,SelectableChannel 可被注册到Selector上的通道。 ...
- 2012-07-16 22:52
- 浏览 10243
- 评论(0)
学习JavaNIO-文件内存映射
- 博客分类:
- Java-NIO
...文件映射有个需要注意的问题,就是你无法确保他被释放了。
也就是只有映射的内存被回收,文件才会被释放。否则其他进程访问就是被锁状态。
所以这个对于一个进程一个文件。如果多个进程访问一个文件,还是不是很适合。
最近看了文件内存映射。在NIO中,使用起来很方便。
文件通过内存映射以后,访问速度自然是提高了。
当然也有很多问题,现在我们来看看NIO中的内存映射文件。
public abstract class FileChannel extends
AbstractChannel implements ByteChannel, GatheringByteChannel, Scatter ...
- 2012-05-16 23:03
- 浏览 2911
- 评论(0)
JavaNIO-文件通道
- 博客分类:
- Java-NIO
文件通道,是一种特殊的通道。
对于文件通道来说,是不能阻塞的。所以并不能设置非阻塞模式。
对于异步文件I/O来说,这是很多操作系统支持的,NIO也会增强。
一个FileChannel只能从RandomAccessFile,FileInputStream和FileOutputStream来获取(getChannel),然后你就获得了某种能力,请看:
package java.nio.channels; public abstract class FileChannel extends
AbstractChannel implements ByteChannel, GatheringByt ...
JavaNIO-通道
- 博客分类:
- Java-NIO
Channel
这里的Channel接口很细。一个Channel能做什么呢?
package java.nio.channels; public interface Channel {
public boolean isOpen( );
public void close( ) throws IOException;
}
很简单吧。这个也太抽象了。通道就是这样。其实和我们看到的管道一样。可以关闭,可以问,这个管道通不通?
当然,最主要的还是我们如何使用呢?读和写永远是两个孪生操作。
对一个管道的字节读,有 ReadableByteChannel, WritableByte ...
Java NIO 缓冲区基础二
- 博客分类:
- Java-NIO
上一篇讲了基本的缓冲区概念,以及NIO的缓冲区属性以及部分操作。
现在让我们在看看缓冲区的一些细节。
1、缓冲区的创建
之前也许你已经看到了。我们使用alocate方法创建一个缓冲区。下面是一个创建方法集合。
public abstract class CharBuffer
extends Buffer implements CharSequence, Comparable {
// This is a partial API listing
public static CharBuffer allocate(int capacity);
public static CharBuf ...
Java-NIO-缓冲区基础
- 博客分类:
- Java-NIO
NIO中,有自己设计的一套缓冲区系统。
使用I/O,离不开缓冲区,高效的缓冲区,往往起到事半功倍的效果。
下面就看看NIO中的缓冲区是如何设计的。
首先,我们是针对概念来说明缓冲区的属性。缓冲区的四个属性:
1、容量(Ca ...
这个题目估计类似一些比赛用的题目。
现在先说一个。
说是有篮子,可以装球,篮子有一定的容量。问题是,给定篮子数量,篮子容量,还有小球数,求出有几种装法。(原文是英文的)
这里还有些限制,比如篮子数不会多余5个,小球不多于50个等。
例子:
篮子数 容量 小球数
2 5 2
结果: 3
也就是 (0,2),(2,0),(1,1)这三种组合
2 5 11
结果 0
这说明篮子不够装下那么多小球。
相信大家现在应该知道题意了。那么我们就开始算法吧。
我首相想到,这种排列组合的算法,使用循环来做。
那么,仔细一看,发现,有几个篮子,我们就要做几个大循环。每个循环里面,再通过尝试增加小球数,然后计算是 ...
- 2012-04-14 12:45
- 浏览 1179
- 评论(0)
ThoughtWorks面试(结对)有感
- 博客分类:
- IT生活
北京越来越热了,赶到东直门的时候绕了半天路,终于到了。正好准备一间房间做传说中的结对编程。我一看上面写着“元”,顿感不爽(最近在看宋史)。桌子上有两套鼠标键盘,两个显示器,一个是戴尔笔记本的显示器,一个是台式机的显示器。
然后HR很又好的倒好水,说一会儿有两个人来面试,一个作为结对的伙伴,一个算“监军”吧。
然后来了两个小伙子。问我习惯用台式机键盘还是笔记本键盘,我说随便吧,他说你还是自己选习惯的吧。我就顺手拿了台式机键盘。然后他们说他们习惯用IDEA,而不是Eclipse,就用IDEA把工程导入了。接着监军说,他没看过我的代码,让我说说。我就讲了下主要的地方。他说还是比较搞不清,让我画了图, ...
每天一个设计模式-- Strategy模式
- 博客分类:
- 软件开发方法
在学习策略模式的时候,我有点迷茫了,因为他和简单工厂模式很像。
这里的Context不就是工厂吗?
对,如果只是从图上看确实一样。但是,我们会发现,他们的侧重点不一样。
也就是意图不一样。策略模式,主要是用来封装一个场景下的不同的算法,通过接口隔离
具体的算法,我们可以对这些算法进行单独测试,并且在Context中替换使用。
再来看简单工厂模式,也是封装了不同的类,但是他的重点在创建,这些具体的产品类是不可以被替换的。
好了,说了那么多,或许我们还是很晕。那就看看Comparator 接口吧。如果你使用了一些集合类,然后需要排序那么你一定要知道如何比较这些集合中的对象吧。
于是,比较算 ...
TDD 学习笔记(三)
- 博客分类:
- 软件开发方法
接上一篇。这里到了比较关键的时候了。
Kent跨大步了,但是如何找到合适的步伐,还是需要不断从小步尝试。
现在看看目前的to-do lists吧。
5美元 + 5美元 = 10 美元
5美元 + 10法郎 = 10 美元 假设美元对法兰的汇率是 1:2
这里要注意的是两件事,首先,加法的引入,然后,汇率实现。
我们需要快速在脑子里浮现出一个场景。我们去银行兑换货币,银行提供汇率……
这里,先实现一个简单的加法测试
@Test public void testSimpleAddition(){
Money sum = Money.dollar(5).plus(Mone ...
- 2012-04-03 23:47
- 浏览 1218
- 评论(0)
TDD 学习笔记(二)
- 博客分类:
- 软件开发方法
上一次讲到了私有化amount,并且,重写了equals方法,对于hashCode方法(假设返回0,这样退化到线性查找,但是暂且不影响我们的正确性),我们暂且放下。我们现在还是看看to-do lists
5美元 * 2 = 10 美元
5美元 等于 5美元
5美元不等于6美元
私有化amount
5法郎 * 2= 10 法郎
5法郎 等于 5法郎
5法郎 不等于 5法郎
5美元 不等于 5法郎
上面是引入新的货币,法郎,我们发现其实和美元很相像。于是,我们创建和美元一样的测试,然后把美元的代码copy过来,修改成法郎。
上面的动作,或者就是大家工作中的真实写照了吧。不过不要着急,我们的测 ...
- 2012-04-03 18:16
- 浏览 1159
- 评论(0)
TDD 学习笔记(一)
- 博客分类:
- 软件开发方法
以前看过《TDD by example》,现在基本都忘记光了,大致记得一切从测试开始,然后不断重构,最后不断的迭代就能得到一个优雅简洁的设计。
关于TDD的很多讨论,我这里就不说了。对于写了那么多年代码的人来说,要想转变观念,还是需要更加冷静,多思考。
TDD 中 kent Beck大师教给我们的是一门内功心法,交给我们的是如何把预想的结果转化为设计。
TDD = Test-Driven Development
很多人以为是讲测试的,其实醉翁之意不在测试,而是开发,如何使代码clean
"TDD by example”这本书的风格我很喜欢,直接从例子开始,让然一看就被吸引住。
书中 ...
- 2012-04-03 16:09
- 浏览 1215
- 评论(0)
每天一个(设计模式)--工厂模式与抽象工厂模式
- 博客分类:
- 设计模式
工厂模式,属于创建型模式,我们不在自己创建对象,而是交由工厂来创建。
这样的好处是,我们使用工厂来封装对对象的需求,否则,你可能写一大堆if else来判断,然后新增一个对象的话,又得改这段代码。
简单的工厂模式 ...
- 2012-04-01 12:05
- 浏览 1617
- 评论(0)
每天一个(设计模式)-- Decorator模式
- 博客分类:
- 设计模式
GOF的设计模式,讲的很细,我这里都很粗略。什么意图,别名,参与者,结构,协作,效果等等。。。
我这等小民,也没有那么高深的理论,拾人牙慧就满足了。
模式是死的,运用是活的。
今天讲讲装饰器模式。其实 每个模式的名字都很重要,因为这个名字基本就说明了这个模式用来干什么。当然,装饰器,不是用来装饰的,但是和装饰相关。
比如,我们设计一个窗子,完了,觉得太单调,于是重新加上边框,还觉得单调,那就贴点窗纸吧,如果还是不满意,那么可以糊个纱窗……
如果用程序来实现,我们可能想到这些对象,窗子,加边框的窗子,贴窗纸的窗子(好拗口),加边框贴窗纸的窗子…… 其实这种错误只会在初学者身上犯。
首先,我 ...
- 2012-03-29 13:16
- 浏览 1794
- 评论(0)
今天这个模式,也是面试的时候问到的。其实这个模式最好理解。
观察者,与被观察的物体,订阅者,与被订阅(发布)者。
着这个模式下,我们实现了一对多的一个机制,并且可以针对对感兴趣的事情做订阅,或者观察,一旦有内容就自动通知。生活中这样的例子太多。在java中,也自带这个模式。我们还是先看看这个模式的UML:
一个订阅,一个发布,实际上很清晰明了。现在举个例子吧。天气预报吧。
每天都有气象局发布天气预报,而我们总不能天天打电话问吧,那就好好订阅一个天气服务吧,他会自动给你报。
首先,定义一个可被观察的对象。Oberservable,天气是可以被观察的吧。
public interf ...
- 2012-03-27 21:18
- 浏览 2090
- 评论(0)