这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
URL 编码
短码只有六个字符,能装下多少东西,这个问题很快就不再只是「够不够用」。MD5 输出的是十六进制,每位只有 16 种可能,截取六位只剩 16^6 = 1677 万种组合;而 URL 里能安全使用的字符是数字加大小写字母共 62 个,62 进制同样六位能装下 568 亿。先把编码空间撑开,是这一章的第一个前提。
空间撑开之后,冲突的问题反而更清晰。生日悖论说 23 个人里就能撞上同一天生日,十万条 URL 的冲突概率已经飙到 95%;MD5 的确定性、雪崩效应、不可逆和速度都让人放心,可事故的根源是截断——换成 SHA256 更强,截断之后空间还是一样大,算法救不了截断。于是有了几种应对方案的取舍:加长短码,换更好的哈希,用自增 ID 加 Base62,还是交给分布式 ID。
最终落在一个明确的决定上:用自增 ID 保证唯一,用 Base62 编码让短码短到看不出业务量,数据库唯一索引做最后一道防线。读完你应该能解释为什么哈希冲突是数学必然而不是实现失误,能自己算出一个服务需要几位短码、能撑多少年,也能说清哈希方案和自增 ID 方案各自牺牲了什么。短码定下来之后,下一个问题是这些数据到底存在哪。
发现内容有问题?
告诉我们哪里需要改进。
