-------------程序員
寫在前面的話:石頭哥,在IT行業混了若干年,對IT行業的相關領域有必定的經驗;同時在職場多年,對於IT相關各大職業類型(產品,運營,研發,測試,銷售,技術支持,策劃等等)的發展有一些本身的見解;目前正在苦苦尋求將我的興趣和我的價值匹配起來的方法,若是你有相似的問題,但願可以經過關注「大話iT公司」來保持聯繫,你的留言我會盡可能回覆。微信
-------------網絡
之前你們可能都不知道公衆平臺的讚揚還有這個限制,不過經過此次微信平臺的bug,你們如今應該都知道了吧!OK,咱們先來梳理下讚揚單日不可以超過5萬的功能吧!大概邏輯應該就是這樣的:架構
1,讚揚金額天天零點清零;函數
2,觸發當前讚揚金額與五萬的對比;性能
3,針對資金超過五萬的判斷,若是超過就不容許讚揚了;測試
看起來是很簡單的邏輯對啊?字體
那麼這個「很簡單」的邏輯怎麼會致使這麼基本而且很嚴重的bug呢?(由於此次讚揚功能超過了5W的限制,致使給公衆號「羅爾」讚揚的金額超過了200W,這個bug應該算是很嚴重了吧!)spa
爲 什 麼?.net
爲 什 麼?
爲 什 麼?
這個時候要發揮咱們的想象能力了...
來來來,先讓咱們一塊兒腦補一下寫這段代碼的開發當時的心路歷程吧!
強調:下面場景純屬虛構,本人不承擔任何後果,若有雷同,說明我智商高)
領導: 小明,爲了一些不可描述的需求,今天將單日的讚揚限制爲五萬吧!這個功能應該很簡單,上午就修改好了代碼上庫吧!
小明:老大,這麼簡單的功能直接找個實習生(臨時工)就能夠搞定了,爲嘛還找我這樣的精英?切
老大:你不就是臨時工?趕忙幹活。
小明:....
小明:好吧,那就分兩部分!一個是天天零點定時將讚揚金額清零。另一個就是在每次讚揚前判斷下當前金額,若是超過五萬就提示,而且退出讚揚功能就能夠了。金額清零部分很簡單,調用公共庫函數再執行清理動做就能夠了。
第二部分先定義一個50000的int變量,而後在讚揚前先將當前讚揚金額讀取出來跟這個值比較下,若是大於等於這個值就提示並退出。不然繼續走下面的讚揚邏輯。
代碼寫完,自測ok,上庫吧。誒,好像有點問題,這樣每次讚揚都檢查的話會不會性能過低了,要不每分鐘檢查一次吧,這樣性能就會好不少了。並且影響基本上能夠忽略不計,極端狀況就是讚揚超過5W後,還容許多讚揚一分鐘,可是效率就提升不少了。我太他媽的機智了,不讓我當架構師真是部門的損失啊。
代碼自測OK,上庫,忙活了半天喝杯茶,看下新聞準備吃午餐了。
嗯,看起來毫無破綻,可是bug就這樣出來了,咱們先來看看微信平臺的迴應。原文以下:
微信稱,11月29日起,《羅一笑,你給我站住》一文閱讀量快速上漲,並致使讚揚資金猛增,達到5萬的上限,讚揚功能暫停。11月30日凌晨零點,讚揚功能自動從新開啓,在短期內,大量用戶給公衆號「羅爾」進行讚揚,由此觸發系統bug,致使單日5萬限制失效。大體時間節點以下:00:00-00:01讚揚已超過5萬;00:00-00:30讚揚達到100萬;00:00-01:20讚揚超過200萬。11月30日00:51,平臺發現異常並開始攔截。完成攔截後累計超出限額的讚揚資金已經達到200餘萬元。因爲實際讚揚金額遠遠超過設定的5萬上限,經慎重考慮,平臺對超額部分進行了暫時凍結。
看到紅色字體了嗎?這個是重點,圈起來。
一分鐘內讚揚就超過了五萬,嗯,其實應該是超過了65535元。到這裏,你們應該看出緣由來了吧。
由於定義的int型,結果致使越界了,越界了,越界了。(數字超過65535後,變成了負數,好比:若是讚揚金額爲65536,這裏的值就是-1)。從而致使判斷大於5萬的條件不生效,天然讚揚上限爲50000這個功能也失效了。
是否是感到很震精?很震精,震精,精....(沒有錯,就是這樣的)
其實石頭哥很早就預測到微信平臺會有這個bug了,不信看石頭哥的微信號就知道了(知道你不會看的,石頭哥的微信ID爲it65535,哈哈哈)。
是否是感受分析到頗有道理?嗯,扯淡完畢。
這個bug的真實緣由究竟是什麼呢?石頭哥正在找相關內部人士確認,有消息了第一時間告訴你們。同時歡迎你們一塊兒分析和猜想,對於分析正確或者比我分析更合理的話,獎勵一個大大的紅包(重複的只算第一個提出來的)
,敢來挑戰下嗎?
不知道寫這段代碼的程序員如今是怎樣的心情?
固然,這件事情也告訴你們,可能大家公司缺乏一個像我這樣既懂產品,又會寫代碼,同時精通測試的運營人員。
(圖片來自網絡,若有侵權,請聯繫刪除)
推薦閱讀(更多優質文章歡迎關注後閱讀,好比:回覆1-10)
本文分享自微信公衆號 - 軟件測試經驗與教訓(udatest)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。