试图反向推理一个 BUG

5 天前
 inspiration2030

首先提示:我不知道答案

总部做了一个页面,可以让我们查数据,但是我发现了一个神奇的 BUG:

看前端请求参数是请求的"7200000"这样的字符串,可惜忘记看返回数据的形式了。

现在页面临时下线,纠结了半天是怎么实现这样的 BUG 的。有没有大佬遇到过类似的问题?

1449 次点击
所在节点    程序员
21 条回复
duanxianze
5 天前
后端什么语言?是否发生了类型转换?
Ayanokouji
5 天前
用 curl 测测 api ,能复现就是后端的 bug ,不能复现就是前端的 bug
inspiration2030
5 天前
@duanxianze #1 后端是 Java ,数据库不太清楚,不过肯定是国产的。
inspiration2030
5 天前
@Ayanokouji #2 是后端 Bug ,筛选之后返回确实是空的。
h1298841903
5 天前
会不会是由于缓存问题?或者这条数据已经被删除了?
luciankaltz
5 天前
首先,能保证查询的数据集合本身是不变的吗?

也就是没人操作这个表里面数据的新增和删减之类的操作
newaccount
5 天前
看一下数据库的数据格式是不是字符串
如果不是,再查一下 java 查询的时候是不是当字符串传进去的
inspiration2030
5 天前
@h1298841903 @luciankaltz #5 #6
不会的,这个数字其实就是一笔交易的金额,我每种条件筛了好几次都是有问题。
(其实还有更大的问题,按名字筛选会漏掉部分数据)
newaccount
5 天前
@newaccount #7 看起来是按照字符串排序导致的,但具体是哪里就得摸查一下了
inspiration2030
5 天前
@newaccount #7 可惜我只是异地部门的小员工,看不了。
sngxx
5 天前
没有日志吗
luciankaltz
5 天前
@inspiration2030 #8 那就要看是业务逻辑处理返回的时候有问题(比如上面说的 js/后端 java 处理格式之类的),还是数据库本身的返回结果有问题了。都不是没可能,谁知道底下代码是怎么写的(

都无从猜起(
inspiration2030
5 天前
@luciankaltz #12 哈哈哈,就是因为无从下手,所以一个人想了半天想不出。
inspiration2030
5 天前
@sngxx #11 没有,单反能正向查,我都不会反向想这么久,哈哈哈。
w99wjacky
5 天前
int/long 越界?
cowcomic
5 天前
首先通过测试不断的确定到底什么参数能精确返回或精确不返回这个值,二分法不断分割
另外考虑上下界的问题
比如:7200000~7300000 这个查不出来,7199999~7300000 这个呢?

只要不是偶现问题,通过这种方法一定能找到一个确定的边界,要么进入这个边界就能查出来,要么就是进入这个边界一定查不出来
等确定好这个边界,才好推测
w99wjacky
5 天前
float 越界了
COW
5 天前
分布式数据库?
orioleq
5 天前
神奇的 bug 就别拿上来说浪费大家时间了,谁知道是不是压根后端筛选的字段就跟前端不是同一个。比如说后端 filter 的数字其实是另一个税后栏位本来就是小于 7200000 的。
自己看吧,解决了再发上来给我们乐乐。
spritecn
4 天前
可能有一个用于快速查询的百万位缓存(数据库或缓存),这个位存的时候没有进位,但是查询的时候值被进位了
如果你们订单都是百万级别的话,这个想法还是好的,但入库/查询没对齐,测试还没复现
虽然这么做个人觉得收益不大

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1095550

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX