騰訊php程序員面試題目及答案

學識都 人氣:1.78W

設計任務:

騰訊php程序員面試題目及答案

1、最近總有人騷擾我們的投票模塊,需要你來設計一個投票限制的'東東

要求如下:

1)要求每個qq號碼(假設此QQ號碼在UNIT32 內可以表示)10分鐘這內只能投5票。

2)我們的用戶很踊躍,平均每天要有2000萬人左右通過此程序投票。

說明:

1)無需寫代碼,只需要圖跟文字即可。

2)對於關鍵邏輯,請用圖加代碼表示出來,這也是對你文字表達能力的一個考驗。

3)對你能想到的所有的邊界條件列出來,這是對你邏輯思維全面與敏捷性的考驗。

4)存儲部分,盡你所能吧。如果,你需要一個自己設計的存儲層,那麼把這個存儲層的實現,用文字+圖片方式描述清楚,要是設計合理,你會獲得華麗的獎分.

解答:

核心問題:如何統計10分鐘之內投了5票?

首先:以秒爲鍵切分數據集,10*60=600個時間戳桶,並添加一個Forbid令牌桶

然後:每個數據集內,以qq號碼爲鍵,vote次數爲值

OK,已經成功轉換爲key-value方式存儲,2000萬的日投票,除以86400秒,併發231.48rps,使用memcache能夠輕鬆勝任。

數據集ID:201006072134

【QQ號碼:Vote次數】

201006072134 | 201006072135 | 201006072136

【12345:3】 | 【12345:3】 | 【12345:3】

【88888:2】 | 【88888:3】 | 【88888:3】

把下一秒鐘不能投票的同學 生成一個令牌桶Forbid。

―――――-

Forbid令牌桶

【12345】

【55555】

【66666】

【77777】

【99999】

―――――-

if(in_array($uid,$not_vote))

{

$flag = ‘不能投票’;

}

else

{

$flag = ‘可以投票’;

// 新時間戳桶

}

定時任務

1、unset(10分鐘前的時間戳桶)

2、重新生成令牌桶