自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

初心

每一天都是上帝给与我们最好的礼物,要以一颗谦卑的心,不虚度每一天。

  • 博客(113)
  • 收藏
  • 关注

原创 如何高效的组织需求讨论

摘要:研发过程中会有很多的业务需求评审和讨论,实际运行过程中会出现各种问题。例如,经常出现多次讨论无法达成共识,或者在需求上线阶段还面临修改的问题。互联网的最主要特点就是很多需求并非严格如合同般精准,且迭代速度非常快速,这就非常考究产品经理的能力。如果产品经理无法准确把握住业务的特点,提出富有创新力的需求想法,再好的研发也无法达成业务目标。此外,业务团队内产品-技术-运营-设计等同学对于业务的想法,如果无法形成真正的共识,就无法形成合力。本文针对该问题,提出了一套需求讨论的推荐流程,希望可以让讨

2022-03-10 11:51:23 774

原创 关于编写高质量的Python代码有感

最近在整理新项目在Robot上的模块级测试项目的应用库,真的是感慨芬兰的员工的代码质量真的让国内的人汗颜。设计简洁,代码高效优美,不仅仅为了完成当前的工作,为未来的接口也做了适当的设计。其实一段代码既可以为了完成任务草草完事,也可以精益求精,完全取决于一个程序员是否对自己有要求。记得在之前的测试开发项目组,曾经做过一个脚本开发的统一模板,目的为了更好的提高单个module的质量,同时方

2014-08-24 13:01:10 1248

原创 C 语言部分实现面向对象的继承特性【重构】

重构版本:之前的一个版本中,在“子类”对象构造时,采用动态对象申请“父类”,然后在内存拷贝到“子类的对象”中,在“子类”的“构造函数”结束后,再让临时“父类”对象“析构”。对于本文中的例子,animal类更像纯虚基类,因此其仅仅提供接口就可以了,不用对齐分配动态内存。下面我对这个例子进行了重构。重构后的代码,仅仅附上修改的部分://animal_base.h

2014-08-20 09:46:13 911

原创 C 语言部分实现面向对象的继承特性

最近在研究Linux源码的时候遇到很多不曾见过的C语言用法,尤其是一些面相对象的特性。最熟悉的是C99标准,最新的C11标准没有仔细研究过,泛泛看了一下资料觉得也主要是增加了一些对多线程支持的特性,对于面向对象的特性应该没有。搜索了一下,找到一篇很好的文章。该文章采用C语言很灵巧的部分实现了面向对象的继承特性。遗憾的是源代码貌似有问题,对于struct的内存布局有错误,也编译不

2014-08-19 14:58:25 1038

原创 Python: fnmatch模块 (Unix B-Shell通配符的文件名匹配)

周末研究Robot Framework的源码分析源码文件 pythonpathsetter.py

2014-08-09 15:33:38 1654

原创 Python: 初识shelve module

看一段开源的Python工具源码,发现采用了shelve这个module来存储数据,而且接口设计的非常好用。这里简单介绍一下。这是python自带的一个非常实用的module,用来进行数据存储非常方便。简单来说,通过在当前或者指定路径建立一个文件来存储字典结构的数据:字典的key是用字符串,value可以使任何数据对象。它与dbm不同的是,字典的值可以是任意的数据对象。

2014-08-09 15:05:51 1091

原创 Linux源码学习笔记:syscalls

1. 首先应该弄明白下面的一个问题:具体引用的是哪个文件?相互之间的引用关系?2. 以下这些系统调用的宏定义是怎么展开的?SYSCALL_DEFINE0(...)SYSCALL_DEFINE1(...)SYSCALL_DEFINE2(...)SYSCALL_DEFINE3(...)SYSCALL_DEFINE4(...)这些宏定义

2014-08-06 20:07:46 2489

原创 C++实现设计模式: Factory Pattern

I have read the book Api Design For C++ recently, and I must say that it is a masterpiece.There is a section to introduce the Factory Pattern, I think it is the best practical example for this patte

2014-07-11 11:29:14 731

原创 Python实现的Observer Pattern

最近因为部门调整,学习时间较多,利用这段时间抽空把Python又拿出来学习一下,借此机会也复习一下设计模式。下面使用Python简单实现如下:

2014-07-09 13:45:06 2004

