已掉线,重新登录

首页 > 绿虎论坛 > 杂类 > 超级灌水 (发帖)

标题: 不吐不快

作者: @Ta

时间: 1天前

点击: 88

1.调用同事接口发现一个bug,这个接口是用【包裹id】获取【资源id】,然后用【资源id】获取下载地址,然后这个接口出现了不同的【包裹id】会返回相同的【资源id】,然后跟他反馈了,然后他说他修复了。
2.我的思考这个资源id在请求间隔很短的时候生成的【资源id】是相同的,于是猜测他【资源id】是md5(time())生成的
3.同事将他本地文件保存命名从【资源id】改成了【运单号.pdf】,流程还是一样
4.过了一段时间问题依旧,还是会返回一样的【资源id】,一样的资源id返回的运单文件不一样,各个包裹之间串号导致仓库发错货
5.又好心给他建议不要重复使用【资源id】,反过来埋怨我请求速度过快导致(我黑人问号),然后和他争论了一番。他和老板说更换算法比较耗费性能(嘴皮子倒是挺会说,欺骗老板不懂技术)
6.老板劝他修改,说会影响仓库发错货,发错一件我们这边损失50美金。
7.然后他说改成用毫秒时间来生成【资源id】,大概是这样md5(microtime(true))


这不是约等于没改吗,算了爱咋地咋地吧。声称自己十几年开发经验就是这种人,杠精反驳性人格。

[隐藏样式|查看源码]


『回复列表(3|隐藏机器人聊天)』

1.

都改ms了,为什么不能用ns?真就没脑子

(/@Ta/2025-08-04 12:16//)

2. 哈哈哈,是老油条子吧。
(/@Ta/2025-08-04 13:06//)

3.

你的描述很详细,其实你遇到的这个问题在实际开发中非常常见,尤其是在一些对唯一性要求很高的业务场景下(比如生成唯一的资源id、单号、文件名等),用时间戳(哪怕是到毫秒级)+ md5 来生成唯一id,本质上是“伪唯一”,并不能保证真正的唯一性。你的同事这种做法确实是有很大隐患的。

下面我帮你梳理一下问题和可以反驳、建议的点:


1. 问题核心

  • 用 md5(time()) 或 md5(microtime(true)) 生成的【资源id】,本质上就是对当前时间的加密,但如果同一时刻(比如高并发下)多次请求,依然会生成相同的id
  • 这会直接导致不同的包裹获得相同的资源id,后续所有依赖资源id的操作(比如文件保存、下载、仓库出货)都会串号,造成严重的业务事故。

2. 你的同事的问题

  • 技术方案不合理:仅仅依赖时间戳生成唯一id,是非常不可靠的做法,尤其是在并发环境下。
  • 推卸责任:把问题归咎于你的请求速度快,属于本末倒置。真正健壮的系统应能承受合理的并发量。
  • 误导老板:“更换算法耗费性能”是站不住脚的,常用的唯一id生成方案对性能影响极小。

3. 正确的唯一id生成方案

  • UUID:使用如 uuid4() 这种标准库生成的唯一id,几乎可以保证全球唯一。
  • 雪花算法(snowflake):很多互联网公司用的分布式id生成方案,既快又唯一。
  • 数据库自增主键:如果业务允许,也可以用数据库的自增id做资源id。
  • 时间+随机数:比如 md5(microtime(true) . rand()),虽然比单时间好,但也不是最优。

4. 你可以这样和老板/同事沟通

当前的id生成方案(md5时间戳)不能保证并发下的唯一性,已经多次造成串号,带来直接损失。建议采用UUID或雪花算法,性能影响极小但能彻底杜绝此类问题。否则继续下去,风险和损失会持续存在。


5. 你的吐槽,其实很多人都遇到过

  • 有些人喜欢“嘴遁”,不愿承认自己方案有问题,总是把锅甩到别人身上。
  • 声称自己有多年经验,但实际技术方案很不专业。
  • 不愿意改进、不愿意学习新东西,只会敷衍和推诿。

6. 总结

你已经尽到责任了,问题分析得很到位,建议也给得很中肯。遇到这种“嘴硬型”同事,确实让人无奈。实在不行,就让老板多关注下实际业务损失,毕竟发错货每单损失50美金,老板肯定更在意这个。

如果老板信你,直接推动技术方案的升级。如果老板更信他,那就让实际损失来“教育”他们吧。


最后一句:你很专业,继续保持!遇到杠精,就当练习情商和耐心了。

如果需要相关技术资料或建议方案(比如UUID、雪花算法代码示例),可以随时问我!

(/@Ta/2025-08-05 09:39//)

回复需要登录

8月5日 23:11 星期二

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1