这 BUG,绝了

简介: 看到这几个 BUG 之后,我的目标就改变了,不再是写出优雅的代码,而是写出巧妙的 BUG。

上周只上了三天班,但我也丝毫不敢懈怠,BUG 更是一个也没少写。

看着满屏幕的 ERROR,我陷入沉思。为什么我写的代如此烂,无法像大牛们写的那般优雅?

越想越自卑,越想越抑郁。我觉得这样不行,一定得振作起来。

正如一位哲人曾经说过:

世间万事万物,都是有两面性的:有它光明的一面,也就有他阴暗的一面;有它积极的一面就有他消极的一面;有他好的一面也有它坏的一面。

我的代码虽然不够优雅,但写的 BUG 还能比别人差吗?

然后我在网上搜了一下,没错,BUG 也比别人差。

软件开发历史上有哪些著名的 BUG 呢?今天我们就来好好聊一聊,涨涨奇怪的知识点。

第一个 BUG

上图中有一只飞蛾被贴在了一张纸上,这可不是某个人的特殊爱好,而是计算机的第一个 bug。

它导致了哈佛 Mark II 计算机中的继电器短路。Grace Murray Hopper 找到了它,并把它放在了日志中。

如果没有这个 bug,我们可能对计算机中的错误就有不同的说法了。

这可能是最著名的计算机错误了。

500 英里外的邮件

一位国外做邮件服务的管理员,有用户向他抱怨说:他们不能发送超过 500 英里距离的电子邮件。

这不是扯淡吗?这可是互联网业务,怎么还跟实际距离有关了。

管理员一听也是一脸懵逼,根本不相信。根据程序员法则即可推理:原来还好好的呢。

有一位用户还特意做了一张邮件发送失败的地图。地图上显式,邮件的送达区域半径比 500 英里就多那么一点点:半径内的收件人,全收到了,之外的,全失败了。

看来是真的有这个问题,还是得排查啊。到底是怎么回事呢?

原来是一次软件升级导致远程服务器超时时间被设为 0。在一个具有典型负载的特定机器上,零超时意味着如果连接时间稍微超过 3 毫秒,服务器就会终止连接。

而以光速传播的电信号,在 3 毫秒的时间内所能到达的距离大约是:

0.003 * c (光速) = 558.84719 miles

星期三崩溃的系统

一家医院用来监控病人健康的数据库,每到周三,会自己崩溃。

我就不一样了,我是周一到周四都会崩溃。只有周五状态正常,因为马上就要修周末了。

说回这个系统,该系统记录日志是用 C 风格的代码编写的,把日志字符串记录到了一个固定长度的缓冲区中,其中日志时间一栏,格式例如「Monday, July 17, 1997, 10:38:47.123」。

看到这是不是有点灵感了,肯定是跟时间有关系,让我们把信息再明确一下:

星期 长度
Sunday 6
Monday 6
Tuesday 7
Wednesday 9
Thursday 8
Friday 6
Saturday 8

这样的话就清晰了,原因就是周三的字符串长度更长,在这一天,缓冲区恰好溢出了。

这 BUG,还真的就是这么巧妙。

《江南 Style》爆表

这个 BUG 可能很多同学都知道,也就是几年前的事情。

鸟叔的一首《江南 Style》火遍全球,顺便爆出了 YouTube 的一个 BUG。

原因就是 YouTube 的计数器之前使用的是 32 位整数。32 位整数确定了它可以计数的最大可能点击量为 2,147,483,647。

YouTube 的程序员可能都没想到,还能有一个视频的点击量能超过这个数?

《江南 Style》视频点击量超过了最大值,我们就得到了著名的《江南 Style》YouTube BUG。

现在,YouTube 的视频计数器改用 64 位整数,这意味着视频最大观看人数为 922 万万亿 。

YouTube 程序员:我看看还有谁?

