1. 让高性能这个词,见鬼去吧,建议大家多看一下<<C++编程规范>>里面有关程序优化的那几节。
2. 与其他功能模块交互的地方(比如调用PHP接口),必须输入完整的流水日志,包括完整的输入参数和输出参数,并且在任务日志等级下均为可见。
3. 与其他功能模块交互的接口和一些低机率的事情(比如1/ 100W的掉落率),必须写有测试程序或脚本,方便测试组测试和BUG定位。
4. 任何逻辑错误都必须有日志输入,并且给出关键的信息,方便定位,在任何日志等级下均为可见。
5. 关键业务逻辑(比如在数据库里面增加用户的金币),必须有日志输入,方便定位和发现问题。
6. 最大限定地把参数配置化,并且最大限度地支持不停机更新。
7. 所有C++定义的缓存KEY,必须以"C_" 开头,数据库日志表,必须放在 `%s_log` 下。
8. 重启服务器或者关闭服务器,必须得到运营的许可,才可以进行。
9. 重启或更新版本之后,至少要观察一天时间,重点看一下日志输出。
10. 线上BUG为最高优先级。
11. SHELL脚本中,建议使用绝对路径而不是相对路径。
12. 使用断言宏来检测你代码的逻辑错误。
13. 不用过度依懒空指针检测,这样提高了BUG的抗药性。
14. 禁用使用C/C++的标准输出来输出日志,这样会导至程序性能下降得很严重。程序日志,可以输出到日志文件或日志服务器。
15. 尽可能不要使用C++里面的数组,推荐使用STL 里面VECTOR,绝大部份情况下比你使用一个“足够大”的数组要更节省内存,更安全,而性能下降的问题,可以忽略不计。
16. 绝不使用sprintf这类函数,推荐使用stringstream来连接字符,如果你一定要使用C风格的字符串,至少也要使用sprintf的安全版本:snprintf或sprintf_s,等。
17. 不要轻易使用无符号的数值类型的变量,使用有符号的变量更容易发现问题和简化问题的处理,最常见的问题,就是两个无符号数相减,成了一个非常大的数。
18. 绝对禁止使用 SELECT * FROM TABLE 和使用通过字段索引来获取返回值。SELECT * FROM TABLE 结果集的字段的索引是不可靠了(只要修改一下表的字段顺序,你的程序就完蛋了),而且这种错误非常的隐蔽,另外,尽可能少地返回数据,这样会高效一些。
2. 与其他功能模块交互的地方(比如调用PHP接口),必须输入完整的流水日志,包括完整的输入参数和输出参数,并且在任务日志等级下均为可见。
3. 与其他功能模块交互的接口和一些低机率的事情(比如1/ 100W的掉落率),必须写有测试程序或脚本,方便测试组测试和BUG定位。
4. 任何逻辑错误都必须有日志输入,并且给出关键的信息,方便定位,在任何日志等级下均为可见。
5. 关键业务逻辑(比如在数据库里面增加用户的金币),必须有日志输入,方便定位和发现问题。
6. 最大限定地把参数配置化,并且最大限度地支持不停机更新。
7. 所有C++定义的缓存KEY,必须以"C_" 开头,数据库日志表,必须放在 `%s_log` 下。
8. 重启服务器或者关闭服务器,必须得到运营的许可,才可以进行。
9. 重启或更新版本之后,至少要观察一天时间,重点看一下日志输出。
10. 线上BUG为最高优先级。
11. SHELL脚本中,建议使用绝对路径而不是相对路径。
12. 使用断言宏来检测你代码的逻辑错误。
13. 不用过度依懒空指针检测,这样提高了BUG的抗药性。
14. 禁用使用C/C++的标准输出来输出日志,这样会导至程序性能下降得很严重。程序日志,可以输出到日志文件或日志服务器。
15. 尽可能不要使用C++里面的数组,推荐使用STL 里面VECTOR,绝大部份情况下比你使用一个“足够大”的数组要更节省内存,更安全,而性能下降的问题,可以忽略不计。
16. 绝不使用sprintf这类函数,推荐使用stringstream来连接字符,如果你一定要使用C风格的字符串,至少也要使用sprintf的安全版本:snprintf或sprintf_s,等。
17. 不要轻易使用无符号的数值类型的变量,使用有符号的变量更容易发现问题和简化问题的处理,最常见的问题,就是两个无符号数相减,成了一个非常大的数。
18. 绝对禁止使用 SELECT * FROM TABLE 和使用通过字段索引来获取返回值。SELECT * FROM TABLE 结果集的字段的索引是不可靠了(只要修改一下表的字段顺序,你的程序就完蛋了),而且这种错误非常的隐蔽,另外,尽可能少地返回数据,这样会高效一些。