原创 Python局部变量的一个区别于其他语言的小特性

Python中变量作用域和C/C++和Java有一些不同,下面我们通过一个小例子来说明,类似例子我并没有在任何一本书中看到过,希望对于初学者有帮助。例子分成两小段代码,你可以分别运行,观察if条件内的局部变量temp.(1)data = [2,1,0]for i in data:    temp = i    if i>0:        print "==

2014-07-08 16:33:40 1211

原创 Python: 使用select函数编写nonblocking TCP/IP socket程序

select函数的理解对于灵活运用socket函数编程有直接的影响,我们编写的网络库一般需要支持多连接,因此select提供的特性很好的满足了这一需求。关于select的解释可以参考:select(2) 使用C或者C++编写一个实例程序相对比较麻烦,我们可以直接使用Python快速开发一个 nonblocking TCP/IP socket Demo来看一下select怎么应用到Soc

2014-07-08 11:49:06 3366

原创 程序员与工匠精神

前几天和一个朋友聊天时说:我有强迫症,每次看到不符合自己审美的代码时,总想重构一下。朋友的观点与大多数人相仿,程序只要满足要求,运行正确就可以。在现实的工作中一样,每当看到一段优美且高效的代码,我总是喜欢多看几遍,满心的享受。但是我们产品中的太多代码让我这个代码洁癖“患者”看了非常的烦躁:1. 随便一个源文件都是上百行的函数,有些甚至超过500行(含空行和注释)。2. 大量没有必要的临时变量定义。3. 习惯性的把所有变量声明定义放到函数前面,一些大函数甚至超过20行都是函数局部变量的声明和定义。想想

2014-06-19 21:26:13 5445

原创 【重构】人人都来写算法 之 矩阵顺时针旋转90度,空间效率O(1),时间效率O(n*n)

对之前的代码进行了重构,虽然使用指针操作二维数组在可读性上没有原来的二维下标访问清晰,但是为了消除重复也只能这样了。原文链接:http://blog.csdn.net/walle_love_eva/article/details/9951977

2014-03-11 17:54:11 1764

原创 多线程编程练习:使用变量控制多线程调用顺序

注:和同事讨论一个多线程的问题,想到前几天看到的一个关于多线程编程的题目,简单实现了一下,在这里分享给大家。/* 题目:output "ABCABCABC": threadFunc_A just print "A", threadFunc_B just print "B", threadFunc_C just print "C".*/

2014-03-11 13:56:18 1218

原创 我内心里最想要的是什么?

今天找公司内一个的资深的同事E君聊了下,主要是针对自己过去的不足,以及听听他的建议,怎么才能有效的改进。E问:你想一下,你最希望自己在公司得到的是什么?我答:我就想做一个比较优秀的程序员,能够有机会多写代码。可是目前的岗位,尽是写文档工作,写代码的工作很少。E又追问:你再想想,这真的是你内心最希望得到的吗?我答:我希望可以通过自己写出优秀的代码,进而得到认可。E君在谈了自己的一些看法之后,再次问我:你说你只是想写代码,这可是和你半年前和我说的有出入,你再仔细想想你希望的是什么?可是我究竟想要

2014-03-10 17:57:34 1303

原创 一个全局变量的编译错误引出的思考

现在,不管在很多公司,遇到一个追求完美编码的同行非常少了,很多都是能运行就行,或者直观自己使用方便就行。其实,我非常不喜欢使用全局变量,好的代码应该严格遵守开放封闭原则,而全局变量的定义显然破坏了这一原则。我采用的方法一般是在定义静态变量,并且针对这个静态变量提供对外的操作接口,这样外部函数如果需要使用这个变量,完全可以通过统一的接口来调用。但是,遗憾的是,我们代码中这样的全局变量非常普遍,而且要命的是,这种变量作为数据库存储大量的数据,很多不同的模块代码可以对其进行访问操作,风险很大。

2014-03-06 17:24:00 2043

转载 三种工厂模式的C++实现

原文链接注:以后写设计模式相关的博客当以此为标准,很清晰,多谢。引出工厂模式的设计问题◆ 1.为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。这样我们可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的。这里很容易出现的一个问题 n 多的子类继承自抽象基类,我们不得不在每次要用到子

2014-03-05 17:46:04 1122

原创 Safe C++ 读书笔记:对基本数据类型进行封装,以编写更安全的C++代码

