成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

通過一個面試筆試題目將最近的知識串一下

X_AirDu / 3350人閱讀

摘要:預(yù)算管理要求消耗的物品的數(shù)量能夠按照預(yù)算庫存進(jìn)行消耗,不能超額,盡可能的保障預(yù)算的消耗率。描述了用戶執(zhí)行搶購的交易信息訂單號,搶購標(biāo)的編號,狀態(tài)凍結(jié)失敗成功交易數(shù)量,用戶編號。

題目

背景描述:
在現(xiàn)今電子商務(wù)場景下,預(yù)算管理在很多場景下都有廣泛應(yīng)用,比如營銷獎品,積分、紅包的發(fā)放、商品庫存管理等。預(yù)算管理要求消耗的物品的數(shù)量能夠按照預(yù)算庫存進(jìn)行消耗,不能超額,盡可能的保障預(yù)算的消耗率。
大規(guī)模請求量以及分布式環(huán)境下,預(yù)算管理問題更加突出,如果預(yù)算控制不合理,則會出現(xiàn)物品超發(fā)或是預(yù)算消耗率不高的情況,超發(fā)會導(dǎo)致直接的資金損失出現(xiàn);預(yù)算消耗率不高則會導(dǎo)致商品無法賣出、獎品無法發(fā)放等問題,從而導(dǎo)致間接的資金損失。

編程要求:

根據(jù)上面的背景,用偽代碼描述如下功能,在分布式集群環(huán)境下,有一批積分需要發(fā)放給用戶,存放在數(shù)據(jù)庫中,實(shí)現(xiàn)預(yù)算的扣減方法。

//: TODO 可自行定義變量  
/**    
* 扣減預(yù)算
* @param consumption 當(dāng)前需要扣減的消耗量    
* @return 預(yù)算的扣減是否成功  
*/
public boolean budgetDeduct(int consumption){
    //: TODO 完成此處的代碼
}
思考

作為新手,可能只會想到加鎖,比如先加上悲觀鎖(先來個select for update,鎖住之后再來個update 加上超發(fā)的where限制等)。所有的事情都在一個服務(wù)方法中完成,即可。好處是實(shí)現(xiàn)簡單,壞處呢,比如響應(yīng)慢,執(zhí)行效率低(悲觀鎖)等。
如果是老手,實(shí)現(xiàn)就會比較復(fù)雜

表設(shè)計

標(biāo)的物表 target_tbl(id,name,total_number,available_number,froze_number)
搶購交易表trade_order_tbl(order_id,target_tbl_id,state,trade_number,user_id)
target_tbl描述了搶購的目標(biāo)物件信息:名字,總數(shù)量,可用數(shù)量,凍結(jié)數(shù)量。
trade_order_tbl描述了用戶執(zhí)行搶購的交易信息:訂單號,搶購標(biāo)的編號,狀態(tài)(凍結(jié)/失敗/成功),交易數(shù)量,用戶編號。

程序設(shè)計(偽碼)
public boolean budgetDeduct(int consumption){
    Long tradeOrderId=frozeTarget(userId,targetId,consumption);
    if(tradeOrderId !=null){
        //凍結(jié)成功之后,執(zhí)行業(yè)務(wù)操作,或是檢查
        bool isBusiSucc = doBusiness();
        //業(yè)務(wù)操作成功,則更新交易,并將搶購商品入個人賬
        if(isBusiSucc){
            return updateTrade()
        }else{
            //業(yè)務(wù)操作失敗,則解凍交易
            return undoFrozeTarget();
        }
    }else{
        //凍結(jié)不成功,返回失敗
        return false;
    }
}
/**
* 需要事務(wù)支持,異?;貪L
* @param userId 搶購用戶編號
* @param targetId 搶購商品編號
* @param consumption 搶購數(shù)量
* @return
**/
private Long frozeTarget(String userId,String targetId, int consumption){
    int updated=0;
    //通過樂觀鎖的方式進(jìn)行更新,嘗試5次,5次仍舊失敗,則認(rèn)為凍結(jié)失敗
    for(int i=0;i<5;i++){
        //update target_tbl 
        //set froze_number = froze_number+consumption ,available_number = available_number-consumptionwhere available_number>=consumption
        updated = executeFroze();
        if(updated != 0)
        {
            break;
        }else{
            continue;
        }
    }
    if(update == 0){//凍結(jié)不成功
        return null;
    }else{
        //凍結(jié)成功,添加搶購交易記錄
        Long tradeOrderId = createOrder();
        return tradeOrderId;
    }
}
/**
*需要事務(wù)支持,異?;貪L
*失敗需要重試
*/
private bool updateTrade(){
    //1.更新交易表狀態(tài)為成功
    //2.更新標(biāo)的表,使標(biāo)的表的total_number,available_number,froze_number 減去交易表的trade_number
    //3.更新用戶信息
}
/**
*需要事務(wù)支持,異?;貪L
*失敗需要重試
*/
private bool undoFrozeTarget(){
    //1.更新交易表狀態(tài)為失敗
    //2.更新標(biāo)的表,使標(biāo)的表的available_number+trade_number,froze_number-trade_number
}
另一個思路

