一个“/”键,封锁了整个互联网

2023-11-09

专栏 | 九章算法

网址 | http://www.jiuzhang.com

正所谓无BUG不生活,从你含辛茹苦地码着第一行代码开始,bug就如影随形。

其实,bug 被自己或者是测试人员发现都是好事;但如果是被用户发现,又或者导致了客户和公司的巨额损失……这些未知后果,就如同悬在头顶的一把利刃,让人脊背发凉……

但一个小小的bug,可能带给你惊吓,也可能带来惊喜。接下来,我们就来看看 bug 都能带来哪些意想不到的影响呢?

1 来自 Amazon 的圣诞大礼包~

2014年的12月,英国的 Robert Quinn 收到了50多个包裹!

但这并非是他前一晚血拼剁手的后果,而是 Amazon的电脑出包将退货到仓库的包裹错寄到了他家!担心退货者收不到钱款的Robert 前后三次联系Amazon。

但是Amazon 给他的回复却是:这么多东西错寄过来给你添麻烦了吧!这些东西你可以留着,送你了!

事实上,Amazon 错送包裹的情况时有发生,而根据美国联邦贸易委员会(FTC)规定,如果是零售商的错,你就可以保留该商品。如果你不想要也可以退货,Amazon理应为返航买单;如果你留下它,你可以送给朋友,捐给慈善机构,甚至是挂在网上出售~~

2 就当一晚的土豪~

1999年1月1日,欧洲19个国家引入欧元,取代本国货币。在葡萄牙,1 欧元值 200 埃斯库多(葡萄牙货币单位)。

新年前夕,一位葡萄牙网友的银行账户里有1,500,000埃斯库多;第二天的户头里理应是7500欧元。然而此时,他的银行账户里却有 **1,500,000 欧元,是之前的整整 200倍!!!**这时,银行突然之间如蚁附膻,视他如皇亲贵胄。

于是1月6日,这位网友收到了一封银行CEO亲自签署的邮件,邀他参加一个私人歌剧晚会,着燕尾服,时间是周末。

这位网友表示,他知道这笔巨额财富最多是黄粱一梦,但是这个晚会实在让人心驰神往,不能不去!所以他回信了,并帮同事和朋友们索要了额外的入场券。果然,他接到了CEO秘书打来的电话,他们表示非常乐意提供更多的入场券。

这位“一晚的土豪”表示:“其实歌剧表演得并不太好,好在鱼子酱和香槟让我不虚此行。”

但不久之后,他的银行余额被更正了,遂再也没接到过CEO的电话了~

3 鸟叔让 YouTube 被迫升级计数系统

2014年,鸟叔的《江南style》震动Google。

当年 YouTube的计数上限为32比特的整数,这意味着可显示的最大计数值为2,147,483,647。此前从未有一个视频播放量超过YouTube预设的上限。直到这首《江南 style》让播放量在某个瞬间变成了-2142871897,终于让google慌了神。

YouTube说:“我们从来没想过有哪个视频的播放率会超过32位整型数据的最高值,直到我们遇到了Psy。”

就这样,YouTube被迫升级了计数系统到 9,223,372,036,854,775,808,即9个Quintillion(九百亿亿,9×1018)以上。

4 让人啼笑皆非的加拿大银行事件

加拿大信托银行的ATM机可以接受银行卡,但是如果你没有带卡你也可以键入你的账户信息,通过这种方式执行你的银行业务。机器会问你:“您是否携带银行卡?”随之会有一个按钮为是,另一个按钮为否。

程序员们花费了几个月的时间去调试系统,追踪每一个错误,预判每一个客户可能会做出的每一个稀奇古怪的决定……这一切都是为了要确保系统会在运行时保持稳定。

终于到了机器开始运营服务的那一天。

运营的第一个小时里,安大略南部某处的某位客户,对“您是否携带银行卡”这一问题选择了“否”后,把他的银行卡强插进了卡槽里。

然后,这整个系统,整个安大略的系统,都……崩了。

5 万死难辞其咎!我应该更新代码的……

