home · Posts · Archive · Tags

20240207-personal-finanicial-manager

Question

如何打造一個個人金融管理系統(mint.com),可以連結銀行帳戶、分析消費習慣及推薦

Solutions

Step 1: Scope the Problem

跟面試官討論

  • 可以建立account、可以新增多個銀行帳戶、也可以之後再加
  • 可以存取金融歷史,也可以根據銀行
  • 金融歷史包括收入、支出、現金、投資
  • 金融交易包含類別(食物、旅遊、衣服)
  • 使用者可以新增自訂類別
  • 使用者會取得根據其在的消費群裡的消費推薦
  • 目前只需要網站,app之後討論
  • 可能需要根據特定條件使用email 通知使用者
  • 使用者不能根據自訂rule對交易進行分類
  • 假設類別根據銷售商店,而不是價格或日期

Step 2: Make Reasonable Assumptions

  • 新增、移除帳戶相對少用
  • 系統是write-heavy,一班使用者每天都會使用,少部分一週使用一次,通常透過email進入網站
  • 交易可以被使用者更改類別,但只針對單筆,而不是所有交易歷史裡同一個交易改變
  • 銀行不會自動更新資料到我們系統,我們需要自行從銀行取得
  • 超出預算的通知不用立即通知,可以在一天內通知即可

Step 3: Draw the Major Components

graph TD A(Bank data synchronizer) --> B(raw transcation data) B(raw transcation data) --> C(Categorizer) C(Categorizer) --> D(categorized transcations) D(categorized transcations) <--> E(Frontend) D(categorized transcations) --> F(Budget analyer) F(Budget analyer) --> G(Budget data) E(Frontend) <--> G(Budget data)
  • 帳戶更新取決使用者使用頻率,可能每小時/每天
  • 資料一開始先暫存,然後交給Categorizer分類後才存到資料庫
  • Budget analyer query 分類交易,並儲存使用者的消費
  • 前端存取categorized transcations及Budget data的資料,使用者可以改變Budget、類別進行不同的查詢

Step 4: Identity the Key Issues

  • 這是一個data-heavy的系統,為了讓他可以即時反應,會使用非同步(asynchronous)處理
  • 有一個task queue,可能包含:擷取銀行資料、重複分析預算、分類銀行資料
  • 將task 分優先順序,並確保低優先順序會執行得到
  • 假設有很多人註冊不使用,那可能需要凍結或移除
  • 可以非同步、使用不同server執行

Categorizer and Budge Analyzer

  • 一瞬間可能有很多資料,可能不適合使用中心資料庫(沒效率)
  • 使用檔案存取可能優於資料庫,並使用商家的名稱命名
  • categorizer 流程可能如下:
graph TD A(raw transcation data, group by seller) --> B(categorized data, group by user) B(categorized data, group by user) --> C(merge & group by user & category) B(categorized data, group by user) --> E(update categorized transcations) C(merge & group by user & category) --> D(update budges)
  • 根據商家分類資料,有可能存在cache
  • 再根據使用者group,這些交易再根據使用者新增進資料庫
  • 原本:商家>使用者、price、日期
  • 處理完:使用者>商家>類別>price、日期

User Changing Categories

  • 重新計算類別,並且找尋該使用者之前的記錄修改

Follow up

  • 如果要讓他可以支援mobile app,要怎麼設計?
  • 如何設計一個component將item 分類
  • 如何設計推薦預算的feature
  • 使用者若要可以自訂rule分類交易商家,要怎麼做?
👈Go Back

@alanhc