影楼网站服务,门牌设计图片,一起做陶瓷官方网站,wordpress简单插件短链接系统可以把比较长的 URL 网址转换成简短的网址字符串#xff0c;短链接的优势是方便传播。适合在一些对字符串长度有要求的场景中使用#xff0c;比如短信#xff0c;微博等#xff0c;比如https://www.cnblogs.com/myshowtime/p/16227260.html转换成短链接为https:/… 短链接系统可以把比较长的 URL 网址转换成简短的网址字符串短链接的优势是方便传播。适合在一些对字符串长度有要求的场景中使用比如短信微博等比如https://www.cnblogs.com/myshowtime/p/16227260.html转换成短链接为https://bit.ly/3z0QtB9 设计要求 根据面试的要求你需要设计一个短链接系统 链接的长度尽量比较短每天生成 1 亿个URL服务要运行 10 年。首先我们看一下短链接的工作原理。 工作原理 在 Chrome 上输入短链接会发生什么打开开发者工具 可以看到 服务器收到请求后会把短链接转换成长链接然后返回浏览器进行 301 重定向请求到长链接地址。另外一个问题如何把长链接转换成短链接能否使用一些加密算法呢明显是行不通的因为字符串加密后会变的更长。 哈希算法 实际上我们可以使用哈希算法和哈希表实现如下长链接经过哈希算法后 会生成固定长度的哈希值 key也就是短链接的值并保存到哈希表中。使用短链接查询长链接时只需要查询哈希表即可。上面是常见的哈希算法最少也要8位。那我们需要多少位的短链接呢根据上面的要求一天生成一个亿的短链接运行10年1亿 * 365 * 10 3650 亿。短链接的字符在 [0-9,a-z,A-Z] 之间总共 62 个不同的字符可以计算出下面的数据。可以看出要满足系统要求的话短链接的长度最少为 7 位。在实际中很多短链接系统的长度也是 7 位。有兴趣的同学还可以看一下米勒定律 7±2 法则。上面的 CRC32 算法最少也是 8 位。不过我们可以截取前 7 位最后一位丢弃。但是这样可能会出现哈希冲突的问题我们可以给长链接递归地拼接一个值直到不再发现冲突当然也可以用其他的哈希冲突解决方法。 Base 62 转换 这是另外一种常见的方法Base 62 字符由大写字母 A-Z、小写字母 a-z 和数字 0-9 组成, 总共 62 位如下base 62 和 base 64 相比只不过少了2个字符 和 /大家可以想一下这里我们为什么不用 base 64。Base 62 和上面的哈希算法的思路是不一样的哈希算法是根据长链接计算哈希值然后保存到哈希表中。而 base 62 需要给每条长链接生成一个唯一的数字 ID如下那么如何计算短链接 ShortURL 呢? 因为 Id 是唯一的 10 进制数字我们只需要把它转成 62 进制即可 这里和从2进制转换到10进制是一样的。假如有一个 ID 为 11157, 转换的过程如下最终得到的短链接的值为 https://xxx.com/2TX。 总结 在本文中介绍了两种实现短链接的方法分别是哈希算法和 base 62。哈希算法的特点是固定的短链接长度不需要生成唯一ID可能会出现哈希冲突。base 62 转换的特点是长度不固定取决于 ID 的大小1000 转换后是 G8, 1000 亿 转换后是 1l9Zo9o。另外还需要生成唯一数字 ID没有哈希冲突的问题。希望对您有用译等天黑作者Alex Xu来源《System Design Interview》简介: Alex Xu 是一位经验丰富的软件工程师, 之前曾在 Twitter, Apple 和 Oracle 任职来自卡内基梅隆大学热衷于系统设计。