【廣告】
“你們是如何測試軟件的?”
理想情況下,驗證代碼質(zhì)量應該是單元測試、人工測試以及自動化測試的結(jié)合。
危險信號:“我們都寫不出 bug,哈哈?!?→ 那些人正是會寫出 bug 的人。
“你們使用什么樣的版本控制系統(tǒng)?”
版本控制系統(tǒng)對于協(xié)作極其有用,在職業(yè)環(huán)境下沒有理由不使用。
危險信號 #1:“額,版本控制系統(tǒng)?” → 快跑,跑得越遠越好。
永遠記得使用版本控制。
危險信號 #2:“<插入不的或者定制的 VCS>” → 這表明他們很有可能沒有跟上時代并且很久沒有升級自己的基礎(chǔ)設(shè)施了。
知道何時使用庫
簡短回答:隨時都要。
詳細回答:99% 的時間內(nèi)你都不應該重新發(fā)明輪子。在大多數(shù)的軟件工程崗位,實現(xiàn)特定類型的東西都屬于純粹浪費時間。這并不意味著你不應該知道所使用的算法和數(shù)據(jù)結(jié)構(gòu)是怎么工作的,因為這可以幫助你決定用什么以及什么時候用。
為了成為一名的軟件工程師,你需要理解自己可以任意支配使用的那些庫。大多數(shù)流行語言的標準庫都是極其有用的,其規(guī)模比你想象的要大。此外,代碼庫也許也會利用了額外的特殊庫。閱讀其文檔,知道什么使用去使用它們。
條件二
參考計數(shù)器算法條件二實現(xiàn)。
算法升級
可以看到實現(xiàn)漏桶算法的話需要每隔interval時間都要另外一條線程去遍歷所key的value去做遞減操作,那么有沒有什么辦法可以省略這一步呢。答案是肯定有。
12345678910111213 if(存在key){ value--; if((nowTime-lastUpdateTime)>interval){ value=value-(nowTime-lastUpdateTime)/interval*step; lastUpdateTime=nowTime; } if(value<=0){ 不能訪問 } }else{ 添加key,設(shè)置value為limit;至于哪些東西對于優(yōu)化流程做出了貢獻可能大家會有不同的看法,但僅就項目的工作方式達成一致就能將混亂很小化并且確保每個人都能達成共識。 lastUpdateTime=nowTime; }
令牌桶算法核心思想
令牌桶算法呢,恰恰是和漏桶算法相反的一個算法,不過還是推薦你使用這個。這個算法的原理我不講,我覺得聰明的你看了偽代碼就明白了。
涉及變量
接口(key)
時間單位(expire)
允許訪問多少次(limit)
遞增間隔時間(interval)
遞增步長(step)
當前可訪問次數(shù)(value)
key的訪問時間(lastUpdateTime)
當前時間(nowTime)(參照漏桶算法需要注意的點)
條件一線程一:
12345678 if(存在key){ value ; if(value>=limit){ 不能訪問 } }else{ 添加key,設(shè)置value為limit }
線程二:
123 while(過去interval時間){ 所有key的value step }