请选择 进入手机版 | 继续访问电脑版
搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

程序员写了一个新手都写不出的低级bug,被骂惨了。

[复制链接]
查看: 7|回复: 0

2万

主题

3万

帖子

8万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
81333
发表于 2020-1-14 14:05 | 显示全部楼层 |阅读模式
  你晓得的越多,你不晓得的越多
  点赞再看,养成风尚
  本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂口试颔领袖导图,也整理了很多我的文档,接待Star和美满,大家口试可以参照考点温习,渴望我们一路有点工具。
前前言

程序员写了一个新手都写不出的低级bug,被骂惨了。  游戏 006tNbRwly1gava1ljcsfg306y06pu0x
为啥本日有个前前言呢?
由于你们的丙丙啊,昨天有牌面了哟,间接被微信官方举荐,知乎举荐,也就仅仅是还行吧(心里乐开花)。
也有好几个号主发来问候,间接实名倾慕哈哈,丙丙今后也是被微信举荐过的男人了,你们也是有牌面的读者了。
程序员写了一个新手都写不出的低级bug,被骂惨了。  游戏 006tNbRwly1gavanyxgcij30bk0g8wgo
前言

你们能否是以为丙丙这么忙了,必定不会写技术文章给你们看了?
丙丙暖男来的,不外说真话年前估量是没啥时候写技术文章了,上周末两篇你们也看到了,不是年会就是领袖峰会,实在很忙。
这周也是一样,我们年末了项目也赶,我本日一列下个Q的筹划,我的个乖乖,均匀三天一个需求,什么鬼啊。
而且周四又有技术部的年会,我还是视频的导演(打杂仔哈哈),必定必要确认很多细节,到时候我应当还可以周末水一篇给你们看(剧透下那一期会有我女神入镜)。
下周周二我就座车回家了,打工仔回家过年了,我也叫我妈把我要回家的消息放进来了,估量媒妁这会已经在路上了,到时候相亲我又可以水文章了,过年素材也很多几多呀,高兴。
这一篇垂危说一下我之前的一个很愚蠢的bug,本来只筹划让他呆我笔记里面的,可是还是禁不住想要分享出来,让大家禁止这类低级毛病(实在我想水一篇几多有点技术内容的文章,省得写N篇尽是水一样平常的文章,你们估量又要Diss我了)。
正文

