返回頂部
關(guān)閉軟件導(dǎo)航
位置:首頁(yè) > 資訊 > 電商資訊>阿里程序員寫了一個(gè)新手都寫不出的低級(jí)bug被罵慘了
阿里程序員寫了一個(gè)新手都寫不出的低級(jí)bug被罵慘了

這兩個(gè)輸入框的值都是我從KV(Redis之類的存儲(chǔ)中間件)里面獲取到的,也是可以實(shí)時(shí)修改的,我自作聰明,想著KV里面假如沒(méi)值,就默認(rèn)取一個(gè)靜態(tài)變量,這樣有個(gè)兜底,在類加載的時(shí)候加載靜態(tài)變量,我取的時(shí)候也效率高了。

這就也為我后面的Bug埋下了伏筆,問(wèn)題是這個(gè)Bug煩就煩在他在預(yù)發(fā)環(huán)境是好的,線上卻是壞的。

先看看代碼怎么寫的:

可以看到代碼里面,我是在靜態(tài)代碼塊去KV取值,假如有值就用KV的做初始值,沒(méi)取到我也有默認(rèn)值,我當(dāng)時(shí)還在想自己的構(gòu)思真巧妙,用KV比DB效率高,用常量去做兜底,不至于沒(méi)配置的情況沒(méi)有值,報(bào)空指針啥的。

當(dāng)時(shí)一個(gè)勁給自己加油打氣,一個(gè)勁的妙啊,不知道自己寫了多蠢的代碼。

這樣寫看似沒(méi)什么問(wèn)題,但是我這個(gè)值是可以修改的這就有問(wèn)題了,而且我有幾個(gè)地方還是取的變量,不是一直取的KV。

而且常量被我當(dāng)變量用,也都違反了這玩意的初衷了。

阿里程序員寫了一個(gè)新手都寫不出的低級(jí)bug被罵慘了1

我上線后,三歪就說(shuō):敖丙出大問(wèn)題了,為啥我刷新一下值就不對(duì)了,再刷新值就回來(lái)了。

我驚恐萬(wàn)分,深知我寫了BUG,我不著痕跡的擦去我鬢角的汗水,深呼吸了一下。

回答道:我代碼還沒(méi)寫好呢,你怎么亂點(diǎn),我告訴過(guò)你不要亂點(diǎn)的,現(xiàn)在你點(diǎn)壞了吧。

三歪似乎真的以為他錯(cuò)了,委屈巴巴的啥也沒(méi)說(shuō)就默默離開了。

這個(gè)時(shí)候我馬上打開電腦,也顧不上歪歪的感受了,思緒轉(zhuǎn)的飛快,開始在鬧海中構(gòu)建整個(gè)值傳遞的鏈路。

阿里程序員寫了一個(gè)新手都寫不出的低級(jí)bug被罵慘了2

我改了頁(yè)面的值,之后我也改了這個(gè)靜態(tài)變量和KV的值,但是我在線上發(fā)現(xiàn)我刷新頁(yè)面一會(huì)是修改之后的,一會(huì)是修改之前的值.

這就希罕了呀,主要是在預(yù)發(fā)還不能復(fù)現(xiàn),這就很坑爹了,難受呀歪歪。

Tip:預(yù)發(fā)指的是,代碼跟線上一樣,數(shù)據(jù)庫(kù)一樣,環(huán)境配置不一樣。

我把代碼看了一遍又一遍,還是沒(méi)發(fā)現(xiàn)問(wèn)題。

在當(dāng)天那個(gè)飽暖思淫欲的下午飯之后我,忽然靈光一閃發(fā)現(xiàn)了問(wèn)題的核心,預(yù)發(fā)是好的因?yàn)樗且慌_(tái)機(jī)器。

而我們線上的機(jī)器是負(fù)載均衡的,有兩臺(tái)機(jī)器,我修改一次只改了一臺(tái)機(jī)器的值,另外一臺(tái)沒(méi)修改到。

那么問(wèn)題就簡(jiǎn)單了,我們看下圖:

預(yù)發(fā)情況,是單機(jī),不管我怎么讀怎么修改,每次數(shù)據(jù)都是正確的(這里我還沒(méi)意識(shí)到其實(shí)每次去取變量是不對(duì)的)。

