日本乱妇乱子视频网站_国产成人精品日本亚洲专区6_中字无码av电影在线观看网站_想看一级黄色片_亚洲乱亚洲乱妇67194老熟妇_免费看欧美一级特黄a大片一_国产视频第一页_国产又黄又刺激又爽视频黄_国产91精品看黄网站在线观看_免费看黄无码网站,AV网站免费线看精品,娇妻在办公室被C到娇喘,国产18禁黄网站禁片免费观看

首頁(yè) 都市

神豪從做慈善開(kāi)始

第八十七章真想見(jiàn)識(shí)見(jiàn)識(shí)天天這樣的大神是什么樣的…

  因?yàn)槟壳盎旧弦呀?jīng)解決了于老爺子的和熙熙的問(wèn)題,所以蕭天也是繼續(xù)去編寫(xiě)代碼去了。

  畢竟之前那個(gè)任務(wù)是完成了,,但是畢竟人家價(jià)格提升上來(lái)了,新通訊模塊還沒(méi)有黑人家重新編寫(xiě)一個(gè),。

  而之前那解決問(wèn)題的三天時(shí)間里面,蕭天也是在解決上面這個(gè)BUG的嘗試中,才發(fā)覺(jué)TCL這種語(yǔ)言先天不足。

  因?yàn)橐坏┏绦蜻壿嫃?fù)雜,,它那變量無(wú)需聲明、變量無(wú)類型等等對(duì)初學(xué)者來(lái)說(shuō)不可多得的“優(yōu)點(diǎn)”就成了致命缺陷,。

  這會(huì)讓人不得不付出比C/C++之類“正規(guī)語(yǔ)言”多得多的努力去跟蹤去區(qū)分?jǐn)?shù)據(jù)類型。

  而且為了避免錯(cuò)誤,,蕭天也不得不把數(shù)據(jù)類型也“打包”進(jìn)數(shù)據(jù),,然后在程序入口寫(xiě)代碼分辨它——尤其是,這些數(shù)據(jù)類型還是動(dòng)態(tài)的,,是從輸入數(shù)據(jù)識(shí)別出來(lái)的,;不結(jié)合輸入誰(shuí)都不知道某個(gè)數(shù)據(jù)在某個(gè)時(shí)刻會(huì)是什么。

  這使得代碼幾乎無(wú)法靜態(tài)分析,;而測(cè)試用例很難覆蓋每一條執(zhí)行路線——不要忘了,,這個(gè)程序“吃”進(jìn)去的數(shù)據(jù)是多變的,幾乎不可能列出所有情況,。

  這使得蕭天又產(chǎn)生了一個(gè)想法,。

  那就是,要給它增加一些功能,,把專業(yè)語(yǔ)言的core dump,、變量先聲明后使用等等功能搞出來(lái),使得出現(xiàn)類似高危行為時(shí)可以得到提醒甚至直接對(duì)相關(guān)不良行為報(bào)錯(cuò),。

  當(dāng)然,,蕭天沒(méi)有這么自覺(jué)的,只是蕭天跟他們說(shuō)了,,他們立刻就又私發(fā)了一個(gè)六萬(wàn)的懸賞讓蕭天幫忙,!

  原本蕭天是不愿意的,因?yàn)槟侨煲呀?jīng)夠累的了,晚上都熬到凌晨三四點(diǎn),,每天就睡三四個(gè)小時(shí),,這讓蕭天深刻的明白為什么程序員容易頭禿了。

  雖然蕭天不愿意,,但是奈何對(duì)面又把這個(gè)六萬(wàn)的金額又加了四萬(wàn)……

  嗯,,蕭天覺(jué)得這個(gè)功能也不是那么難,熬夜那就熬夜唄……

  所以蕭天也是立刻就進(jìn)入狀態(tài)了,,TCL號(hào)稱一切都是字符串,,這甚至可以把系統(tǒng)庫(kù)函數(shù)/運(yùn)算符/關(guān)鍵字都給rename掉,然后自己寫(xiě)一個(gè)替代品,。

  這給了它的用戶極大的自由度,。

  比如iTCL就是用命名空間模擬的面向?qū)ο笳Z(yǔ)法——這種語(yǔ)言仍然是面向過(guò)程的;但你可以自己定義一個(gè)class關(guān)鍵字(實(shí)質(zhì)上是一個(gè)過(guò)程),,把它變得和一個(gè)真正的面向?qū)ο笳Z(yǔ)言幾乎一模一樣,。

  蕭天首先盯上的是它的過(guò)程/函數(shù)聲明關(guān)鍵字proc。

  在這種語(yǔ)言里,,你聲明一個(gè)函數(shù)fun,,格式就是

  proc fun(arg){

  #body

  }

  它看似一個(gè)關(guān)鍵字;但TCL里一切都是字符串,,因此這個(gè)proc實(shí)質(zhì)上是個(gè)函數(shù),,它接受函數(shù)名、參數(shù)列表,、函數(shù)體三個(gè)參數(shù)……

  蕭天也是把系統(tǒng)的proc改名叫_sys_proc,,自己寫(xiě)了個(gè)proc;這樣當(dāng)用戶聲明一個(gè)函數(shù)/過(guò)程時(shí),,他的聲明將以字符串格式先傳給他,。

  這樣子的話蕭天就可以做一些修改,把一些邏輯插進(jìn)用戶編寫(xiě)的代碼中,,然后再把修改后的代碼傳給_sys_proc,。

  通過(guò)這種方式,蕭天就接管了TCL的一切,;然后修改了它的異常/返回流程,,識(shí)別出“用戶未捕捉的異常”,。

  畢竟蕭天是記錄了每個(gè)函數(shù)在某次被調(diào)用時(shí),、在調(diào)用鏈上所處的層級(jí)。尤其接近頂層尚未捕獲就會(huì)影響到當(dāng)前測(cè)試用例,、當(dāng)前測(cè)試套甚至引起整個(gè)程序過(guò)早退出,,這些都是要記錄的。

  現(xiàn)在,當(dāng)程序出錯(cuò)時(shí),,如果通過(guò)異常處理程序解決了問(wèn)題,、允許程序繼續(xù)執(zhí)行了,那么蕭天就不做任何動(dòng)作,。

  但如果沒(méi)有處理異常,、使得測(cè)試失敗甚至程序退出,那么蕭天就能在執(zhí)行下一條語(yǔ)句之前把整個(gè)調(diào)用鏈打印出來(lái)——從函數(shù)調(diào)用關(guān)系到每個(gè)函數(shù)的局部變量?jī)?nèi)容,、再到異常傳遞路徑,,巨細(xì)靡遺。

  這個(gè)設(shè)計(jì)相當(dāng)于函數(shù)返回時(shí)會(huì)多執(zhí)行幾條語(yǔ)句,,把局部變量等信息保存在內(nèi)存中,;只要程序不崩潰,那么這些信息就自動(dòng)丟棄,;而一旦程序要崩潰,,它就會(huì)寫(xiě)到磁盤(pán)文件中——蕭天自己搞了個(gè)日志滾動(dòng)機(jī)制,專門(mén)記錄最近十次崩潰信息,,并不會(huì)無(wú)限侵占磁盤(pán)空間,。

  通過(guò)這個(gè)東西,再付出微不可察的時(shí)間代價(jià),,蕭天給所有TCL程序增加了core dump功能,。

  這顯然是個(gè)重大利好。

  這就是為什么他們?yōu)槭裁丛敢饣ㄙM(fèi)十萬(wàn)請(qǐng)蕭天也幫忙做這個(gè)功能,。

  天井市,羽然科技公司,。

  “老大,,我不理解,為什么你要花十萬(wàn)給天天去做這個(gè)功能???我們自己也可以做啊,?”

  問(wèn)話的是一個(gè)戴著眼鏡,,頭發(fā)稀疏的年輕人。

  “小李啊,,那這個(gè)功能是誰(shuí)提出來(lái)的,?”

  “是……天天……但是他只是提出來(lái)一個(gè)概念罷了啊?!?p>  老大叫錢(qián)志海,,是一個(gè)中年人了,他自己開(kāi)了這個(gè)羽然科技公司,員工總共也就只有二三十位,,其中程序組就只有四個(gè)人,,加上他自己兼任總編程,相當(dāng)于是五個(gè)人,,他的頭發(fā)已經(jīng)稀疏的不成樣子了,,不過(guò)有個(gè)假發(fā)戴著,還是和一個(gè)油光滿面的中年人一樣,。

  錢(qián)志??粗±睿簿褪撬某绦蚪M的大將,,擁有著中級(jí)程序員實(shí)力的李明,,語(yǔ)重心長(zhǎng)的說(shuō)道,“你不理解來(lái)問(wèn)我,,沒(méi)有錯(cuò),,那你知道為什么老王老楊不來(lái)問(wèn)我?”

  “因?yàn)樗麄冎?,我們程序員也是有人情世故的,,不是說(shuō)一輩子和計(jì)算機(jī)打交道,就不需要人情世故,,實(shí)際上,,和計(jì)算機(jī)打交道的我們,不在本行業(yè)的人不需要人情世故那是很正常,,但是在本行業(yè)里面,,不知道人情世故,那是真的很可怕的一件事情,,我希望你永遠(yuǎn)不會(huì)明白,。”

  “就簡(jiǎn)單的說(shuō),,你覺(jué)得天天技術(shù)怎么樣,?”

  李明皺了皺眉頭,最后也是嘆了口氣,,“比我強(qiáng)很多,,是個(gè)大神?!?p>  “是啊,,所以你要知道,如果我們向外求一個(gè)應(yīng)用的創(chuàng)意功能,,也大概需要花費(fèi)五六萬(wàn),,那我如果給你們做的話,,你們的確是也能夠做得出來(lái),但是確定有這個(gè)天天本人知道的更清楚嗎,?而且就技術(shù)而言,,你們覺(jué)得做完這個(gè)功能會(huì)沒(méi)有BUG嗎?”

  “如果有BUG,,那你有把握找的出來(lái)嗎,?”

  “我知道你想說(shuō)有把握,但是我們的這個(gè)時(shí)間花費(fèi)在這里,,是不是不太值得,?”錢(qián)志海笑了笑,“而我用十萬(wàn)懸賞交給這個(gè)天天去做,,不但能做的更好一點(diǎn),,以后要是功能出現(xiàn)BUG了,那也不需要我們?nèi)フ?,懂了嗎,?而且你也是看了這個(gè)天天的個(gè)人資料吧,最近才開(kāi)始瘋狂接任務(wù),,我們將這個(gè)給他,,也是相當(dāng)于給了他一個(gè)人情,一個(gè)大神的人情,,你覺(jué)得怎么樣呢,?”

  李明這才有點(diǎn)明白過(guò)來(lái),老大為什么是老大,,那是因?yàn)槔洗笠呀?jīng)不僅僅是技術(shù)人員,,他同時(shí)還是一名合格的老板。

  …………

  另一邊的蕭天自然是不知道,,哪怕知道了,,也覺(jué)得這是對(duì)雙方都有利的,不過(guò)有一點(diǎn)有些人猜錯(cuò)了,,他不是為了錢(qián),而是他熟悉一下能力而已,。

  不過(guò)也不阻礙蕭天想著為什么,,“可能想讓我有售后服務(wù)吧……畢竟我在他們眼里就相當(dāng)于大神一樣的人物?!?p>  接下來(lái)的幾天,,蕭天就繼續(xù)的忙碌著他的功能開(kāi)發(fā)了。

  這個(gè)功能也挺實(shí)用的,,如果你不想使用,,那么不要import DebugTools即可——就是把它做到了debug工具庫(kù)中,,你導(dǎo)入這個(gè)庫(kù),它就立即起作用,;你不導(dǎo)入,,那就不需要付出任何代價(jià)。

  因此,,這個(gè)功能肯定一寫(xiě)出來(lái)就會(huì)受到歡迎的,。

  之后的幾天,蕭天發(fā)現(xiàn)了這個(gè)功能要比想象中的要好編寫(xiě),。

  完成的速度很快,,蕭天覺(jué)得應(yīng)該是牛人程序員經(jīng)驗(yàn)知識(shí)幫他少走了不少路,所以才能夠這么快速大大的縮短了時(shí)間,。

  所以也就在三天后,,蕭天就已經(jīng)完成了這個(gè)功能的編程,當(dāng)然也是離不開(kāi)他的熬夜歷程,。

  所以在提交懸賞之后,,蕭天終于是松了一口氣,他也覺(jué)得新能力不錯(cuò),,是時(shí)候得籌備自己的公司了,。

  而另一邊,天井市,,羽然科技公司,。

  錢(qián)志海就利用這個(gè)功能,便通知相關(guān)項(xiàng)目組,,讓他們?cè)谧约旱捻?xiàng)目開(kāi)頭import DebugTools,。

  剛好有個(gè)測(cè)試任務(wù)。

  所以沒(méi)一會(huì)兒,,他們就排查到了因?yàn)檫@個(gè)功能而意外收獲的另外一個(gè)輔助庫(kù)的BUG,。

  錢(qián)志海等幾人大眼瞪小眼。

  尤其是李明,,用目瞪口呆都不為過(guò),,“這個(gè)功能怎么像個(gè)利器一樣啊,我們沒(méi)有找他,,他都額外的給我們發(fā)現(xiàn)了輔助庫(kù)另外的漏洞,。”

  錢(qián)志海也是心中一動(dòng),,他非常的想把這個(gè)天天給拉到他們的公司來(lái),,這妥妥的都是大公司精英級(jí)別的程序員啊,!

  他們這個(gè)小公司雖然發(fā)展的也還行,,但是也僅僅是還行罷了,,如果能夠讓天天加入他們,錢(qián)志海相信他們的公司絕對(duì)能夠再創(chuàng)一個(gè)新高,!

  但是……

  像天天這樣的大神,,工資肯定是很高的,就比如那些大公司里面的精英程序員,,月入十萬(wàn)都是保底,,而且還有獎(jiǎng)金分紅,而他錢(qián)志海能拿出什么來(lái)籠絡(luò)天天大神呢,?

  不說(shuō)其他的,,就光一個(gè)月薪十萬(wàn),錢(qián)志海就拿不出手,,也不是說(shuō)出不起,,只是公司還有其他方方面面也要打點(diǎn),這十萬(wàn)一拿,,他們的現(xiàn)金流就更加的不便了,。

  所以,想要邀請(qǐng)?zhí)焯齑笊?,錢(qián)志海也就只能在心里面想一想,,不過(guò)他還是看了一眼自己的這幾個(gè)骨干程序員,“天外有天,,人外有人,,我們還需要努力啊。不過(guò)現(xiàn)在既然發(fā)現(xiàn)了這個(gè)BUG,,那就趕緊給它解決吧,。”

  幾個(gè)人頓時(shí)開(kāi)始來(lái)修復(fù)漏洞,,首先拿到調(diào)用棧信息之后,,一會(huì)兒時(shí)間就很容易的追查到了根源。

  錢(qián)志海一行人看著這個(gè),,都是有些面面相覷,。

  “怎么是這個(gè)……”

  這是當(dāng)年羽然科技公司實(shí)現(xiàn)時(shí)的疏忽:在某個(gè)函數(shù)中,他們聲明了一個(gè)局部變量,,這個(gè)變量和同一命名空間的另一個(gè)變量名字極為相似,,但命名風(fēng)格(首字母是否大寫(xiě)之類)和其他代碼不太一致。

  當(dāng)時(shí)他們是為了規(guī)避不同作用域的命名沖突才這樣命名的,。

  但到了后面,他們?nèi)匀涣?xí)慣性的用了“正?!钡拿?,也可能是選錯(cuò)了編輯器自動(dòng)提示選項(xiàng),。

  這就相當(dāng)于丟開(kāi)局部變量,用了命名空間的外部變量,;但從上下文看,,這里就不應(yīng)該碰外部那個(gè)同名變量。

  用偽碼表示大概是這樣:

  class OneClass {

   packageNameItems = null;

  ....

   void funName1(arg){

  //initial packageNameItems

   packageNameItems = arg;

  //other...

  }

   string funName2(){

   PackageNameItems = extractPureInfo(packageNameItems);

  //do sth

  ....

   result = getItemFrom(packageNameItems,, itemName)//1

  //do sth

  ....

   return result

  }

  }

  從那里分析,,在//1處,本應(yīng)該是從已經(jīng)解包過(guò)的PackageNameItems中,,取它的第N項(xiàng),;但這里誤傳入了解包前的packageNameItems。

  似乎輸入文本可能會(huì)發(fā)生幾種情況,,當(dāng)然多數(shù)情況不需要進(jìn)一步處理,,直接用外部那個(gè)變量就行,此時(shí)兩個(gè)變量?jī)?nèi)容一致,,不會(huì)觸發(fā)bug,;但少數(shù)情況下,外部那個(gè)變量需要進(jìn)一步處理,,這才能提取到正確的內(nèi)容,。

  這種情況下,兩個(gè)變量?jī)?nèi)容不同,,誤用了前一個(gè)變量就讀不到正確數(shù)據(jù)了,。

  這是個(gè)極為隱蔽的邏輯錯(cuò)誤。

  其實(shí)和變量作用域相關(guān)的故障都很隱蔽,。

  李明拿著整個(gè)調(diào)用鏈的詳細(xì)記錄,,也是看了好幾遍才發(fā)覺(jué)這兩個(gè)變量的名字似乎有些意思,這才沿著這條線追查下去……

  總之,,意外的輸出信息弄得他們一臉懵逼,,因?yàn)檫@時(shí)候根本就不應(yīng)該有這種信息,也幸好檢查條件設(shè)的比較窄,,只有正常返回可通過(guò),,其他一概拋異常崩掉——于是這個(gè)異常就被葉新晨的debug工具抓到,自動(dòng)記錄了調(diào)用棧信息,。

  所以說(shuō)為什么之前錢(qián)志海等幾人會(huì)驚訝,,因?yàn)檫@個(gè)功能給他們抓到了一個(gè)BUG。

  還好這是個(gè)極為簡(jiǎn)單的bug,,只需把最后那次訪問(wèn)時(shí),,首字符小寫(xiě)的變量名改成大寫(xiě),故障就不再?gòu)?fù)發(fā),。

  其實(shí)就這么簡(jiǎn)單個(gè)首字符大小寫(xiě)搞錯(cuò),、誤訪問(wèn)了外部變量的BUG,,羽然科技公司在黑土平臺(tái)上的懸賞單也是掛了有兩三年了,前前后后換了很多人經(jīng)手,,但就是沒(méi)人能抓到它,。

  最終,這個(gè)簡(jiǎn)單又奇葩的bug竟然被天天大神的一個(gè)功能給抓住了,。

  不得不說(shuō)這真的是意外之喜,。

  “真想見(jiàn)識(shí)見(jiàn)識(shí)天天這樣的大神是什么樣的……”

  ………

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