do-while的使用
#ifndef _BEGIN_DO_WHILE_
#define _BEGIN_DO_WHILE_ do{
#define _END_DO_WHILE_ }while(false);
#endif
具体代码中的使用
_BEGIN_DO_WHILE_
xxx
if 出错
break;
xxx
_END_DO_WHILE_
xxx
这样即使程序出错 也可以保证 _END_DO_WHILE_之后的代码得到执行
变量前缀的使用
class Test
{
private:
string strProductId;
int iProductNum;
int iCoinType;
int iCoinNum;
int iErrorCode;
int strBillno;
};
变量前缀用来标识变量类型,可以在后续编码过程中快速识别变量类型,不用再跳转去查看.
转换嵌套设计为线性设计
需求: 记录qq用户 微信用户 游客用户的流水记录 使用reids存储,并提供查询.
我的设计: 使用set结构
key | value |
---|---|
<账号,<时间戳,flowItem>> | |
wx | <账号,<时间戳,flowItem>> |
guest | <账号,<时间戳,flowItem>> |
师父的设计: 使用sorted set结构
key | score | value |
---|---|---|
qq_账号 | 时间戳 | flowItem |
wx_账号 | 时间戳 | flowItem |
guest_账号 | 时间戳 | flowItem |
namespace以及Google protocol buffer的使用
namespace的使用可以有效的防止命名污染的问题,避免和原有的代码发生冲突.
在具体的项目中,可以使用Google protocol buffer.(或者公司的jce协议)
参考:
- https://developers.google.com/protocol-buffers/docs/overview
- https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/
该协议最大的特点是兼容性特别强,使得后续的业务拓展非常便利.并且用户只需要定义数据结构即可,代码可以由解析器自动生成.
获取配置的懒惰型原则
- 能一次初始化的配置,一次初始化完成,不要每次调用反复初始化,浪费资源.
- 在读取配置类的信息的时候,比如中共享内存中获取相关数据,一次读取的结果可以缓存起来,第二次读取的时候,先从缓存中获取数据,如果缓存中没有数据,则再去共享内存中读取数据,然后继续缓存.
一些代码编写规范
- 模块中的函数一定要对一些边界条件和参数的合法性进行判断,即使是自己调用自己的函数,这样可以有效降低后人调用该函数出错的概率.
- 代码中尽量不要出现硬编码,多使用宏和const常量,必要时使用static进行作用域的限制.
- 养成顺手写注释的习惯,利己利人.
- 能独立出来的函数或代码模块一定要独立出来,降低代码的耦合性以及降低相同代码出现的可能性.
- 开发环境能使用公共库尽量使用公共库,相同的头文件保证在整个项目中只有一份,防止多份拷贝造成头文件的不一致性.
- 监控很重要,可以及时了解服务的状态