翡翠小屋

Thinking will not overcome fear but action will.

少写了 @ResponseBody 引发的古怪问题

最近在 Tomcat 里写一个异步的 HTTP 服务端,出于方便的考虑使用了 Spring MVC 注解来搞定,然后就发生了诡异的结果。 代码如下: @RequestMapping("/test") public DeferredResult<String> test( final @RequestParam(required = tru...

也谈生成不重复的随机数系列(洗牌算法)

偶尔看到有人在讨论如何生成不重复的随机数系列(洗牌算法),发现他们用的方法复杂度十分高,要抛大量的随机数,因此把我以前用的洗牌算法也拿出来秀秀。 假设需要生成 1~54 的随机数,那么把 1~54 放入“数组”,抛 0~53 的随机数,把指定序号的牌,和最后一张牌交换。 下一步,抛 0~52 的随机数…… 重复 53 次就可以洗完牌,只需要53个随机数,53次交换,复杂度相当低,可以在...

基于状态机思想的 Xml SAX解析器

学习状态机的练习之作,使用 switch 的方式。 保存在 github 上:https://github.com/jadedrip/lugce/blob/master/lugce/xml/simple_sax.hpp 不多说,看代码: /** * Auctor: Chen Wang ( From China ) * Email: jadedrip@gmail.com * * This...

Lockfree 习作:最多保存56个对象的简单容器

练习作品: // 最多可以存放 56 个数值的容器 template< typename T > class SafeValuePool { public: SafeValuePool() : _mark(0) {} uint8 lock() { for( ;; ){ for( int i=0; i<56; ++i ){ asse...

无锁的 ( lock-free ) 线程安全算法

无锁的 ( lock-free ) 线程安全算法 友情提示:对 Lock-free 算法没概念的朋友,请先看下面的参考。 算法描述 Lock-free 算法的基础是 CAS (Compareand-Swap) 原子操作。当某个地址的原始值等于某个比较值时,把值改成新值,无论有否修改,返回这个地址的原始值。目前的cpu 支持最多64位的CAS。并且指针 p 必须对齐。 ** 注:原子操...

析构函数的秘密

C++ 对虚拟析构函数的解释: By making the Base class Destructor virtual, both the destructors will be called in order. The order of execution of destructor in an inherited class during a clean up is like thi...