首頁 都市

神豪從做慈善開始

第八十五章公證下來

  “也好。我把另一個(gè)BUG給留言一下。”

  蕭天看著張雪的模樣,食指大動(dòng),眼神也是渙散,不過先把手上的事情解決一下。

  畢竟意外的發(fā)現(xiàn)了另外一個(gè)BUG,蕭天可不會(huì)錯(cuò)過這樣的機(jī)會(huì)啊,不說其他什么,最起碼懸賞再加錢肯定應(yīng)該是毫無問題的。

  天天:維護(hù)輔助庫中發(fā)現(xiàn)了另外一個(gè)BUG,應(yīng)該是一個(gè)積年老BUG,代碼片段發(fā)送給你們了。

  發(fā)完這句話,蕭天才是用大拇指按了按自己的太陽穴,然后笑了笑看著張雪,“這么晚了……你說我們是不是……”

  “嗯哼,你想做什么?”張雪微笑著。

  “你說呢?”

  做了以后,蕭天心情極好,自然是繼續(xù)的想著剛剛的代碼,他現(xiàn)在在剛剛舒服的過程中好像有了一點(diǎn)思路,但是得實(shí)踐才知道。

  而通過反復(fù)對(duì)比正常執(zhí)行過程和出錯(cuò)誤的執(zhí)行過程,蕭天發(fā)現(xiàn)出錯(cuò)時(shí),程序多了一條report!

  要知道網(wǎng)元返回的信息包括命令返回、alert、report。alert出現(xiàn)就得記錄并報(bào)錯(cuò)(除非本就預(yù)期有這么一條alert),而report一般可以無視,記錄然后丟棄就是。

  所以沒人注意這一點(diǎn)。

  而且蕭天也知道,測(cè)試時(shí)網(wǎng)元負(fù)荷極低,而且先做過初始化。

  因此每次執(zhí)行應(yīng)該都差不多,這里多個(gè)report,很可能就隱含著什么……

  所以蕭天也是開始仔細(xì)觀察程序和網(wǎng)元的交互記錄,發(fā)現(xiàn)那里的命令返回似乎有些不對(duì)。

  命令返回有幾百行,其中一列是時(shí)間,正常來說,時(shí)間應(yīng)該是2019-10-31 18:21:22、2019-10-31 18:21:22、2019-10-31 18:21:23、2019-10-31 18:21:24……這樣子一路排下來。

  但那段數(shù)據(jù),它的時(shí)間卻是2019-10-31 18:21:22、2019-10-31 18:21:23、2019-10-31 18:21:21、2019-10-31 18:21:22、2019-10-31 18:21:23……

  也就是在秒這個(gè)級(jí)別存在亂序,更具體點(diǎn)實(shí)際上是在毫秒級(jí)別存在亂序/跳躍,即時(shí)間格式為2019-10-31 18:21:22.456 2019-10-31 18:21:22.567這樣,其中某些行組之間存在2、300毫秒的跳躍。

  蕭天按時(shí)間連續(xù)性把數(shù)據(jù)分割,發(fā)現(xiàn)它的輸出是每幾條到十幾條為一組,組內(nèi)順序正常,組間亂序/跳躍;但把這些組挑選、拼接,可以得到兩組數(shù)據(jù),組內(nèi)時(shí)間順序良好、間隔均勻。

  這說明,這些數(shù)據(jù)可能是兩個(gè)命令的返回,不知怎么混到了一起。

  就是因?yàn)檫@種混淆使得命令輸出格式錯(cuò)亂,這才使得程序把命令返回識(shí)別成了report。

  于是蕭天又看了一下對(duì)方的測(cè)試筆記,果然,他們測(cè)線路備份切換之類功能,所以需要同時(shí)控制兩個(gè)網(wǎng)元;命令在程序中是順序下發(fā)的,間隔可能只有若干毫秒。

  看到這里,蕭天終于是心里有了底,開始觀察程序所在目錄,果然在里面找到個(gè)dat文件;用十六進(jìn)制編輯器打開,里面果然是網(wǎng)上傳來的原始報(bào)文信息,二進(jìn)制格式。

  報(bào)文格式是網(wǎng)元編號(hào):信息。

  再檢查相關(guān)代碼,很顯然,這是因?yàn)榫W(wǎng)元編號(hào)被底層通訊模塊丟棄了,只把文本信息返回給了上層;這就使得上層無法區(qū)分信息來自哪個(gè)網(wǎng)元。

  平常這樣做還沒有問題;但遇到同時(shí)連接多個(gè)網(wǎng)元且需要同時(shí)檢查多個(gè)網(wǎng)元返回、且返回信息還比較多時(shí),數(shù)據(jù)就亂了。

  這個(gè)東西太基礎(chǔ)。

  因?yàn)樗蜕蠈雨P(guān)系太過緊密,修改它影響太大;而且底層通訊模塊的源碼已經(jīng)丟失……

  于是,蕭天又嘗試用字符串分析的辦法來恢復(fù)它,鑒于不同命令返回格式不同、數(shù)據(jù)各異,蕭天也是用程序嘗試識(shí)別每個(gè)字段的數(shù)據(jù)類型,然后再檢測(cè)它是否為有序內(nèi)容。

  蕭天把這類列叫“索引列”,索引列有三種,一種是1、2、3這樣的數(shù)字編號(hào),另一種是網(wǎng)元編號(hào)這樣一整個(gè)都是某個(gè)固定數(shù)字/字符的,還有就是年月日時(shí)分秒這樣的時(shí)間信息;它們可能同時(shí)全部出現(xiàn),但也可能只出現(xiàn)其中一種,甚至全都沒有。

  當(dāng)識(shí)別出索引列之后,蕭天就把順序不亂、時(shí)間不跳變的若干行視為一個(gè)整體;然后像分析單詞的“編輯距離”一樣,尋找一種使得數(shù)據(jù)整體上“編輯距離”調(diào)整最小的方案,把混淆的數(shù)據(jù)分隔開。

  因?yàn)橐唤M數(shù)據(jù)可能有多個(gè)索引列,按照不同索引列拆分的方案還可能不一樣。

  因此蕭天也是不得不遍歷各種拆分方案,尋找綜合最優(yōu)的那種方案……

  這是個(gè)挺復(fù)雜的程序。

  實(shí)際上它超出了TCL的能力范圍——它的確能工作,而且沒有出錯(cuò)時(shí)消耗很??;但一旦出錯(cuò),它需要一分多鐘才能恢復(fù)。

  總之,蕭天還是把這個(gè)程序?qū)懗鰜砹?,而且的確能自動(dòng)識(shí)別并糾正這種問題;但性能消耗太嚴(yán)重,不是可用于生產(chǎn)的正常解決方案。

  想到這里,蕭天還是決定幫他們重寫底層通訊模塊,修改通訊約定。

  雖然這的確會(huì)引起底層代碼的大量更改,但畢竟范圍還算可控,而且不需要付出恐怖的性能代價(jià)。

  就以上種種這一次是真的占用了蕭天挺長時(shí)間。

  因?yàn)榘l(fā)布懸賞的這個(gè)小公司也是意識(shí)到了天天是個(gè)大神級(jí)別的人物,所以原本他們的懸賞價(jià)格只是兩萬,后來發(fā)現(xiàn)了那個(gè)積年老BUG又提升到了三萬,到現(xiàn)在懸賞價(jià)格已經(jīng)提升到了八萬,就是想讓蕭天也一起尋找BUG根新底層模塊的需求分析和代碼編寫。

  看在懸賞這么高的份上,蕭天也是其中幫他們?cè)O(shè)計(jì)了一下新通訊模塊。

  也因此,就因?yàn)檫@個(gè)懸賞,直接干了蕭天整整三天,好在懸賞已經(jīng)結(jié)算了,不然的話蕭天都覺得是不是太累了點(diǎn),當(dāng)然還有一些方向上的代碼編寫,下路為了職業(yè)道德還是需要給他們寫一點(diǎn)的。

  當(dāng)然這三天的代碼也不是全部用來攻破,還是于老爺子他們?nèi)チ艘惶?,公證已經(jīng)辦好了。

  明天,就可以去銀行里面查看熙熙父母的存款到底有多少了!

按 “鍵盤左鍵←” 返回上一章  按 “鍵盤右鍵→” 進(jìn)入下一章  按 “空格鍵” 向下滾動(dòng)
目錄
目錄
設(shè)置
設(shè)置
書架
加入書架
書頁
返回書頁
指南