经典系统设计题:如何实现短链接

前言

飞书面试的原题,因为没有事先准备过,所以答得不好,一搜才发现是个高频场景题。

短链接的好处

长链接不香吗?为什么要用短链接呢?技术是用来解决问题的,在学习一门技术之前,首先要知道它是为了解决什么问题而出现的,只有明白了前因后果,才能设计出合理的方案。比如我当时面试飞书,面试官问我这个问题时,我事先是没有了解过短链接的,如果我知道其实是通过短链接找到长链接,而不是把原来的长链接缩短,那么我就很容易能想到http重定向,也就能合理的回答出这个问题。

总的来说,短链接有如下几个好处:

  • 链接变短,在对内容长度有限制的平台发文,可编辑的文字就变多了。最典型的就是微博,限定了只能发 140 个字,如果一串长链直接怼上去,其他可编辑的内容就所剩无几了,用短链的话,链接长度大大缩短,自然可编辑的文字就多了不少。再比如一般短信发文有长度限制,如果用长链,一条短信很可能要拆分成两三条发,本来一条一毛的短信费变成了两三毛,何苦呢。
  • 我们经常需要将链接转成二维码的形式分享给他人,如果是长链的话二维码密集难识别,短链就不存在这个问题了。
  • 链接太长在有些平台上无法自动识别为超链接。
  • 另外用短链在内容排版上也更美观。

短链跳转基本原理

准备工作

  • 申请一个简短的域名。
  • 管理后台添加短链和长链的对应关系

访问流程

  1. 访问时通过域名解析,定位到短链服务器;
  2. 短链服务器根据请求路径查询长链,并返回重定向响应给浏览器;
  3. 浏览器重定向到长链,最终访问的是长链。

要点补充

短链中的路径如何生成

根据短链路径查询长链,短链路径必须是唯一的,其次还要简短。生成短链路径,其实就是生成简短的唯一id。针对唯一性,有很多方法,比如Hash算法(需解决碰撞问题)、雪花算法、自增序列。最简单的就是数据库自增主键了,短链系统的特点是查询多,写入少,所以只需要考虑查询的并发,一般不用考虑写入的并发,用数据库自增主键作为短链路径是完全可行的。就算是数据库自增主键,当数字特别大的时候,也会很长,我们可以考虑将10进制数字转换为16进制或者32进制形式,这样路径就会变得比较短。

假如我们提供出去的短链路径是32进制形式的,获取长链的时候,先将32进制字符串转换为10进制主键,然后拿这个主键去数据库查询长链。

重定向的选择

重定向有301和302之分,区别如下:

  • 301:代表永久重定向,也就是说第一次请求拿到长链接后,下次浏览器再去请求短链的话,不会向短网址服务器请求了,而是直接从浏览器的缓存里拿,这样在 server 层面就无法获取到短网址的点击数了,如果这个链接刚好是某个活动的链接,也就无法分析此活动的效果。
  • 302:代表临时重定向,也就是说每次去请求短链都会去请求短网址服务器(除非响应中用 Cache-Control 或 Expired 暗示浏览器缓存), 这样就便于 server 统计点击数,所以虽然用 302 会给 server 增加一点压力,但在数据异常重要的今天,这点代码是值得的。
  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值