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

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 条回复
min
2025 年 8 月 8 日
你做一个预防性动作,发现重复就前台把单拦住,不让发出去即可
bitmin
2025 年 8 月 8 日
这是你领导的问题你急啥急,这就不是你的问题,你和领导说清楚,出事也是你领导被骂

能解决的自己解决,解决不了的告知领导,让领导解决,自己不要放在心上

你是打工人,你不是老板
IamUNICODE
2025 年 8 月 8 日
为什么用时间生成这种奇奇怪怪的随机数 id 啊,自增,uuid 是不香么
zgzhang
2025 年 8 月 8 日
这种人就是又菜又犟,努力学习离开这种垃圾地方,去大厂遇到这样的垃圾的概率非常低,你们老板缺乏基本的技术判断力,所以这么捣糨糊
wenjie83
2025 年 8 月 8 日
碰到过类似的情况,也是请求过快导致的对面接口异常,反馈给对方连个回应都没有,没把法只能手动增加请求间隔
duzhuo
2025 年 8 月 8 日
听起来是很严重的事故了
patrickpu
2025 年 8 月 8 日
论物种的多样性
moreant
2025 年 8 月 8 日
没有鉴权不用自增和时间戳可以理解,但是反正都是随机的,为什么不用 UUID ?
Sfilata
2025 年 8 月 8 日
下次遇到这种问题直接让老板找他,他怎么改也直接让老板解释。你又拍不了板,在这儿当传话筒纯纯内耗。
sagaxu
2025 年 8 月 8 日
他这么喜欢时间戳,可以用 uniqid("", true) 啊,虽然还是基于时间戳,但重复率比他写的低的多
evan1
2025 年 8 月 8 日
自己在前端写个队列,请求先入队,队列里每个请求发起之前等待 1s🤡
evan1
2025 年 8 月 8 日
@evan1 #69 我简直是个天才!
zhhqiang
2025 年 8 月 8 日
毫秒级也是有机会重复的。数据库可以加个唯一 key 直接报错
midsolo
2025 年 8 月 8 日
@honkew #2 你搞不定的事,上面有人能搞定,核心是你要把跟他的矛盾转变为所有人跟他的矛盾,这事才能解决
evan1
2025 年 8 月 8 日
@evan1 #70 我现在调某个供应商的接口就是这么搞的,不过是间隔 500ms 。太快了他们的接口顶不住🤡
TORYOI
2025 年 8 月 8 日
time 肯定是不行的,日后有并发怎么办
asmoker
2025 年 8 月 8 日
我说不结晶呢,原来是老鬼搞得~
super452
2025 年 8 月 8 日
不是你的问题你慌啥,同事无法沟通直接找 leader 就行了
issakchill
2025 年 8 月 8 日
求他问问 ai 吧...
imnpc
2025 年 8 月 8 日
大概用的低版本的 PHP ,估计连 composer 都不支持,要不然多的是各种包能解决这个问题 ,最简单的参见 #13 就可以了

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

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

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

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

© 2021 V2EX