开发经验总结Mark1

开发经验Summary

experience1:

由于做的APP是国际版的软件,需要支持跨时区问题(也就美国发送一条信息给中国用户,中国用户显示的时间为中国当地时区对应时间),将接口中传入和返回的时间参数统一定义为long 类型(不能使用yyyy-MM-dd 时间字符串,因为转换成Date对象时需要指定那个时区否则就会导致时间错乱问题),由于在同一时刻无论在哪里unix timestamp都是代表从1970-01-01 00:00:00开始至某个日期经过了多少毫秒,但是在不同的地区打印的时间就不同,看看每个地区相差多少个时区就是相差几个小时。

线上出现一个问题是:用户使用iphone5或 ipod 选择工作经验的时间时,发现无论用户选择什么时间客户端给后端传的值为 2147483647 经过客户端排查发现这些设备为32为操作系统,其中long 只用了4个字节来存放,而一个选择的时间戳值超过了4个字节表示范围,因此浮点溢出31位都置为1了导致就会始终传2的31值。

解决:客户端将该变量类型改成 long long类型 这个就是用无论操作系统使用32还是64位都是用8个字节来表示的

总结:遇到问题时要学会找到敏感信息,例如上面加粗的,一个是特殊的设备还有个就是传入的特殊值(2的31次方),然后我们尽量将这些信息连接起来看看有什么共同的特点,上面的问题的共同特点是日志中只有iphone5设备startTime字段才总会传2147483647 ,这个就是问题的共性。

猜你喜欢

转载自blog.csdn.net/u013830320/article/details/83024004