`
airu
  • 浏览: 267117 次
  • 性别: Icon_minigender_1
  • 来自: 云南
社区版块
存档分类
最新评论
文章列表
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 版本 #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* ...
全排列,full permutation, 经常用于博彩行业。当然我也是一时心血来潮,突然想看看具体如何实现。 这里,我选择递归,因为递归的用法真是多种多样,而且这里正好也反应了一个事实,递归对应着数据结构中的树。   根据二 ...
职业无贵贱,但是却有一些职业,已经超出了他所能描述的范畴。他们已经不再是一种职业,而是神的代名词。 几十年前,还没有所谓的程序员。那些计算机革命的先驱者们,用非人的头脑,给我们的上帝之路修好了起点,于是越来越多的人开始筑起一座座神坛,把这条路引向了天堂。 今天,无论是那些工作多年的程序员,还是那些对计算机一无所知的人来说,他们可能从来没有感到过这条通往天堂之路的存在,因为他们走到了歧途,并只是在路上蹦蹦跳跳,完全没有对筑路做出任何贡献。 为什么我要把非程序员也包括进来了呢? 其实,我们每一个人都是程序员。而且大多数程序员并没有使用计算机编程。 而且,这个职业,从人类诞生开始就已经存 ...

python与web

如果说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() { ...
在此之前,我们回顾下传统的网络编程。也就是socket。 socket编程中,客户端是发起连接的,服务端呢就监听某一个端口。 一档客户端连接被监听到,就在客户端和服务端建立一个连接,于是他们就可以传数据了。 NIO利用操作系统中的select,epoll等系统特性,避开了线程的开销和限制,由操作系统在数据到来时通知Selector, 当然NIO使用起来,还是需要自己去写一些框架性质的东西,不能专注于业务开发。netty 正是这样一个网络框架,使用它来获取的不仅仅是性能高效,更多的是业务的便捷开发。扯远了。现在就来看看EventLoop public interface EventLoop e ...
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 ...
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 ...
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 ...
缓存方法在我们编程中经常遇到。例如一个通过很复杂计算的值,但是一旦计算以后,就不再变化,我们可以用缓存存放。最简单的写法如下: Object value = null; if ( (value = cache.get(key)) == null ) { value = compteValue(key); } cache.put(key, value); 如果不考虑多线程,这看起来也没什么问题。实际上的应用,则不太可能这样写,因为 首先:缓存的出现,正是为了减少cpu的消耗,也就是说,compteValue这个方法应该是很耗时的(如果很简单就获取了,也没必要使用缓存)。 ...
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

并发编程是一个趋势。多核的出现,使得并发编程越来越重要。这里对于多核处理器来说,如果跑单一线程的程序,那么利用率是很低的。多线程正好成了人们压榨计算机的利器。 多线程是好的,可是,多线程也引入了一些复杂的东西。比如说同步。 记得在学操作系统的时候,就学过类似的东西,对临界资源的访问,PV操作啊什么的。万变不离其宗,多线程编程也同样如此。 java多线程实现是很简单的,大家也都知道synchronized关键字。也知道synchronized是通过加锁来保证同步的。当然,多线程还有很多要考虑的东西,并不是只有同步。 通过对《Java concurrency in practice》的阅读,对多 ...
Global site tag (gtag.js) - Google Analytics