阿丽亚娜火箭坠毁居然是因为软件代码没有测试、更新?!

1996年6月4日,阿丽亚娜5型运载火箭原计划将运送4颗太阳风观察卫星到预定轨道,但因软件问题,火箭在发射后偏轨激活了自我摧毁装置。就在刹那间,阿5型火箭和其他卫星燃为灰烬。

然而事故的原因却是:代码重用! 在二者的飞行条件截然不同的情况下,阿5型的发射系统代码仍然直接重用了阿4型的相应代码。虽然该代码在阿4型上是完美运行,但却从未在阿5型上进行过测试。

事实证明,阿4型往旧软件(SRI)输入的是16位元整数数据,阿5型往SRI 输入的是64位元浮点数数据,数据转换时溢出。

此次事故损失3.7亿美元。

6 一个“/”键,封锁了整个互联网

2010年1月31日,Google 封锁了整个互联网。

Google 向来都保护着我们免受恶意软件和病毒感染的网站的侵扰;它与stopbadware合作,监视着危险的恶意软件/病毒/软件,并时刻更新标记网站列表。

而这一次,将站点添加到标记的列表程序员在本该输入URL的位置,不小心地输了“/”。

因为这一疏漏,互联网上所有的网站都被标记为危险。

故障持续了40分钟,损失30亿美元。

7 一字之差,AWS服务中断

由于为不少大型网站和应用提供云服务支持,AWS(Amazon Web Services)可以说是互联网的主心骨。

2017年2月28日,亚马逊(S3)团队当时在调试一个问题,该问题导致S3计费系统的处理速度比预期慢。

一名获得授权的S3团队成员要使用事先编写的playbook执行一条命令,该命令旨在为S3计费流程使用的其中一个S3子系统删除少量服务器。

不幸的是,他在输入命令时……输错了一个字母!

结果删除了一大批本不该删除的服务器。不小心删除的服务器支持另外两个S3的索引子系统和布置子系统。删除相当大一部分的容量导致这每个系统都需要完全重启。

而这一故障持续了大约4个小时,影响了数千个在线服务,其中包括 Netflix、Airbnb、Slack、Spotify、雅虎网络邮箱等互联网服务。

8 0.000000095带来的爱国者之殇

1991年2月25日,海湾战争期间,在沙特阿拉伯的达兰,美国的“爱国者”系统未能追踪并拦截一枚伊拉克飞毛腿导弹。

“爱国者”导弹防御系统工作流程是:探索阶段、验证阶段、跟踪阶段,在跟踪阶段会等对方的导弹进行拦截。但如果“爱国者”持续工作超过8小时,射程就会偏离正常位置20%;这虽然是个已知的bug,但美国军方不认为“爱国者”导弹会持续工作超过8小时,但那时实际运行时间已持续约100小时。

系统每1/10秒就进行一次乘以1/10的运算,1/10的二进制就是0.00011001100110011001100...……,但在爱国者的24位固定小数点寄存器里就只保存到小数点后第24位。每次计算就会舍去0.0000000000000000000000011001100(十进制约0.000000095)。

爱国者工作时间约100小时,按0.000000095 x 100(小时)x 60(分) x 60(秒)x 10(每秒进行的除法运算)=0.34秒;飞毛腿导弹速度约1676米/秒,按0.34(秒)x1676(米/秒),导弹飞行距离早就超过了半公里;这点距离已足够能让导弹飞到爱国者追踪拦截的范围之外了。

这枚导弹袭击了美国军营,造成了28名士兵死亡,约100人受伤。

9 手下留情~别杀光我的系统软件!

2010年4月21日,McAfee进行企业版软件更新时将 windows 系统文件识别为隔离感染文件。

McAfee并不确定有多少台电脑受到影响,不过通过网上的反应来看,全球医院、企业和学校等机构至少有数十万台电脑因McAfee更新故障而受影响。据说,英特尔公司内部电脑以及美国卫星电视运营商Dish Network的呼叫中心也受到了这一故障的影响。