一般我們在設(shè)計的時候,流水表和商戶賬戶表是同時更新的,比如用戶充值,沖完之后,用戶賬戶就是更新后的值。但是在一些業(yè)務(wù)場景下,流水表和賬戶表不需要同時更新,賬戶表通過定時任務(wù)來批量更新,或是業(yè)務(wù)上允許賬戶變動能容忍一定的滯后。這帶了的思考是,先將完整業(yè)務(wù)流程細(xì)分到更新表的操作,再從業(yè)務(wù)上去梳理,將幾個表的操作組合起來,重新組合為業(yè)務(wù)場景。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/70432.html

相關(guān)文章

  • 秋招復(fù)盤——回顧2022秋招經(jīng)歷

    摘要:接下來,我主要從三個階段回顧我的秋招,分別是前期中期尾聲。到了這里,我的秋招算是正式的塵埃落定了,簽完三方后,我的秋招結(jié)束了。四復(fù)盤總結(jié)這次的復(fù)盤主要是我自己整個秋招的歷程縮影,很多細(xì)節(jié)無法在一篇文章就說清楚。 ...

    longshengwang 評論0 收藏0
  • 如何面試篩選出動手能力強(qiáng)Java服務(wù)端程序員

    摘要:最近要招一名中高級程序員有位同學(xué)的面試表現(xiàn)我們幾位面試官都覺得不錯思維很活躍知識面也還挺廣尤其是主動提及最近還在研究這個高性能框架并說出了基本實(shí)現(xiàn)原理表現(xiàn)出喜歡鉆研技術(shù)的態(tài)度唯一的缺點(diǎn)就是邏輯思維不太縝密工作經(jīng)驗只有年多但我們都覺得稍加培養(yǎng) 最近要招一名中高級程序員, 有位同學(xué)的面試表現(xiàn)我們幾位面試官都覺得不錯: 思維很活躍, 知識面也還挺廣, 尤其是主動提及最近還在研究Disrupt...

    cocopeak 評論0 收藏0
  • 從簡歷被拒到收割今日頭條 offer,我用一年時間破繭成蝶!

    摘要:正如我標(biāo)題所說,簡歷被拒??戳宋液啔v之后說頭條競爭激烈,我背景不夠,點(diǎn)到為止。。三準(zhǔn)備面試其實(shí)從三月份投遞簡歷開始準(zhǔn)備面試到四月份收,也不過個月的時間,但這都是建立在我過去一年的積累啊。 本文是 無精瘋 同學(xué)投稿的面試經(jīng)歷 關(guān)注微信公眾號:進(jìn)擊的java程序員K,即可獲取最新BAT面試資料一份 在此感謝 無精瘋 同學(xué)的分享 目錄: 印象中的頭條 面試背景 準(zhǔn)備面試 ...

    tracymac7 評論0 收藏0
  • 從簡歷被拒到收割今日頭條 offer,我用一年時間破繭成蝶!

    摘要:正如我標(biāo)題所說,簡歷被拒??戳宋液啔v之后說頭條競爭激烈,我背景不夠,點(diǎn)到為止。。三準(zhǔn)備面試其實(shí)從三月份投遞簡歷開始準(zhǔn)備面試到四月份收,也不過個月的時間,但這都是建立在我過去一年的積累啊。 本文是 無精瘋 同學(xué)投稿的面試經(jīng)歷 關(guān)注微信公眾號:進(jìn)擊的java程序員K,即可獲取最新BAT面試資料一份 在此感謝 無精瘋 同學(xué)的分享目錄:印象中的頭條面試背景準(zhǔn)備面試頭條一面(Java+項目)頭條...

    wdzgege 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<