【廣告】
賦予自身額外優(yōu)勢(shì)
為了讓自己取得那點(diǎn)額外優(yōu)勢(shì),有幾件事情你可以去做。
首先,學(xué)會(huì)如何溝通你的經(jīng)驗(yàn)。你應(yīng)該進(jìn)行一次電梯演講來將你的簡(jiǎn)歷總結(jié)成連貫的、打動(dòng)人的個(gè)人介紹。
此外,要了解自己的簡(jiǎn)歷!聽起來很蠢是吧,但我就見過很多面試者連解釋清楚自己簡(jiǎn)歷上的特定事項(xiàng)都很困難。你應(yīng)該能夠回答任何有關(guān)你列上簡(jiǎn)歷的經(jīng)歷方面的問題,并且解釋清楚這一經(jīng)歷如何讓你成為本工作更好的候選人。
接著,要在 GitHub(或者其他的公共代碼庫(kù))上面有一些編碼的例子。
眼見為實(shí),面試官能夠看到你的代碼將創(chuàng)造奇跡。此外,這還證明了你對(duì)版本控制系統(tǒng)有了解。
你的代碼例子不需要太復(fù)雜,但是一定要整潔,能夠顯示出好的編碼實(shí)踐。這是你展示自己在沒有編碼面試所帶來的時(shí)間壓力情況下代碼寫得如何的機(jī)會(huì)。
一旦你做完了上面的事情后,就得考慮參與一個(gè)開源項(xiàng)目了。參加開源項(xiàng)目能表明你能夠在已有代碼庫(kù)基礎(chǔ)上工作并且可以與其他程序員一些協(xié)作。
這是你在無(wú)需實(shí)際進(jìn)入一個(gè)行業(yè)環(huán)境的情況下接近在行業(yè)環(huán)境下編程的方式了。這也是目前為止難耗時(shí)的一項(xiàng)任務(wù),所以等到你把前面我提到的比較容易取得的果實(shí)都摘完之后再干這件事。
分析之前
依我個(gè)人的理解來說限流的話應(yīng)該靈活到可以針對(duì)每一個(gè)接口來做。在大多數(shù)的軟件工程崗位,實(shí)現(xiàn)特定類型的東西都屬于純粹浪費(fèi)時(shí)間。比如說一個(gè)類里面有5個(gè)接口,那么我的限流插件就應(yīng)該能針對(duì)每一個(gè)接口就行不同的限流方案。所以呢,既然針對(duì)的每個(gè)接口所以就需要一個(gè)可以標(biāo)示這個(gè)接口的key(我取的是類名 方法名 入?yún)ⅲ?
分布式限流強(qiáng)烈推薦使用redis lua或者nginx lua來實(shí)現(xiàn)。
這里用2個(gè)限流條件來做示例講一下常見的限流算法:
接口1它10秒鐘很大允許訪問100次
接口2它10秒鐘很大允許每個(gè)人訪問100次。
計(jì)數(shù)器算法
這個(gè)算法可以說是限流算法中簡(jiǎn)單的一種算法了。
核心思想
計(jì)數(shù)器算法的意思呢就是當(dāng)接口在一個(gè)時(shí)間單位中被訪問時(shí),我就記下來訪問次數(shù),直到它訪問的次數(shù)到達(dá)上限。
涉及變量
接口(key)
時(shí)間單位(expire)
允許訪問多少次(limit)
訪問次數(shù)(value)
條件一
當(dāng)一個(gè)請(qǐng)求過來時(shí),我們就會(huì)得到這個(gè)key。
123456789 if(存在key){ value ; if(value>=limit){ 不能訪問 } }else{ 添加key,value為1 設(shè)置key過期時(shí)間為expire }
對(duì)于你的產(chǎn)品,可用性是否勝過一致性?如果你正在建立一個(gè)像Facebook newsfeed這樣的系統(tǒng),你可能會(huì)希望這個(gè)系統(tǒng)是高可用性的,并且是終一致。
另一方面,如果您正在構(gòu)建一個(gè)銀行系統(tǒng)(或者像我們的案例那樣的模式存儲(chǔ)),您可能希望支持強(qiáng)一致性,并放棄高可用性。
無(wú)論采用哪種方式,您都應(yīng)該首先考慮CAP定理的含義,然后決定您的系統(tǒng)是否需要SQL或NoSQL解決方案。