之后,McAfee修复了软件问题,重新提供软件更新的下载。

2007年5月,赛门铁克的诺顿杀毒软件也有类似情况,病毒库升级后,把简体中文版Windows XP的关键系统文件当作病毒清除查杀,导致系统瘫痪。

2016年7月,继McAfee后CA互联网安全套装误将某些Windows XP系统文件视为病毒,导致用户无法找到这些文件。对此CA已给予证实,也同时强调这些文件只是被隔离,用户可以手动恢复文件。

但频繁受害的用户们看到这样的境况,真的只能默默做好备份了吧/(ㄒoㄒ)/~~

欢迎关注我的微信公众号:九章算法(ninechapter)。
精英程序员交流社区,定期发布面试题、面试技巧、求职信息等

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一个“/”键,封锁了整个互联网 的相关文章

  • 静态方法中调用非静态方法

    1 常见现象 静态static方法中不能直接调用非静态non static方法 但可以通过将对象引用传入静态方法内 进而再调用该对象非静态 non static 方法 在主函数 static方法 中 我们经常需要创建某个类的实例 再引用其非
  • Mysql高级部分

    1 索引 索引 index 是帮助Mysql高效获取数据的数据结构 索引的目的在于提高查询效率 可以类比字典 可以简单理解为 排好序的快速查找数据结构 在数据之外 数据库系统还维护着满足特定查找算法的数据结构 这些数据结构以某种方式引用 指

