美文网首页
【总结】容易制造bug的几种写法

【总结】容易制造bug的几种写法

作者: 游学者夏纳 | 来源:发表于2020-05-15 11:51 被阅读0次
  1. 默认参数的函数,特别是默认有效枚举

默认参数一般只适用于数字意义的整型(0)和文本意义的字符串(""),否则全局都搜不出的问题枚举很难想到是这个问题。此类问题很容易出bug,尽量避免设计默认枚举的函数,

  1. 从0开始定义有效枚举

结构体的枚举默认值如果就是有效枚举的话,相当于空数据会被默认为有效数据,譬如该枚举作为“类别”的意义时,开发人员不够敏感的话,会在该类别的逻辑上浪费很长的时间debug。

  1. 仅在二级以上的缓存做逻辑判断

这类问题也不少见,有的设计是在表层缓存数据完成更新,然后用一定的策略层层同步数据。有的设计是最表层直接更新且把结果返回客户端,同时再更新下层的缓存。但是有可能同步的队列还未完成时,新的update请求又发下来(同时发两个逻辑依赖的耗时操作),新的请求可能在下层发生错误,比如先add一个队列后立刻update这个队列,下层会找不到队列中的首个数据而update失败。此类架构的解决方法只能是延时操作或者使用「请求响应」模式,而不是「通知维护」模式。

  1. 用32位数据放时间戳
    考虑越界问题
type limit time
int 2147483647 2038-01-19 11:14:07
unsigned int 4294967295 2106-02-07 14:28:15
  1. 用整型数据储存53位以上的二进制数据

比如常见的用一个int值来表达某个类似TI本子道具的某50位等级奖励领取状况,但是一些客户端用的动态语言的“number”类型实质上就是默认double64,比如Unity常用的lua和JavaScript。
按照IEEE浮点标准 决定了第54位起的有效数字会被忽略,即恒为零。

相关文章

网友评论

      本文标题:【总结】容易制造bug的几种写法

      本文链接:https://www.haomeiwen.com/subject/cenqohtx.html