分布式程序的自动化回归测试

以单独的进程作为 test harness 对于开发分布式程序相当有帮助,它能达到单元测试的自动化程度和细致程度,又避免了单元测试对功能代码结构的侵入与依赖。...
阅读(12076) 评论(17)

“过家家”版的移动离线计费系统实现

看到一道热烈讨论的“移动用户资费统计系统”编程面试题,本文给出我的做法。 http://blog.csdn.net/zhangxiaoxiang/archive/2011/04/06/6304117.aspx 为避免版权纠纷,我这里就不引用原文了。   完整的代码见 https://github.com/chenshuo/recipes/tree/master/java/ 其中 billing/ 目录是 Java 代码,groovy/ 目录是计费规则。这份代码依赖 Groovy、JUnit、J...
阅读(4250) 评论(3)

Muduo 网络编程示例之五: 测量两台机器的网络延迟

Muduo 网络编程示例之五: 测量两台机器的网络延迟 陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice  t.sina.com.cn/giantchen 这是《Muduo 网络编程示例》系列的第五篇文章。 Muduo 全系列文章列表: http://blog.csdn.net/Solstice/category/779646.aspx   本文介绍一个简单的网络程序 roundtrip,用于测量两台机器之间的网络延迟,即“往返时间 / round t...
阅读(9306) 评论(8)

Muduo 设计与实现之一:Buffer 类的设计

本文介绍 Muduo 中输入输出缓冲区的设计与实现。 本文中 buffer 指一般的应用层缓冲区、缓冲技术,Buffer 特指 muduo::net::Buffer class。 本文前两节的内容已事先发表在 muduo 英文博客 http://muduo.chenshuo.com/2011/04/essentials-of-non-blocking-tcp-network.html 。 如果文中的图形看不清楚,请移步 http://www.cnblogs.com/Solstice/archive/2...
阅读(24708) 评论(98)

模拟银行窗口排队叫号系统的运作

最近在网上看到了一道面试题,初看很简单,细看有点意思的一道题目: http://blog.csdn.net/zhangxiaoxiang/archive/2011/04/01/6294132.aspx 为避免版权纠纷,我这里就不引用原文了。   各人对题目的理解不一样,我把它当成一道离散事件仿真题目来做,用一个优先队列解决。 完整的代码见 https://github.com/chenshuo/recipes/tree/master/java/bankqueue 。 离散事件模拟 《数据结构》...
阅读(25694) 评论(71)

在 muduo 中实现 protobuf 编解码器与消息分发器

陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice  t.sina.com.cn/giantchen Muduo 全系列文章列表: http://blog.csdn.net/Solstice/category/779646.aspx 本文是《一种自动反射消息类型的 Google Protobuf 网络传输方案》的延续,介绍如何将前文介绍的打包方案与 muduo::net::Buffer 结合,实现了 protobuf codec 和 dispatcher。 ...
阅读(20625) 评论(37)

一种自动反射消息类型的 Google Protobuf 网络传输方案

这篇文章要解决的问题是:在接收到 protobuf 数据之后,如何自动创建具体的 Protobuf Message 对象,再做的反序列化。“自动”的意思是:当程序中新增一个 protobuf Message 类型时,这部分代码不需要修改,不需要自己去注册消息类型。其实,Google Protobuf 本身具有很强的反射(reflection)功能,可以根据 type name 创建具体类型的 Message 对象,我们直接利用即可。...
阅读(62172) 评论(127)

构建易于维护的分布式程序

陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice 摘要:本篇博客没有新东西,只不过是把去年在珠三角技术沙龙做的一次演讲的其中一张 ppt 展开讲一讲。 本文标题中的“易于维护”指的是 supportability,不是 maintainability。前者是从运维人员角度说,程序管理起来很方便,日常的劳动负担小;后者是从开发人员的角度说,代码好读好改。 前文《分布式系统中的进程标识》我提到一个观点:分布式系统中的每个长期运行的、会与其他机器打交道的进程都应...
阅读(16560) 评论(19)

分布式系统中的进程标识

昨天跟朋友聊天,谈到了分布式系统中如何为进程取标识符(process identifier),写篇博客简单总结一下我的观点:以四元组 ip:port:start_time:pid 作为分布式系统中进程的全局唯一标识符(gpid)...
阅读(13730) 评论(47)

C++ 工程实践(5):避免使用虚函数作为库的接口

摘要:作为 C++ 动态库的作者,应当避免使用虚函数作为库的接口。这么做会给保持二进制兼容性带来很大麻烦,不得不增加很多不必要的 interfaces,最终重蹈 COM 的覆辙。 本文主要讨论 Linux x86 平台,会继续举 Windows/COM 作为反面教材。 本文是上一篇《C++ 工程实践(4):二进制兼容性》的延续,在写这篇文章的时候,我原本以外大家都对“以虚函数作为接口”的害处达成共识,我就写得比较简略,看来情况不是这样,我还得展开谈一谈。 ...
阅读(19885) 评论(111)

