【廣告】
軟件工程師生存指南:面試準(zhǔn)備、工作經(jīng)驗(yàn)和實(shí)用工具
軟件工程師是令人羨慕的職業(yè)。但是如何才能拿到這份工作?又如何才能做好這份工作呢?擁有相關(guān)經(jīng)驗(yàn)的 Valeri Alexiev 提供了相關(guān)建議和工具。其中包括了如何準(zhǔn)備面試、如何以軟件工程師的身份工作以及如何持續(xù)改進(jìn)方面的經(jīng)驗(yàn)之談。
我剛開始工作的頭幾年是緊張學(xué)習(xí)的時(shí)間。
我得面對(duì)現(xiàn)實(shí),成為軟件工程師需要有很多技能,這些我之前都不知道?;仡欉^去,顯然學(xué)會(huì)那些東西是很好的。
所以我就根據(jù)自己及其他人的經(jīng)驗(yàn)寫了這篇指南來幫助入行的新人。
條件二
參考計(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; lastUpdateTime=nowTime;但開發(fā)者通常渴望嘗試并且會(huì)在不需要的情況下過度優(yōu)化,卻犧牲了代碼的可讀性和防御性。 }
令牌桶算法核心思想
令牌桶算法呢,恰恰是和漏桶算法相反的一個(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 }
企業(yè)的愿景和目標(biāo)。
如果面試官給了你一個(gè)非常好的愿景和目標(biāo),至少說明這家企業(yè)是個(gè)有思想、有抱負(fù)的企業(yè)。如果某個(gè)公司老板自己都說不好,5年后,他的企業(yè)會(huì)在哪里、會(huì)變成什么樣?我看我還是不要進(jìn)到這樣的企業(yè)里了。
這些問題問得時(shí)候也得因人而異、因地制宜。如果真是雙向選擇,多問問沒什么壞處。如果只是人家在挑我,我無論如何都想進(jìn)入這家企業(yè),那你可悠著點(diǎn),別把面試官問毛了。如果真是這樣,后果自負(fù)噢。