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