C++ 工程实践(4):二进制兼容性

陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice 本文主要讨论 Linux x86/x86-64 平台,偶尔会举 Windows 作为反面教材。 C/C++ 的二进制兼容性 (binary compatibility) 有多重含义,本文主要在“头文件和库文件分别升级,可执行文件是否受影响”这个意义下讨论,我称之为 library (主要是 shared library,即动态链接库)的 ABI (application binary interface)。...
阅读(20668) 评论(61)

C++ 工程实践(3):采用有利于版本管理的代码格式

版本管理(version controlling)是每个程序员的基本技能,C++ 程序员也不例外。版本管理的基本功能之一是追踪代码变化,让你能清楚地知道代码是如何一步步变成现在的这个样子,以及每次 check-in 都具体改动了哪些内部。所谓“有利于版本管理”的代码格式,就是指在代码中合理使用换行符,对 diff 工具友好,让 diff 的结果清晰明了地表达代码的改动。...
阅读(13437) 评论(26)

为什么 muduo 的 shutdown() 没有直接关闭 TCP 连接?

今天收到一位网友来信:在 simple 中的 daytime 示例中,服务端主动关闭时调用的是如下函数序列,这不是只是关闭了连接上的写操作吗,怎么是关闭了整个连接?陈硕答复如下: Muduo TcpConnection 没有提供 close,而只提供 shutdown ,这么做是为了收发数据的完整性。...
阅读(9924) 评论(6)

[置顶] 陈硕博客文章合集下载(2013-02-01更新)

我的邮箱: giantchen_AT_gmail_DOT_com  推特帐号 @bnu_chenshuo新浪微博 weibo.com/giantchen  我不使用即时聊天工具。也请不要用 CSDN 短消息或者留言功能跟我联系。由于 CSDN 博客改版之后不再支持 Live Writer,原有的博客文章也出现代码格式错乱等问题,因此建议同时留意我的另外一个博客:http://www.cnblogs...
阅读(31219) 评论(30)

Muduo 网络编程示例之四:Twisted Finger

Python Twisted 是一款非常好的网络库,它也采用 Reactor 作为网络编程的基本模型,所以从使用上与 muduo 颇有相似之处。(当然,muduo 没有 deferreds)Finger 是 twisted 文档的一个经典例子,本文展示如何用 muduo 来实现最简单的 finger 服务端。限于篇幅,只实现 finger01~07。代码位于 examples/twisted/finger 。...
阅读(6202) 评论(3)

C++ 工程实践(2):不要重载全局 ::operator new()

对于现实生活中的 C++ 项目,重载 ::operator new() 几乎没有用武之地,因为很难处理好与程序所用的 C++ library 的关系。如果确实需要,我们可以从 malloc 层面入手,彻底而全面地替换内存分配器。...
阅读(15376) 评论(27)

C++ 工程实践(1):慎用匿名 namespace

匿名 namespace (anonymous namespace 或称 unnamed namespace) 是 C++ 的一项非常有用的功能,其主要目的是让该 namespace 中的成员(变量或函数)具有独一无二的全局名称,避免名字碰撞 (name collisions)。一般在编写 .cpp 文件时,如果需要写一些小的 helper 函数,我们常常会放到匿名 namespace 里。muduo 0.1.7 中的 muduo/base/Date.cc 和 muduo/base/Thread.cc 等处...
阅读(27131) 评论(59)

C++ 多线程系统编程精要

这是一套紧凑的 PPT,基本上每一张幻灯片都可以单独写一篇博客,但是我没有那么多时间一一展开论述,只能把结论和主要论据列了出来。 ...
阅读(27120) 评论(30)

Muduo 网络编程示例之三:定时器

本文介绍在非阻塞网络编程中定时器的用法与注意事项。...
阅读(13131) 评论(20)

Muduo 网络编程示例之二:Boost.Asio 的聊天服务器

这是《Muduo 网络编程示例》系列的第二篇文章。 本文讲介绍一个与 Boost.Asio 的示例代码中的聊天服务器功能类似的网络服务程序,包括客户端与服务端的 muduo 实现。这个例子的主要目的是介绍如何处理分包,并初步涉及 Muduo 的多线程功能。...
阅读(17989) 评论(11)
149条 共8页首页 上一页 1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:3181758次
    • 积分:24217
    • 等级:
    • 排名:第242名
    • 原创:144篇
    • 转载:3篇
    • 译文:2篇
    • 评论:3300条
    公告
    本人博客的文章均为原创作品,除非另有声明。个人转载或引用时请保留本人的署名及博客网址,商业转载请事先联系。我不使用即时聊天工具。也请不要用 CSDN 站内信、私信、短消息或者留言功能跟我联系。我的 gmail 用户名是 giantchen,微博 http://weibo.com/giantchen。
    陈硕的微博
    最新评论
    g