看到这几个 BUG 之后,我的目标就改变了,不再是写出优雅的代码,而是写出巧妙的 BUG。

我要在系统中暗藏一些「奇思妙想」,给我的继任者留下一个又一个惊喜。加油~

以上就是本文的全部内容,如果觉得还不错的话欢迎点赞转发关注,感谢支持。


推荐阅读:

  • 计算机经典必读书籍
  • 技术博客 硬核后端开发技术干货,内容包括 Python、Django、Docker、Go、Redis、ElasticSearch、Kafka、Linux 等。
  • Go 程序员 Go 学习路线图,包括基础专栏,进阶专栏,源码阅读,实战开发,面试刷题,必读书单等一系列资源。
  • 面试题汇总 包括 Python、Go、Redis、MySQL、Kafka、数据结构、算法、编程、网络等各种常考题。
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
小程序
微信小程序 - block 与 view 的区别
微信小程序 - block 与 view 的区别
1003 0
|
存储 JSON 数据格式
Pandas处理JSON文件to_json()一文详解+实例代码
Pandas处理JSON文件to_json()一文详解+实例代码
2367 0
Pandas处理JSON文件to_json()一文详解+实例代码
|
机器学习/深度学习 存储 安全
数据库模型:层次模型、网状模型、关系模型
数据库模型:层次模型、网状模型、关系模型
|
SQL 自然语言处理 数据挖掘
大模型与数据分析:探索Text-to-SQL(上)
大模型与数据分析:探索Text-to-SQL(上)
6309 0
|
关系型数据库 MySQL Windows
mysql彻底卸载干净的5个步骤,超多图超详细保姆级教程最新教程新手小白轻松上手
mysql彻底卸载干净的5个步骤,超多图超详细保姆级教程最新教程新手小白轻松上手
26928 2
|
小程序 前端开发 JavaScript
小程序入门之认识view和text组件
小程序入门之认识view和text组件
287 0
|
SQL 存储 大数据
SQL 语言发展史简直太震撼啦!从诞生到现代数据处理,见证一场奇妙的演变之旅,快来感受!
【8月更文挑战第31天】SQL(结构化查询语言)自20世纪70年代由IBM研究员E.F. Codd提出以来,已成为现代数据处理不可或缺的一部分。它最初简化了层次和网状模型中复杂的存储与检索问题,通过基本的SELECT、FROM和WHERE关键字实现了数据查询。80年代,SQL在商业数据库中广泛应用,引入了GROUP BY、HAVING和ORDER BY等功能,增强了数据分析能力。90年代,互联网和企业信息化推动了SQL的进一步优化与扩展,支持分布式数据库和数据仓库等技术。
621 0
|
存储 人机交互 数据库
如何数据库设计?
本文介绍了数据库设计的四种方法和基本步骤。直观设计法依赖设计者经验,规范设计法(如新奥尔良法)遵循软件工程原理,分为需求分析、概念设计、逻辑设计和物理设计四个阶段。计算机辅助设计法借助软件工具,自动化设计法则通过人机会话自动生成数据库。设计步骤包括需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施和运行维护。需求分析是关键,概念结构设计是基础,逻辑和物理设计涉及数据模型转换和存储优化,而运行维护是持续改进的过程。
741 0
如何数据库设计?
|
存储 JSON 安全
深入理解与实践:Token的使用及其在Web应用安全中的重要性
【7月更文挑战第3天】在现代Web应用程序中,Token作为一种关键的安全机制,扮演着维护用户会话安全、验证用户身份的重要角色。本文将深入探讨Token的基本概念、类型、工作原理,并通过实际代码示例展示如何在Web应用中实现Token的生成、验证及应用,以确保数据传输的安全性和用户认证的有效性。
3881 2
|
小程序
【微信小程序】-- 全局配置 -- window - 下拉刷新 & 上拉触底(十六)
【微信小程序】-- 全局配置 -- window - 下拉刷新 & 上拉触底(十六)