在北美大廠的 Online Assessment 中,Stripe 一直是一個非常特殊的存在。
相比常規算法公司,Stripe 的 OA 更偏向真實業務場景,題面冗長、規則複雜、實現細節極多,往往一小時只給一題,卻能完整考察候選人對業務邏輯拆解和工程實現能力的理解。
這篇文章將結合一次完整實戰,系統拆解 Stripe HackerRank Online Assessment Questions 的典型模型,總結其隱藏的出題套路與穩定解法,幫助你在有限時間內快速建立清晰的解題結構。
📋 Stripe HackerRank OA 真題:Merchant Fraud Scoring System
題目模擬 Stripe 的 merchant fraud scoring system,目標很明確:
根據一天內的交易記錄和對應的規則,為每個 merchant 計算最終的欺詐分數,並按 merchant 名字字典序輸出結果。
輸入結構
輸入會給你三樣東西:
transactions_list
一天內的所有交易記錄rules_list
與 transactions 一一對應的規則列表merchants_list
每個 merchant 都有一個 base_score 初始分數
注意一個非常重要的點:
transactions 和 rules 是嚴格一一對應的,這個信息在後面實現中非常關鍵。
🎯 整體解題思路
這題千萬不要一條 transaction 一條 transaction 直接算分,否則邏輯會極其混亂。
正確的做法是:按規則類型分階段處理,先收集狀態,再統一結算。
我個人會拆成五個明確步驟。
Step 1:先把 merchants 建成字典
第一步不要急著算分,先把 merchants_list 拆成一個字典結構:
merchant_id -> current_score
其中 current_score 初始化為 base_score。
後面所有規則,都是在 current_score 的基礎上進行乘法或加減。
Step 2:合併 transaction 和 rule 成完整記錄
由於 transactions_list 和 rules_list 一一對應,強烈建議在一開始就做合併處理。
每條完整記錄至少包含以下字段:
- merchant_id
- customer_id
- amount
- hour
- min_transaction_amount
- multiplicative_factor
- additive_factor
- penalty
這樣後面所有邏輯都只圍繞一個 records 列表展開,避免在多個數組之間來回索引,非常容易出錯。
Step 3:第一輪遍歷,處理金額乘法規則
這一輪是全題最基礎的一步,但也有一個容易被忽略的坑。
規則是:
如果 transaction_amount > min_transaction_amount
就將 merchant 的 current_score 乘以對應的 multiplicative_factor。
注意幾點:
- 是嚴格大於,而不是大於等於
- 每一筆 transaction 都要單獨判斷
- 這是直接更新 merchant 的 current_score
這一輪只做乘法,不處理任何加分或扣分邏輯。
Step 4:第二輪,customer + merchant 的 additive 規則
這是 Stripe 非常典型、也最愛考的一類規則。
規則描述是:
如果同一個 customer_id 對同一個 merchant_id 的交易次數達到 3 次或以上(包含當前交易),
那麼該組內每一筆交易的 additive_factor 都要累加到 merchant 的 current_score 上。
官方題面中特意強調了一點:
- 第三筆交易時的分數已經包含前 1、2、3 筆的 additive;
- 第四筆交易時,是在此基礎上再加上第四筆的 additive_factor。
因此這裡的正確做法是:
- 按
(merchant_id, customer_id)分組 - 統計交易次數
- 如果
count >= 3
就把該組內所有 additive_factor 求和 - 一次性加到對應 merchant 的 current_score 上
不要在單條 transaction 裡即時加,否則非常容易重複計算。
Step 5:第三輪,同小時交易的 penalty 規則
這是全題最繞、最容易寫錯的一部分。
觸發條件是:
- 同一個 customer_id
- 同一個 merchant_id
- 同一個 hour
- 交易次數達到 3 次或以上(包含當前)
注意:
一旦達到 3 次,處罰或獎勵是對這一小時內的所有交易都生效,包括第 1、2 筆。
不同時間段對應不同操作
如果 hour 在 12 到 17(含)之間
每一筆交易都要加 penalty
如果 hour 在 9 到 11,或者 18 到 21(含)之間
每一筆交易都要減 penalty
如果 hour 不在上述區間
什麼都不做
推薦實現方式
和 additive 規則一樣:
- 按
(merchant_id, customer_id, hour)分組 - count >= 3 才觸發
- 將 penalty 乘以該組交易次數
- 根據 hour 區間決定是加還是減
- 最後一次性更新 merchant 的 current_score
Step 6:排序並輸出結果
最後一步是輸出處理:
- 按 merchant 名字字典序排序
- 輸出格式嚴格為:
name, score
HackerRank 對格式要求非常嚴格,多一個空格或少一個逗號都有可能直接判錯。
💡 這道題本質在考什麼
這題本質不是算法題,而是:
- 複雜業務規則拆解能力
- 多維狀態統計能力
- 分階段累計而不是即時計算
- 工程化實現和代碼組織能力
如果一邊讀題一邊寫,很容易在中途發現狀態完全控不住。
🚀 想在 OA / VO 中脫穎而出?oavoservice 提供全方位面試護航服務
無論是 OA 代刷、VO 實時輔助,還是面試助攻,我們的北美 CS 專家都能為你提供實時提示和思路,效果遠超 AI。
代面試、SDE 代面、FAANG 代面?沒問題。
通過攝像頭轉接與變聲技術,我們的專業團隊幫你完成全程面試。提前模擬測試、配合默契,你的臉合成我們的聲音,現場表現自信自然,無縫銜接。
全套包過、Offer 包拿、快速入職大廠。
無論是 OA、面試、還是簽約談判,我們全程護航,直到你拿到滿意 Offer。
服務採用預付少量定金、拿到 Offer 後支付尾款模式,讓你無後顧之憂。
We consistently provide professional online assessment and interview assistance services for major tech companies like TikTok, Google, and Amazon, guaranteeing perfect scores and successful outcomes.
👉 立即添加微信:Coding0201
鎖定你的 Stripe Offer 機會!