陈硕的 Blog

吾尝终日而思矣,不如须臾之所学也。吾尝跂而望矣,不如登高之博见也。……君子生非异也,善假于物也。

2012年3月17日

C++ 工程实践(10):再探std::string

摘要: 本文总结了std::string的三种常见实现方式。全文见https://github.com/downloads/chenshuo/documents/CppPractice.pdf第13节。 阅读全文

posted @ 2012-03-17 16:36 陈硕 阅读(8420) 评论(0) 推荐(0) 编辑

2011年8月22日

C++ 工程实践(9):数据抽象

摘要: 陈硕 (giantchen_AT_gmail)http://blog.csdn.net/Solstice http://weibo.com/giantchen陈硕关于 C++ 工程实践的系列文章: http://blog.csdn.net/Solstice/category/802325.aspx排版正常的版本: http://www.cnblogs.com/Solstice/category/287661.html陈硕博客文章合集下载: http://blog.csdn.net/Solstice/archive/2011/02/24/6206154.aspx本作品采用“Creative Co 阅读全文

posted @ 2011-08-22 00:20 陈硕 阅读(6155) 评论(6) 推荐(5) 编辑

2011年8月16日

C++ 工程实践(8):值语义

摘要: 本文是前一篇《C++ 工程实践(7):iostream 的用途与局限》的后续,在这篇文章的“iostream 与标准库其他组件的交互”一节,我简单地提到iostream的对象和C++标准库中的其他对象(主要是容器和string)具有不同的语义,主要体现在iostream不能拷贝或赋值。今天全面谈一谈我对这个问题的理解。 阅读全文

posted @ 2011-08-16 21:14 陈硕 阅读(16428) 评论(4) 推荐(10) 编辑

2011年7月17日

C++ 工程实践(7):iostream 的用途与局限

摘要: C++ iostream 的主要作用是让初学者有一个方便的命令行输入输出试验环境,在真实的项目中很少用到 iostream,因此不必把精力花在深究 iostream 的格式化与 manipulator。iostream 的设计初衷是提供一个可扩展的类型安全的 IO 机制,其整个设计复杂不堪,iostream 在实际项目中的用处非常有限,为此投入过多学习精力实在不值。 阅读全文

posted @ 2011-07-17 15:08 陈硕 阅读(27228) 评论(10) 推荐(10) 编辑

2011年7月1日

关于 TCP 并发连接的几个思考题与试验

摘要: 陈硕 (giantchen AT gmail)blog.csdn.net/Solstice前几天我在新浪微博上出了两道有关 TCP 的思考题,引发了一场讨论 http://weibo.com/1701018393/eCuxDrta0Nn 。第一道初级题目是:有一台机器,它有一个 IP,上面运行了一个 TCP 服务程序,程序只侦听一个端口,问:从理论上讲(只考虑 TCP/IP 这一层面,不考虑IPv... 阅读全文

posted @ 2011-07-01 12:51 陈硕 阅读(28820) 评论(20) 推荐(18) 编辑

2011年6月16日

Muduo 多线程模型:一个 Sudoku 服务器演变

摘要: 本文以一个 Sudoku Solver 为例,回顾了并发网络服务程序的多种设计方案,并介绍了使用 muduo 网络库编写多线程服务器的两种最常用手法。以往的例子展现了 Muduo 在编写单线程并发网络服务程序方面的能力与便捷性,今天我们看一看它在多线程方面的表现。 阅读全文

posted @ 2011-06-16 13:04 陈硕 阅读(5121) 评论(7) 推荐(4) 编辑

2011年6月6日

谈一谈网络编程学习经验(06-08更新)

摘要: 本文谈一谈我在学习网络编程方面的一些个人经验。“网络编程”这个术语的范围很广,本文指用Sockets API开发基于TCP/IP的网络应用程序。1. 网络编程的一些胡思乱想,谈谈我对这一领域的认识 2. 几本必看的书,基本上还是W. Richard Stevents那几本 阅读全文

posted @ 2011-06-06 08:43 陈硕 阅读(18734) 评论(17) 推荐(30) 编辑

2011年6月2日

Muduo 网络编程示例之十:socks4a 代理服务器

摘要: 本文介绍用 muduo 实现一个简单的 socks4a 代理服务器 阅读全文

posted @ 2011-06-02 23:03 陈硕 阅读(2971) 评论(5) 推荐(1) 编辑

2011年5月31日

分布式系统中要部署几台 NTP 服务器才够用?

摘要: 根据以上分析,似乎要 4 台 NTP 服务器才能满足基本的高可用需求,您同意吗? 阅读全文

posted @ 2011-05-31 00:07 陈硕 阅读(4424) 评论(6) 推荐(3) 编辑

2011年5月25日

Muduo 网络编程示例之九:简单的消息广播服务

摘要: 本文介绍用 muduo 实现一个简单的 topic-based 消息广播服务,这其实是“聊天室”的一个简单扩展,不过聊天的不是人,而是分布式系统中的程序。 阅读全文

posted @ 2011-05-25 23:22 陈硕 阅读(2362) 评论(0) 推荐(0) 编辑

2011年5月16日

C++ 工程实践(6):单元测试如何 mock 系统调用

摘要: 本文讨论了在编写单元测试时 mock 系统调用(以及其他第三方库)的几种做法。 阅读全文

posted @ 2011-05-16 00:20 陈硕 阅读(4298) 评论(0) 推荐(0) 编辑

2011年5月9日

分布式系统部署、监控与进程管理的几重境界

摘要: 根据公司的规模和技术水平不同,分布式系统的运维分为几重境界,以下是我对各重境界的简要描述。 阅读全文

posted @ 2011-05-09 16:48 陈硕 阅读(5957) 评论(5) 推荐(9) 编辑

2011年5月4日

Muduo 网络编程示例之八:用 Timing wheel 踢掉空闲连接

摘要: 本文介绍如何使用 timing wheel 来踢掉空闲的连接,一个连接如果若干秒没有收到数据,就认为是空闲连接。 阅读全文

posted @ 2011-05-04 21:23 陈硕 阅读(8508) 评论(5) 推荐(2) 编辑

2011年5月2日

Muduo 网络编程示例之七:“串并转换”连接服务器及其自动化测试

摘要: 本文介绍如何使用 test harness 来测试一个具有内部逻辑的网络服务程序。 阅读全文

posted @ 2011-05-02 19:49 陈硕 阅读(2338) 评论(0) 推荐(1) 编辑

2011年4月27日

Muduo 网络编程示例之六:限制服务器的最大并发连接数

摘要: Muduo 网络编程示例之六:限制服务器的最大并发连接数陈硕 (giantchen_AT_gmail)Blog.csdn.net/Solstice t.sina.com.cn/giantchen这是《Muduo 网络编程示例》系列的第六篇文章。Muduo 全系列文章列表: http://blog.csdn.net/Solstice/category/779646.aspx本文已以大家都熟悉的 EchoServer 介绍如何限制服务器的并发连接数。本文的代码见 http://code.google.com/p/muduo/source/browse/trunk/examples/maxconne 阅读全文

posted @ 2011-04-27 00:05 陈硕 阅读(3491) 评论(0) 推荐(1) 编辑

2011年4月25日

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

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

posted @ 2011-04-25 00:28 陈硕 阅读(4127) 评论(4) 推荐(2) 编辑

2011年4月22日

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

摘要: 看到一道热烈讨论的“移动用户资费统计系统”编程面试题,本文给出我的做法。http://blog.csdn.net/zhangxiaoxiang/archive/2011/04/06/6304117.aspx为避免版权纠纷,我这里就不引用原文了。 完整的代码见 https://github.com/chenshuo/recipes/tree/master/java/ 其中 billing/ 目录是 Java 代码,groovy/ 目录是计费规则。这份代码依赖 Groovy、JUnit、Joda date time (JSR-310) 等第三方库,见 run.sh 中 class path 的设置 阅读全文

posted @ 2011-04-22 13:04 陈硕 阅读(5228) 评论(10) 推荐(8) 编辑

2011年4月20日

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

摘要: 本文介绍一个简单的网络程序 roundtrip,用于测量两台机器之间的网络延迟,即“往返时间 / round trip time / RTT”。这篇文章主要考察定长 TCP 消息的分包,TCP_NODELAY 的作用。 阅读全文

posted @ 2011-04-20 09:27 陈硕 阅读(3106) 评论(0) 推荐(3) 编辑

2011年4月17日

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

摘要: 本文介绍 Muduo 中输入输出缓冲区的设计与实现。 阅读全文

posted @ 2011-04-17 12:24 陈硕 阅读(10582) 评论(3) 推荐(8) 编辑

2011年4月13日

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

摘要: 本文介绍如何将前文介绍的 protobuf 打包方案与 muduo::net::Buffer 结合,实现 protobuf codec 与 message dispatcher。 阅读全文

posted @ 2011-04-13 07:48 陈硕 阅读(5483) 评论(9) 推荐(3) 编辑

2011年4月3日

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

摘要: 在接收到 protobuf 数据之后,如何自动创建具体的 Protobuf Message 对象,再做的反序列化。其实,Google Protobuf 本身具有很强的反射功能,可以根据 type name 创建具体类型的 Message 对象,我们直接利用即可。 阅读全文

posted @ 2011-04-03 15:58 陈硕 阅读(40861) 评论(17) 推荐(9) 编辑

2011年3月30日

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

摘要: 摘要:本篇博客没有新东西,只不过是把去年在珠三角技术沙龙做的一次演讲的其中一张 ppt 展开讲一讲。分布式系统中的每个长期运行的、会与其他机器打交道的进程都应该提供一个管理接口,对外提供一个维修探查通道,可以查看进程的全部状态。一种具体的做法是在程序里内置 http 服务器。 阅读全文

posted @ 2011-03-30 00:03 陈硕 阅读(7032) 评论(3) 推荐(3) 编辑

2011年3月29日

分布式系统中的进程标识

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

posted @ 2011-03-29 09:29 陈硕 阅读(4529) 评论(2) 推荐(2) 编辑

2011年3月13日

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

摘要: 作为 C++ 动态库的作者,应当避免使用虚函数作为库的接口。这么做会给保持二进制兼容性带来很大麻烦,不得不增加很多不必要的 interfaces,最终重蹈 COM 的覆辙。 本文主要讨论 Linux x86 平台,会继续举 Windows/COM 作为反面教材。 阅读全文

posted @ 2011-03-13 09:07 陈硕 阅读(5535) 评论(12) 推荐(5) 编辑

2011年3月9日

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)。至于编译器与操作系统的 ABI 留给下一篇谈 C++ 标准与实践的文章。什么是二进制兼容性在解释这个 阅读全文

posted @ 2011-03-09 10:55 陈硕 阅读(6565) 评论(10) 推荐(1) 编辑

导航