本文是根据 Safe C++, How to avoid common mistakes 中的例子总结而来。

2014-02-24 18:42:07 1483

原创 2014年2月至今 读书列表,持续更新

题记:罗胖(罗振宇)常说:读书是意见苦差事。对于程序员来说,读技术书籍更不轻松,泛泛读一遍甚至几遍,如果不实践总结,基本上作用很有限。10年前,人们常说,程序员是口青春饭,但是今天我们越发的明白,程序员是需要不断积累的,反而项目经验多,读书总结多的人,更加能写出优秀的程序。技术不断更新,但是软件设计的基本思想近30年来变化并不大。如果没有机会从事感兴趣的技术项目,不妨多

2014-02-11 17:34:09 1053

原创 2013年总结

前段时间,一直在考虑是不是应该给2013年写一个技术成长相关的年终总结。今天决定动笔回顾一下我的2013。虽然CSDN的技术博客是从2012年底开始注册的,但是真正开始坚持写博客是从2013年3月份开始的。最初的想法可能是对于自己技术能力的成长有些停滞不前有些着急和不满,试着通过不断总结并写博客来督促自己。

2013-12-21 09:59:11 902

原创 Programming Exercise: Game of Life (0.1 version)

上个周末参加GDCR2013,今年的题目还是Game of Life,通过一天的交流和联系,确实收货不少,今后考虑陆续以这个题目不断锻炼自己的编码能力,用一小时编写程序,然后总结并删除,然后增加限制条件,继续练习。此外,使用不同的语言练习也是一个很好的学习语言的方法。我也准备将这一题目作为2014年的重点,以强化编码能力的途径之一。#ifndef LIFE_GAME_H#defi

2013-12-16 12:05:34 906

原创 利用Shell脚本清除UT编译的临时文件

使用Cpputest编写单元测试,会产生一些临时文件,在Makefile中清除有的时候也有一些不太方便的地方,为了解决这个问题,简单写一个Shell脚本程序清除,在make之前清除UT的临时文件或者build UT.以下是简单的例子程序:#!/bin/bashcleanUT(){    printf "UT clean in progress ...

2013-12-15 17:00:55 1317

原创 关于sizeof的误用问题

很多人对于sizeof函数的使用有误解,这里仅对这一点进行必要的说明,并且附带一个常见错误的代码例子

2013-12-06 23:01:49 2158

原创 建立一个入口Makefile执行指定子目录中的Makefile

SUBDIRS = SUB_DIR_NAME_1 SUB_DIR_NAME_2.PHONY: allall: @list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Clean in $$subdir";\ (cd $$subdir && make);\ done.PHONY: clean clean: @list='$

2013-11-24 00:13:58 11387 1

原创 How to mock the function with output parameter by cppumock?

Question:How to mock the function with output parameter with cppumock?My solution is through one global parameter to change the output parameter in mock function.But apparently this is not e

2013-11-22 12:13:24 2145

转载 Accessing static Data and Functions in Legacy C

http://www.renaissancesoftware.net/blog/archives/430http://www.renaissancesoftware.net/blog/archives/450It’s a new year; last year was a leap year; so the quadrennial reports of leap y

2013-11-22 11:21:28 1209

原创 RobotFramework: 设置Case执行的搜索路径

在写Robot Framework 的Case时,我们一般采用的都是相对路径引用我们的lib以及其他资源文件,因此需要给Robot添加一个搜索路径,但是采用命令行和RIDE还有一些差别。这里举例简单说明一下。例如:ImportName/PathlibrarylibName.py假如,你的lib库

2013-10-23 12:29:38 3990

原创 2 new improvements of cpputest updated from 3.4 to 3.5

1.提供了更加清晰合理的函数名:2.引用一下头文件可以使得UT检测是否有资源泄露:#include "CppUTest/MemoryLeakDetectorNewMacros.h"cpputest的这一功能主要是通过对申请和释放的动作进行计数,然后比较前后申请和释放的次数判断是否有资源泄露。3.4及之前的版本有一个BUG(3.5版本已经修复):in

2013-10-23 11:44:31 1245

原创 How to write the better Makefile for cpputest