随机推荐

  • tslib1.4的交叉编译

    tslib是touch screen lib 即支持触摸屏的库文件 要交叉编译qte4 5 2 就必须先要编译tslib1 4 今天做了这个工作 记录一下 平台 VMware Centos5 4 交叉编译器 arm linux 3 4 1
  • windows下使用cmake编译c++

    好久没有更新博客了 最近在做c 相关的 编译起来确实很痛苦 所以心血来潮 继续更新一下 主要还是一些跨平台的库 比如zlib libpng opencv ffmpeg 编译工具使用mingw作为主要编译环境支持 使用msys进行编译 一 下
  • R语言实战笔记--第八章 OLS回归分析

    R语言实战笔记 第八章 OLS回归分析 标签 空格分隔 R语言 回归分析 首先 是之前的文章 数理统计里面的简单回归分析 这里简单回顾一下 简单回归分析的原理 最小二乘法 即使回归函数与实际值之差的平方和最小 所以它在R中也称为OLS模型
  • 人工智能可以用来预测人口增长吗?

    人工智能可以用来预测人口增长 利用人工智能技术 可以对历史人口数据进行分析 并根据这些数据建立预测模型 从而预测未来的人口增长趋势 此外 人工智能还可以用于预测人口结构变化 人口流动趋势等方面的问题 这些预测结果可以为政府制定人口政策提供参
  • java读写文件大全(字节流读取得方法)

    原文地址 http blog sina com cn s blog 6a4af8630101et2t html 使用Java操作文本文件的方法详解 摘要 最初java是不支持对文本文件的处理的 为了弥补这个缺憾而引入了Reader和Writ
  • Ubuntu下的终端产生多标签和多标签切换快捷键

    ctrl alt t是打开一个terminal ctrl shift t是在terminal中打开多个标签 在多个标签中切换的方法 方法1 alt 1 alt 2 alt 3 方法二 ctrl pageUp ctrl pageDown ct
  • 【vision transformer】DETR原理及代码详解(四)

    本节是 DETR流程及 构建backbone和position embedding 相关部分的代码解析 一 DETR代码流程 STEP 1 Create model and criterion 构建模型和标准 STEP 2 Create t
  • IPv4和IPv6的互操作性

    概述 在IPv4到IPv6发展的过度阶段 必然出现v4和v6主机之间互操作的问题 下面从机制层面讨论互操作的可能性 并假设主机之间网络路由已经打通 IPv4客户端访问IPv6服务端 IPv4客户端访问IPv6服务端指的是服务端是双栈主机 客
  • OpenCV(二)——图像基本处理(二)

    目录 2 图像的几何变换 2 1 图像平移 2 2 图像缩放 2 3 图像旋转 2 4 仿射变换 2 5 透视变换
  • 电脑开机全是英文进不了系统怎么办

    现在工作都离不开电脑 但是有时候电脑罢工了 电脑开机全是英文进不了系统怎么办呢 下面就和大家讲讲电脑开机全是英文进不了系统解决办法吧 装机吧 电脑一键重装系统领域装机大师 重装系统xp win7 win8 win10 win11 怎么能缺少
  • python毕业设计基于django中小学信息技术课程考试系统

    文末获取资源 收藏关注不迷路 文章目录 一 项目介绍 二 主要使用技术 三 研究内容 四 核心代码 五 文章目录 一 项目介绍 通篇文章的撰写基础是实际的应用需要 然后在架构系统之前全面复习大学所修习的相关知识以及网络提供的技术应用教程 以
  • Neo4j 融资 3.25 亿美元,数据库史上最大的一笔投资

    加州圣马提奥 2021年6月17日 Neo4j图形技术的领先者 今天宣布了一轮F系列融资 这是一项3 25亿美元投资的一部分 亚拉齐奥 RF Pa GV 前称谷歌风投 今天的交易代表了对私人数据库公司的最大投资 使Neo4j的估值超过20亿
  • 什么是.NET?什么是.NET Core?.NET和.NET Core区别又是什么呢?

    本文首发于码友网 什么是 NET 什么是 NET Core NET和 NET Core区别又是什么呢 概述 对于 NET平台的初学者来说 有时候比较困惑 什么是 NET 什么是 NET Core NET和 NET Core区别又是什么呢 确
  • 【一句话攻略】彻底理解JS中的回调(Callback)函数

    作为JS的核心 回调函数和异步执行是紧密相关的 也是必须跨过去的一道个门槛 那么究竟什么是回调函数 Callback 其实回调函数并不复杂 明白两个重点即可 1 函数可以作为一个参数在另一个函数中被调用 2 JS是异步编程语言 这就是说JS
  • python-opencv滑动条,cv2滑动条,模糊示例

    cv2的滑动条使用起来其实挺简单的 只需记住两个函数就行 cv2 createTrackbar创建滑动条 cv2 getTrackbarPos获取滑动条当前值 其他要注意的是滑动条的名字以及滑动条创建在哪个窗口上 这个要一一对应 详见下例
  • react源码分析:babel如何解析jsx

    同作为MVVM框架 React相比于Vue来讲 上手更需要JavaScript功底深厚一些 本系列将阅读React相关源码 从jsx gt VDom gt RDOM等一些列的过程 将会在本系列中一一讲解 工欲善其事 必先利其器 经过多年的发
  • 内存泄漏的8种情况(附代码示例)

    一 内存泄漏 memroy leak 严格来说 只有对象不会再被程序用到了 但是GC又不能回收它们的情况 才叫内存泄漏 宽泛的讲 实际情况中很多时候一些不太好的实践会导致对象的生命周期变得很长甚至导致OOM 也叫 内存泄漏 申请了内存用完了
  • C++ - 类中的函数重载

    1 回顾函数重载 gt 函数重载的本质为相互独立的不同函数 gt C 中通过函数名和函数参数确定函数调用 gt 无法直接通过函数名得到重载函数的入口地址 gt 函数重载必然发生在同一个作用域中 2 类中的重载 类中的成员函数可以进行重载 g
  • JNI线程

    作者 左少华 博客 http blog csdn net shaohuazuo article details 43149193 转载请注明出处 http blog csdn net shaohuazuo 1 Android线程介绍 1 线
  • 一个“/”键,封锁了整个互联网

    专栏 九章算法 网址 http www jiuzhang com 正所谓无BUG不生活 从你含辛茹苦地码着第一行代码开始 bug就如影随形 其实 bug 被自己或者是测试人员发现都是好事 但如果是被用户发现 又或者导致了客户和公司的巨额损失