如何“三行代碼”找到最終推薦人-筆記

    用戶A推薦B,B推薦C,我們說C的最終推薦人是A,B的最終推薦人也是A,而A沒有最終推薦人,一般來說我們用**數據庫**來建立這種關係,在數據庫表中,我們可以記錄兩行數據,其中 actor_id表示用戶 id,referrer_id 表示推薦人 id。

    問:如何通過一個給定的用戶id找到這個用戶的最終推薦人?
long findRootReferrerId(long actorId) {
  Long referrerId = select referrer_id from [table] where actor_id = actorId;
  if (referrerId == null) return actorId;
  return findRootReferrerId(referrerId);
}

    但是這裏有兩個問題:
  • 如果遞歸很深,可能會有堆棧溢出的問題。
  • 如果數據庫裏存在髒數據,我們還需要處理由此產生的無限遞歸問題。
  • 第一個問題可通過限制遞歸深度來解決,第二個問題其實也可以如此解決,但是偶一個更高級的處理方法就是自動檢測A-B-C-A環的存在(用hash表實現)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章