最近给其他几个团队培训UT工具cpputest。自己没有写PPT,而是从网上找了一份比较不错的CppUTest课件,这份课件来自于一家叫Odd-e的敏捷咨询公司。里面的内容比较基础,也很清晰,非常适合帮助初学者较快的入门。由于我之前一直是在Windows下用VS使用这款UT工具,Linux下的实践仅仅限于在学习cpputest源码中的过程中,利用工具附带的example工程

2013-10-23 11:38:23 2231

原创 Robot Framework学习路线

0. 官方网站 http://robotframework.org/所有资料都来自这里,从这里找到必要的链接,从而深入其中的细节。1. Quick Start Guidehttps://code.google.com/p/robotframework/wiki/QuickStartGuide这是最佳的出发点,充分理解和分析这个例子。理解RobotFram

2013-09-16 18:10:26 2886

转载 如何阅读科研论文

转载自:http://blog.jobbole.com/47506/如何阅读科研论文S. Keshav滑铁卢大学大卫·切瑞顿计算机科学学院加拿大安大略省滑铁卢市keshav@uwaterloo.ca1.引言科研人员必须阅读论文的几个理由:为了会议或者学生审稿、为了在本领域中保持消息灵通、为了解新领域进行文献调研。一个典型的科研人员

2013-09-16 17:52:11 804

原创 C++实现设计模式:Observer Pattern

This example demonstrates creating three separate observer classes and subscribes them for different combinations of the two messages defined by the MySubject class. Finally, the calls to subject.

2013-08-25 12:37:10 908

原创 C++实现设计模式:Decorator Pattern

注:为了更清楚的解释,类的成员函数均采用inline。#ifndef _COMPONENT_H#define _COMPONENT_H#include using std::cout;using std::endl;class virtualComponent{public:    virtual ~virtualComponen

2013-08-25 09:56:11 787

原创 C++实现设计模式:Builder Pattern

注:为了更清楚的解释,类的成员函数均采用inline。#ifndef _BUILDER_H#define _BUILDER_H#include "Product.h"#include using std::cout;using std::endl;using std::string;class Product;class

2013-08-25 09:55:40 959

原创 C++实现设计模式:Bridge Pattern

注:为了简要说明,类的成员函数均采用inline。#ifndef _DRIVE_GAME_H_#define _DRIVE_GAME_H_#include "DriveGameImpl.h"#include using std::cout;using std::endl;class DriveGame{public:

2013-08-25 09:54:56 987

原创 C++实现设计模式: PIMPL IDIOM

I learned this from the book Professional C++. And code this example to deppen the this practical pattern.The whole design is very compact, and very practical. I think that it is very suitable for a

2013-08-16 17:21:35 1278

原创 String class by C++

I spend three hours for this class today. It is a very interesting to consider the detail  about how to make it more elegant. Now I will share with you guys, and expect for your comments.SelfStr

2013-08-15 15:08:57 1130

原创 C++实现设计模式: An extensible Factory Pattern example

I have read the book Api Design For C++, and I must say it is a masterpiece.There is a section to introduce the Factory Pattern, I think it is the best practical example for this pattern which I hav

2013-08-14 12:04:09 1032

原创 人人都来写算法 之 移除字符串中重复的字符,时间复杂度要求O(n),空间复杂度O(1)

移除字符串中重复的字符,不能使用额外的缓存空间。字符串支持所有的ASCII码字符。注意:  时间复杂度要求O(n),空间复杂度O(1),可以使用额外的一个或几个变量,但不允许额外再开一个数组拷贝。分析:1. 时间复杂度为O(n)条件下,最佳的方法就是采用包含256个位置寻址的哈希表来表示ASCII码。但是条件中又限制只能使用几个变量,因此采用bit寻址的方法可能是最接近

2013-08-13 17:48:53 2144

原创 人人都来写算法 之 矩阵顺时针旋转90度,空间效率O(1),时间效率O(n*n)

给你一个矩形图片,假设每位像素是用整形标识,将图片位图顺时针旋转90度。空间复杂度O(i), 时间复杂度O(n*n)两种方案可以选择:1. 利用图片矩形的特性,将其剥洋葱一样,一层一层处理,每一层逐个将四条边顺时针交换;2. 先将图片上下翻转矩阵,所有元素再在沿着主对角线交换位置即可。(当然,也可以先沿着主对角线交换,再左右翻转矩阵)

2013-08-13 17:38:03 3758

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除