我先描摹一下bug的现象哈:
程序员写了一个新手都写不出的低级bug,被骂惨了。  游戏 006tNbRwly1gavanggl9gj30zm08udhz
这两个输入框的值都是我从KV(Redis之类的存储中心件)里面获得到的,也是可以实时点窜的,我自作聪明,想着KV里面假如没值,就默许取一个静态变量,这样有个兜底,在类加载的时候加载静态变量,我取的时候也服从高了。
这就也为我背面的Bug埋下了伏笔,题目是这个Bug烦就烦在他在预发情况是好的,线上却是坏的。
先看看代码怎样写的:
程序员写了一个新手都写不出的低级bug,被骂惨了。  游戏 006tNbRwly1gav7zqzwm6j30w80u0e81
可以看到代码里面,我是在静态代码块去KV取值,倘使有值就用KV的做初始值,没取到我也有默许值,我那时还在想自己的构想真奇妙,用KV比DB服从高,用常量去做兜底,不至于没设备的情况没有值,报空指针啥的。
那时一个劲给自己加油打气,一个劲的妙啊,不晓得自己写了多蠢的代码。
这样写看似没什么题目,可是我这个值是可以点窜的这就有题目了,而且我有几个地方还是取的变量,不是不停取的KV。
而且常量被我当变量用,也都违反了这玩意的初衷了。
我上线后,三歪就说:敖丙出大题目了,为啥我革新一下值就差池了,再革新值就归来了。
我发急万分,深知我写了BUG,我不着痕迹的擦去我鬓脚的汗水,深呼吸了一下。
回答道:我代码还没写好呢,你怎样乱点,我告诉过你不要乱点的,现在你点坏了吧。
三歪似乎真的以为他错了,委曲巴巴的啥也没说就冷静离开了。
程序员写了一个新手都写不出的低级bug,被骂惨了。  游戏 006tNbRwly1gavaqk3poej307k07eaa0
这个时候我立即翻开电脑,也顾不上歪歪的感受了,思绪转的缓慢,起头在闹海中构建全部值传递的链路。
我改了页面的值,以后我也改了这个静态变量和KV的值,可是我在线上发现我革新页面一会是点窜以后的,一会是点窜之前的值.
这就希奇了呀,垂危是在预发回不能复现,这就很坑爹了,难熬呀歪歪。
Tip:预发指的是,代码跟线上一样,数据库一样,情况设备纷歧样。
我把代码看了一遍又一遍,还是没发现题目。
在当天那个饱暖思淫欲的下战书饭以后我,忽然灵光一闪发现了题目标焦点,预发是好的由于他是一台呆板。
而我们线上的呆板是负载平衡的,有两台呆板,我点窜一次只改了一台呆板的值,此外一台没点窜到。
那末题目就简单了,我们看下图:
程序员写了一个新手都写不出的低级bug,被骂惨了。  游戏 006tNbRwly1gav8votv8nj30e40b4q38
预发情况,是单机,不管我怎样读怎样点窜,每次数据都是正确的(这里我还没意想到实在每次去取变量是差池的)。
可是线上纷歧样,办事器启动的时候给每台呆板赋值了,这样的情况假如只是读是没题目标(怪不得静态常量都是private的,能点窜的话底子上都有这个题目)。
可是假如点窜,你点窜的请求只是打到了一台呆板上,假以下次负载平衡请求到了这个呆板,那末你很侥幸,成果是对的,可是常常负载平衡算法就是那末公允,雨露均沾这样的情况 1/2的请求,城市拿到毛病的成果。
而且这个地方的题目另有一个就是,应当是点窜KV以后,点窜变量,我有的地方取的是变量,由于我想每次归正都改了,取也没事。
实在切确的做法是我每次去都读KV就行了,只要KV为空的时候才去读静态变量,作为一种兜底计划,不应当去改变常量的值。
而且大家要晓得,我点窜KV乐成万一点窜常量的时候出错了呢?你取常量的值就差池了。
所以查询,点窜应当这样做:
程序员写了一个新手都写不出的低级bug,被骂惨了。  游戏 006tNbRwly1gav93fi8bbj30i60b2t9f
垂危是想提醒大家,谨慎操纵静态常量,能稳定就稳定,不要写这么骚的操纵了,我这算少的很多 40、50台线上呆板的办事,这类题目是真的难发现。
我是万万没想到,我居然写出这类代码,下次再写出来,只能让歪歪不要乱点了,省得又点坏了哈哈。
点关注,不迷路

好了列位,以上就是这篇文章的全数内容了,我是敖丙,励志做一位让大家都记得住的博主,能看到这里的人呀,都是人材
我背面会每周都更新几篇一线互联网大厂口试和常用技术栈关连的文章,很是感激人材们能看到这里,假如这个文章写得还不错,以为「敖丙」我有点工具的话   求点赞 求关注  求分享  对暖男我来说真的 很是有用!!!
白嫖欠好,创作不易,列位的支持和认可,就是我创作的最大动力,我们下篇文章见!
敖丙 | 文  【原创】
假如本篇博客有任何毛病,请批评指教,不胜感激 !
  文章每周持续更新,可以微信搜索「 三太子敖丙 」第一时候阅读和催更(比博客早一到两篇哟),本文 GitHub https://github.com/JavaFamily 已经收录,有一线大厂口试颔领袖导图,也整理了很多我的文档,接待Star和美满,大家口试可以参照考点温习,渴望我们一路有点工具。
程序员写了一个新手都写不出的低级bug,被骂惨了。  游戏 006tNbRwly1ga01b4beuyj30m80rkgs8

免责声明:假如加害了您的权益,请联系站长,我们会实时删除侵权内容,感谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 妈妈网-中国妈妈第一,是怀孕、育儿、健康等知识交流传播首选平台 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表