查看原文
其他

今天去取快递,我脑洞大开了一把!

脚本之家 2022-09-23

The following article is from why技术 Author 歪歪

 关注
脚本之家
”,与百万开发者在一起
本文经why技术(id:hello_hi_why)授权转载如若转载请联系原公众号
事情是这样的。
最近不是疫情嘛,小区的快递驿站关了几天,得给这些快递们做核酸检测。
那些快递小哥送来的快递也放不进驿站,也进不来小区,就只能在小区门口摆摊,然后打电话通知大家来取快递。
于是我收到小哥打给我的电话:
然后我就起身出门了。
嗖的一下,很快啊,就到小区门口了。
就看到一个快递小哥站在一堆快递前,不停地分类。
然后我跟他说:老哥,我来取快递。
他问我:手机尾号多少呀?
我答:尾号是 8。
然后他走向了一地包裹里面最长的那一溜,说:在这一堆里面,有点多,你稍等一下,我给你找一找。
然后他就从第一个开始翻。
聪明如我,一下就搞懂了他的快递分堆原理。
这不就是根据手机尾号进行 Hash 计算嘛。尾号相同的放在同一列里面,方便客户来取。
这就是个长度为 10 的数组加链表,这玩意不就是一个简陋的 HashMap 吗?
HashMap<手机尾号,快递包裹>
好巧不巧的,我这尾号为 8 的快递明显比别的快递多得多,简直都堆成山了。
我问他:这一堆快递怎么这么多呀?我们小区手机尾号是 8 的人这么多吗?
小哥边找边说:不止你们这个小区哦,这附近小区的快递都在这里,所以看起来很多。
当时我心里就在想:那这个 HashMap 定义的不合理啊。应该先按照小区的维度划分一下。
HashMap<小区,HashMap<手机尾号,快递包裹>>
于是我问小哥:为啥子不(怎么不)先根据小区的维度 Hash 一把(次)呢?
很明显,小哥一愣,没听懂我在说什么。
于是我改了一下说法:为啥不先分小区,再把小区里面的快递按照手机尾号进行划分呢?
小哥想也没想地用标准的四川话回复我:哎呀,人手不够的嘛,我分堆堆的时候还要看小区,恼火得很。哦,你莫急,我很快就找到你的了,莫 ~ 急 ~
就在我们聊天的空档,我后面已经排了三个等着取快递的人了:
又过了半分钟,小哥一看尾号为 8 的快递还得找一会,就对我说:老弟,这样嘛,你稍等一下下,我先把后面的人找一下,他们的应该很快。不耽误时间哈,莫 ~ 急 ~
我当然说没问题了,虽然我很赶时间,这个快递属于拿到马上就要用的那种,但是我还是非常理解这些小哥哥们的,等一会嘛,问题不大。
于是在小哥给其他人取快递的空档,我还在思考:他这个数据结构不够优秀啊。漏洞很多嘛,比如,处理不了我的请求。系统抗击打能力很拉胯啊。
就在我思考的时候,其他三个人的快递,果然很快就找到了,毕竟他们的尾号对应的快递一共也没几个。
小哥接着找我的快递,没想到我的快递居然在这个队列的最后几个。相当于是把一个长链表从头遍历到尾了。时间复杂度,不容乐观。
很明显,小哥找到我的快递的时候,露出了一丝不易察觉的微笑,仿佛在宣告着他的胜利。
在回家的路上,我就在思考。
如果我是这个小哥的竞争对手,基于他现在这么简单的分类方法,我完全可以对他进行攻击啊。
比如,我去找一堆尾号为 8 的电话卡,然后某宝上下单非常便宜的东西,并指定快递运营商。那他岂不是直接就来不及处理尾号为 8 的客户的快递了,至少处理的时候得花一阵时间。
这样,来取快递的用户等的时间长了,心里就不爽了,然后点个投诉啥的...
额,等等...
这玩意,不就是 hash 冲突攻击大法?
这真是,处处留心皆学问啊。
想到这,我不禁为自己的聪明才智拍掌叫好,想着快点回去向我的老婆汇报我的发现,一定会得到她崇拜的目光。
于是还不由得加快了步伐。
回到家后,我推门就汇报了这次惊人的发现,老婆反问一句:那岂不是菜鸟驿站也有同样的问题?
一时间,竟然把我问兴奋了:是啊,如果菜鸟驿站也有这样的问题,那我反馈一下,岂不是提升了他们的工作效率。再怎么也得在全小区通报表扬一下吧?
但是,等我冷静下来后,我发现是我想得太简单了,菜鸟驿站的包裹放置逻辑肯定不是按照手机尾号 Hash 这么简单的算法来的呀?
比如我看了一下我之前的取件码,它是这样的:
我知道它的含义是 2 号货架第 1 层 5006 号包裹。
但是 2-1-5006 这个号是由它们系统生成的,具体是怎么生成的,我也不知道。
由于不知道他们的生成规则,那部分攻击这条路肯定是走不通的。
注意,为什么我这里要强调“部分攻击”呢?
因为我可以直接发起暴力的 DDos 攻击啊,疯狂地下单,让驿站处理不了这么大的订单量。比如你想想每年的双 11 不就是一次 DDos 攻击吗?
就像是在斯大林格勒战场上,李云龙带动晋西北,攻打整个平安县城一样,怒气值上来之后,直接就是火力全面覆盖。
而 Hash 攻击,应该是像水门桥战役一样,就猛攻水门桥这一个点,单点打爆,也能影响到整个战斗局势的走向。
好了,不说了,我已经迫不及待地要打开包裹了。
因为里面是这个玩意:
- END -

程序员专属T恤

商品直购链接 👇

  推荐阅读:

终于!我找到程序员爱穿卫衣的原因了

不靠乔布斯,苹果曾早 13 年做出了「iPhone」
有毒!为什么机械键盘用了就回不去了

大厂员工带宠物上班之后

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存