你们相信这是十几年的程序员写的代码吗?!

2025 年 8 月 8 日
 honkew

最近遇到个事想和大家分享一下。 我们业务最近出了一个 bug

我这边通过同事的接口获取快递面单 pdf 具体流程是 [包裹号] -> [资源 ID ] -> [快递面单 pdf ]

也就是说: 拿着包裹号请求接口,拿到资源 ID 再用资源 ID 请求下载地址,获取 PDF

然后发现奇怪的事情,包裹 A 和 包裹 B 获取到的快递面单串了,下载下来是一样的单号 资源 ID res_id 是 32 位数,相同一秒获取到的 pdf 就是一样的,猜测是采用 md5(time()) 这种方式命名文件

然后和 同事 A 反馈了该问题,同事 A 反应已经修复 接下来一段时间还是出现这种问题会导致仓库发错货

老板问我咋回事,我又去查日志发现同一时间 res_id 还是会一样的,这次精度有所提升不是秒了,大概精确到后面两位的样子

然后和老板说了一下,是因为资源 id 还是一样的 这里他还改了一下运单文件在他服务器上的保存的命名方式,这个改动压根解决不了这个问题 然后同事 A 说他已经改了,没问题的,你不应该请求速度这么快 我直接整个大无语

然后开会 我说建议使用 sha1(运单号) 的方式生产资源 id ,或者使用 UUID ,还没有说完直接反驳 说不安全巴拉巴拉,不安全可以 accessToken 验证啊,外部访问不到不就可以了 然后又说改算法耗费服务器性能巴拉巴拉的,老板又好声好气的让他想办法改一下 最后他改了,改成 md5(microtime(true))

然后今天又又又出现这个 bug 了,老板又跑过来问我,我已经要疯了 这个问题前前后后几个月都没有弄好

同事 A 是那种反驳性型人格,而且比较自大那种,我快待不下去了

18462 次点击
所在节点    程序员
140 条回复
javalaw2010
2025 年 8 月 8 日
先解决问题,他坚持不处理你就先看看能不能给他擦个屁股,自己加一个锁阻止并发,然后再跟他 battle 。不然公司黄了大家都没饭吃。
chairuosen
2025 年 8 月 8 日
三包法规定,同一零部件修三次还不好,可以退车
jasonyang9
2025 年 8 月 8 日
不管他用什么算法如何实现,必须满足唯一 id 的需求,无论 qps 是多少
irisdev
2025 年 8 月 8 日
?用运单号不安全用时间戳就安全了?这什么脑回路,运单表没有主键吗,直接用运单表主键不就行了
irrigate2554
2025 年 8 月 8 日
绝了,随机 uuid 不比时间 hash 安全么,时间 hash 还可以根据时间猜到
deplives
2025 年 8 月 8 日
uuid 不就是干这个事儿的吗?
hwdq0012
2025 年 8 月 8 日
@Mithril #4 虽然我不是科班,但我知道这个问题, 相信很多不是科班的人也知道这种基本常识
fengcs
2025 年 8 月 8 日
他不改就你改嘛,搞个令牌桶,1 秒处理一个请求
wangtian2020
2025 年 8 月 8 日
以为时间不会重复的只能说纯蠢,这种写垃圾代码坑人的不少,就是没有基础的编程思维,这种人真适合来写前端,前端这种“对错”少,顶多不好看功能不能用,但不会出“错误”
我和 op 一样是那种爱操心的性格,同事说服不了的话那就没办法了,要么跑路要么忍,反正把话都跟 leader 讲清楚,有解决方法不用就不是你的问题了

说起来,快递站的系统有人手机号末尾和姓和我相同,结果老是发错短信,代码跟这个人写的一样蠢
jfbcb
2025 年 8 月 8 日
感同身受,工作也遇到了这样的.让他改东西,就说你针对他,这种让老板明白是他的问题.你不要跟他讨论这个问题.如果是 laravel,框架有 uuid 相关的实现函数.远离这种垃圾人.
FrankAdler
2025 年 8 月 8 日
没问题的,你不应该请求速度这么快

真牛逼啊
zhouxiaoxiao
2025 年 8 月 8 日
你做个记录,每次下载下来的 ID 都记录下来,出现重复 就直接报错;把错误的问题来源直接指出来; 因为出问题的环节在你这里,而你又依赖他的接口; 所以直接报错,报出原因;
irisdev
2025 年 8 月 8 日
@Mithril #4 sha1 碰撞的概率怕比 uuid 重复的概率还要低,当然这跟问题没什么关系就是了
bli22ard
2025 年 8 月 8 日
@Mithril #4 uuid 是 id ,sha1 是信息摘要算法,sha1 运算的结果取决于输入的值,这和 sha1 碰撞有多大关系?
elevioux
2025 年 8 月 8 日
直接组个随机字符串也比 md5(一堆东西)好啊。我也是写 php 的,有些人确实“十年如一日”,技术不见长进的。
xz410236056
2025 年 8 月 8 日
年级越大的开发越这样,拒绝学习,拒绝接受新事物,死不认错。
Felldeadbird
2025 年 8 月 8 日
工作久了,菱角没了。换成我的话,不是我的问题我不去修复,也不给建议了。对方什么时候修复,我这边什么时候就正常工作。
xz410236056
2025 年 8 月 8 日
@lixining 明明有标准 API 为啥不用自己弄不标准的算法啊
xz410236056
2025 年 8 月 8 日
@Felldeadbird 你没遇到垃圾领导,我们厂(也可能就我们组这样),找到你了那你就是你倒霉甭管谁的责任你都得负责推,作为客户端/前端 那肯定先找你啊,客服、用户又不懂,就是无赖。
ty29022
2025 年 8 月 8 日
@bli22ard 你是不是就是同事 A 呀
sha1 是不是哈希算法, 哈希算法是不是就有碰撞概率, 在说什么啊?

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

https://study.congcong.us/t/1150932

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

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

© 2021 V2EX