代码改变世界

Linux故障处理最佳实践

2012-03-03 20:57 by bangerlee, 4255 阅读, 6 推荐, 收藏, 编辑
摘要:引言 业务中断了! 老板咆哮,主管抓狂,而你就是那个要去处理故障、恢复业务的不幸的人。 你独自一人在阴暗的隔间里。北边是老板的办公室,西边是Team Leader的办公室,南面是茶水间,在那你能泡上一杯热咖啡。问题没有一点进展,你郁闷地盯着显示器。这时,电话再次响起,你不用接听也已知道又是一通抱怨用 阅读全文

自助Linux之问题诊断工具strace

2012-02-20 00:40 by bangerlee, 27207 阅读, 4 推荐, 收藏, 编辑
摘要:引言 “Oops,系统挂死了..." “Oops,程序崩溃了..." “Oops,命令执行报错..." 对于维护人员来说,这样的悲剧每天都在上演。理想情况下,系统或应用程序的错误日志提供了足够全面的信息,通过查看相关日志,维护人员就能很快地定位出问题发生的原因。但现实情况,许多错误日志打印模凌两可, 阅读全文

回顾2011——一个程序员工作半年后的自白

2011-12-30 22:36 by bangerlee, 11565 阅读, 12 推荐, 收藏, 编辑
摘要:2011年就要过去了,这一年,我从学校毕业,走上工作岗位,成为了一名程序员。在w公司工作的半年时间里,参与过项目开发,经历了岗位调动(由开发转为维护)。经过这段时间的工作,逐渐地对w公司开发人员和维护人员的工作和生活状况有了认识,相比刚走出校园的自己,心态也发生了一些变化。在此记录下2011年我工作 阅读全文

Linux系统与程序监控工具atop教程

2011-12-23 02:03 by bangerlee, 48120 阅读, 4 推荐, 收藏, 编辑
摘要:引言 Linux以其稳定性,越来越多地被用作服务器的操作系统(当然,有人会较真地说一句:Linux只是操作系统内核:)。但使用了Linux作为底层的操作系统,是否我们就能保证我们的服务做到7*24地稳定呢?非也,要知道业务功能是由系统上跑的程序实现的,要实现业务功能的稳定性,选择Linux只是迈出的 阅读全文

No!No!No! It's not fashion!

2011-11-08 23:38 by bangerlee, 2701 阅读, 2 推荐, 收藏, 编辑
摘要:还记得搞怪的hold住姐Miss Lin么,对于人们常规的行为,Miss Lin会挑起夸张的眉毛说:"Oh my God, it's not fashion!"。如果程序员圈子里有位Miss Lin,对于一些功能的实现,她会认为哪些编码实现方法是not fashion的,哪些是fashion的呢?下... 阅读全文

Google C++单元测试框架(Gtest)系列教程之六——FAQ节选

2011-10-25 23:19 by bangerlee, 6901 阅读, 1 推荐, 收藏, 编辑
摘要:这一节,我们来看Gtest的FAQ(Frequently-Asked Questions)。为什么测试用例和测试实例命名中不应包含下划线在C++中,对于以下情况,相应的标识可能会被编译器或标准库使用:以下划线开始并紧接一个大写字母的标识包含连续两个下划线的标识为避免标识符冲突,用户代码中不应自定义以... 阅读全文

Google C++单元测试框架(Gtest)系列教程之五——再论测试固件

2011-10-19 23:56 by bangerlee, 15325 阅读, 2 推荐, 收藏, 编辑
摘要:引言在《Google C++单元测试框架(Gtest)系列教程之三——测试固件(Test fixture)》中,介绍了如何使用测试固件为测试实例(Tests)进行数据配置和初始化。除了数据初始化方法,Gtest还提供了测试实例间共享数据的方法。同属一个测试用例的测试实例间共享数据为实现测试实例间的独立性,Gtest提供了为每个测试实例新生成一个测试固件对象的方法,通过“独享”测试对象中的数据,保证了一个测试实例的执行不会对其他实例的执行产生影响。但是,对于以下情况:初始化数据涉及内存申请等操作,为每个测试实例构造对象将带来较大系统开销;存在某数据,其在每个实例中均被用到,但每个实例都不会更改该 阅读全文

Google C++单元测试框架(Gtest)系列教程之四——参数化

2011-10-08 23:27 by bangerlee, 10848 阅读, 0 推荐, 收藏, 编辑
摘要:引言在上一篇文章中,我们学习了如何使用Gtest的测试固件(Test fixture)完成测试代码和测试数据的复用,这一节我们来学习如何使用Gtest值参数化的方法,简化函数测试;使用类型参数化的方法,简化对模板类的测试。值参数化假设我们要对以下函数进行测试:// 判断n是否为质数bool IsPrime(int n) 假设我们要编写判定结果为false的测试案例,根据之前学习的断言和TEST()的使用方法,我们编写测试代码如下:// Tests negative input.TEST(IsPrimeTest, Negative) { EXPECT_FALSE(IsPrime(-1)); .. 阅读全文

Google C++单元测试框架(Gtest)系列教程之三——测试固件(Test fixture)

2011-10-05 00:36 by bangerlee, 12226 阅读, 1 推荐, 收藏, 编辑
摘要:引言在《Google C++单元测试框架(Gtest)系列教程之二——断言、函数测试》中,我们了解了断言语句,以及如何运用TEST()进行函数测试,在TEST()的使用中,我们接触了一个测试用例包含多个测试实例的组织方式。多个测试实例可能需要进行相识的数据配置和初始化操作,为此,Gtest提供了测试固件(Test fixture)帮助我们进行数据管理。“落后”的方法在了解测试固件之前,我们先来看以下测试例子:template <typename E> // E is the element type.class Queue { public: Queue(); void Enque 阅读全文

Google C++单元测试框架(Gtest)系列教程之二——断言、函数测试

2011-10-03 14:25 by bangerlee, 13344 阅读, 2 推荐, 收藏, 编辑
摘要:引言在《Google C++单元测试框架(Gtest)系列教程之一——入门》中,介绍了如何编译测试代码、生成可执行文件,下面我们来看Gtest提供了哪些语句和框架来方便我们编写单元测试代码。断言1.断言类型断言即判断一个条件是否为真的语句,它是构成Gtest测试代码最基本的单元。Gtest为我们提供了两种类型的断言:ASSERT_*系列,当检查点失败时,终止测试函数;EXPECT_*系列,当检查点失败时,不终止所在测试函数,继续往下执行。我们使用断言语句的时候,一般选择EXPECT_*系列的,基于以下两个原因:该系列断言失败的时候并不终止所在测试函数,该函数中后续的检查点还能得到执行;测试函数 阅读全文