- 浏览: 270742 次
- 性别:
- 来自: 云南
最新评论
-
airu:
这里要补充一下,如果接口里面有函数重载,也就是相同函数名,那么 ...
使用 CXF 构建WebService中的问题分享 -
hot66hot:
写程序,这么说吧,如果是制造行业,仅仅是车间工人的工作Are ...
创业之路(一) -
airu:
mordecai 写道楼主茶叶店地址在哪哈哈,IT人,茶叶也叫 ...
时间去哪儿了 -
mordecai:
楼主茶叶店地址在哪
时间去哪儿了 -
zhangjianhong118:
人其实是可以活在虚拟世界里的,画家活着画板的虚拟世界,音乐家五 ...
最伟大的职业
文章列表
C#中的Spring Test
- 博客分类:
- 软件开发方法
C#中也是可以使用Spring的。这里主要是记录下如何使用Spring来做单元测试。
首先,开发工具是vs2012 ,我们使用 nuget来获取需要的软件包,类似maven
然后,需要spring开发包 可以通过nuget来管理。如果没有就自己找找。
应该有 Spring.Aop
Spring.Core
Spring.Data
Spring.Testing.Microsoft
接下来就是 我们的测试抽象类
namespace MyApp.Core.Test
{
public abstract cl ...
全排列递归思路(c)版本
- 博客分类:
- 算法
附上 c 版本
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 10
char * subElement(char *input,int pos);
void permutation(char *input,int len, int pos, char *p);
char *subElement(char *input, int pos)
{
int i = 0;
char *ret = (char*)malloc(MAX* ...
全排列递归思路(java)
- 博客分类:
- 算法
全排列,full permutation, 经常用于博彩行业。当然我也是一时心血来潮,突然想看看具体如何实现。
这里,我选择递归,因为递归的用法真是多种多样,而且这里正好也反应了一个事实,递归对应着数据结构中的树。
根据二 ...
职业无贵贱,但是却有一些职业,已经超出了他所能描述的范畴。他们已经不再是一种职业,而是神的代名词。
几十年前,还没有所谓的程序员。那些计算机革命的先驱者们,用非人的头脑,给我们的上帝之路修好了起点,于是越来越多的人开始筑起一座座神坛,把这条路引向了天堂。
今天,无论是那些工作多年的程序员,还是那些对计算机一无所知的人来说,他们可能从来没有感到过这条通往天堂之路的存在,因为他们走到了歧途,并只是在路上蹦蹦跳跳,完全没有对筑路做出任何贡献。
为什么我要把非程序员也包括进来了呢?
其实,我们每一个人都是程序员。而且大多数程序员并没有使用计算机编程。
而且,这个职业,从人类诞生开始就已经存 ...
python与web
- 博客分类:
- python
如果说java是建造高楼的砖石,那么python就是一支素质良好的施工队。
有一天,我苦于在ubuntu下没有找到词典应用,不得不打开网页,诸如有道词典这样的,然后输入单词。
凑合可用。但是网页内容太多,而且切换不易。于是决定用python解析这些网页,提取翻译。
首先,我们需要一个类似httpclient的工具,相当于浏览器的交流工具,然后还要一个html解析器。
当然我们不许要自己动手建造,只需要import httplib, import urllib,import sgmllib 即可。
好吧,来看我们是如何从有道词典抓数据的。
#!/usr/bin/evn python ...
graphviz画UML类图
- 博客分类:
- 工具
说到画图,我们可能首先想到photoshop 这样的工具,不一定人人都是学美术的,但是作为程序员,偶尔画个图,以方便更好的表达技术,那是很常有的事情,实际上画图的工具很多很多。这里,我要介绍一种和他们都不一样的工 ...
昨天只看到EventLoop了。还有一种MultithreadEventLoopGroup,
实际上他们实现的接口都是EventExecutorGroup和EventLoopGroup
看看抽象类 MultithreadEventExecutorGroup:
实际上她就是一个EventExecutor池。所以她还是提供EventExecutor的。
而且这里的EventExecutor的实现就是SingleThreadEventLoop,然后多线程的果然是多。他的操作都无非是批量操作。请看他的next函数
@Override
public EventExecutor next() {
...
- 2012-12-19 00:00
- 浏览 2557
- 评论(0)
netty4.0 之 EventLoop
- 博客分类:
- netty学习
在此之前,我们回顾下传统的网络编程。也就是socket。
socket编程中,客户端是发起连接的,服务端呢就监听某一个端口。
一档客户端连接被监听到,就在客户端和服务端建立一个连接,于是他们就可以传数据了。
NIO利用操作系统中的select,epoll等系统特性,避开了线程的开销和限制,由操作系统在数据到来时通知Selector, 当然NIO使用起来,还是需要自己去写一些框架性质的东西,不能专注于业务开发。netty 正是这样一个网络框架,使用它来获取的不仅仅是性能高效,更多的是业务的便捷开发。扯远了。现在就来看看EventLoop
public interface EventLoop e ...
- 2012-12-17 23:38
- 浏览 4477
- 评论(0)
netty4.0 关于Handler
- 博客分类:
- netty学习
ChannelHandler是netty中核心, 因为看起来是这样。
我们看看4.0的ChannelHandler,就会发现其实不太一样。
public interface ChannelHandler {
/**
* Gets called before the {@link ChannelHandler} is added to the actual context.
*/
void beforeAdd(ChannelHandlerContext ctx) throws Exception;
/**
* Gets ...
netty4.0 关于buffer
- 博客分类:
- netty学习
NIO中的buffer很经典,但是也需要小心翼翼。比如,flip如果不用好,就可能出错。
netty中重新封装了buffer,于是ByteBuf出现了。
public interface ByteBuf extends ChannelBuf, Comparable<ByteBuf> {
public ByteBufAllocator alloc();
public byte[] array();
public int arrayOffset();
public int bytesBefore(byte);
public int bytesBefore(ByteBufIn ...
netty 源码之Bootstrap
- 博客分类:
- netty学习
Bootstrap 以及 ServerBootstrap类都继承自 AbstractBootstrap
这个抽象类很有趣,请看
public abstract class AbstractBootstrap<B extends AbstractBootstrap<?>> {
...
}
泛型中的类是自身的子类。其实如果明白这个类的作用,就知道为什么要这么写了。
见doc:
AbstractBootstrap is a helper class that makes it easy to bootstrap a Channel. It support meth ...
并发与缓存——读《JCP》
- 博客分类:
- concurrency
缓存方法在我们编程中经常遇到。例如一个通过很复杂计算的值,但是一旦计算以后,就不再变化,我们可以用缓存存放。最简单的写法如下:
Object value = null;
if ( (value = cache.get(key)) == null ) {
value = compteValue(key);
}
cache.put(key, value);
如果不考虑多线程,这看起来也没什么问题。实际上的应用,则不太可能这样写,因为
首先:缓存的出现,正是为了减少cpu的消耗,也就是说,compteValue这个方法应该是很耗时的(如果很简单就获取了,也没必要使用缓存)。 ...
CountDownLatch 理解
- 博客分类:
- concurrency
Latch 在英文中是门阀的意思。也就是控制门的开关的关键。
所以,Latch在并发中,就是控制线程访问的。《JCP》中列举了几点用途:
1,等待资源初始化。
2,等待依赖服务启动。
3,等待队友加入活动。
具体的Latch有 CountDownLatch,如果只是说功能什么的,还是比较疑惑。
CountDownLatch 的功能就是初始化一个值,每次调用countDown方法时这个值就减 1。
注意初始化的值应该是正的,否則Throws:
IllegalArgumentException - if count is negative),而 await方法就是阻塞线程,直到这个值减为0
这个有 ...
自从JSR-133在jdk5中完善后,java的并发能力大大提升。我们可以使用concurrent包来完成很多线程工作,而不用处理线程所带来的复杂性。这里要说的自然是JMM。这是JSR-133中描述的,并且在jdk1.5后得到完善。
如果抛开JMM谈java并发, ...
java concurrency
- 博客分类:
- concurrency
并发编程是一个趋势。多核的出现,使得并发编程越来越重要。这里对于多核处理器来说,如果跑单一线程的程序,那么利用率是很低的。多线程正好成了人们压榨计算机的利器。
多线程是好的,可是,多线程也引入了一些复杂的东西。比如说同步。
记得在学操作系统的时候,就学过类似的东西,对临界资源的访问,PV操作啊什么的。万变不离其宗,多线程编程也同样如此。
java多线程实现是很简单的,大家也都知道synchronized关键字。也知道synchronized是通过加锁来保证同步的。当然,多线程还有很多要考虑的东西,并不是只有同步。
通过对《Java concurrency in practice》的阅读,对多 ...
- 2012-11-01 23:01
- 浏览 1069
- 评论(0)