午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

場景面試題:優(yōu)惠券過期了,如何處理?

 田維常 2024-08-27 發(fā)布于廣東

你好,我是田哥

上周一個朋友去面試,被面試官問到:用戶領(lǐng)取優(yōu)惠券后,如果優(yōu)惠券到了,該怎么處理?

為什么他會被問到這個問題,那是因為他把我的充電樁項目寫到了簡歷上,并且還寫這么一句責(zé)任描述:

負(fù)責(zé)項目中優(yōu)惠券相關(guān)功能的設(shè)計和開發(fā)

其實,除了問這個問題,還被問到了類似秒殺的問題:如果現(xiàn)在有個活動,這個活動就說送超大優(yōu)惠券,但是需要用戶有5000積分,假設(shè)系統(tǒng)中有1w個人積分超5000,但是優(yōu)惠券只有10張,如何保證系統(tǒng)送出的優(yōu)惠券不超過10張。

其實就是個秒殺超賣問題,這個問題,后面在分享,目前代碼已實現(xiàn)

扯遠(yuǎn)了,回到我們這個優(yōu)惠券過期的問題中來。

我們先來看需求

需求

為了促進(jìn)項目持續(xù)留存用戶,以及持續(xù)拉新,一般面向C端的平臺都會做一些活動,比如:送優(yōu)惠券。用戶領(lǐng)取優(yōu)惠券了,也不一定會使用,甚至有的是忘記使用,所以,本功能就是為了解決這個問題而來。日活:

假設(shè)項目已注冊用戶20w,按照二八原則,那就是有4w是活躍用戶,再按照二八原則,日活大概8000。很多人平時也不用充電,都等著周末,尤其是星期天去充電,從而使用優(yōu)惠券,那就意味著星期天的日活會暴增,還有就是節(jié)假日前夕日活用戶肯定也是暴增。

用戶領(lǐng)取優(yōu)惠券記錄

1:用戶注冊成功,送一張優(yōu)惠券,-----20w條記錄

2:用戶充電一次送一張相應(yīng)充電金額的優(yōu)惠券,假設(shè)4w人,每周充一次,一個月就是4次,也就是說一個月產(chǎn)生數(shù)據(jù)為16w,一年就是16w*12=192w

3:每年各種節(jié)假日,平臺也會送各種優(yōu)惠券給用戶,我們還是以4w用戶來說,假設(shè)一年節(jié)假日以及相關(guān)活動舉辦20次,就是每人送出去80萬

就憑上面三個場景,一年妥妥的產(chǎn)生近300萬條用戶領(lǐng)取優(yōu)惠券記錄。

但是,很多用戶可能就喜歡領(lǐng)優(yōu)惠券,而不去使用,也有的是忘記使用優(yōu)惠券了,我們需要對這些已過期的優(yōu)惠券進(jìn)行過期處理。

場景:張三有一種優(yōu)惠券1,優(yōu)惠券是2024-8-20到期,如果到2024-8-20了還沒有使用,那用戶不能再2024-8-21及以后使用,并且系統(tǒng)需要立馬把用戶領(lǐng)取的優(yōu)惠券執(zhí)行為已過期。

簡單的流行圖:

關(guān)于用戶優(yōu)惠券過期,我們分兩種情況來處理:

1:快過期

針對快過期的優(yōu)惠券,發(fā)送站內(nèi)信或郵件或通知。

這個提醒功能相對來說就比較簡單,直接調(diào)用發(fā)送站內(nèi)信接口即可。

2:過期處理

針對過期處理,常用兩種解決方案:

  • 定時任務(wù)
  • 延遲消息

定時任務(wù)

  • 優(yōu)點:實現(xiàn)起來相對簡單
  • 缺點:隨著數(shù)據(jù)量越來越大,可能會影響線上系統(tǒng)性能,尤其是可能會導(dǎo)致慢sql

延遲消息

  • 優(yōu)點:處理起來時間相對比較精準(zhǔn)
  • 缺點:有些優(yōu)惠券時間比較長,可能會大致大量消息積壓。

這兩種方案都可以實現(xiàn)用戶優(yōu)惠券過期處理。

如果出現(xiàn)大量的優(yōu)惠券過期,所以,我們還是選擇定時任務(wù)來處理。

那如果采用定時任務(wù)來處理,也要注意,畢竟這里的前提條件是大量的優(yōu)惠券。那也就說明用戶優(yōu)惠券記錄表中存在大量的數(shù)據(jù),如果采用定時任務(wù)掃描處理,明顯是不理智的,因為此時用戶也在訪問這張表,很有可能會導(dǎo)致查詢變慢之類的。

怎么處理呢?

我們可以單獨生成一張表叫做user_coupon_expire_temporary(過期優(yōu)惠券臨時表)。表字段:

字段名字段類型描述
idint表主鍵
user_coupon_idbigint用戶領(lǐng)取優(yōu)惠券記錄id
expire_datedatetime過期時間
statusint狀態(tài)(0:未處理,1:已處理)

再啟動一個定時任務(wù),專門去處理已經(jīng)處理的或者已經(jīng)使用的記錄,直接物理刪除,這樣這張表的數(shù)據(jù)就不會太大。只是,我們在刪除時可以做一些適當(dāng)?shù)男r灮蛘邥r間增加。

整個流程:

這里就不用貼代碼了吧,其實沒有什么技術(shù)難度,主要是采用了一種比較取巧方式來解決的。

思路都是相同的,比如我們?yōu)榱吮WC消息不丟失,生產(chǎn)者在發(fā)送消息時,如果失敗了,我們也用一個臨時消息表來處理這類消息丟失的問題。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多