返回頂部
關(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://m.meyanliao.com/article/online/10299.html
解放雙手無(wú)盡可能,有問(wèn)題添加天線貓微信
主站蜘蛛池模板: 久久亚洲精品无码网站| 极品粉嫩嫩模大尺度无码视频 | 无码专区一va亚洲v专区在线| 乱人伦中文无码视频在线观看| 99久久无码一区人妻a黑| HEYZO无码综合国产精品227| 麻豆aⅴ精品无码一区二区| 亚洲AV无码成人精品区大在线| 免费看又黄又无码的网站| 国产丰满乱子伦无码专区| 亚洲youwu永久无码精品| 亚洲AV无码国产在丝袜线观看| 色视频综合无码一区二区三区| 无码精品久久久天天影视| 亚洲免费日韩无码系列| 国产精品无码aⅴ嫩草| 无码任你躁久久久久久老妇App| 亚洲精品高清无码视频| 亚洲AV无码一区二区三区国产 | 国产在线精品无码二区二区| 日韩午夜福利无码专区a| 亚洲一区无码中文字幕| 国产av无码专区亚洲国产精品| 久久精品无码一区二区三区不卡| 亚洲成av人片不卡无码| 久久久久无码精品国产不卡 | 日韩乱码人妻无码中文视频 | 亚洲AV永久无码精品一区二区国产 | 成人无码精品1区2区3区免费看 | 亚洲日韩av无码| 亚洲中文字幕无码久久综合网| 中文无码vs无码人妻| 日韩精品无码免费专区午夜 | 亚洲av中文无码乱人伦在线r▽| av无码a在线观看| 中文字幕丰满乱孑伦无码专区| yy111111电影院少妇影院无码| 久久av高潮av无码av喷吹| 日日日日做夜夜夜夜无码| 中文字幕人妻无码专区| 日韩精品少妇无码受不了|