社群列表根據關注人數排序(排行榜)的實現思路整理

2021-09-29 03:39:52 字數 2062 閱讀 8468

title: 社群列表根據關注人數排序(排行榜)的實現思路整理

date: 2018-09-08

tags: [工作筆記]

客戶端有乙個社群列表的展示介面,該列表的排序方式是按照關注人數進行反向排序(從大到小),類似:

社群id

社群名稱

社群關注人數

1aaa43

ccc3

2bbb24

ddd1

但是社群的關注人數是動態變化的,當社群數量較多時也要考慮分頁的情況,那麼該列表的排序和分頁有了很大的難度。

這裡簡單整理當前的實現思路,並指出明顯的缺陷和暫時解決不了的問題,待以後有能力解決。

這裡首先要解決的第乙個問題就是將動態轉換成靜態,然後才能排序。

如果做到根據實時的關注人數進行排序,對於後端是容易實現的,但是要考慮的客戶端的處理方式:客戶端會快取已經獲取的列表資訊,同乙個使用者分頁獲取資料的時候,由於關注人數的動態變化,會導致資料出現重複或缺漏的問題。

某時刻社群的關注人數如下(這裡是舉個例子說明,所以資料僅列出了4條):

社群id

社群名稱

社群關注人數

1aaa33

ccc4

2bbb34

ddd1

當前時刻為t1,那麼此時的社群排序結果如下:

社群id

社群名稱

社群關注人數

生成時刻

3ccc4t1

1aaa3t1

2bbb3t1

4ddd1t1

一段時間之後,時刻為t2,那麼此時社群的關注人數發生了變化:

社群id

社群名稱

社群關注人數

1aaa53

ccc7

2bbb94

ddd4

那麼此時的排序結果相對與t1時刻已經發生了明顯的變化:

社群id

社群名稱

社群關注人數

生成時刻

2bbb9t2

3ccc7t2

1aaa5t2

4ddd4t2

這裡出現的資料重複漏缺是有前提的:資料條數有點多,不能夠一次全部返回給客戶端,需要分頁獲取。

根據上面的那個例子,在t1時刻,使用者當前的分頁引數count=2,那麼返回的是id為31的社群資訊,當使用者在t2時刻繼續獲取分頁的時候,返回的卻是id為14那麼這裡id為1的社群就出現重複的問題了,缺漏的原理也類似。

這裡的實現思路是每隔一段時間將當前的關注排行榜進行快取:

排行榜id

社群id

社群名稱

社群關注人數

生成時刻13

ccc4t12

1aaa3t1

32bbb3t14

4ddd1t1

52bbb9t26

3ccc7t2

71aaa5t28

4ddd4t2

這個時間間隔就是每次任務的時間間隔t,在t間隔內獲取的資料都將通過該快取排行榜中獲取。使用者在第一次訪問的時候,僅攜帶分頁的count即可,返回的資料中,不僅包含社群的相關資訊,還包括最新的時刻tn,在以後的分頁獲取資料過程中,需要攜帶該時刻。

比如使用者在t1時刻傳入引數count=2,那麼返回的是id為31的社群資訊,同時返回引數中也包含t1的值,那麼在第二次訪問的時候,需要攜帶count=2&time=t1,這樣列表介面將會根據使用者的時刻繼續獲取他的排行佇列,那麼返回的就應該是id為24的社群資訊,同樣包括t1的值。

其實也就是使用者訪問的時候,如果沒有攜帶時刻引數,那麼就預設返回距離當前時間最近的時刻。

討論一下極端情況:

所以這裡就需要進行快取過期和時刻引數失效的設定。

PTA 奧運排行榜 排序)

每年奧運會各大 都會公布乙個排行榜,但是細心的讀者發現,不同國家的排行榜略有不同。比如中國金牌總數列第一的時候,中國 就公布 金牌榜 而美國的獎牌總數第一,於是美國 就公布 獎牌榜 如果人口少的國家公布乙個 國民人均獎牌榜 說不定非洲的國家會成為榜魁 現在就請你寫乙個程式,對每個前來諮詢的國家按照對...

知乎關注度人數最多的問題排行榜 TOP10

top1 你有哪些終生難忘的扎心瞬間 關注數 79845 回答人數 16240 top2 哪些話你一開始不信,後來卻深信不疑?關注數 770456 回答人數 6765 top3 男生的哪個瞬間讓你覺得很有教養?關注數 72876 回答人數 11780 top4 你在 上有哪些段子般的親身經歷?關注數...

2008日本工程師最關注新聞排行榜

富士通微電子董事社長小野敏彥就任18天即告辭職 背光式cmos感測器即將上市,omnivision挺進0.9 m dram低迷何時結束?爾必達社長發表觀點 佳能 digic 4 中配置的讓人吃驚的功能及指標 computex nvidia推出 tegra pk atom 視訊處理能力10倍,耗電量1...