但是線上不一樣,服務(wù)器啟動(dòng)的時(shí)候給每臺(tái)機(jī)器賦值了,這樣的情況假如只是讀是沒(méi)問(wèn)題的(怪不得靜態(tài)常量都是private的,能修改的話基本上都有這個(gè)問(wèn)題)。

但是假如修改,你修改的請(qǐng)求只是打到了一臺(tái)機(jī)器上,假如下次負(fù)載均衡請(qǐng)求到了這個(gè)機(jī)器,那么你很幸運(yùn),結(jié)果是對(duì)的,但是往往負(fù)載均衡算法就是那么公平,雨露均沾這樣的情況1/2的請(qǐng)求,都會(huì)拿到錯(cuò)誤的結(jié)果。

而且這個(gè)地方的問(wèn)題還有一個(gè)就是,應(yīng)該是修改KV之后,修改變量,我有的地方取的是變量,因?yàn)槲蚁朊看畏凑几牧耍∫矝](méi)事。

阿里程序員寫了一個(gè)新手都寫不出的低級(jí)bug被罵慘了3

其實(shí)正確的做法是我每次去都讀KV就好了,只有KV為空的時(shí)候才去讀靜態(tài)變量,作為一種兜底方案,不應(yīng)該去改變常量的值。

而且大家要知道,我修改KV成功萬(wàn)一修改常量的時(shí)候出錯(cuò)了呢?你取常量的值就不對(duì)了。

所以查詢,修改應(yīng)該這樣做:

主要是想提醒大家,謹(jǐn)慎操作靜態(tài)常量,能不變就不變,不要寫這么騷的操作了,我這算少的很多40、50臺(tái)線上機(jī)器的服務(wù),這種問(wèn)題是真的難發(fā)現(xiàn)。

我是萬(wàn)萬(wàn)沒(méi)想到,我居然寫出這種代碼,下次再寫出來(lái),只能讓歪歪不要亂點(diǎn)了,免得又點(diǎn)壞了哈哈。

如果您覺得 阿里程序員寫了一個(gè)新手都寫不出的低級(jí)bug被罵慘了 這篇文章對(duì)您有用,請(qǐng)分享給您的好友,謝謝
文章地址:http://www.meyanliao.com/article/online/10299.html
解放雙手無(wú)盡可能,有問(wèn)題添加天線貓微信
主站蜘蛛池模板: 97久久精品亚洲中文字幕无码| 无码天堂亚洲国产AV| 国产爆乳无码一区二区麻豆| 亚洲av无码成人黄网站在线观看| 无码人妻精品一区二区蜜桃AV| 亚洲AV无码一区二区三区DV| 亚洲日韩av无码中文| 国产精品无码a∨精品| 免费无码又爽又刺激高潮 | 国产无遮挡无码视频免费软件| 无码人妻丰满熟妇区96| 亚洲一区爱区精品无码| 蜜臀AV无码精品人妻色欲| 亚洲国产成AV人天堂无码| 亚洲永久无码3D动漫一区| 亚洲av无码成人精品区在线播放 | 国语成本人片免费av无码| 一本一道AV无码中文字幕| 免费人妻av无码专区| 最新中文字幕av无码专区| 久久久久亚洲Av无码专| 亚洲AV无码码潮喷在线观看| 免费无码H肉动漫在线观看麻豆| 国产成人无码AV在线播放无广告| 精品国精品无码自拍自在线| 亚洲第一极品精品无码久久 | 亚洲成a人片在线观看无码| 一区二区三区无码高清| 乱人伦人妻中文字幕无码久久网 | 中文字幕韩国三级理论无码| 精品无码国产污污污免费网站| 人妻AV中出无码内射| 亚洲中文字幕无码不卡电影| 国产成人精品一区二区三区无码| 国产成人无码专区| 亚洲AV无码成人精品区在线观看| 亚洲va中文字幕无码久久 | 亚洲av无码不卡私人影院| 国产无码一区二区在线| 久久亚洲av无码精品浪潮| 亚洲一区二区三区无码中文字幕|