这 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、数据结构、算法、编程、网络等各种常考题。
这 BUG,绝了的更多相关文章
- Android ScrollView 嵌套 ListView、 ListView 嵌套ScrollView Scroll事件冲突解决办法
本人菜鸟一名,最近工作了,开始学习Android. 最近在做项目的时候,UX给了个design,大概就是下拉刷新的ListView中嵌套了ScrollView,而且还要在ScrollView中添加动画 ...
- 因写太多 BUG!程序员遭公司颁奖羞辱,做的一个比一个绝
刚入职的程序员新人,办公桌上,基本上也就一电脑.一键盘.一鼠标,再配个被杯子.然而混迹职场多年的猿老们,办公桌上都有一些彰显身份地位的“好东西”. 这张图两点颇多,最显眼的,是办公桌上那个黄黄的东西, ...
- Chrome出了个小bug:论如何在Chrome下劫持原生只读对象
Chrome出了个小bug:论如何在Chrome下劫持原生只读对象 概述 众所周知,虽然JavaScript是个很灵活的语言,浏览器里很多原生的方法都可以随意覆盖或者重写,比如alert.但是为了保证 ...
- 一个难倒 3年 android开发经验 " 工程师 " 的 "bug"
一个关于 imageView 设置 scaleType 的问题. 就在刚才 晚上9 点多的时候,我的一个外包伙伴发一个工程代码我,叫我去看下这样一个"bug",说折腾了很久,图片选 ...
- 《C专家编程》第二章——这不是Bug,而是语言特性
无论一门语言有多么流行或多么优秀,它总是存在一些问题,C语言也不例外.本章讨论的重点是C语言本身存在的问题,作者煞费苦心的用一个太空任务和软件的故事开头,也用另一个太空任务和软件的故事结尾,引人入胜. ...
- AngularJS in Action读书笔记6(实战篇)——bug hunting
这一系列文章感觉写的不好,思维跨度很大,原本是由于与<Angularjs in action>有种相见恨晚而激发要写点读后感之类的文章,但是在翻译或是阐述的时候还是会心有余而力不足,零零总 ...
- 程序员遇到BUG的解释
开发应用程序是一项压力很大的工作,人无完人,工作中遇到bug是很正常的事,有些程序员会生气,沮丧,郁闷,甚至泄气,也有一些程序员则会比较淡定.如何进行修复bug的过程,是值得我们好好推敲的. 我想分享 ...
- 你连Bug都抓不住,还谈什么参与感?
林子大了什么鸟都有,APP市场也是这样.举个例子,有段时期图片社交井喷式发展,各类图片社交APP一时充斥着市场.各种或重视图片加工或主打社交元素的APP“来得快去得快”.“你方唱罢我登场”,这些短命A ...
- Bug避障算法简介
移动机器人智能的一个重要标志就是自主导航,而实现机器人自主导航有个基本要求--避障.避障是指移动机器人根据采集的障碍物的状态信息,在行走过程中通过传感器感知到妨碍其通行的静态和动态物体时,按照一定的方 ...
随机推荐
- 本地存储和cookies之间的区别是什么?
cookies本地存储客户端/服务器端既可以从客户端也可以从服务器端访问数据.每个请求都会发送cookie数据到服务器.只能在本地浏览器端访问数据.服务器无法访问本地存储,除非特意通过POST或GET ...
- 爬虫-数据解析-xpath
xpath 解析 模块安装 : pip install lxml xpath的解析原理 实例化一个etree类型的对象,且将页面源码数据加载到该对象中 需要调用该对象的xpath方法结合着不同形式的x ...
- .NET面试经典三问:什么是.NET?什么是.NET Framework?什么是.NET Core?
什么是.NET?什么是.NET Framework? 本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先从类型系统开始讲起,我将通过跨语言操作这个例子来逐渐引入一系列.NET的相关概念,这主要 ...
- kbengine开源分布式游戏服务端引擎
一款开源的支持多人同时在线实时游戏的服务端引擎,使用简单的约定协议就能够使客户端与服务端进行交互,使用KBEngine插件能够快速与(Unity3D.OGRE.Cocos2d.HTML5,等等)技术结 ...
- h5 ios输入框与键盘 兼容性优化
起因 h5的输入框引起键盘导致体验不好,目前就算微信.知乎.百度等产品也没有很好的技术方案实现,尤其底部固定位置的输入框各种方案都用的前提下体验也并没有很好,这个问题也是老大难问题了.目前在准备一套与 ...
- MapReduce在集群执行任务时报错:Initialization of all the collectors failed. Error in last collector was:java.lang.ClassCastException
报错信息详细: Error: java.io.IOException: Initialization of all the collectors failed. Error in last colle ...
- Android控件设置半透明+EditText设置默认值+ 控件居中
Android控件设置半透明 效果 代码: android:background="#50FFFFFF" 50表示50%透明 Android:EditText设置默认值 andro ...
- mybatis 实现分页和过滤模糊查询
基于 mybatis 的分页和过滤查询 学习内容: 分页设计 1.分页需传递的参数 2.分页需展示的数据 3.分页需展示的数据的来源 3.1.结果总数与结果集(分页原理) 3.2.总页数.上一页和下一 ...
- CentOS7 Network Setting
#display devices[root@localhost ~]# nmcli d #set ipv4 address[root@localhost ~]# nmcli c modify eth0 ...
- 入行数字IC验证的一些建议
0x00 首先,推荐你看两本书,<"胡"说IC菜鸟工程师完美进阶>(pdf版本就行)本书介绍整个流程都有哪些岗位,充分了解IC行业的职业发展方向.<SoC设计方法 ...