連登分享主題回覆短link規則

51 回覆
80 Like 3 Dislike
2024-03-18 20:56:52
題外話
如果連登啲short link algorithm 真係好似你咁講又base42又base25又一堆reserved characters做case
真心覺得黐線
簡單事情複雜化到政府 out source project 咁
連狗發明short link 版攞你命三千
巴打可唔可以分享下你嘅簡單做法

Requirements:
- client side gen/parse only
- short id 需要支援以下三種 data struct:
1. thread id only (thread_id: 12345678)
2. thread id + page (thread_id: 12345678, page: 41)
3. thread id + 樓層 (thread_id: 12345678, post: 1001)
- path 需要支援純數字 thread id (例如 lih.kg/123 一定係去返 thread id 123)
- 盡量以最短字數 link 為目標
- 唔可以有 I (大寫 i) 同 l (小寫L) 因為會易混淆
無償分享?有$既我幫你諗晒成個solution都冇問題
冇既話... 唔花太多時間
基本做法你可以睇返#16
簡單黎講就split 64bit既 integer
你thread id 就 fix用46 bits timestamp(基本上夠用到死嗰日,以我所知你地係用incremental id? 咁仲可以慳多啲)
剩低18 bits 再split 開用途
你point2/3, 用2 bit 嚟做 case(max 4 cases)分page/post,剩低2個備用
用8bit做(0-65535 夠做有凸喇)做page/post id
剩返既留4bit做 reserve? 你自己決定,留多既 trade off就係 short link會長啲,當留4bit咁即係條id總長度就46+2+8+4 = 60 bits既base64 string, 最長唔超10 characters
至於path 要純數字,用single character sub-path/sub-domain 做, 唔好同short link 撈埋一碟, 凡齋thread id 既route 去: lih.kg/i/1234i.lih.kg/1234, 或者倒轉:short link用 lih.hk/s/aaaa或 s.lih.hk/aaaa
唔可以有i/l?自己做 lookup table 囉,你唔要兩個 characters, 基本上唔會有其他characters 可以replace,即係要自己做 base62既implementation, 但我自己就唔會咁做,一嚟條 link變長咗,2嚟大如 google(youtube) 都唔會咁做,再者而家乜都係 copy & paste 既時代 - 簡單黎講short link需要高可讀性既情況係十分之低,換言之: 冇必要
唔覺唔覺都打咗咁多

sor, 上面 page/post id 嗰part 有錯,用12bit (0-4095)做,留reserve 就64bit 用晒或唔留reserve, 60bit 不變
2024-03-18 20:59:39
咁你咪加個 lead character 做囉, 所有short link id 加個initial s character, 其餘一律 thread id link
2024-03-18 21:02:38
最長10characters 都唔夠短?
而且你地而家用incremental id ,唔係timestamp
基本上一般link 都只係7-8個 characters 樓下
2024-03-18 21:03:18
no,
short link 先+ initial s
thread id 就齋數字
2024-03-18 21:08:31
但你地而家又base42 又base25(照樓主講)
唔用晒base64只會增加條link 既長度
2024-03-18 21:32:21
但你呢堆STUVWXYZ同數字0-9照樓主講係reserved?只會用到base42? 咁做既條link 又會長啲
2024-03-18 21:43:06
admin你好off topic 一問,連登有冇API?小弟學緊python,想試下駁api用連登public data 做data pipeline練習 定係個API要俾錢?感謝!
2024-03-18 22:19:50
所以
即係本身開始時諗得唔夠周詳先會慢慢變攞你命3000
為咗backward compatibility而作出嘅 compromise
做咗N年code guy
明既
2024-03-19 07:48:40
心血來潮試咗用最慳可以縮到幾多個 characters
用10 bit做 post/page (0-1023)
用lead character 做埋case 可以慳返 type 嗰2 bit, 呢個位仲可以慳多少少,因為如果個type 係page id, 用6bit(0-64)就夠
咁既情況下5個characters夠用到 thread id 100萬頭
print((1000000 << 10).toBase64String()); // => z2G00
6個characters夠用到6500萬
print((60000000 << 10).toBase64String()); // => vE7000
加埋1個lead character
即係6位夠用到~100萬
7位用到~6500萬
8位用到~40億
2024-03-19 07:50:26
強帖留名
2024-03-19 08:17:07
2024-03-19 08:22:40
當練習下 reverse engineer其實ok

不過我都唔明點解仔要自己砌algorithm
2024-03-21 05:44:08
話時話...
因為怕易混淆而犧牲唔用某啲characters做法真係好鬼old school
其實呢個時代仲有冇人係用紙筆記link(id)
我淨係諗到用鉛筆寫咸片code 嗰單嘢
...或者方便上庭用?因為有機會要讀出嚟?
2024-03-21 08:12:31
你up乜柒呀IT狗😅打咁撚多野冇人想睇唔尷尬?
2024-03-21 09:05:54
作用梗係有既
問題係值與唔值之間既取捨
今時今日你所講既 use case 真係少之又少
最奇係就連0-9都冇埋又無厘頭冇幾個唔關事既S-Z攪到個base勁縮
不過有時腦便秘時寫出嚟既野轉咗牛頭尖都唔知
都係寫code常事見怪不怪
2024-03-21 09:09:47
又唔好咁講
難得樓主咁有心
你唔睇啫
總有人有與趣既
2024-03-21 09:12:21
splm
2024-03-22 07:49:05
似方便上庭用
吹水台自選台熱 門最 新手機台時事台政事台World體育台娛樂台動漫台Apps台遊戲台影視台講故台健康台感情台家庭台潮流台美容台上班台財經台房屋台飲食台旅遊台學術台校園台汽車台音樂台創意台硬件台電器台攝影台玩具台寵物台軟件台活動台電訊台直播台站務台黑 洞