十几年前,给宝钢做了一套设备监控系统,实时采集他们一套设备上各种数据。
安装位离监控室较远,采集器采样几个不同传感器信号,处理后,通过422发送大概有600-700米距离给监控室。
安装完,测试一天,一切正常。 然后收工。
结果当天晚上数据不停出错。 数据是带校验的,错误数据包极多,导致接收主机时常性报错。
第二天去,找不到任何毛病,一切正常。
晚上,又出错。一连几天都这样。
监控室晚上理论上有人值班的,让他看着到底啥时出错,结果人在,机器完全正常。 值班的人到旁边小间睡觉了,故障就出来了。
当中把发送波特率程序中由9600改成2400,故障明显减少,甚至没有。但是宝钢的领导非要按合同上的参数,一定要9600。
好吧!
想不通了。前前后后跑了不少次,最后发现,422通讯线,实际上留了大概800米,盘了一圈在接收仪器后面。
人只要一靠近,感觉就像耦合电容一样,立刻错误数据包就少了。 所以有人的时候,怎么也查不出问题。
把线拉直,多余的尽可能放外面,一夜正常。 监控室里还有不少其他设备,又不能叫他们关掉其他设备检查到底怎么回事。估计原来设备,有电磁波溢出。
最后解决也很方便,把通讯线换成双屏蔽线材,线中间多点破皮引出屏蔽线多点接地,就再没出现问题了。
至于一开始为啥有人在就正常,琢磨着人体正好当了一个空间耦合电容吧。
说一个当年让十几亿国人心惊胆战的bug:
景海鹏:神舟七号报告
北京:神舟七号请讲
景海鹏:仪表显示轨道舱火灾 注意检查
北京:北京明白
画外音:通报长城………
北京:长城我是北京
长城:长城到
北京:仪表显示轨道舱火灾请长城……
长城:请重复……
景海鹏:神舟七号报告
北京:神舟七号请讲
景海鹏:仪表显示轨道舱火灾
北京:北京明白
此时电视直播画面出现马赛克 开始卡顿
画外音翟志刚:真空哪来的火?
北京:长城我是北京 请长城确认飞船仪表显示状态
长城:明白
画外音:南亚发现目标………
长城:长城报告 飞船工作正常
北京:北京明白
刘伯明:没事 01 我们继续
翟志刚:着火我们也来不及 不管了
几十秒后翟志刚手持中国国旗出现在太空
北京:神舟七号我是北京
景海鹏 翟志刚:北京请讲
北京:经地面检查确认 目前飞船工作正常
翟志刚:神舟七号明白
从第一次报告火灾到北京第一次给太空回应飞船工作正常,时隔四分钟左右,这四分钟真的是让国人心跳加速、坠落、再正常。还好后来检查这只是一次误报的BUG,后来查明感应器灵敏度太高。
多年前买过一个播放磁带的随身听(暴露年龄),和大多数磁带播放器相比,这货有个华丽的功能是曲目切换:上一曲、下一曲、单曲循环——好吧,我承认我没见过什么世面,至少在我看来这是个华丽的功能。
我就很好奇这个功能怎么实现的。
多亏了周杰伦。
喜欢快歌的杰迷应该都知道:《双截棍》最后一句歌词“漂亮的回旋踢”之后有一个短暂的静音休止(大约2‘59‘’处,不懂音乐,这个描述很不专业)。
然后当我设置循环播放《双截棍》时,一播完“漂亮的回旋踢”就会自动倒带至歌曲开头,后面的一小段被无视了。
这下我就明白了:这货是将歌曲之间的“静音”视为歌曲之间的分隔,但没有想到居然有人会把“静音”作为歌曲的一部分。——于是《双截棍》被当成了两首歌。
印象非常深刻,是我们的一个系统,登录的时候有验证码。验证码设置的过期时间为一分钟。然后我们在这边怎么登录都没有问题。客户那边反应,只要登录就提示验证码已过期,需要重试很多次才行。
然后我们这边就反复的测试,后来发现只要输入验证码的时间超过10秒,就会提示验证码已过期。
开始怀疑是代码有问题,然后到开发环境运行,没有任何问题,测试环境运行,依旧没有问题。
然后突然看到了验证码的逻辑代码,是使用系统时间与验证码存入时间做对比,超过一分钟则提示验证码过期。
由于我们的生产环境为内网环境,所以计算机的系统时间无法完成自动的校准,而且我们是由两台服务器做的负载均衡,所以可能两台服务器的系统时间会不一致。
接着查看系统时间,两台服务器的时间差着不到50秒,调整服务器时间,bug解决。
我们前期反复测试都没有问题的原因是程序员输入验证码的速度很快,而且浏览器记住用户名密码。
必须硬答一波了,这个bug找到原因的时候我简直要死了。
本人在某外卖平台负责前端工作,碰到了一个临时大项目,需要把原来平台的老代码迁移一部分功能到新平台中,我负责的就是物流相关模块的代码。
开发过程中碰到一个莫名其妙的问题就是页面在展示物流配送区域的地图时候原本应该展示的地图加载不出来,正常的效果应该是这个样子的:
然鹅实际出来的效果却是这样子的:
碰到bug本来是很正常的问题,不出bug才不正常呢,开发过程中最怕的就是遇到这种第三方组件库运行不正常的问题,因为你也不知道这个问题是出在你这里还是组件库出的问题,定位问题就要了老命。
于是我找到了地图官网网站,把需要的所有接口的API文档都看了一遍,每个需要用到的字段都核对一遍,然后逐条对比两边数据,然后发现不管我怎么折腾特么的地图展示的永远都是蓝色背景。
???WTF?
从下午一直折腾到晚上还没弄好,正当我自暴自弃怀疑人生的时候无意碰到了鼠标的滚轮,于是地图缩小了,突然我就发现地图中出现了除了蓝色背景之外的东西,然后我继续缩小就发现地图从始至终都运行的正常的,之所以背景全是蓝色是因为特么的这是海洋,后端哥们取不到上游的真实数据就随便给我写了个经纬度0 0 的数据,给我定位到大西洋了。
顿时我怒从心头起,恶向胆边生,站起来就要打人,一看周围就我一人了,再看时间已经两点半了,对接的后端哥们早就跑路了,没办法只能一边提醒自己赶紧回去睡觉,一边提醒自己明天上班别忘了带刀。。。
坐等知乎50周年大庆!
发生于麻省理工的一个有意思的bug:只能发500英里的邮件。原文在此:
http:// web.mit.edu/jemorris/hu mor/500-miles相当Nerd的bug,有兴趣的人看看吧。
大意是,当年麻省的一名系统管理员,忽然收到统计系主任打来的求助电话“咱们的邮件发不了500英里以外的地方,其实,是520英里更准确点”。
系统管理员心里¥!&……*&。
不过在他开始用自己的邮件测试后,发现邮件的确只能发往520英里以内,其余的收件地点一律失败。
于是在他一片纠结中他渐渐开始发现问题,邮件服务器被人更新过操作系统(当年还是SunOS),但是由于操作系统的发行版往往配备了旧版软件,于是在更新操作系统的时候邮件软件反而被降级了(Sendmail 8 -> Sendmail 5)。
于是进一步调查发现,在更新操作系统时,管理员自己编写的Sendmail配置文件(sendmail.cf)被保留了下来。这样就出现了这种状况:Sendmail 5尝试解析Sendmail 8的配置文件。
但是为什么会是500miles呢?为什么是500miles咧?
原因是这样的,Sendmail 5面对陌生的配置文件,凡是不理解的部分都会忽略,凡是没设置过的配置项自动设置成0。这样其中有一个被设置成0,这一项就是 (连接远端SMTP服务器的超时时间)timeout to connect to the remote SMTP server。后来经过实验,发现0秒的timeout会导致Sendmail在3毫秒后中断连接。
所以,为啥是500miles?
在当年,MIT的校园网是没有那么多router的,也就没那么多网络延迟,所以连接一个远端主机的时间大概就是光所需的时间。于是3毫秒, 就意味着:
558英里。也就是558英里以外的服务器,都无法连接到,而558英里以内的服务器,都可以正常通信。
当当当,这就是500英里的bug啦。
我同事。
我们公司用企业微信上班打卡,方圆500米能打上,一般我们会在快到公司路上就打了。
而,那个同事,在离公司还有3个地铁站的距离就打上了,能比我们晚到十多分钟。
几番讨好后,他给我说了操作方法。
地铁停靠那个站点后打开企业微信,然后地铁关门起步,手机信号会变弱,定位会莫名其妙正好漂移到公司附近,然后就会显示上班打卡,尽快点上。几秒钟后信号恢复了就打不上了。
我TM裂开了一早上!!!!
有朋友说,用定位修改软件打卡,这就不是现实世界的bug了,这算是外挂,不可取;
其实好好上班认真打卡才是正道,这种卡bug的行为,用在不小心睡过了的情况下还行,每天都来没必要;
这个年代,能有个收入挺好,请各位珍惜!
九几年广州一个中专学校,有学生发现校园里路边电话亭里面的IC卡电话机,只要卡里面还有金额的话,插卡,拨通长途号码之后,耳朵听到接通的第一声“嘟”之后马上立即快速的扳下话筒挂钩,立即按下“200”之后又会接通了原来的电话,重点是卡里的余额不会变少。
这下好了,当时国内长途一分钟0.85元左右,这两个电话机每时每刻都有人排队打长途,打国外,甚至凌晨三四点还有人等着打电话。两周之内产生的话费超过几十万,引起了电信部门的注意,特地来我们学校检查修理并且拆走这两部电话机。有学生故作不明的问他们为什么拆掉,那工人摇摇头叹息说“你们学校的学生太厉害了!”
弱弱的说一下,我当时也曾经逃了体育课去排队打电话回老家。对一个穷学生来说,能和家里通电话的机会是多么弥足珍贵,没听到也顾不上占便宜可耻的说法了。
刚来菊花厂的时候,旁边工位的大神遇到一个神奇的bug,具体情况是这样的
由于我们经常要试验各种新的技术,各种集群,各种架构架构,有时候linux,windows什么的混搭的集群都有,所以基本上每个工程师那里都申请了一堆的机子,这个大神申请的其中有台win机子,是用administrator登录的平时用的好好的,忽然有一天,登录不上去了,提示账号密码错误
这个提示账号密码错误并不是大问题,我们也经常忘记账号密码什么的。但是呢,在我的桌面登录他的那个机子呢,一样的账号密码直接登录上去了,没有任何问题。后来呢,又发现,他坐在工位上的时候呢,怎么登录都没问题,一旦他站起来了,再输入账号密码,这时候100%登录错误。
然而我们也站着去试,同样的姿势,登录也正常,只有他一个人就不行。
既然坐着能正常登录,那就坐着吧。过了几天相安无事,但是大神的腰还是疼啊,没办法还的站起来,这时候登录可以了,他一阵狂笑,终于解脱了。走过去看发现他用几本书,把键盘垫高了。站着输入正好。然而这不是结局。
第二天产品割接,大家奋战通宵,早上7点多的时候,保洁的大妈来打扫,给那位大神打扫工位,我和大神昏昏欲睡的看着那位大妈在他的键盘上擦灰,眼睛扫过键盘,总觉得键盘什么不对劲,但是又说不上是什么。跑到我自己工位上,把自己的键盘拿过来和他的键盘对比,挨个字母的对,发现大神的键盘,字母M和N这两个键帽,是相反的。我屮艸芔茻,这是什么鬼,这两个键帽为毛是反的?
再看一下这个大神的打字习惯,坐着站着的时候全程不看键盘的盲打,但是站着在登录系统输入账号密码的时候,莫名其妙的他就要看着键盘一个字母一个字母的敲(键盘高度低,姿势换了吧,只有输密码的时候是这样,其他时候也是盲打)。把书拿掉,让他重新登录那个机子,果然就看他盯着键盘 敲出来了 "adnimistrator"
一顿狂笑,这要是能登录进去就建了鬼了
然后大神告诉我说前几天键盘掉地上了,几个键帽飞出来了,然后看着差不多就按上去了
然后这个就被当做笑话流传了好几年了
大概十年前,我们这的自来水公司给我们小区更换了一批ic卡预付费水表。相比以前的老式水表需要抄表员人工核抄,然后发缴费通知,我们自己去营业厅缴费的方式来说,这种水表很方便。自来水公司省事,自来水公司也不用每个月都上门抄表。我们也省事,不用每次拿着缴费通知单去营业厅查询。ic卡里充好水费,往卡里一刷,余额不足10元的时候,水表会自动关阀提醒一次,这个时候不管你卡里有钱没钱,拿着卡刷一下就又能开阀,这个时候你就要赶紧去缴费了,如果你不搭理继续用,这最后10元用完时,就真的停水了。
按理说,这玩意很方便。但是有一天我就发现了这水表的一个bug。有一次我家里停水了,我拿着充值卡下楼去水表间查看水表,液晶屏显示余额不足十元,我拿着卡往水表上刷了一下,水表恢复供水。
这个时候一个穿着自来水公司工作服的哥们拿着一把管钳也走进了水表间。原来是一个用户的水表后面的接头有点漏水,报修后,这哥们上门维修。
水表间里的灯坏了,啥都看不见,于是我就顺便帮个忙,用手机给这哥们打个光。 这哥们熟练的关掉阀门,卸下水表,准备更换接头里的橡胶垫圈,再给接头上的螺纹缠上几圈生料带。 我这会拿起放在一边的水表研究了一下构造。水表大概张这样
水表侧面有一个ic卡的感应区。还有个机械表盘,用来显示总用量。另外还有个液晶屏,用来显示余额。再看,出水口里面有一个可以转动的球阀,想必这个就是实现关阀的。 我又想,带动球阀转动,那肯定里面要有一个电机,还要有一个用来实现充值扣费的单片机。这些设备肯定要有电池来供电才能工作。 我给水表翻个个,果然又发现了一个电池仓口。电池仓口盖里面装了一截18505的锂电池,电池张这样。
我这会突然有个疑问,既然控制关阀的电机需要电力来进行驱动。 我在水表快没费的时候,直接把电池给扣走,电机没有了电池,就不能带动球阀转动,那水表不就是就成了永远开启的状态了?岂不是哪怕我把水费用完了水都不会关阀?
我就这个疑问给自来水公司的那哥们说了一下,这哥们愣了一下。果断的拿起地上的水表,打开电池仓,把电池给扣了出来,果然水表没有关阀。 这哥们扣扣脑袋说:是哦,我怎么没想到?这个问题我想我应该跟领导提一下,这的确是个问题。
我这会突然反应过来,我好像因为刚才的多嘴,貌似错过了一个可以占便宜的机会。
果不其然,没过多久,我们小区的水表又重新换了一批,这个时候的水表多了一个断电关阀功能。不管你水表里有没有余额,只要你扣出电池,水表就自动关阀,并且你重新插上电池也不会开启,只能联系工作人员用权限卡给你重新开启。
以前在韩国人继电器生产企业做生产线的技术和设备的管理,我们的职业有个现在听起来很奇幻的名称就是“技师”。
隔壁生产线的继电器,有阵子从韩国反馈回来,出现非常高的接触不良不良品,负责的刘技师和韩国的经理从头到位把生产线梳理了几遍,都是符合规程的,甚至把超声波清洗设备的全部液体都换掉了,不良率依旧。
有一天刘技师在生产线旁边发呆,突然有了发现,原来,正规的工作流程是,操作工
①把扣合之前的继电器本体和外壳,要放在一个高压吹然后吸尘的设备的凹槽里,因为凹槽会防止本体脱出,不容易放进去也不容易取出
②然后按下开关
③设备会把继电器本体和外壳通过气缸操控收纳到设备里,自动高压吹气、吸尘。完成后推出。
④操作者从设备凹槽把继电器本体和外壳取出来
⑤再把继电器本体和外壳组装起来,进入下一道灌胶工序。
但是这个操作工很鸡贼,每次把继电器本体和外壳放进凹槽和取出,都有点费事儿
所以,她每次省略了①和④,比划一下,每次按下开关进行②和③,但都是一个早晨放进去的,从来不换的。
这样关键的除尘工序被略过了……
真相大白。这操作工在技师和经理过来时候,还是真干的。没人盯着,就偷天换日。
那个年代也没啥劳动法,当事人,开除了事
当然,大家对资本家这种冷酷做法觉着很过分,但如果你开的车,因为继电器失灵,撞车了,就不会这么想了。
去年发生的:我爸八十了,去年社保信息需要确认,直白点说就是需要证明一下老人家还在,怕别人冒领,不确认就停发养老金。这是前提。
在某个APP操作,基本上就是银行那一套,睁眼闭眼摇头之类的,最后一个流程就是动作确认以后照张像传上去。我搞了很久都不行,然后打电话询问,给出的理由是:也许是留底的原始照片时间太久,和现在的样貌对不上。解决方案是重新留底。那我得带老爸去社保局。挂了电话,心里想着还得带老爸跑那么一趟,最后再试一次吧。然后又是一套流程走下来,到最后拍照那一步的时候,我老爸有点不耐烦了,拍照那一瞬间起身走了。我拍出来的是个虚影,虚到不是说看不清长相,就是一团完全看不出来是个啥的模模糊糊的光影,照片出来我的手还是下意识的点了一下上传,心里面已经在想着抽时间去社保局了。然后手机显示审核通过了。
不知道有没有大佬从逻辑上分析一下。
看了大家的回答,感觉就是这个系统不成熟,所谓的不成熟,就是系统BUG多的另外一种说法。
程序员在与Bug的斗争中,也有很多有趣的事情发生,让人哭笑不得、目瞪口呆!
2019年1月7日,有微博网友称Airbnb爱彼迎的APP客户端出现了汇率转换的Bug,即用户使用美元、欧元、英镑等币种搜索房源,结算时换成人民币、越南盾等货币支付,订单金额未根据汇率变化,更有微博网友用35元住到了11万英镑的房子,简直了
来源:劲旅网 郭鸿文
2018年圣诞节,阿里蚂蚁金服旗下产品ant design制造的一个圣诞节彩蛋,强制在旗下的开源UI框架项目Ant Design 中加入了圣诞节彩蛋,给按钮添加了像狗啃一样的积雪效果, 如下图这样的
并且将鼠标指向变化了的按钮时,原本设定好的文字说明也统一变成了圣诞老人的标志性笑声“Ho ho ho”。
这个狗啃了的按钮不分场合地出现在了一些机关、企事业单位的内网界面,成功地让很多程序猿在好好的节日氛围中忙的手忙脚乱,有的甚至直接丢了饭碗。
来源:九章算法
一位玩家发现自己有一张阿珂的暗夜猫娘的体验卡,选了这款皮肤的体验卡之后,却发现皮肤变成了永久的。
这可让他惊呆了,要知道这款皮肤虽然说不贵,但是售价也是2888点卷。但是竟然在使用体验卡之后就变成了永久的这件事,小编的背包里可是有多张体验卡,岂不是要high翻了?但是当这边玩家比赛结束后,想要再尝试这个bug的时候,发现已经被天美修复了。
在2015年11月份20块钱符文页可以满配你敢信?当时正是S5总决赛刚落下帷幕期间,谁知道半夜期间LOL竟然出现了一个bug,商城里的符文页出现了 bug,只需要100点券也就是1元就能得到,这个消息突然就在各大论坛贴吧传播,几分钟之后官方迅速做出反应关闭了商城入口,但是已经有不少玩家仅仅花18块钱就把自己的账号的符文页扩到了20页。
来源:百家号
该bug发生于麻省理工,当时其系统管理员接到统计系主任的求助电话,主任在电话中说:“咱们的邮件系统无法发送距离500英里以外的地方,准确地说好像是520英里。”
然后,系统管理员开始了漫长且苦逼的测试,最后发现邮件服务器操作系统(SunOS)被人更新了,因为操作系统发行版往往配备旧软件,因此邮件软件实际上是被降级了(Sendm ai l 8 -> Sen dma il 5) ,最后的结果是:Sendmail 5试图解析Sendmail 8的配置文件。
作者 | 赵钰莹
来源 | http://t.cn/R8yjbeL
谷歌推出的Google Arts&Culture APP是一个可以将普通人的照片与艺术照进行对比,社交网络顿时沸腾了!人们纷纷晒出自己的自拍匹配成果,有些效果确实不错
但偏偏有些人的照片上传后,就比较尴尬了,给出来的艺术画让人哭笑不得,画面太美不敢直视
欢迎关注我的微信公众号:九章算法(ninechapter),帮助你了解IT技术前沿,通过面试、拿到offer、找到好工作!
这篇回答在这陪伴了大家7年,不知道为什么,莫名其妙的被封禁了。
无论如何,谢谢你们的阅读、点赞和评论,谢谢你们。
我也无能为力。
是这样的,我叫刘伟楠,曾经我想注册一个新浪微博的账号,起昵称的时候出现了这样的事……
起初我以为只不过是重名,这个名字已经被抢注了……后来发现这事没这么简单……
我这名字简直跟某邪教组织词汇和国家领导人是一个级别的…… 到最后才发现,比脏话的屏蔽等级还要高……
上图……
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
更新于2015.4.25……
刚刚我又登陆微博试了一下……结果……
==========================================================================================================
今天是2015.4.26……
这里实在不知道为什么敏感……
首先感谢 @舒肤佳不舒服告诉我这件事……
结果我看到了这么多声援我的人…… 我也是第一次体验到了网络的传播速度…… 这真的让我非常出乎意料…… 不过,无论是关注还是调侃~ 我都觉得能分享给大家一件有意思的事儿还是挺幸福的~(我很有自嘲精神的……)
看到这些时该轮到我笑的肚子疼了~
谢谢你们的关注和赞!但我不会经常发这种回答的……也没什么机灵可抖…… 我还是更愿意做那个在知乎【吉他】板块下好好回答问题的人~看到一些努力练琴的人觉得我的答案能帮上点忙~我才是最开心的~
还有。我无意中的这个回答好像打扰到了一个人……大家评论中提到过……可能在这个屏蔽bug出现之前,微博中已经有人成功注册了“刘伟楠”这个id,是一位来自乌鲁木齐的女孩……结果我点进她的主页真的让我足足笑了20分钟……卧床不起……
o_o……憋住不笑了……
在这里,我郑重向你道歉!对不起!没想到这样一件事会打扰到你!对不起!对不起!请你原谅我!
最后。好像很多人都在问哪个微博是我的……
就是这个…… 我刚刚改的昵称和头像……
尽管你们把我的名字解禁了~ 我还偏不用了~ 哼哼~ 不给新浪改正错误的机会~ 哈哈~
大家不用关注我……因为我真的不玩微博……平时什么也不会发的……
这个回答能在这个周末带给大家一件有意思的小事儿就挺好~
祝大家晚安~ 就这样~
对接后台的一个接口,返回的数据中有一段类似于这种“北京丨海淀”,然后我只想要“北京”这个词
于是前端js随手写下'北京丨海淀'.split('|')[0],结果没取到
当时愣了下,不过没在意,换另外一个方法继续试,还是不行,这个时候就有点懵逼了
于是再换方法继续试,把所有的方法全都试了一遍全都不行,这个时候就有点慌了,局面好像有点控制不住了
把所有的原因都考虑了一遍,甚至换了浏览器和电脑,试了很长时间都不行
最后终于将目光放到了“丨”这个字符上,复制粘贴然后打印其unicode编码
发现这个东西根本不是英文编码状态下的竖线|,而是一个拼音为gun的汉字丨
找出了原因后,当时心情很平静,只不过是有点想把负责此接口的后端拖出来砍两刀而已
( ・_・)ノ⌒●~*
------------------分隔符-----------------
评论很活跃啊,因为是手机打字,所以可能我说的还不是太细致,对于有些疑问再解释一下
1.有的评论说直接截取前两个字符和后两个字符就能取到北京和海淀了,根本不用关心中间是什么字符
"北京丨海淀"只是其中一个数据的例子,有的可能是这样"黑龙江丨哈尔滨",所以直接取前面和后面的字符是做不到的,因为无法提前确定所要截取字符的长度
2.丨|明显不一样
放在一起的话,确实很容易看出来,但是单独拿开有几个人能看出来这是两个不一样的字符
3."北京丨海淀" 丨的两边仔细看的话是比较宽的,而|占位是比较窄的
确实,我后来也发现了这个问题,但是第一直觉是认为丨两边是空格,因为以我的经验来看,|只能是键盘上那个|键打出来的英文字符,不可能有其他的情况,于是将其当初空格来去,依旧取不到,接着专门将丨复制粘贴出来,用光标选取,发现无论怎么选,都选不中丨两边的空格,光标定位在丨的最左侧,然后按键盘上的右键,眼睁睁的看着光标直接跑到了丨的最右侧,根本没走那两个空格
我以为是浏览器问题,于是换了好几个浏览器,都不行;我又以为是我电脑长时间没关机内存出问题了,于是重启,还不行;我又以为我电脑有问题,于是借用其他人的电脑,依旧不行
那一刻我心里是崩溃的,我又以为这个普通的空格字符是隐藏了什么我之前不知道的字符特性,于是甚至跑到stackoverflow上提了个类似于“为什么我在前端无法截取到空格,比如|两边的空格无法截取并且光标也选取不到的问题”
4.有人说只要遇到这种字符问题一律复制粘贴
首先,这种做法很正确,但是因为当时的场景很简单,只是从一段字符里截取字符串,跟代码没多大关系 ,所以没怎么在意,后来由于事情越来越不受控制了,于是也就导致思维朝着一个不受控制的方向上走去,被想得很复杂,直到最后实在是精疲力尽了才将思维收回,想起了复制粘贴大法
不过到了这个时候我目标就不仅是分割"北京丨海淀"那么简单了,而是执着于弄清楚丨到底是何方神圣
于是将其复制粘贴到浏览器控制台,打印其长度"丨".length
然而,就是这个操作进一步激化了我的懵逼程度,因为我一直认为结果应该是3,再不济也得是2,无论如何也没想到输出了1
5.丨这个字是多音字,gun只是其中一个音,评论区有人已经说的很详细了
6. 我也曾怀疑过这个字符不是|,但是由于我学疏短浅,除了|之外我只能想到数字1或者L的小写字母l或者i的大写字母I,然而就是没往汉字上想,因为这不是一般程序员能做出来的事情
7.之前这个接口也在用,但是之前的场景是不需要对"北京丨海淀"这种数据进行分割单独选取的,直接原样输出,所以没有这个问题,直到我接手了一个需要分割的需求……
8.至于我是怎么发现这个是个汉字并且知道其读音的,很简单,复制粘贴,然后放到搜索引擎搜索框里(我要是一开始就想到这个方法该多好啊,我的大好时光啊……)
归根结底,还是没能想到一个后端程序员居然会用一个跟|很像的汉字丨来作为分隔符返回数据,还是经历的风浪太少了
至于我后来到底有没有把负责此接口的程序员拉出来用我的40米大丨砍两下,答案是没有,因为这个接口早就写好了,可能有点历史了,负责此接口的后端大概已经跑路,并且我严重怀疑这个接口是那个后端程序员跑路之前的最后疯狂
说一个机票相关的bug
机票,特别是国际机票,非常容易出bug,然而我要说的这个bug,是一些用户人为算计出来的
每个机场,都有一个英文三字码,制定机场代码的规则我也不是特别清楚,但是,有个规律,那就是
几乎所有加拿大的机场,都是Y开头的
华人聚集地温哥华是YVR,多伦多是YYZ,剩余的不表
这个规律许多经常坐飞机的人都知道,甚至google都知道这个问题
既然加拿大的机场都是Y开头,
那么会不会有程序员偷懒,把Y开头的机场,都当作加拿大的机场呢?
有一些精明的机票玩家就有了上面的大胆设想,他们认为
其中,中国人想到的就是,有没有什么中国的机场也是Y开头的机场代码,并且加拿大到中国某地,同一个这个中国机场,也到某国中国的Y开头的机场
考虑到加拿大是个民航市场很垄断的国家,只有加航飞出加拿大的国际航班,加航到中国也只有北京(PEK),和浦东(PVG)两个机场,而国航跟加航又都是星空联盟。
于是这些人的目光聚焦到了国航的网站上面
在国航的网站上面,输入Y,就可以找到国航飞的Y开头的机场
最终他们发现了一个叫做 运城 的地方,这个机场的代码是YCU
最终测试下来:温哥华/多伦多-北京的加航航班后面,加挂一段北京-运城的国航航班,会被加航的里程系统当作加拿大境内的航班,里程数大幅降低
最终,人民币1000多块不到2000块,就可以从温哥华/多伦多坐公务舱到北京,美滋滋
然而,加拿大境内并没有一个叫做YCU的机场,这就尴尬了
当我第一次跟一个从事并购重组的律师说这个故事时,这个律师惊叹,以后我们搞收购的,应该从常旅客大神里面挖人!
这个bug结合了几个特点
对于旅客来说,这张机票有个问题,那就是:
我定了一张多伦多/温哥华-北京,北京转机去运城的机票,我能不能在北京下飞机,剩下不飞了?
这个问题略微复杂,结论是:
等你落地北京以后,一定是可以的。
请仔细揣摩这句话的含义,这句话里面包含了“行李怎么办?”
坐1000多块的公务舱到了北京,那回去怎么办?难道坐经济舱回去嘛?
机票要按顺序使用
温哥华/多伦多-北京,北京运城,运城北京,北京温哥华/多伦多的机票,按照全世界通用的规则,如果你从放弃了北京运城的机票,那么之后的机票全部作废,或者说不能直接登机
所以,比较保守的玩家,在发现温哥华/多伦多-北京-运城的bug之后,实际上都是出的反向的机票,也就是
然后单独购买一张北京运城的机票,去感谢一下关帝爷(运城机场全程运城关公机场,我还真去过哈哈哈哈,不过我是坐的国航北京-运城-昆明的经停航班,最终去的是昆明)
这样他们的最终行程是
0 北京-运城,单独购票
1 运城北京
2 北京-温哥华/多伦多
3 多伦多/温哥华-北京
4 北京-运城,扔掉
其中,0其实在机票玩家中还专门有一个术语,叫做positioning flight。I'm in position, 哈哈哈
事实上,由于加拿大航空跟国航的系统不是一个订座系统,完全可以定一个
的往返机票,然后直接在北京上下飞机。原则上,的确有所谓机票必须按顺序使用,跳段使用机票作废,但是由于预订系统的同步延时问题,其实北京是可以直接上飞机的。
当然了,这个属于高段位的操作了,比如这样一张东航机票,里面既有东航自己的航班,也有南航代码的法航航班,还有南航代码的南航航班,就因为预订系统的同步延时问题,就直接跳段使用了
这个bug我知道,但是从来没飞过,非常遗憾.
其实,机票bug经常有,国内国外甚至都有网站专门播报,我之所以认为这个bug让我目瞪口呆,因为他是旅客自己故意下套,让机票系统钻进去,而不仅仅是机票系统自己弱智.
后者的例子很常见,例如,曾经有一段时间,用某航空公司的里程兑换机票时,只要勾选必须强制汉莎航空,北京-吉隆坡的机票,就能跑到法兰克福去转机,这样北京吉隆坡的头等舱只要2000多人民币就可以坐头等舱吃鱼子酱喝克鲁格,还能薅出来2个甚至4个8个rimowa洗漱包上咸鱼卖个2000多块
而且这个bug似乎是个"公开的秘密"
免责声明:
机票扔票是高危行为,轻则不让上飞机,重则补交票价差额,或者后程机票作废,切勿轻易模仿
写代码的时候记得把显示器屏幕擦干净点。。。。。。
-一个曾经被屏幕污点坑过的人(ノ=Д=)ノ┻━┻
想了解更多有趣的人工智能资讯?记得关注 @景略集智
先说说故事背景:
前段时间谷歌的 Google Arts & Culture APP 添加了一个新功能,用户可以上传自己的自拍照,然后系统会将照片与艺术画作进行对比,匹配出一张和用户长得很像的画作中的人物肖像。
这个功能一经推出,就在社交网络上引起病毒式的传播,人们纷纷晒出自己的自拍匹配成果,效果看起来确实不错,APP 匹配出的人物肖像和人物自拍照相似度非常高:
上面这些看起来都没什么毛病吧?
这本来会是一波很美好的操作,直到一位叫 Biniam Bizuneh 的小伙愤怒地在推特上 Po 出了自己匹配结果的史诗级 bug:
也不能怪人家小伙这么生气,毕竟这 74 %的匹配率看着也的确太伤人了。
目前小伙这条推文下面,已是一片同情和安慰的海洋。很多人也顺道分享了一下自己不忍直视的匹配结果:
这个差的也太多了
这么耿直的暴露人家秃顶的事实真的好么?
Google Art & Culture APP 的这项新功能应用的正是人工智能领域的脸部识别技术,可以检测人脸的特征,将一个人和另一个人相区分。
这个过程听起来很简单,但实际上 AI 要首先学习很多东西:在识别出照片中的人脸后,为了更好的读取数据,通常还得调整大小和方向,因为很多时候用户自拍时离摄像头太近,导致人脸出现扭曲。
AI 在重新调整人脸的大小和方向后,接着会创建一个“脸部指纹”,是独特描述一个人脸部的一组数据特征,比如脸部器官之间的距离,眼睛大小,鼻子形状等。然后可以将其同其它一张照片或包含很多张照片的数据集进行比较。
在Google Art & Culture APP 新添的这个功能里,用户将自拍上传至应用后,AI 会将照片与后台包含了7万张艺术画作照片的庞大数据库进行比较,然后匹配出类似的人物肖像。
其实谷歌早在几年前就发布了人脸识别技术,2015 年时准确率就已达到 99.63 %,其它公司如 Facebook 的人脸识别技术准确率也达到了 97.25 %。但这个系统仍不完美,比如谷歌的 FaceNet 在 2015 年就曾错误地将两名非裔美国人标注为大猩猩,这次推特用户 Biniam Bizuneh 的不幸遭遇也说明人脸识别技术会偶尔“扑街”。
可能也是因为脸部识别技术的这项新操作尚不成熟,目前只有美国部分地区的用户可以体验 Google Art & Culture APP 的这个新功能,谷歌表示会在改进技术后向更多国家和地区的用户开放。
希望他们早点改掉这些 bug 吧
参考资料:
https://www. inverse.com/article/401 77-google-arts-and-culture-technology
不是bug, 是design.
可能对于熟悉usb子系统的人来说这是常识. 不过我客户报上来这个问题的时候我还是很诧异的.
3.0的U盘插3.0的usb口, 插快点儿就被识别成3.0设备. 插慢了... 就识别成2.0的设备...
大家可以自己试试看, lsusb -t 可以看出来这个设备被挂在3.0下还是2.0下...
自己编写的直棋游戏刚上架应用商店不久,一位用户来信反馈,这个程序存在一个低级 Bug:应该是白方先手,黑方后手,但程序弄反了。
刚看到来信,感觉有些难以置信,我很认真地给他回复了一封邮件,大意为:
我从苹果应用商店和 Google Play Store 上下载了42个直棋 app,统计表明其中28个 app 是黑方先行,14个 app 是白方先行,比例正好2:1,黑方先行是绝对主流。此外,大凡以黑白双方棋子不区分角色的棋种,比如围棋和五子棋,也是黑方先行,更符合习惯。
不料他回信给了一个链接,竟然是“世界直棋协会”官方网站的棋规 PDF 文件,并表示黑棋先行是违反标准棋规的。这让我大吃一惊,因为我原来一直以为直棋是世界各地的民间棋种,其中在中国,人们一般用石头和树叶之类的就可以玩,全国各地的变种棋规五花八门,我从未想过会有“世界直棋协会”这种奇怪的组织,感觉有些哭笑不得。这位用户解释到,直棋在欧洲和南非等地是正式比赛项目,有很多严肃玩家,有国家级以及世界的直棋协会,会组织国内以及世界范围的直棋锦标赛,并且还有等级分排名公布在网站。
我于是把之前统计的各个 app 黑方还是白方先行的情况再重新摸排了一遍,发现确实白方先行的 app ,总体制作质量相对更高一些,算是能印证白方先行是标准规则的说法。于是开始改代码。
这个 Bug 改完后造成了数以百计的零碎代码行被改动,然后很多测试需要回归,搞得特别头大。只能怪自己之前功课没做足。
由此也可知,随大流也有可能被带到坑里搞出意想不到的 Bug 出来。这次折腾算是被上了一课。
买打印机送电脑算啥。我这个是白送笔记本电脑,运费都没出。
我大概08年联想刷企业用户促销的时候,随大流买了一个thinkpad,在联想官网刷出来的,下的订单。
然后付款时候用的paypal,有大概150的折扣,整个机器不到800美元,很划算。当晚发货,给了快递号, 从中国发货。
但是,第二天邮件来了,paypal的,说我付款不成功,因为新用户还没认证,不能超过500块。
然后联想发email通知:这个订单取消了,我打电话给他们说我只是付款失败,现在已经弄好了,可以付款了,他们就说,那你得重新订一台。
我说,现在订,昨天的折扣就没了,那怎么办?他们说,没办法。我想,那就算了吧。
然后查了一下paypal,确实没扣款;再查了一下联想账号,订单号果然没了;再查了一下货运快递号, 已经改了新的送达目的地,往始发地向回运了。
本来以为就这样结束了,直到有一天收到email说:你的这个包裹被拒收。我心说我根本没拒收,不是发回商家的货栈了么?关我什么事儿?
然后我又去查了一下,发现目的地又诡异地改成了我,又从货栈开始朝我这里运了。一周多之后,居然收到了。
然后我打电话给联想销售,问这是怎么回事儿,打算交个货款就留下用吧,然后他们说:我们查不到订单号,没法收你的钱。
回头我打联想客服(他们销售客服当时是分开的,现在不知道)说明情况,说要不我给你退回去?他们说:你这个没有订单号,没有办法退,也没有地方退(没人会接收)。
我就只能留下用了2年多,然后很诡异地有一天收到了一封邮件:你的保修快过期了,要不要续订?
我打电话回去问,又说明了这个情况,客服直接说这个情况谁也不清楚,你想给钱我们也没法要,你要退机器也没人拿,但是,但是如果你要是坏了,我们还是给修,你要是购买延保,我们还是能卖。
我就满头黑线地买了延保,多少给点钱,求个心安。。这台机器我就花了一个延保钱用了5年。。很皮实。当然期间买了几台别的笔记本,并不是可着一台祸害。
所以联想财报不好我觉得挺理解:白给别人机器,别人要给钱还很傲娇地不要。这套订单系统的bug也就没谁了
工作这么多年,目瞪口呆的多了。我就讲一个前不久遇到的。
这里先提供一些名词解释,省得后面说故事的时候影响流畅性。没兴趣的可以直接跳过这段。
Win10在RS3加入了播放HDR视频的能力,用Edge开Netflix网站,只要账号允许,就能播放上面的HDR视频。此为前提。
接着,有人突然发现RS4上播放HDR视频,卡的要死要死要死,完全无法正常使用电脑。而同一台机器上,用RS3却没事。这很严重,说明是个regression,必须要在发布前修好。因为在RS3的时候,我曾经帮那人解决过一个视频播放的性能问题,所以理所当然他又找了我。我本来以为是因为Edge加了光照造成的,结果发现,我的光照并没有造成任何性能影响。而这个bug本身是个很深的坑。
首先是重现条件苛刻。我试了youtube上几个HDR视频,都没能重现。然后试了几个Netflix视频,发现都开不起来HDR。报bug的人说,必须用Netflix提供的测试账号才能打开HDR的功能。行了,能播放HDR了,但没有遇到bug描述的性能严重下降。又捣鼓了一阵子,才知道必须播放一个特定的视频才会重现:Chef's Table France。
行吧,就放这个视频。结果呢,还是没有重现。我就这么看啊看啊,看他们怎么和面,怎么切,怎么下锅。1天之后,bug?什么bug?学会法式摆盘才是最重要的。
好吧,第二天bug还得搞。我以前在别的贴子也说过,调bug这件事情,应该用科学的方法来处理。也就是,
那么咱们就按照这个路子来吧,看来是个硬骨头。
第一个条件比较明确,必须是i3的NUC。这是能支持HDR视频回放的最低端机器。比这个好的都没遇到这个bug。看来这个配置的机器正好处于边缘,这个bug造成的性能下降正好让这个机器卡死了。
接下来,奇怪的是,不是每回都能复现。看一小时视频也不见得会出现一次这个状况。但另一个同事却说,他能经常遇到。百思不得其解中,我到他办公室,看他是怎么复现的。一切看上去那么平常,同样的机器,同一段视频,他就能每次都看出来卡,我的就不能,这什么情况。一定是存在某个控制变量没有被发现。
既然这件事情跟机器和视频无关,难道是网络?当时我被临时分配到了open space,和别人共享网络出口。所以同一段视频,在我机器上只能到1080p和中等码率,而在办公室内可以到2k以上和高码率。经过进一步分析后发现,码率其实只是问题的一小部分。不同码率造成不同幅度的CPU耗用率上涨,虽然重要,但不是唯一的问题来源。
从内容上没辙了,我只能从操作上找问题。经过观察,发现我的操作方式是,在邮件里copy网址,新开一个Edge页面,把网址贴进去看视频。而我同事的操作方式是,最小化Edge页面,在邮件里copy网址,恢复Edge页面,把网址贴进去看视频。难道就是这么一个简单的操作区别造成了问题?我回到我的座位上,改用最小化的方式试了一下,果然每次都能复现!
好了,现在可以归纳出复现条件了:
而Chef's Table France正好符合2-4,所以成了复现的利器。而这第5点则成了我debug的突破口。既然最小化再恢复是个关键的控制变量,我就可以在这基础上频繁提假说了。
假说一,在最小化之前和恢复之后,一定有个状态变化,使得视频播放的代价增大许多。
经验告诉我,第一个要查的就是dirty region。于是用一个内部工具,把dirty region显示出来。果然,证实了我的假说。在窗口最小化之前,视频是通过MPO播放的,屏幕上并没有dirty region。在窗口最小化再恢复之后,整个视频区域都成了dirty region。
假说一得到证实。可以进一步追踪。
假说二,bug在MPO,MPO没有被启用。
内部工具是可以看MPO的区域的。打开之后发现视频区域有启用MPO。
假说二证伪。需要提新假说。
假说三,在有MPO的情况下仍然设置了dirty region。
同时打开dirty region和MPO,发现两者重叠。并且MPO虽然开着,但并没有往里填数据。DWM仍然是自己做混合,开着MPO但不用。
假说三证实。
假说四,视频部分被错误地设置成dirty region。
这是最头大的问题。因为在DWM里,dirty region的原因有几十种,又是通过消息驱动机制来做的,所以即便你看到dirty region了,也并不知道消息是从哪里来的。所以每次遇到dirty region的bug,大家都不愿意碰。因为这次的问题很窄,仅限于HDR视频。那就专门查因为HDR造成的dirty region吧。看了那部分代码,发现HDR metadata如果发生了变化,就会设置成dirty region。在那里下个断点,发现,在最小化之前,断点没有被hit到,最小化再恢复之后,每一帧都会hit到。
假说四证实。并且进一步narrow down到HDR metadata上。
假说五,是一个RS4对HDR metadata的修改造成的新bug。
比较了RS3和RS4在HDR部分的代码,发现RS3只支持HDR10,而RS4开始支持HDR10+。两者的metadata格式不同,HDR10的可以转化成HDR10+的。所以RS4的实现方法就是,不管输入是HDR10还是HDR10+,都转成HDR10+处理。这样简单很多,也不容易出问题。
在RS3里,HDR10视频是由DWM处理的,所以这个数据流的走向是
在RS4里,DX说,我在最后显示的时候也要用到metadata,所以DWM你别把metadata吃了,继续传给我用。于是,新的数据流走向就成了
行了,有了这些分析,事实慢慢浮出水面。这RS3和RS4的第四步不同,很可能就是原因。尤其是,之前是由DWM来清除metadata dirty,而现在又是在哪里清除的呢?
在代码里做了一系列的搜索,发现,没人清除!所以一但设置,就永远标记为changed,永远划分为dirty region。结果每次都需要DWM去处理整帧数据,性能就低下来了。具体来说,dxgkrnl里那段代码大概长这样:
bool changed = metadataDesc.metadata != oldMetadataDesc.metadata; if (changed) { metadataDesc.changed = true; ... }
这TM搞什么啊,一旦改变了,就万劫不复。非常明显的bug,就这么藏在kernel里好几个月,直到被我偶然发现。要不是有i3那种烂机器,估计还得不知道多久才能知道这里有问题。
所以要做实验就简单了,但修改kernel还是有点麻烦的,所以我的实验就在DWM里进行,拿到metadata后清除这个changed。实验里不用管DXGI怎么显示,因为不相关。结果果然解决了dirty region的问题,CPU耗用率也不再上升。
假说五证实,并且解决问题。
最后的修改还是在dxgkrnl里做的,把metadataDesc.changed挪到了if之外,一行而已。折腾这么一圈,从app到dxgi到kernel到dwm,连法式摆盘都学会了,结果是个弱智的bug。
各种奇葩的故障遇上过不少,不过最让我感到奇葩的是
很多年前有个电脑厂家叫新蓝电脑,主要销售区域是湖南。
大约在06年左右,有个单位采了一批新蓝的笔记本,当年的主流的上网方式还是ADSL。那一批电脑死活上不了网,装电信送的星空极速也拨不上网,自建宽带连接也无法拨号上网。反馈代码好像是691,服务器拒绝。
先排除软件故障,更换网卡驱动,更换操作系统,还是不能解决问题。
台台都有同样的故障也怀疑过是不是这批笔记本网卡是不是有问题。拿笔记本接路由器上网试了一下。但只要接上这台笔记本,整个局域网就奇卡无比。这就百思不得奇姐。
最后的最后,发现了问题的所在。这厂家,居然没给笔记本的网卡写入MAC地址。
真是叹为观止。
咋办,手工分配个地址给网卡呗。
同样的问题在几年后一个教师朋友的笔记本上也看到过。但那笔记本是打雷的时候。强电流顺着宽带击穿了猫,还同时击坏了笔记本的网卡。不配制MAC地址根本上不了网。
顺便说一下不知道能不能算BUG的BUG,ADSL时代,99%遭雷击损坏的电脑,都是通过电话线击穿猫,再顺着猫击坏网卡乃至主板甚至主板上所有其它设备。
原因倒也好解释,民用电的防雷击保护是相当好的。电话线也有防雷击装置。
户外的电信/铁通电线接线盒,在主线与出线中间,默认是有一层云母片的,如果发生雷击。瞬间就会把云母片烧穿达到绝缘效果来止进一步损失,这一段话是当年看这玩意的说明上看到的,也记不太清完整原理了。只是因为年久失修或其它什么原因,很多电话线接线桩上没有这玩意了。
结果就是一次雷击,就能击坏同个电信电话网里面的数量相当多的电脑、电话、猫。
顺便解释一下,每张网卡出厂的时候,都会分配一个独一无二的MAC地址,也称为物理地址。相当于网络里面这个网卡的名片。这个与ip地址是不一样的。
当然,ip地址可以引起冲突,mac地址如果相同也会引起网络冲突。以前红极一时的p2p终结者(想群殴哈哈。),还有arp病毒,都是靠伪装ip或mac地址来人为的制造冲突,把对方挤下线,或伪装对方来接收/发送数据。
想要修改也简单
至于想找到同一网络其它用户的MAC地址,用命令行。只要跟发方发送过数据或ping过对方的ip地址。
输入arp -a
还有很多工具能查询到对方的ip/mac地址。不过用途就不同了。哈
当然,新蓝电脑出现出厂就完全没有mac真的是重大失识。
又想到一个,U盘刚出现的时候,大部分电脑用的还是windows98。问题就来了,你花几百块买个16m大小的u盘想着能代替软盘,结果98系统不带u盘驱动。
只能带一个软盘拷贝一个u盘驱动,才能带着u盘到处走。
USB3.0的主板刚出来的,也有个搞笑的BUG,台式机还好,一般除了usb3.0以外,还有usb2.0,或者还有PS/2接口。但笔记本很多有且只有usb3.0。甚至自带的键盘、触控板也是走的USB3.0
问题就来了,当年的XP系统,vista系统都没有整合usb3.0。
结果就是一大堆的笔记本,重装系统,到了欢迎使用界面,键盘鼠标触控板通通不能用,只能干看着。。(安装过程中不需要驱动,bios内置了驱动模式,不然开机也进不了BIOS)
这破事最早是在苹果笔记本上遇上的,改win系统。我想着也就苹果傲娇一点。结果后来SONY,DELL、hp上也遇上了。顺便吐槽一下,SONY的BIOS是最傻逼的一个,没有之一。
解决方法倒也简单,系统安装包里面注入USB3.0驱动就可以了。
再补充一小段,新蓝电脑没写MAC地址,应该是因为特殊订单赶工导致的。其实只是一个小插曲。本身这牌子的笔记本质量还可以的,代工厂是曾经大陆唯一一个有完整电脑主板设计能力的顶星公司。创造了许多个大陆第一。。只是后来在湾省各大品牌包夹下只能走低端路线,主板品质还是相当靠谱的,只是可惜了。
2014年,在武汉某公司就职。
当时接到一个任务:做一个简单的监控程序,监控某个站点账户里面的余额,当余额低于设定值时,发送提醒短信,通知运营及时补充。
挺简单的,毫无难度,很快就做好了,上线使用也没问题。
随后不久我就调去其他项目组了。
过了大概三个月,运营的人找到我,说我之前写的程序不起作用了,经常余额只剩下几块钱,也没有短信提醒。
我检查了一下自己电脑上保留的代码,发现没啥逻辑漏洞,运行调试,也没问题,短信接口经过测试也不存在问题,都是好的。
我冷静想了想,找到了运营,问了下情况,他说后来又加了很多类似的不同站点余额监控功能。
哦,原来是我电脑的代码过于老旧了。
我本以为,拿到最新的程序代码,很快就能解决了。
可是简直天真。
拿到了最新的程序代码,我检查了一遍了,也调试了几遍,完全没问题啊!
我当时就有点懵逼了:调试的时候没有问题,一到线上就出问题?
我开始怀疑是程序运行的线上环境跟测试环境有点差异,后来检查后,把这个给排除了。
我都有点开始怀疑人生了,部门其他几个同事也很感兴趣,都纷纷来围观,出谋划策,最后都碰了壁。
哎,这个问题,最后还是被我找到原因,解决了。
问题出在哪呢?说句话,程序猿应该都能瞬间明白:临时变量被挪作他用了。
我最开始做的站点余额监控,我称之为A站点,后面加的,就依次称之为B,C,D等站点。
一开始,声明一个全局变量 AlarmValue来接受配置文件里面配置的A站点提醒额度(例如500)。然后每隔一段时间,获取A站点账户里面的实时余额,当这个余额数值小于AlarmValue时,就发送短信进行提醒。
最开始只有这一个站点监控时,肯定没问题。
可是万万没想到,另外一个程序员在做其他站点余额监控时,直接把这个AlarmValue作为临时变量用作其他用途,用来接一个临时参数。而因为业务原因,这里接收到的值都非常小(都是小于1的小数,例如0.5)。
当时程序一运行时,AlarmValue的值就从500变成了 0.5。那么A站点的余额,是永远不会小于0.5的,于是永远都不会发送短信了。
可是为什么调试的时候,没有出线这个问题,而线上程序就出现了呢?
因为IP白名单制度。
站点余额监控,需要利用程序来模拟账号登录,然后获取账户余额。在最开始做这个功能时,运营将我电脑的IP加入了A站点账号的IP白名单,从我电脑是可以登录A站点账号的。
但是BCD等其他站点,我电脑IP是无权登录的,所以调试时,其他站点监控的流程,在最开始就失败了(无法登录),后面“用AlarmValue作为临时变量用作其他用途,用来接收并临时存储一个参数”的流程也就没有被执行,AlarmValue的值就是正确的500。
就这么一个“简单”的问题,坑死了我几十亿脑细胞。
好多人在评论都在分锅,有人说这是答主的错,不该用全局变量;也有人说是猪队友的锅,怎么能随便拿别人写的变量来做其他用途。
我们现在就来分一下锅吧,反正都过去几年了,随便聊聊,什么都无所谓。
事情发的时间:2014年。
背景:处于业务需求,会不定时从A站点账户里面扣除钱,如果不注意,A站点的余额不足,就会对业务有一定的影响,需要人工及时充值。于是公司的运营希望我们帮忙开发一个工具,来监控站点余额,当余额低于设定值(这个值是可变的,有运营自己配置,可能是100,可能是500,可能是1000)时,发送短信,提醒运营及时充值。
需要注意的是:我接到这个需求时,当时公司那个项目的业务只有这一个站点业务,没有别的。随后不久我调到其他项目组,这边就没管了。后续扩展了其他几个站点业务,我是完全不知情的。
现在开始来分锅。
我想了想,这样子分锅吧:我的锅,占三分;同事的锅:7分。
不知道大家满意了没?
我的错在哪?
1.不够专业,写程序没有充分考虑扩展。
2.不够专业,用全局变量来读取和存储配置参数,同时也没有对该变量做限制和约束。
可能当时 我就是随手声明了一个 double AlarmValue= ................
如果让我现在来改写,最起码的,也应该是 const double AlarmValue= ................
或者再专业点,写一个config配置类,定义一个只读(get)属性 AlarmValue。
3.可能当时注释写的少,没有对关键变量做说明,导致同事以为这个变量不重要,而挪作他用。
可是我依旧认为,这个锅我只能分到三成。
1.我拿到需求时,该业务只有一个站点,并没有后续的扩展需求。我写的程序是完全满足需求的。
2.即便写的不够专业,但是只有一个站点监控时,使用全局变量来存储配置参数,不会有任何问题,也不存在程序性能缺陷。即便是后续有扩展需求,只要后面同事不把我写的变量挪做他用,也不会有任何的问题。
为嘛同事背7成的锅呢?
他属于在我的代码基础上做二次开发。可是在没有搞清楚状况的情况下,就随便我拿我定义的变量来使用,导致我原来的代码出bug。
这在任何时候,都是不被允许的,都是大忌。
人在新加坡,经历和上面联想白送电脑那位很像。
疫情封城后干活的电脑留在公司不能去取,但又要尽快开始居家办公,想着家里总该还是有台电脑,于是从戴尔新加坡官网outlet订了一台Latitude 7300翻新机。
一切都很顺利,付款,发货,收货,几天内就搞定了。因为刷了将近1300新加坡币,信用卡还挣了60多新币返现。
货到之后觉得这机器特别好,虽然不是最新款,但干活也绰绰有余。用了一个月左右发现从Thunderbolt 3接口出音频有噼里啪啦的杂音,换HDMI口也是,更新Intel HD Audio驱动并无效果。于是联系客服。
不得不说戴尔客服真的周到,第二天就让换主板。我想如果真是硬件问题,换主板应该是比较合适的,于是戴尔的师傅骑着摩托车戴着口罩来家里,三下五除二换了主板,说有什么跟客服联系。
然而问题依旧。
再次联系戴尔客服,客服立刻批示换主板。第二天戴尔的师傅又骑着摩托车来了,换了主板,然后说有事联系客服。我说别跑,咱们现在就试行不行。他说好,结果当着他的面,我用不同的显示器、电视、连接线、TB3扩摘坞,相互搭配,证明了电脑依旧有杂音,而且不是我外设的问题。师傅打电话跟总部说换了第二块主板还是不行,总部说好,我们订一块全新的(意思是说之前两块是拆旧回收的),我在电话外面听得着急,我说换了两次主板也不能解决,你们是不是应该从软件着手??? 我立刻在电脑上装了Ubuntu,进系统后用同样的设备播放音乐和视频,并没有上述问题,戴尔的维修师傅也说有道理,估计是Windows驱动的问题。电话那头说会调研一下,然后出结果。
但是总部那边还是坚持订了一块新主板,一周后师傅骑着摩托来换主板,我们都知道换主板的结果,问题肯定依旧,但现在这台电脑成了全新的... 师傅笑而不语。
又过了几天,戴尔问我可不可以把主板拿去检查,我说当然可以。又过了几天,戴尔说收到主板了,谢谢。我当时就黑人问号了??? 是不是我理解错了,他们之前是不是把换下来的旧主板拿去调研了? 于是我就没回,只是静静地等。
过了一个月,戴尔说,他们位于中国的研发部门对主板进行了检查,无法复现我汇报的故障。
我说,故障的视频我发给你们了,你们的维修师傅白纸黑字填写了故障报告,还把我装Ubuntu证明是软件问题的情况也跟你们说明了,你现在是想说我胡闹吗?
戴尔说我们看能不能给你换一台。我说不要,既然是软件问题肯定是全系列使用同样硬件和驱动版本的产品都有影响,你换来换去是浪费时间。
戴尔说那我们看看库存里有没有类似的型号。
因为事情已经拖了一段时间,他们只有Latitude 7310了。我说行。
然后他们说现在开始换机流程,请等待。
过了几天,送货的摩托车又来了。把电脑交给我就走了。我手里抱着两台电脑,闻着摩托车的尾气,心里怪怪的。
这就完了吗? 你们不要,之前那台了吗?
我把那台相当于全新的 7300 留在家里,生怕他们哪天会想起来,我还没扔。结果又过了一个月,戴尔只是冷冷地问了一次,请问新电脑收到了吗? 我说收到了,他们就挂了电话。
于是我就这样多出一台电脑。
我在一家烧烤店发现过一个难以置信的大BUG。
夏天晚上和伙伴们吃烧烤,这家店位置很偏,开车去要40分钟,但是生意非常火爆,相比之下他旁边也有一家店,就很冷清。
我们也是慕名而来,但是连着两次,我发现他们的点单系统非常混乱,比方说点了十个菜,其中一个是五串烤鱼豆腐,上菜之后已经吃完了,过会儿一个服务员又端着鱼豆腐来了,说你们这儿的鱼豆腐还没上呢吧?放下就走了……
结账的时候,看见账单上只有5串鱼豆腐的钱。我们一起吃饭的几个伙伴说,肯定是因为这家店最近生意太好了人手不够,服务员和后厨都乱掉了,哈哈哈哈下次还来这儿吃。
后来中午休息时我跟一个老师闲聊,说你知不知道那家烧烤店,点餐系统超级混乱……
结果话还没说完,那个老师就跟我说:对!他们服务员经常上错菜,每次我去吃他们不是给我上两次烤面筋就是给我重复端烤油麦,还有一次我们喝了五瓶啤酒,他们居然只数了三个瓶子!!幸亏他们家人多,每次我们都能少淘点儿钱!真不知道这家店这么混乱,一天要赔多少钱!!!
听完之后,我哑然失笑。
原来这家店不是因为人太多、服务员忙不过来了才出现了Bug;而是因为有了这个“Bug”,店里的人才有这么多的啊!!
后来我寻思,在家吃烧烤也行呀:
————————
P.S. 各位看官请移步评论区,你们脑洞厉害,我给跪了
最後發現有一個分號是中文字符。
有评论说硬盘磁头防震,读取数据时拿着硬盘上下甩也没事儿。
首先上下甩是低频外力冲击,和播放青藏高原时的高频声波不一样。
其次硬盘外封装有减震作用,磁头也有防震设计,但甩硬盘还是有风险的。读写数据时磁头悬浮在硬盘盘片上的,磁头到盘片的距离是纳米级别,所以设计的防震级别也是有限的。
------------再一次的分割线-------------
有人问怎么解决问题的。就是把固定硬盘的螺丝紧了紧,固有频率改变,硬盘就不共振了。
--------------原答案的分割线-------------
听一个希捷的朋友说的。
有用户反映每次用笔记本播放李娜的青藏高原时,电脑就会死机。经测试发现,唱到最后的“那就是青藏高...”时,硬盘产生了共振,振幅过大,读写头读不出数据了。
为了抓住这个bug,朋友听了一个月的青藏高原...
从来不需要密码的地方,突然提示需要输入密码。输入已知各种密码,均报错。
实际上是超过了纳税申报日期。
税务局的个税申报系统,提交申报的时候,突然提示需要输入密码。财务懵圈了,因为之前从来没见过这个密码提示。输入网上找的默认密码、税号后六位等,均提示密码错误。还限制输入次数。
税务局热线等了160号人,手机都打热了,得到一句建议咨询所在区税务局。
到了税务局,排号排到了近十一点半。柜台说这个事情建议找咨询台问一下。
下午排了半小时,咨询工作人员建议找系统厂家人员。
系统厂家人员不在。找了一圈发现这个系统没有驻场人员。
又找咨询台,建议找税务局的系统服务人员。系统服务人员看了很懵圈。
又转过来找咨询台。
咨询台用上了传说中的内部求救热线电台。
税局一资深人士研究半天得到结论:你们的个税报晚了。
财务很委屈,上个月也是这个时间报的。
税局人士回答上个月你们就报晚了。但可能后台系统没关闭,所以提交成功了。
再拿号,当天没号了。
一天就这么过去了。
各位为国家信息化出力的大哥,提示个已超过个税申报时间很难吗?非要冒出个密码框?让一群人猜?
当然,猜明白了还有点成就感。
醉了。
我说一个。
美团点评商户后台系统里有个审核功能,包括机器审核和人工审核。
我很久之前做过一张图,给五一劳动节准备的。就是这张图出了问题,提交之后马上被驳回了,原因是图上有一行副标题写的是:劳动最光荣,系统驳回原因是图片上的文字有“最”这个字,不符合广告法要求的不能有“最”“极”这样的极端化描述。
我:……黑人问号
然后提交人工复核,又被驳回了,原因跟系统描述一样。
当时都被气笑了,难道还要讨论一下劳动到底是不是最光荣这样的哲学问题才行吗?
最好结果是我屈服了,因为即使我找到了在线客服也只是反复跟我强调他们管不了审核部门,只能我去掉文字或这张图来解决,又因为毕竟新美大已经垄断了中国市场,而新美大的霸道程度商户们也都是有目共睹的。
就是看不惯新美大的价值观,就是要怼新美大,新美大一生黑,谢谢。
当我想购买正版微软office套件visio的时候遇见了一个神一般的bug。
微软竟然说,outlook邮箱…不!是!他!的!了!
我用了三年的outlook邮箱,他突然就不认我了!
微软:我疯起来连自己都打。
我们起先是8人寝室,不限制功率,晚上阳台灯的亮一晚的,所以刚开始是接阳台灯连插排,后来学校发现了,到时间就连阳台灯也一起关闭了。因为我们寝室旁边是公共卫生间,所以后来我们就连接厕所用电。又被学校给抓了。学校为了禁止偷电和违规接电,让同学们加钱换四人寝室才出现的功率限制。
我们做的时候应该是08年,我们那时候都是台式机,为了游戏效果配置都挺高的,记得我的魔兽小室友一个显卡3000多,忘记是什么型号了。
分割线
当年在大学的时候,晚上十一点寝室准时断电,对于我们的魔兽生涯影响特别的大。
我们学校还有功率限制,超过一定功率,自动跳闸,并在5分钟之内重新连电。
在下午寝室饭局座谈会中,由我们寝室帅气与智慧并存的我提出了一个设想。就是在十一点之前提高用电功率,使其断电,会不会在十一点过后重新连电。此提议得到了大家的一致赞同,并于当晚实验成功,从此我们便开始了决战到天亮的生活!
感谢大家的纠正,当时我们提高功率的方法是两个人把魔兽世界画面效果开到最大 一个人把永恒之塔画面效果调到最大,最后一个人把各种电器全部打开,比如吹风机等。
百度翻译的“简体字转繁体字”功能,简单来说就是你输入“简体字”,百度就给你转换成“簡體字”这样,虽然有时会出现“于”、“於”不分,“后”、“後”不分这样的小失误,但至少还是你输入一个字,它就转换一个字,没毛病吧?
那么问题来了,如果我在转换框里输入“以九仪之命,正邦国之位。”这句话,百度会给我转换成什么呢?“以九儀之命,正邦國之位”吗?然而百度给出的答案是这样——
我输入一个字你楞给我转换出两个字来,这就很离谱了吧!
后来有一次我需要转换的文里偶然带有“大众”两个字,然后百度就给我转换成了——
这回字数是对上了,但好像还是有种哪里不对劲的感觉?
我百度了一下,发现这个福斯是德国一家制造润滑油的公司,这是把大众当成了造汽车的大众,所以就跟润滑油产生了奇妙的联系吗?可我本意不是让您把大众两个字转换成繁体而已吗……
陷入沉思。
暴一个当年在某外资通信设备商碰到的逆天bug,当年折磨的老夫死去活来。B国电信的ethernet over sdh网络时不时发现某些以太网端口不可用,问题一层层报告到研发。
于是实验室苦逼的重现工作开始了。发现当光纤ok板子OK,光纤断了板子也OK。只有光纤慢慢脏了,信号衰减到某一个临界值的时候,有小概率可以重现。不能太脏,不能太干净,必须在脏和不脏之间徘徊千百遍,你妹。
测试大姐拿着光衰减器,在板子上找这个幽灵一般的临界点,每天看到我都满眼怨念,估计心里每天砍我一百遍。其实代码是D国人写的,冤有头,债有主T_T。
各级老板强势围观,email列表里面几十个人,真正干活的就我和测试大姐两个。天天催进度。
好吧,隔离代码开始。协议a单独工作正常,协议b单独工作也正常,当然不能排除测试运气好,这是最头疼的地方。
终于在无数遍默念f*ck和祈祷之后,发现临界于光纤连通和断裂的时候,中断报上来,协议a反复通知协议b,由于过于频繁,协议b无法收敛,最终导致了不可用状态。
问题找到了,怎么优雅的解决呢?荷兰老板冲我鬼魅的一笑,“你是中国工程师,总有办法解决的,给你三天吧。”
大哥,我不是钱学森,不是诸葛亮,不是图灵,三天改代码加测试,还要优雅,画个圈圈诅咒你。
好吧,别怨我憋大招了。解铃还需系铃人人,既然是通知惹的祸,那就改通知。状态不稳定的时候,协议a拿个黑名单默默的记着,时间满了,冲协议b大吼一声:“你去死吧”。然后问题解决了。
这么多年过去了,也不知道这个bug死彻底了没,反正江湖上我再也没听过他的传说。
在做 IP 区域 等字符串匹配时,同事发现的一个 Bug :
能看出有什么不对的地方麽?
突然想起以前同事遇到的一个关于TeamViewer的BUG
同事在写代码的时候,偶尔会出现无法粘贴或者粘贴出一些莫名其妙的东西,不清楚是为什么,但是因为出现的几率非常小,所以也没在意。
有一次他写着写着粘贴出了一大段代码,瞪眼一看转自CSDN,傻了,不知道什么哪来的。
结果我们几个跑去一看,其中一个同事突然出声了,这是我复制的代码,怎么跑到你电脑上去了。
此时空气突然安静——
经过测试发现,这两个人同时用TeamViewer连着一台服务器,关键在于TeamViewer对多用户链接好像是共用同一个剪切板的,也就是说A在电脑上复制东西,B在电脑上就能粘贴出A复制的内容。
绝了,这长达数月的灵异现象终于发现原因了。
可以刷红包,可以直接将他人钱转到自己账号上算不?下文首发在公众号《测试有话说》。
开发以为开发好了,测试以为测好了,然后钱还是被“合理”盗走了。
最近有各种拼手气红包小程序比较火,诸如包你答、包你拼、包你说等等。很多小程序都是匆匆上线,接口层面设计存在有很大的安全隐患问题,往往容易被人所利用刷红包,刷提现等资金问题。用户一旦发现资金被盗,那这个小程序基本是要废了。
下面根据实际案例,给大家讲讲我是怎么找到一个拼手气红包类小程序的漏洞的。当然,目的是为了学习,不是干坏事。如果你是测试,那你可以在你自家产品上测试是否类似漏洞,如果你是开发,可以查看下代码避免出现有类似漏洞的接口设计。
下面是一个你画我猜的小程序,发起方可以画一幅画,然后塞红包,分享给好友猜,猜中的人就可以获得拼手气红包。
↑↑好友通过分享进入↑↑
第一步,抓包,通过抓包可以查看进入图画页所请求的接口返回数据:
https://api.*.cn/index.php/api/drawguess/wechat/Querygroupdrawinfo?t=1514290355&v=afabde532d9a8a4969663fc52870ad54&userid=U20171123062035992245&drawgroup_id=2418599&page=1
{ "c": "0", "m": "", "d": { "is_redpack": "0", "ques_id": "997", "draw_url": "https://..", "img_url": "https://..", "ques_user_id": "U201709171243335621796", "draw_group_id": 2418599, "prompt": "2u4e2au5b57uff0cu4e50u5668", "ques_user_avatar": "https://..", "ques_user_nickname": "u854eKkkkkk", "num_up": 0, "num_down": 0, "right_cot": 35, "all_cot": 36, "num_page": "1", "num_reward": "0", "is_sub_anwer": 0, "anwer": "钢琴", "is_up": 0, "is_down": 0, "group_info": [{ "user_id": "U2017122611464418462", "anwer": "u731cu5bf9u4e86", "avatar": "https://..", "t": "20u5206u949fu524d", "nickname": "xuan u00b7 dog", "redpack_get": "0", "redpack_money": "0", "correct": "1" }], "redpack_money": "0", "redpack_num": "0", "redpack_num_send": "0", "redpack_type": "0", "rand_recommend": "3798417", "act": "", "pk_info": "", "pk_id": "" } }
注:返回数据中的"group_info"值以及图片地址是简化处理过的。
从返回数据中结合页面信息,很多字段都可以大概猜测是什么意思,如:answer(答案)
,由于这个关键值的暴露,我们就可以轻而易举知道画里面的答案,然后就可以做到无论画了什么乱七八糟的东西,我都可以回答正确,顺利拿到红包,如啥都没画我就猜中了:
这个时候,再深入研究下就会发现,接口请求参数中有个关键的字段 drawgroupid(画id),而且值是纯数字,自己尝试连续创作几幅画之后,发现这个字段的值是按+1规律增长的,那岂不是可以任意回答任何一篇画了?接着写了个脚本循环就会得出下面的情况:
热心的我把这个bug反馈给了开发者,开发者修复为:如果没有回答对,接口返回信息中的 answer 为空,所以你现在去试的话,会发现 answer 字段接口信息为空。
很多人以为上面的bug已经修复了,其实这个bug是没有发现修干净的,怎么说呢?大家再深入想下,这幅图回答者不知道答案,总得有人是要有权限知道答案,在页面显示的吧?猜测是两类可能可能有权要知道,一类是已经回答正确的回答者,一类是画的创建者,显然从画的创建者权限入手找bug是比较合理的,毕竟一幅画一定有创建者,但不一定有正确回答者。
我们重新回到接口返回信息中寻找关键字段,会发现有个 quesuserid ,可以断定这个就是创建者的用户id,抱着试一试的心理,我将请求接口中的userid的值更换为quesuser_id的值,结果发现,真的返回答案了。又可以继续刷红包了,表示很无奈呀。
https://api.*.cn/index.php/api/drawguess/wechat/Querygroupdrawinfo?t=1514290355&v=afabde532d9a8a4969663fc52870ad54&userid=U201709171243335621796&drawgroup_id=2418599&page=1
此时,再细细想一下,发现一个可怕的问题,这么说,这个小程序是完全没有身份态一说呀,一个user_id走天下,所以接下来我又做了进一步的尝试来证明我的想法,就是接下来要说的另外一个bug。
这个小程序跟钱相关的地方还有个赞赏功能,就是你欣赏一幅画,可以对画的创建者进行打赏,优先使用存在小程序上的余额(免密)。这个时候我尝试了一下查询余额接口,居然没有做任何限制可以查询,尝试了赞赏接口发现只需要转账人id、接收者id、赞赏金额,三个关键参数就可以直接转账了,重点的是user_id也是有规律有序的,我尝试遍历了一下其他人账户余额:
当然,我遍历只是查询余额而已,没有真正把其他账号的钱转到个人账号上,毕竟这对这个小程序的生态破坏太厉害了,不是bug这么简单了,我是通过把自己的赞赏其他用户的形式来验证自己的想法的:
事实证明,真的可以直接转!!!非常热心的我再次向开发者反馈这个问题之后,开发者默默的修复了这个问题,加上了身份态校验,也就是请求参数中的 t、v 这两个参数,其实这两个参数一开始就有的,我也不知道为什么一开始没有生效,难道遗漏了?
提现、充值与前相关的接口设计也有一些常见的安全漏洞,下期关键字“并发”,关注《测试有话说》,下次再来说。
当然是证交所的bug,2007年2月28日是个特殊的日子,这天是海尔权证交易的最后一天,,也是市价委托上线的第一天,,因为权证交易的最后一天没有涨跌停板限制,所以可以申报任何价格,,,因为市价委托,所以不输入价格,直接按市价卖出,,,,南京一股民瞅准机会,以1厘的价格购买800元的权证,,,买价太低,当然不会成交,他的买单排在队列的最后,谁也看不到,,,,,小可怜儿出现了,,一个基金经理图省事,以市价委托卖出持仓量三分之一的权证,,,系统自动撮合,先卖给出价最高的买一,再卖给出价次高的买二,,,,,再卖给,,,,,,,等等,,怎么有个傻逼挂价0.001元,,啪,成交,,,,,,,,,南京那位股民800块钱,1分钟内赚了78万
汽车的bug。
背景:我弟上高中,住校。
上学期某天弟弟把脚摔伤了,去医院检查后就直接回家休息了,书包也没来的及拿,然后周五我奉母上命下班路上去他们学校拿书包,拿完上车后就直接把书包放副驾驶座上了,在回家路上神奇的事情就发生了,车总时不时的发出一声“滴”的警告声,而且每次都是响一下,我一集中注意力观察仪表盘声音就没了,这特么咋回事呢。。。。
一边开车一边排查原因
1、老子系上安全带了啊
2、手刹也都放彻底了,而且手刹放不彻底时会一直响个不停仪表盘也会提示。
种种迹象表明报警声和上面这两条都没关系啊,到底咋回事呢,难道开了没两年的车电子系统就出问题了?感觉整个智商都被车侮辱了啊。。。。
然后我在还没到家的这段路程里,开始尝试让报警声复现,试图发现报警声的规律。在经过我不断的摸索尝试后终于发现了报警声出现的规律,聪明的你能猜到是咋回事吗?
规律就是一踩刹车车就响。。。。。这已经是很重要的一条线锁了,相信有些朋友看到这里应该发出会心的微笑了。。。。。
一切源于我弟书包的质量接近汽车识别乘车人的临界质量,我一踩刹车,书包减速,然后书包对副驾驶座位发生超重现象,超出汽车识别的临界质量,汽车检测到副驾驶有“人”没系安全带,所以报警,我一抬脚又恢复正常。
所以,这个故事教导我们。。。。。学好物理才能成为一名合格的老司机。。。。。
早年堆栈溢出 JMP ESP 就能执行的时候,我写过一个程序去找各种 JMP ESP 的同功地址。比如 MOV EAX, ESP/JMP EAX,也包括 CALL ESP。
然后在测试的时候发现,用 CALL ESP 写的攻击程序在某些机器上永远不能成功,而在另一些机器上百试百灵。最后发现影响因素是 CPU:在 AMD 的 CPU 上正常工作,换 Intel 的 CPU 就不行。
原来 Intel 的 CPU 有个 Bug:CALL ESP 也会和别的 CALL 指令一样,先把目标的下一条指令的地址压到堆栈里。也就是说,CALL ESP 指令永远不可能得到期望的结果。
还遇到过一批电脑,这批电脑中的任何一台,只要用 GCC 编译 OpenSSL 就会死机。
先后尝试过在 Windows 上用 MinGW 编译、在 Windows 上用 Cygwin 编译、在 Windows 上用虚拟机装 Linux 编译、格式化硬盘后直接装上 Linux 编译,全都会死机。而且具体编译到哪儿死机是没准的。
这个我猜问题也出在 CPU 上,但始终没搞清楚是什么 BUG。
前几天威锋网一位楼主发现了MacBook Pro不识别USB3.0的解决方法。
相信很多网友跟我有过同样的经历,就是买了rmbp,买了usb3.0的移动硬盘,结果接上之后却只能实现usb2.0的性能,这个问题困扰着我很久很久,也在网上查过很多资料,切换到虚拟机在切换回来啊,配置个usb hub啊,但始终没有彻底解决这个问题,知道刚刚一个无意的小动作让我找到了问题的原因,也彻底的解决了这个问题,跟果粉们分享一下。首先,仔细观察usb接口你会发现usb2.0里有四个触点,而usb3.0里有九个触点,还有五个触点在里面,而慢慢插入usb接口的时候应该是前四个触点先接触上,所以电脑自动识别成了usb2.0的接口,等完全插到底后系统已经认定是2.0了,接触上也没用了,所以,你只需要在插usb接口的时候速度快一点,迅速的插进去,ok,一切都解决了,同时接触上,查看系统信息,恩,5Gb每秒,是usb3.0的速度了,感觉天空都晴朗了,这也解释了为什么切换到虚拟机在切换回来就变成3.0了,因为切换回来时是接好的,九个触点都接触上了,所以系统识别为3.0了。
原文链接:
还好我买不起RMBP
这个问题没人邀请我,我要强行回答:
给某省做IPTV产品,内容服务器是某为的,它同时也提供我们的终端竞品。
在测试4K视频的时候,发现只要是我们的设备接上去,丢包非常严重,而某为的产品却是黄油般丝滑。
中间件没问题,都是ipanel的;ip层没问题,基于IPoE(其实就是DHCP),不跟PPPoE似的非内核态运行还会有瓶颈;硬件网卡和驱动没问题,博通这个还是值得信赖;ITMS应该也没有问题,甚至我们都照着某为把0 bootstrap抄了一遍…
各种调试,各种抓日志,各种改代码,懵逼了好多天,问题一直没法解决。
突然,一个同事有了个神来之笔的想法:要不抄一下MAC地址?于是,我们把自己设备的MAC烧成了某为的,问题竟然!!解决了!!!
最后诉诸于运营商,某为不淡不咸的表示他们那边做了个白名单,忘了对其它厂商的设备开放…
所以说,代码的BUG很好解决,加断点,加trace,加assert,打印堆栈,wireshark分析…很多手段,但人心的BUG,呵呵…
=================
2020年04月24日11:01:25,哇塞,怎么就突然365个赞了?
某为能崛起,对中国整体来说应该是好事;但他的崛起,对其它相关领域的中小企业来说,真的未必是好事。
不跟他们打交道很多年了,至少印象中,某为给人的感觉是傲慢,极其的傲慢,几乎无法沟通的那种。在与他们对接项目的时候,难受的要命。
而在行业中,比如说电网终端,他又是搅屎棍一样的存在,干了“相对小企业而言”不少缺德事,这个就没法说了,行内的人懂的应该会懂
某为承载了这一代国人在信息科技领域崛起的希望,尤其是现在,敌人越痛恨的,我们越应该表示支持。但真心希望,某为不忘初心,牢记“中华有为”,而不是“华而不实,为所欲为”。
再说回题目本身吧,接触过各种层面的软件开发,总体而言吧,嵌入式尤其是linux或者Android的嵌入式开发,调bug是最难受的,尤其是整机草稿完成,经常都不知道是哪个驱动又不兼容或崩溃了,断点也不好加,只能加 printk 才能维持的了生活的样子。。。。就是很气,^_^……——卧槽,我电瓶去哪了?
很多年前还在做学生时,遇到过一个奇葩bug
我们在做一个大型发动机测试设备,其中有两个毫无关联的东西。一个是油耗仪,一个是发动机冷却风机。油耗仪本质上是一个计数器,有燃油流过时输出脉冲到检测系统中;发动机冷却风机是变频器控制的,控制系统通过一个模拟量输出端口输出电压控制其转速。
我们把硬件全部连接完成,查完线,开始一点点测试。先单独测试风机,没问题,可以正常控制。然后测试别的,也都ok。测试到油耗仪时,出幺蛾子了。
为了测试油耗仪能否正常输出脉冲,我们拿个管子接到油耗仪上,然后吹口气,看看有脉冲没。吹了一口气,那个冷却风机转动了!我们以为是偶然的干扰,于是停下来不吹气,风机也停了。又试了几次,只要对着油耗仪吹气,风机就会立刻转起来,而且转的还挺快!
见了鬼了
开始查程序。怎么查,这两个部分都没有任何关联啊,又不是多复杂的逻辑。来回看来回查,折腾了一天,还是如此。
绝望中,开始看控制器的函数文档,发现奇葩了
当时用的是研华做的一个所谓的软核PLC,说白了就是个嵌入式的小计算机,直接用C/C++编程,类似于后来的arduino,然后可以像PLC一样组态各种IO模块,概念挺好,所以我们就当了小白鼠。
实际用起来才发现,研华开发软件的那帮哥们,简直就是一群。。。各种奇葩问题,客服啥都不懂,除了吵架厉害(我曾经因为他们的系统不稳定大吵一架,完败)
仔细检查接口函数代码后,发现错误原因了。
我们知道,C语言里面,除非特殊情况,void指针是应当严格禁止的,因为没有任何数据类型说明。但是这帮开发者为了偷懒,把所有函数的输入输出都用void指针。比方说
void inputXXX(void *data);
void outputXXX(void *data);
然后更为坑爹的是,不同函数内部又根据自己的需要,把指针强制转换为不同的类型,而且没有明确说明。因为工控领域中,ADC和DAC通常都不会超过14位,所以我们认为上面两个函数中,输入输出的data都是16位的短整型指针。测试inputXXX()函数也验证了这一点。但是!他喵的那个outputXXX()函数,竟然内部把data转换为了一个32位整形指针去使用!
我们的代码里,恰好是这样定义变量的:
ushort Wind; // 冷却风机转速
ushort Fuel; // 油耗仪流量
然后在油耗仪处理部分,我们调用
inputXXX(&Fuel);
从计数器里读油耗频率
在风机控制循环中,我们调用
outputXXX(&Wind);
但是,由于outputXXX()内部把输入指针看做是32位,于是就把Fuel当做了风速的高16位!于是只要对着油耗仪吹口气,风机就立刻跟着动起来。
从那以后我就再也不信任研华自己搞的什么软核PLC了
今天在写一个很简单的功能时,突然遇到了一个很奇怪的bug
没错,左侧边距不对劲,文字显示不全,明明什么都没写,却看着像负值的效果。
本人虽然不是很擅长调ui,但是这种简单的布局怎么也不可能出错。于是各种办法都试了试,xml来控制边距,java来控制边距,甚至都去看textview怎么ondraw的,一直也毫无进展…知道后来我撕下来手机的保护膜…
这大黑边,坑人呢。。。。
好多人都提到了seed的问题,实际上既然波形变得更差了显然两次随机的数据是不同的
如果我没记错的话,randn要保证两次随即数据一样是需要提前保存状态的,这位老兄显然没有采取这种操作
当然他还是成功毕业了的
/****************以下是原回答******************/
大学快毕业大家都忙着搞毕设的时候
有个哥们是用matlab做信号处理算法仿真的
他过来找我说:加上去的噪声去不掉了
我说:你要是能全去掉就能评个优秀毕设了
他又说:不是去噪去不掉,是程序里面去不掉
我就纳闷了
跟过去看看他的程序
当时应该是5月初了,正常人基本上都在收尾写论文了
我一看这家伙
刚把一阶低通滤波给做出来
我就有种不好的预感
看看他画的波形
呦呵,“去”了噪声的波形比没去噪声的还难看
看看他的程序
加噪波形数据(记不得叫啥了)=啥啥正弦波+randn(里面啥忘了,反正就是加个随机数当噪声)
挺low,但是没毛病
再看看去噪波形
去噪波形数据=加噪波形数据-randn(同上)
嗯,没毛病
……
…………
………………
……………………嗯?
有款软件叫pubwin,是网吧的一款收费软件,在广州清远等地区是ZF指定用软件,开网吧必须装。
这款软件上一个主要版本是PUBWIN2011,这个版本有两个恶心的BUG
1.服务端会释放一个sys驱动文件进系统里,禁止系统更改时间,只要系统开了机,系统的时间就更改不了,包括系统自带的时间更新服务。慢慢的,服务器时间就会比正确的时间慢几秒,再变成慢几分,客户机因为安装了网维大师,会自动同步时间,这样导致的一个问题就是,服务端和客户端时间不一致,按时计费客户会被提前下机,这样运行了几年也没有人发现,直到有个较真的客户跟收银员吵了起来,才发现服务器与客户机时间已经差了8分钟。然后怎么改都改不了服务器时间,咨询了厂家才知道,这功能关不掉,只能重启在bios里修改时间。
2.客户端开机会加载一个满屏的广告,广告格式是flash格式,广告通过网络下载开机后需要2-5秒时间才能加载出来。但是这个广告出来的时候,会让鼠标键盘失去焦点再获得焦点,这样导致的问题就是:(1)、客户开机; (2)、客户点击输入框输入身份证号;(3)、广告显示出来,鼠标键盘失去焦点;(4)、输入框获得焦点,继续输入。 这个过程中输入的身份证号码中间会被吃掉一两个数字,客户当然无法登陆。更恶心的是他无法登陆的时候提示并不是“用户名密码错误”,而是“禁止自助开户”,然后一堆人跑去前台问收银。
后来被顺网收购以后就更新了版本,现在好用多了。
---------------------分割------------------------------
又想起个事情,手机百度APP。
起因是有个前同事他发了个网页给我,这个网页在各种手机浏览器上测试都正常,惟独手机百度APP这个网页不能正常显示。这个前同事的页面又是投放了百度竞价,百度APP无法显示这个网页会浪费大量的预算。前端找了很久都找不出这个问题在那里。
我用手机浏览器测试过这个网页,果然跟我前同事描述的一致,就手机百度APP打开这个页面不正常,其它的手机浏览器全部正常。于是在开始在电脑上调试这个页面,调试了许久,发现电脑浏览器中删除某个JS文件能复现百度APP一样的问题,那问题就出在这个JS文件里了。经过反复的调试,终于明白问题在哪里了
手机百度APP有个广告屏蔽功能,默认是打开的,一般很少用户去关闭,网页的js文件里有一个重要函数名是 push_ad ,手机百度APP把这个JS函数当成广告函数禁止运行了。解决方法也很简单,改个名字就可以了,而且我告诉前同事以后JS函数名里最好不要包含ad这两个字符,问题就解决了。
-----------------分割-----------------------------------
可恶的电信劫持
有次同事发了个链接给我,这个链接里的页面有一定几率会跳转到一个陌生的网址上去,换过网络,浏览器,设备,电脑手机等都有一定几率跳转到陌生的网址上去。刚开始觉得是页面里有某些代码,我让前端仔仔细细排查了一遍后,确认没有任何的恶意代码。我把域名解析到另一个云服务商的服务器上去了,并且页面也更换成一个简单的页面,解析生效后我访问仍然有几率跳转到一个陌生的网址上去,这TM就很挑战我的智商了。
经过我几个小时仔细的排查,发现跳转代码是随机出现页面里的jquery.js文件里,而服务器上这个文件100%没有跳转代码,那只有一种可能,jquery.js这个文件经过中间商窜改,我中途换页面后仍然有jquery.js这个文件,所以仍然会被窜改。
很显然,能做到这个的只有电信运营商了,我把jquery.js这个文件换成了http://bootcdn.cn服务商提供的https链接,这个页面终于不再随机跳转到陌生链接了。
但好景不长,过了几天,这个链接的页面又跳转到陌生链接去了,这次我直接帮同事把整个域名都使用https访问,世界终于清静了。
有些朋友会存在怀疑,真的会有电信劫持吗?我只能告诉你,有些流量很贵,每一个点击价格都在3元以上,利益面前什么事情都不奇怪了。知名大公司很多都遇到过电信劫持,某鱼曾经还被电信劫持导致用户被诈骗(小心说话)。
本文绝对真实,有图为证。
大家能看出来这个Bug是怎么修复的吗?没错,就加了一个空格。
事情的起因是这样的,有一天,我厌倦了在VC++中编写代码,于是我决定将代码移植到VS2015中。在解决了各种问题后,有一个问题始终没有解决,那就是提示我某个变量没有定义。这么可能呢,明明啥都没改,并且那个变量就在我眼前显示着。
int neng; // 能 int why_am_i_not_defined; // Why?
不知道经过了多久的冥思苦想(毕竟年代久远),我终于有了一点头绪:那就是能
的编码有问题。在Shift-JIS编码(日文最常用的编码)中,能的编码是0x945c。5C
是啥,5C
在ASCII中就是反斜杠。所以上面的代码编译器看到的是这样的:
注:下面这个示例和上面的例子是我从同一个文件拷贝的,唯一的区别就是用不同的编码打开了文件。
int neng; // � int why_am_i_not_defined; // Why?
这个问题最坑的地方在于,在编辑器里显示的时候是完全正常的。你看到的和编译器看到的是不一样的。
这也告诉我们,不要在代码中放置非ASCII字符。并且在尽可能的情况下使用UTF-8。
本文使用 WPL/s 发布
从来没有想到过会有一个bug令我愤怒到来这里吐槽。大概算是一种积怨已久吧。
最近在一个玩具前端项目里用了parcel。偶然发现parcel开箱即用地支持CoffeeScript,忽然来了兴致把main.js
重写成了main.coffee
。
不要问我为什么0202年用CoffeeScript,问就是我有病。
parcel工作良好,我开始飘了,又把main.coffee
改成了main.litcoffee
。概括地说这是CoffeeScript内建支持的「文学编程」(Literate programming)格式,类似于Jupyter Notebook但是基于Markdown,编译器会忽略除了缩进代码块以外的所有内容。
这时问题来了:parcel并不支持.litcoffee
拓展名。然而我并没有抱怨反而看到了潜在的PR(,于是对本地的parcel简单地patch了一下,在这里注册了.litcoffee
拓展名并且在这里为具有该拓展名的文件设置好选项literate: true
。紧接着bug就出现了,(剧透:该bug与parcel无关。)main.litcoffee
中的代码被挂在了构建失败的报错信息中。
经过一系列的console.log
,问题不但没有变得明朗,反正扑朔迷离了起来:CoffeeScript的核心编译函数CoffeeScript.compile
被调用了两次,第一次的选项为{ sourceMap: true, literate: true }
,第二次却是{ filename: '<anonymous>', sourceMap: true, literate: false }
,最终由于literate
被错误设置导致编译失败。
为什么一份代码要被编译两次?第二次的选项又为何如此离谱?
实际上,第二次的编译是由babel触发的!惊不惊喜意不意外,babel在把CoffeeScript编译器吐出的代码编译到es5的过程中又(企图)用错误的选项去编译CoffeeScript源文件!它这样做的理由,我相信在座的各位谁都猜不到。
首先被牵扯进来的是工具库@babel/template
。这个库的功能和Python的标准库string.Template
几乎一模一样:将一个含有占位符的字符串作为模板,后续通过使用不同的上下文参数进行替换来生成不同的结果,区别在于@babel/template
接受的上下文参数和生成的结果是语法树节点。出问题的不是这个库的功能,而是这个库的作者认为有人会经常使用模板生成了语法树却不使用它,因此将其实现为惰性生成。惰性本身倒也没什么,问题是好心的作者发现如果生成过程中抛出了异常,惰性生成会导致报错信息的调用栈失去意义,因此在原本应该生成语法树的地方,他捕获了一份当前调用栈信息并保存下来(这真的比生成语法树要快吗……),一旦之后真正生成过程中发生了异常,就把保存下来的调用栈打印出来以供参考。
捕获调用栈的方法采用了喜闻乐见的try throw new Error() catch(err)
惯用法以保证对IE的支持,然而IE<=9即便如此也不行……
回忆一下脚本语言报错时滚滚长江东逝水一样的报错,每层调用栈大致包括:代码路径,行号列号,当前方法名。换言之,对于CoffeeScript,需要sourcemap。这就引出了将bug接力棒交给CoffeeScript的方式:CoffeeScript支持在node环境下「原生」执行(实际上是粗糙的JIT),但是(CoffeeScript的注释说)node并不支持使用sourcemap来转换异常报错信息,所以CoffeeScript只能自己动手。怎么动手呢?直接把Error
原型的方法给劫持了!好家伙,@babel/template
本来只是想捕获一份调用栈,甚至这个调用栈里已经完全没有CoffeeScript的存在了,结果没想到一下子又让CoffeeScript执行了起来。反正当我看到调用栈里CoffeeScript出现在Babel上方的时候我整个人都傻了。
故事到了这里还没有山穷水尽。虽然CoffeeScript错误地假设了整个调用栈都是它的地盘并掌控了报错信息的编写,但是它也不会胡来。交给CoffeeScript的信息包括了每层调用栈原始的路径,这些路径大多是以.js
结尾而被CoffeeScript原样输出。然而,坏就坏在有些在闭包里的层没有源文件路径(为什么?),其文件名被统一制定为<anonymous>
。那么还有谁的文件名叫<anonymous>
呢?当然是我们刚刚编译过的main.litcoffee
!没错,parcel虽然知道它的名字叫main.litcoffee
,但是觉得工具人CoffeeScript并没有必要知道就没告诉它。而CoffeeScript则憨批地用一个全局变量缓存了所有编译过的代码和sourcemap……
终于,最后的槽点要来了:CoffeeScript依次检查它缓存的每一份名为<anonymous>
的代码对应的sourcemap在调用栈行列号对应的位置有没有符号,如果任何一份有符号,就认为这份sourcemap就是我们要的(啊这);如果一份都没匹配上,就将最后一份代码重新编译并生成sourcemap返回……
作为曾经风靡一时的开源项目,CoffeeScript在这里慷慨地附送了大段注释(随便一提,这篇代码就是用文学编程写的),解释道存在着一种情况,最初并没有为某些代码生成sourcemap以提高性能,所以这里为它补上,这样只有非常偶然地抛异常情况下性能会有影响,但是用户体验得到了保障,好耶。
好个屁,只有在最后一份名为<anonymous>
的代码刚好对应着正在输出报错信息的调用栈帧(这意味着所有闭包栈帧最多只有一个能输出准确),并且它之前还恰好没有生成sourcemap的情况下,这个逻辑的结果才是正确的。而且, 你编译代码的时候选项就乱给吗?(万万没想到最后背锅的是CoffeeScript自己)或者退一步讲,只缓存代码有什么用?为什么不缓存编译结果?
总结一下,这个故事讲的是parcel找了两个兄弟来帮用户干活,结果一个把另一个随身携带的雷管()当成了电池然后把用户家给炸了。整个bug构造精巧环环相扣,每一个库都能洗清自己的罪名,最后留下我对着一地鸡毛发出像是见识了社会结构性矛盾一般的叹息。这个故事同时还涉及到(前端)开源项目诸多犯罪行为:
我最想不通的一件事:明明这个bug并不需要这么庞大地多方配合,仅仅依靠一个简单的CoffeeScript片段就能部分复现(调用栈里有两个或以上闭包+一些巧合),为什么这么多年了一个明显错误的报错输出逻辑能一直活下来?
啊,今天也是盼望着Rust早日一统天下的一天呢。
后日谈:搞清楚整个bug机理的我是否准备彻底根除之?不。我只是给parcel调用CoffeeScript的选项里加了一个filename
就准备提PR了。请不要给parcel作者打小报告。(
说一个税务上的难为人的bug
上级税务局:xx纳税人应该享受优惠政策,但是看他报表,他交税了!你们赶紧处理!
县税务局:核实了,纳税人自己填错表了!我们立马退税!
xx纳税人:30多块钱,我不要了,跑来跑去太麻烦!!
上级税务局:你们必须给纳税人退,不然扣你分!
xx纳税人:你们这是为难我们纳税人,不要不要,你要非得让我退!我跑来跑去油费都得200多!!投诉,找借口投诉,扣你分!
县税务局:我去年买了块表!!!
大约2006年的时候,大学寝室一堆人围着安静看电脑(不是那种片,嗯),突然屏幕右下角出现了“有未识别的USB设备”的提示,我们一群人面面相觑:没人动啊。随后不约而同地看向桌子上的一根USB延长线,发现——
一把铁勺子不知为何插在了里面。
——————分割——————
第三篇过千赞回答居然是这个……
居……居然8K了,目瞪口呆.bug
防止宝宝咬手指甲的药水,涂在指甲上,无毒无害无色,但非常非常苦。
我给我2岁半的宝宝涂了之后他手指伸进嘴巴想咬指甲,苦死了,大哭,手指抽出来。
哭几秒还是苦,手指伸回去擦嘴唇,更苦了,大哭,手指抽出来。
哭几秒还是苦,手指伸回去擦嘴唇,更苦了,大哭,手指抽出来。
。。。。。。
不知道大家见过笔记本放在麻将桌上就不能充电的情况没有?
我是给部分客户提供苹果上门服务的。
有一个大哥(各方面都是大哥),在山上住别墅。有一天跟我说他玩扑克牌的MacBook Air不能充电了。我赶紧带上工具上门处理,到了之后一看他在棋牌室的麻将桌上盯着电脑呢,检查发现果然不充电(充电器接口指示灯不亮),赶紧拿到旁边长条桌上逐一检查充电器和笔记本内部是否进水…检查完了发现没问题,充电器是好的,笔记本也是好的,又可以充电开机了。
那就拿了上门费回家吧。
第二天,大哥说又不能充电了,让我买个新的充电器给他。好吧,咱拿了新的45W充电器又上山了,这次是在茶室,又能充电了。我说再查一下原因,大哥说懒得麻烦,换新的就行了,旧的你带回去研究。
第三天没事,第四天也没事,第五天大哥说又不能充电了….
这次去我都想住下来看看到底是怎么回事了!因为我去了后一检查,笔记本是好的,充电器也是好的,也能充电开机。但是大哥反应经常不能充电…
最后还是我让大哥回忆哪些时间哪些地方容易出现不能充电的情况,大哥想了想,指着棋牌室说应该就是那间屋子,他习惯在那里抽烟玩电脑,也就是在那里特别容易出现故障。
然后我就去仔细检查了棋牌室,最后发现问题居然出在这张电动麻将桌上面!
笔记本放在麻将桌上刚好有一半机身压在桌子中间洗牌器上面,这时候就会出现不能充电的情况。如果移动笔记本放在桌子边缘就可以充电。
最后我判断就是电动麻将桌中心的磁铁影响了MacBook Air的电源管理系统或者其他硬件,导致不能充电。
解决方法也简单,加一张小桌子在这个房间,笔记本专门放上面…
最后我只收了一次上门费和几次打车费。
顺便提醒大家注意不要把笔记本放在电动麻将桌上
以前在一个小公司遇到的bug,一个只在阴雨天出现的bug,一个同事至今想起来还激动的拍轮椅
测试环境的服务器是两台实体主机放在我旁边的桌子下面,生产环境用的阿里云服务器。
某天前端开发人员反馈测试环境某些接口调不通,某些接口正常,经过排查,调不通的接口都在同一台测试机器。过去看发现机器居然关机了!
我们很奇怪,周末办公室没有断过电,为什么机器会自动关机?重启大法解决了。
然后这个问题谁都没放在心上,直到过了几天又出现了!
这下开始慌了,是不是谁写的代码里有隐藏的bug导致了机器会关机?
但是代码审查一直没有查到这样的代码,而且几个版本的迭代过程中生产环境从来没有过这样的问题
而这个bug像个梦魇一样,隔那么几天就来一回,而且我们发现每次bug出现的时候都是阴雨天。老板下令一定要找出原因,不然每次新版本上线都胆战心惊,怕问题蔓延到生产环境
于是我把两台服务器从桌子下拉出来摆在我脚边,就是要看看到底什么原因
后来...
.
.
.
.
.
.
.
.
.
.
后来问题找到了,天气一冷坐我对面的家伙就把腿抬起来放到测试服务器主机上,那里出风口暖和
不小心就把插头搞接触不良断电了
我们把他腿打断之后这个问题再也没出现过
猜测,可能对象没初始化。
2019.1.26
·按照 @因为你会发光啊 的建议给图片做了标注
·从评论区来看这居然是个很普遍的坑?
—————————原回答—————————
不是自己的电脑。
昨天系统爆炸了,重装系统后发现只要调低屏幕亮度,电脑就会休眠,以为键盘映射也会出问题,不断重装无果。
心好累,就擦了下电脑。然后发现,
什么破键盘膜。
某天我在玩wii的时候过热自动关机了,看了下发现主机的风扇不转了,百度之发现很多人都说不转,什么温度到多少多少度才转还说某些主机有bug温度检测不行什么的。
然后准备动手拆机,期间我还在想先看看风扇是不是好的,要是主板不给风扇供电就从usb口取电什么的。结果拆开一开
真的有BUG!
策略类游戏的玩家,尤其是文明系列和p社系列的玩家都知道,这类游戏大量的数值计算会导致游戏越到后期运行越慢,特别是p社祖传的单核引擎,一核有难7核点赞,《群星》1000星地图的一局游戏往往到游戏内100-150年左右就开始减速运行,一般的电脑基本在游戏内1天需要1s的程度,更别说200年以后突然出现的规模庞大的天灾了。
一般来说这种减速就是大量的运算必然带来的,基本没什么可能去(很容易地)优化,不过有玩家发现,当群星的后期游戏中,你选中一支规模很大(200艘船以上)并且“已经完全升级完毕”的舰队的时候,游戏会突然出现极大的卡顿,原来40帧变20帧,原来20帧左右的游戏一下子就变成只有5-6帧,而当你不再选中这支舰队,或者选中的是“还可以进行升级”的舰队的时候,游戏的运行就很正常(尽管也不快),显然这种卡顿应该是一个程序设计上的问题,而不是游戏本身积累的运算量带来的。
最后,这个问题由贴吧大佬成功破案,不过在破案之前,我们先想想正常人要让玩家知道舰队还可不可以进行升级会怎么写这个程序。
首先游戏的逻辑是这样的:一个舰队里有很多的船,分成护卫驱逐巡洋战列等等不同的种类,配船器在每个种类下都保存着一个或多个模板,然后太空港根据模板来建造舰船,当获得了新科技想用在船上的时候,要先在配船器里修改模板,然后再把舰队拉到太空港点击上面图里的升级按钮——显然,升级按钮只有在舰船可以升级的时候才能点亮,而程序又怎么知道舰队里有船能升级呢?
每次选到舰队,要弹出界面告诉玩家升级情况了,就一艘艘船挨个查过去跟原来的模板对应啊!如果全对上了就告诉没升级,如果有对不上的就告诉有升级,完了!
if 所有舰船的配置都与模板相同 return 没有可用升级 else return 有可用升级 endif
——就算没学过编程,一般人稍微想一下也都知道是吧。接触过编程的可能说会不会效率太低,不过反正更底层的代码说舰队里最多塞500条船,查一遍也不会太慢是吧?
paradox蠢驴的脑回路和一般人不一样。
虽然他们也是一艘艘挨个查的,但是一想到查完了怎么办他们就思维短路了,他们让这个循环在查到了有升级之后,return有升级、结束,没问题;但是查到没升级呢?不知道是害怕查错了还是怎么的,蠢驴程序猿们让这个循环返回去再查一遍……
也就是说,如果你选中了一个已经完全升级的舰队,游戏后台就会一直跑着这个查模板的循环……
你说看上去不怎么样?确实,在游戏的前期和中期,计算量还不是特别大的时候,CPU0随便拿点运行时出来跑这个循环,基本看不出对性能的影响,而且游戏的前期大家都是屌丝,舰队规模小,跑这个循环更没有影响了。
但是到了后期,大家地盘也大了、舰队也多了,本来CPU0就不堪重负,玩家一选中舰队,查模板的循环一跑就是几百条船,还翻来覆去的跑,快压死的骆驼身上放上了一大捆稻草,剩下的七个骆驼看了摊摊手(尥尥蹶子?)跑了。
你说能不卡吗?
许多年前了,一套全国使用的上机考试系统,用ie浏览器作答的,后台是asp的控件,整个考场50个人,考了好几轮了,有个学生反复登录后都无法作答,提示找不到所需的文件。我们上下查啊,左右查啊,都发现服务器没毛病,学生机系统也没毛病,什么也没毛病,可是为什么找不到考生文件呢。后来灵机一动找到ie临时文件夹里面,应该会有一个学生考号命名的试题目录。然后那个考生的学号恰巧是3721!!!!
于是乎无解,不管怎么尝试,都不可能在ie的临时文件里面建起这个名叫3721的目录。折腾半小时无法解决,还好我比较聪明,找了个缺考的学生考号让那人登录了去考,在备注里面说明了特殊情况,结果才让他顺利完成了考试。
这里有一个原理不算特别复杂,但是效果绝对拔群的bug
数字逻辑设计大作业,用Verilog语言写的跳一跳小游戏,其中有一个代码逻辑是在VGA上绘制小圆球,应该的效果是在白底上画一个黑色圆球,如下图所示
然而,当我踌躇满志的写好下板之后,VGA上显示的赫然是这样的:
这样的
以及这样的
看起来很魔幻啊!很现代艺术啊!
一瞬间有想把跳一跳改成现代艺术生成器的冲动啊!
后来发现bug原因是,我的画圆逻辑是(x-x0)^2+(y-y0)^2 ≤ r^2,但是我用了一个不够大的wire变量来定义前两项,导致离得较远时溢出,就变成了这样
这并不是遇到过最难调的bug,但绝对是最切题的了
《骑马与砍杀》天空贴图错位成了人物脸部贴图
我来说一个你们绝逼想不到的奇葩bug。
朋友是游戏制作人,一次他们公司游戏要搞活动,充值8折优惠。
负责这个功能的开发,弄出来的结果是:玩家充值100,发现只得到了80的金币。。。。游戏被骂惨,当时还是在qq空间上线的页游。
大家这么热情,我就专门再次采访了一下:
Instagram 工程师在 PyCon 上分享他们从 python2 迁移到 python3 过程中一个有意思的故事:
当 Instagram 解决了这些奇奇怪怪的版本差异问题后,还有一个巨大的谜题困扰着他们:性能问题。
在 Instagram,他们使用两个主要指标来衡量他们的服务性能:
所以,当所有的迁移工作完成后,他们非常惊喜的发现:第一个性能指标,每次请求产生的 CPU 指令数居然足足下降了 12% !!!
但是,按理说第二个指标 – 每秒请求数也应该获得接近 12% 的提升。不过最后的变化却是 0%。究竟是出了什么问题呢?
他们最终定位到,是由于不同 Python 版本下的内存优化配置不同,导致 CPU 指令数下降带来的性能提升被抵消了。那为什么不同 Python 版本下的内存优化配置会不一样呢?
这是他们用来检查 uwsgi 配置的代码:
if uwsgi.opt.get('optimize_mem', None) == 'True': optimize_mem()
注意到那段 ... ... == 'True'
了吗?在 Python 3 中,这个条件判断总是不会被满足。问题就在于 unicode。在将代码中的 'True'
换成 b'True'
(也就是将文本类型换成二进制,这种判断在 Python 2 中完全不区分的)后,问题解决了,都是这'b'惹的祸。(左边表达式返回的是 bytes,右边是 unicode, python3 中默认就是 unicode)
所以,最终因为加上了一个小小的字母 'b'
,程序的整体性能提升了 12%
参考: Python + Django 如何支撑了 7 亿月活用户的 Instagram? - Python - 伯乐在线
政治敏感?
在国内上大学的应该都知道有个校园套餐
我办的移动的,套餐里有50G校园内使用流量
还有1.5G国内流量。
BUG就是我在学校里上网,他却扣我国内流量,还记得是今年中秋节前,国内流量给我扣完了,实际上那半个月我都没出学校。
我就在宿舍坐着他还在扣,发短信了,超出流量5rmb
我就给10086打电话
跟她说了半天,
她说:我们没有权限给你补话费,等后台给您处理。
过了半天后台来电
客服:您好五块钱已经给您补上了
我:这半天他又扣了我五块钱,我一直在学校没出去,还在一直扣我钱,我校园流量还有40G没用呢。
客服:不好意思呢先生,退款每六个月只能申请一次哦。
我:我也不缺你那几块钱,可是问题你要给我解决啊、
1.马上中秋节我要回家,你能把误扣的国内流量补给我吗?难道让我用三毛钱一兆的流量?
2.而且为什么半年只能申请一次退款,这明显是你们的失误啊。
客服:不好意思我们也没有办法
你们牛逼
移动真牛逼,无赖公司,你当爸爸就这样不管了?
果断登陆中国工信部投诉
一开始点投诉网页不会加载
我就很奇怪,为什么工信部网页能打开,这投诉界面就加载不出来
真相就是:他怕你投诉,所以你用移动网络无法登陆工信部投诉
呵呵
老子有vpn
我挂了个香港的vpn,立马能投诉了
然后填写投诉信息—提交
第二天早上
移动公司客服给我打电话
客服:您好先生balabalabalabla,我们赔钱,求您撤诉(大概这个意思反正)
我:可惜你们半年只能退款一次诶,我都被误扣三十多块啦
客服:会如数补给您
之后呢她赔给我一共70块
其实这些公司真的贱
明明自己的问题,非要推给客户
非要爸爸们举报你你才老实
写一个和在美国留学生息息相关的bug.不是目瞪口呆,但是当初自己研究出来的时候还是相当惊讶的,应该也算是一个小小的税法bug.
美国公民或者绿卡持有者,在报联邦税时使用的身份是resident,也就是绝大多数美国人使用的1040表格。这里牵涉到两个概念,一个叫personal exemption,就是说你是个人,美国政府就说你收入的前4,050美元不用交税。另一个叫standard deduction,就是说如果没有特殊情况,你可以标准地再减去6,350美元不用交税,合计收入的前10,400美元是免税的。也就是说一个没有任何特殊情况的美国单身年轻人,有10K收入是完全免税的。
而对于中国大陆F1签证或者转成OPT的留学生来说,身份在税法上称为non-resident alien.在报联邦税时应当使用的表格是1040NR。4,050美元的personal exemption依然适用,因为你还是个人;但是6,350美元的standard deduction就不能用了,因为你不是美国人!
幸好中国和美国有一个税收协定,规定F1签证留学生再给你个5,000美元tax treaty exemption大礼包。所以对于留学生来说,收入的前9,050美元是不用交税的。其实和美国人差别并不大了。
bug来了。
税法上规定,从留学生在美国的第六年起,因为你在美国待太久了,美国政府觉得你就算是resident alien了,可以和美国人一样使用1040表格报税,也可以享受6,350美元的standard deduction. 然而,你还在F1签证上对不对?奇迹出现了,tax treaty exemption也依然适用!
做一下算术:4,050 + 6,350 + 5,000 = 15,400美元!也就是说你比美国人享受了更多50%的免税额。再加上留学生常常还在读书有学费开支(不管是你出的还是你父母出的都没关系),这个时候也能用上1040表格上的学费减税,优惠更大。
更大的bug来了。
美国政府有一个叫American Opportunity Tax Credit的东西,鼓励你去读书,如果你缴纳了足够的本科学费,收入又不足,那么不但不欠税,政府还倒送你1,000美元!
毫无疑问,这样的好事只能给resident alien和US citizen用。
看到这里的你应该猜到了。留学生到了第六年,如果交了本科学费,没有足够的收入,就能够白拿1,000刀。当然,还有一些其他林林总总的条件,还要拿一些林林总总的材料,填一些林林总总的税表。但是......this is free money!
就是这样。exciting!
————————————————————————————————————
有很多朋友来咨询三个东西的报税方法:
我本人day job是做公司税corp tax的。corp tax compliance,tax provision, tax planning是一个企业不雇一大伙会计师绝对做不出来的。individual tax 则不同,上面的三个问题,你上六个小时网,查阅5种不同说法,自己半猜半弄,填三个小时表,是能搞出来的(不一定搞得对)。但是上面三个问题,对于我来说,就是轻车熟路地为客户理一下情况,填一串表格而已。假如你时间比较昂贵,或者每年不想动这个脑筋,或者怕做错做漏,那么花点钱找个熟悉你情况的会计师,真的是一个比较合理的选择。
什么玩意儿?恭喜17届学生成为首届大二还要使用某晨跑APP的用户???
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
额呃呃呃~就在刚刚,终点是被学校封了的田径场 ,想尽了办法靠近,就差从看台上跳下去了!好不容易忍住没把手机抛进去,毕竟,以后还要用它完成学校的长跑任务~~~好气哦,但还是要面带微笑(心里那个啥)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
大一新生一名,学校要求用一个长跑APP进行锻炼,这个APP嘛,说实话又精又蠢,精在随机设计路线,避免一个人带多个手机帮人代跑,但它蠢呢,又蠢在随机设计的路线,穿墙淌水全都有!每天吊着一口仙气晨跑,还有可能不记录你的成绩~[手动冷漠]
在我们的ERP系统里,有一个程序A天天向另外一个程序B发送Log,程序B负责解读Log, 然后如果符合某些业务条件就触发自动电邮。
程序A和B 自2008年开始运行就一直没毛病,但是2013年一月一号程序B挂了。无论如何重启,它也无法再处理A送来的Log了。
查Bug的结果是A的Log文件中日期字段是以YYYYMMDD格式书写的,但B是以DDMMYYYY格式解读的,所以当他第一次读到13月时就挂了。
坑爹的是其实B的业务逻辑根本不在乎日期,所以一直以来把后四位MMDD当成年份(0308年?1024年?)也没问题。
我对此印象深刻是因为我元旦假期凌晨被叫起来修Bug。。。
前几天老婆在某某汇买了个SKG的养生壶样子如下
功能很多
说明书上详细解释了每一样功能的加热方式和程序,(程序设定大致为,加热到100°,然后转换为90° 10分钟后再加热到100°,总之就是各种不同温度,不同时间的组合。)老婆高兴的想终于可以无人值守的熬薏米红豆水了,高兴的加了水,把东西加进去,开心的逛街去了,等我回到家已经是两个小时以后,粥溢的到处都是,壶里面已经没有一滴水,高温自动断电了,我想着不能耽误老婆减肥,就收拾干净以后又换了一壶原料,结果几分钟后水开后,一直不会跳转下一个程序,结果让我发现了一个BUG,无论哪种加热方式,它的程序里边儿第一步都是把水加热到100°,而我们这里海拔750多米,水98°就开了,也就是说它不管使用哪种加热方式都不可能把水加热到100°切换到下一步。
结果就是200块钱买了一个能定时的电热壶,一切华丽的程序都因为这个BUG彻底卡死。这应该是你们海拔低的城市的人永远都遇不到的情况,我也是醉了。
我来补充一下自己的经历。
某次给客户测试一批工控主板,发现头天晚上加班熬夜测试一切正常,次日上班测试就各种不稳定,报故障码,精准度偏移,达不到设计指标。从工程到研发到生产全部撸了一遍流程,无效,找不出问题。一度到了测试组只能晚上熬夜搞测试的地步,又怕产品有暗病,不敢出货给客户。
直到产品组的经理,有一天因为怕塞车提早上班,6点多到了办公室,坐那里看头一晚上的测试机台还没关,测试显示一切正常。等到8点,隔壁公司上班,只停隔壁公司啪啪啪一顿猛按开机开设备上电,好了,测试机出故障了。跑去隔壁公司一看,好家伙,测试机台对着的那个方向,搞了机台热压机,在压液晶屏斑马纸。热压机一开机,这边就误码率大增。最后跟隔壁老板友好协商,各退10米保平安,万事大吉。
再补充一个,给客户做一个vcxo晶振压控测试,客户原来用的是国外进口abracon 的晶振,换了国产厂商的晶振做代替,发现用测试治具测试,没问题秒好。只要一用烙铁焊接装机测试,频点至少要等10分钟才能达到指定精度,产品经理都快疯了,铷钟校准10分钟也够了啊,百思不得姐。发回给厂家测试,啥问题没有。最后厂家的FAE坐灰机从成都赶来,现场演示测试架可以过,烙铁一焊接测试就过不了。现场有个维修工程师建议,说这种会不会是焊盘上锡不均匀引起的,讲不通啊。不过测试经理很细心,当天安排工厂专门开了植球上锡的钢网,第二天用钢网刷锡膏,用热风枪吹上去,一次成功。问题解决,但是很明显不是上锡不均匀引起的。FAE说他们自己测试也是烙铁手焊的。现场看到这个烙铁,不如再试一下。
好家伙,一打开烙铁电源,正测试得好好的时钟,不行了。眼看着示波器波形就不对,卧槽,仔细研究一下,哟呵,烙铁惹祸。烙铁一开机,信号就不行。那为啥至少烙铁焊接的过十来分钟就稳定了呢?再一看,好家伙,烙铁带自动休眠,10分钟左右不用,就自动进入休眠状态
进入休眠状态,信号又稳定了。兜兜转转一大圈,烙铁惹祸。
想起了我们单位之前搞出的一个笑话:
“为什么我们系统导出的文档是乱码?”
“还真是,文字是乱码的,格式居然不乱!”
“我去!数据库里也是乱码的!”
“是吗?我查下日志……也…是…乱码?!”
“你那接口编码没设置错吧?”
“没错啊,都跑了好几年了。”
一伙程序员围观半天,始终找不出bug在哪,最终一个老干部路过,说了句:“人家这是越南文字…”
2018年2月23日更新:
经过反复测试,解锁【隐藏技能】:多语言支持
--经验值+1
--系统适用性+5
--系统稳定性+1
--系统可维护性-1
--领导表扬+5
--工资+0
哦豁,这个回答最近怎么火了?
既然这样,按照知乎惯例趁机安利一波我的公众号先……先……先………………
我……没有公众号
“垃圾桶里有垃圾,扣五分”
检查卫生的大一学生干部小张如是说。
几年前在群里听说的一个事情,不知真假。有个女的在微博上给一个帅哥博主私信发身份证照片和裸照,本来想勾引这个博主,没想到已读不回。几天后发现人家拿她的身份证信息和裸照借了裸贷。
第一家公司项目组两个同事开发同一个模块,共用一个开发库,一个调试新增,一个调试删除,这俩人调了一天,各种诡异的现象。
最后一起抽烟的时候交流了一下心路历程,差点没打起来
当年军训的时候,第一天分配好了宿舍床位之后,教官开始给我们讲内务。讲完脸盆牙缸牙刷怎么摆放之后开始一个一个查我们摆的合不合格。查到我发现我的牙刷直接放在脸盆里,就问我。
"你牙缸呢?"
"报告教官,我没有牙缸啊。"
"没牙缸你咋刷牙的?"
"就用手捧水漱口。"
"那你这么摆牙刷不行,必须得有个杯子。"
"可是我没杯子呀。"
"必须得有!"
"那教官你看我喝水的大保温杯行不行…"
"不行!"
然后局面就僵住了。教官不知道怎么办,于是去报告了连长。连长过来看神马情况,几乎说了跟刚才教官说的完全一样的话,然后也不知道怎么办,又去请示参谋长。我就在一旁弱弱地围观,奇怪这么庞大的军队系统咋就因为一个牙缸的bug崩溃了…
参谋长倒是很快把这个bug给修复了。他让人找来了个纸杯,用于放我的牙刷,虽然后来我也没用过那个纸杯…
知乎首答。
先说说背景,某企业普通实习生一枚。因为公司电脑资料比较多还需要保密,所以其他电脑都是设置了不能插U盘的,但是!我的电脑恰巧是整个办公室唯一一台能插U盘的公用机,所以其他同事都会来用我的电脑拷文件。
每天日常就是被叫来叫去拷文件……
有那么一天,我发现我电脑不能拷文件了……一拷就出现这个样子
……整个办公室基本上只有通过内网机的内部共享互传文件,而且如果你想通过电脑发往其他公司,还要通过外网机来发送,而外网机是进不了内部共享的,但是可以插U盘。现在如果我这一环断了,共享文件出不来也就不能拷到外网机发送了。
于是几天没有人来找我拷文件,我把手头上的工作做完了,习惯性插入U盘打算拷文件出去发邮件。因为文件在桌面,所以我很直接的就右键选发送到U盘。
然后加载完,成功,拔出U盘,发邮件,一气呵成。
等等刚才是不是有什么不对
我能拷文件了?????????
于是我又试了一下
不对啊!还是会显示没有权限啊???
打开U盘,对啊刚才发的文件也没错啊???
一脸懵逼的再次插入U盘,然后立刻右键发送至U盘,成功。
再一次,不成功。
??????????????????????
在我以为见鬼了的时候,我突然发现,每一次插入U盘,过多个几秒钟,右下角就会跳出一个窗口,内容:
【该插入设备为只读状态
管理员】
啥玩意啊……
等一下,那我拷文件和这个有没有什么关系??????
进行反复试验后,发现:插入U盘,未弹出窗口时拷入:成功;
插入U盘,已弹出窗口时拷入:失败。
这是什么沙雕操作吗???????????????
原来还可以这样的吗???????????????
我是不是不小心发现了什么bug啊?????????
赶紧拍了隔壁的师姐一把,“姐把你U盘给我一下”
“干啥”
“帮你拷文件”
把一脸懵逼的师姐拉过来,给她操作了一遍。
师姐:
“你这是啥原理,再操作一次我没看懂”
“很简单……其实就是趁窗口没出来拷就行了……”
“噢…………等等,趁????????”
“对对对……就是这样……”
然后再给她试了一遍。
然后师姐看我的眼神都变了。
——————手动分割线———————
半个月过去了,你们真的很无聊……一个沙雕回答还能得到那么多赞真的……
先感谢你们的赞,顺便回答几个问题:
1、不是手速快的小伙子,评论那位你猜错了……
2、评论里面那个 @文伟黄 还真是我同事……他和师姐一起震惊的我能怎么办……
3、师姐看到了,惹。
4、我已经实习结束离开好久了,并没有追责,请放心,下一任也在趁电脑不注意。
——————手动分割线———————
好久不见,已经过去两年了呢
现在看看自己的回答我也有点懵逼
我这个语序就很emmmmm向我亲爱的语文老师说一声对不起
其实我这个行为是不对的,千万不要学我,只是小领导有时候急着要拷文件的时候就默许了我这么干,千万千万不要模仿啊!!!万一出现我这种情况还是先跟领导说一声!!!
我们学校的一卡通系统和体育馆系统的两个bug.
先说一卡通:
一卡通可以在食堂和超市刷卡扣费,如果丢了就要去补办,一般是在自助机办理。有一次我丢了卡,去办理发现自助机坏了,就去人工,需要工本费15,直接从卡里扣款。但是因为我的卡里余额不足,扣完后余额变成负数,而我当时没有发现就走了。后来在食堂使用,发现居然可以用,而且负的越来越多,怀疑是写一卡通系统的人没有考虑到负数情况。再后来快负100的时候担心被请喝茶,就去缴费了。
再说体育馆:
体育馆是通过网页预约,一般都是用页面操作,然而抢场馆的人太多,就写了一个脚本,直接调用接口输入起止时间预约,然后再付款,到此都正常。某天,输入时间的时候弄反了起止时间,结果扣款成为了负数,变成给我的体育馆账号充钱。当然我没有利用这个bug,现在不知道修复了没有。
补充:高校的系统实在是宝藏,只要有心,处处可以发现奇妙的bug
再补充一个:
数据安全bug:
2021年参加了某个比赛,需要通过第三方网页提交代码和说明文档,由于本人不愿意开源,因此再三和比赛方确认是否能保证提交材料的安全性,比赛方回答一定会保证。在我的材料提交后,还是心里不踏实(因为当时参赛用的方法还没投稿),所以从各种角度测试,结果发现只需要在浏览器地址栏修改编号(每个选手都有一个编号)就可以直接访问别的参赛选手提交的材料。我很气愤,就找到比赛方,结果他们仅仅表示抱歉和修复bug(还是我报告的bug复现方法),并不愿意去查询后台的日志,看看是否有造成泄露。我怕除了修改地址的方法外,有别的方法可以访问他人材料,在比赛结束,就尽快删除了我线上的材料。
ps:该第三方平台不仅承担这一项比赛,还有许多别的比赛也在这个平台上提交材料,我当时同样可以访问到。不知道由于平台安全性问题导致的资料泄露及造成的损失由谁来承担?假设我的源码被窃取并被提前发表论文,这种情况怎么算?(虽然比赛奖金真香……)
不知道算不算BUG,17年12月的时候上支付宝买回家的车票突然发现车票价格-99%。当时还以为是显示错误或者是有什么活动想着反正也才一块钱就买一张看看。结果显示购票成功,买成功的当时都懵了一下。
这是当时车票的订单记录。回家的车票平常是95块,这3.95是收了三块钱的手续费的。
于是乎,当天怕睡过头赶不上车的我买了四张不同时段的车票以作备用。
最终成功出票两张,退款两张,在车上跟司机说起来的时候司机都惊呆了。不知道这是不是支付宝方面的问题,反正就是感觉很神奇。 @支付宝
最后附上回家车票原本的价格以免有人不信。
补充一下并不是只有回家的车票是这个价格,当时我自己查到无论去哪个车站的价格都是-99%的。如果有知道怎么会这样的大佬麻烦在评论区说一下。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有