面试现场:如果让你实现一个短链接服务,你会怎么设计?

时间:2019-08-18 来源: 专栏
九州9娱乐

采访者:您是否经常注意到某些垃圾邮件包含短链接?

候选人:是的,就像这样!

记者:

为什么选择这种短链接?

有什么好处?

如果您要实施短链接生成服务,您将如何设计它?

在本文中,我们来谈谈上述问题!

首先,短网址的好处是:

短。短信和许多平台(微博)都有字数限制。如果添加的链接太长,则无法编写文本。

好看。短链接比许多未知参数更简洁和友好。

做一些统计很方便。如果您点击链接,有人会记录并分析它。

安全。不要公开访问参数。

这就是为什么我们现在收到的大多数垃圾邮件都是短网址。

那么短网址如何做呢?

短网址基础知识

从以下步骤使用的生成中生成短URL。

有一项服务会将长URL发送给您一个简短的URL。例如,

发送简短的网址到内容,如短信,然后发送。

用户点击短网址,浏览器会重定向301/302以访问相应的长网址。

显示相应的内容。

那么如何将长URL映射到短URL?

服务设计

如果你考虑长URL和短URL之间的真实对应关系,那么就去吧。

最理想的情况:我们使用算法将每个长URL唯一地转换为短URL。它还保持逆转换的能力。

但这是不可能的。如果有这样的算法,世界上所有的压缩算法都可以就位。

正确的想法是创建一个自动收报机。每当有新的长URL进入时,我们添加一个并返回新值。第一个网址返回'',两个返回''。

接下来,以QA:

的形式写几个小问题

如何存储通信?

这个相应的数据必须放在磁盘上,每次重启系统都不能重新注册,这样就可以使用mysql和其他数据库来存储。并且如果数据量很小且qps很低,则可以直接使用数据库的自增量主键来实现。/P>

如何确保长链接和短链接之间的一对一对应?

根据上述发行者策略,不能保证长链路和短链路之间的一对一对应关系。您使用相同的URL连续请求两次,结果值不同。

为了在长链接和短链接之间实现一对一的对应,我们需要付出很多空间,特别是对于快速响应,我们可能需要在内存中做一层缓存,这太浪费了。

但是,可以实现一些变体以实现部分一对一的对应关系,例如在K-V数据库中存储最新/最流行的对应关系,这可以节省空间并加快响应速度。

短网址存储

我们返回的短网址通常会转换为32位数,这样可以更有效地缩短网址长度

然后32位数字只是计算机的一个字符串。如何存放?直接存储字符串以找到等效值对于范围搜索来说太不友好了。

实际上,您可以直接存储十进制数字,这不仅占用更少的空间,而且还支持搜索。转换为更多/更少的十六进制代码以进一步缩短URL也更方便。

高并发性

如果直接存储在MySQL中,当并发请求增加时,数据库上的压力就太大,这可能会造成瓶颈。目前,可能会有一些优化。

高速缓存

以上保证了一对一的通信中也提到了长链接和短链接。在这里,我们将加快程序的处理。

您可以缓存流行的长链接(需要导入长链接的次数),最近的长链接(可以使用redis保存最后一小时)等,并将它们存储在内存或内存数据库中像redis。/P>

如果请求的长URL到达缓存,则直接检索并返回相应的短URL,无需执行构建操作。

批号

每次发送PIN时,都需要访问MySQL以获取当前的最大数量,并在获取后更新最大数量。这种压力相对较大。

我们每次都可以从数据库中获取10,000个数字,然后在内存中发出它们。当剩余数量小于1000时,我们将向MySQL重新提交个数字。在最后一批数字发布后,批量写入。/P>

这样可以将数据库的连续操作移动到代码中,并进行异步获取和写入操作,以确保服务继续保持高并发性。

分布式

上面设计的系统只有一个点,即编号设备是单点,易于挂起。

可以使用分布式服务。如果分发,如果每个发件人在发送号码后需要与其他发件人同步,则可能不会太麻烦。

另一个想法是,你可以有两个编号设备,一个发行号码和一个双号码。发送号码后,它不再增加1,而是增加2。

比喻可用,我们可以分别使用1000个服务,发出0-999个号码,每个号码后递增1000个。这很简单,服务基本上不需要彼此沟通,做自己的事情。

实施

因为我懒得编写JDBC代码,所以我更懒于获取Mybatis,因此在代码中使用MySQL的地方使用Redis。

最后,分享一本采访书[Java核心知识点整理]涵盖JVM,锁定,高并发,反射,Spring原理,微服务,Zookeeper,数据库,数据结构等“,以及Java208面试问题(带答案)加入我的粉丝群(Java Fill Road:)并免费获得!掌握这些知识点,你可以在面试中赢得很多候选人,获得9999分。机会留给准备好的人,只有充分的准备,可以使自己在候选人中脱颖而出。

96

Java技术剑

0.1

2019.08.03 14: 47

字数1640

采访者:您是否经常注意到某些垃圾邮件包含短链接?

候选人:是的,就像这样!

记者:

为什么选择这种短链接?

有什么好处?

如果您要实施短链接生成服务,您将如何设计它?

在本文中,我们来谈谈上述问题!

首先,短网址的好处是:

短。短信和许多平台(微博)都有字数限制。如果添加的链接太长,则无法编写文本。

好看。短链接比许多未知参数更简洁和友好。

做一些统计很方便。如果您点击链接,有人会记录并分析它。

安全。不要公开访问参数。

这就是为什么我们现在收到的大多数垃圾邮件都是短网址。

那么短网址如何做呢?

短网址基础知识

从以下步骤使用的生成中生成短URL。

有一项服务会将长URL发送给您一个简短的URL。例如,

发送简短的网址到内容,如短信,然后发送。

用户点击短网址,浏览器会重定向301/302以访问相应的长网址。

显示相应的内容。

那么如何将长URL映射到短URL?

服务设计

如果你考虑长URL和短URL之间的真实对应关系,那么就去吧。

最理想的情况:我们使用算法将每个长URL唯一地转换为短URL。它还保持逆转换的能力。

但这是不可能的。如果有这样的算法,世界上所有的压缩算法都可以就位。

正确的想法是创建一个自动收报机。每当有新的长URL进入时,我们添加一个并返回新值。第一个网址返回'',两个返回''。

接下来,以QA:

的形式写几个小问题

如何存储通信?

这个相应的数据必须放在磁盘上,每次重启系统都不能重新注册,这样就可以使用mysql和其他数据库来存储。并且如果数据量很小且qps很低,则可以直接使用数据库的自增量主键来实现。/P>

如何确保长链接和短链接之间的一对一对应?

根据上述发行者策略,不能保证长链路和短链路之间的一对一对应关系。您使用相同的URL连续请求两次,结果值不同。

为了在长链接和短链接之间实现一对一的对应,我们需要付出很多空间,特别是对于快速响应,我们可能需要在内存中做一层缓存,这太浪费了。

但是,可以实现一些变体以实现部分一对一的对应关系,例如在K-V数据库中存储最新/最流行的对应关系,这可以节省空间并加快响应速度。

短网址存储

我们返回的短网址通常会转换为32位数,这样可以更有效地缩短网址长度

然后32位数字只是计算机的一个字符串。如何存放?直接存储字符串以找到等效值对于范围搜索来说太不友好了。

实际上,您可以直接存储十进制数字,这不仅占用更少的空间,而且还支持搜索。转换为更多/更少的十六进制代码以进一步缩短URL也更方便。

高并发性

如果直接存储在MySQL中,当并发请求增加时,数据库上的压力就太大,这可能会造成瓶颈。目前,可能会有一些优化。

高速缓存

以上保证了一对一的通信中也提到了长链接和短链接。在这里,我们将加快程序的处理。

您可以缓存流行的长链接(需要导入长链接的次数),最近的长链接(可以使用redis保存最后一小时)等,并将它们存储在内存或内存数据库中像redis。/P>

如果请求的长URL到达缓存,则直接检索并返回相应的短URL,无需执行构建操作。

批号

每次发送PIN时,都需要访问MySQL以获取当前的最大数量,并在获取后更新最大数量。这种压力相对较大。

我们每次都可以从数据库中获取10,000个数字,然后在内存中发出它们。当剩余数量小于1000时,我们将向MySQL重新提交个数字。在最后一批数字发布后,批量写入。/P>

这样可以将数据库的连续操作移动到代码中,并进行异步获取和写入操作,以确保服务继续保持高并发性。

分布式

上面设计的系统只有一个点,即编号设备是单点,易于挂起。

可以使用分布式服务。如果分发,如果每个发件人在发送号码后需要与其他发件人同步,则可能不会太麻烦。

另一个想法是,你可以有两个编号设备,一个发行号码和一个双号码。发送号码后,它不再增加1,而是增加2。

类比一下,我们可以使用1000个服务,分别发出0-999个数字,每个数字后增加1000个。这很简单,服务基本上不需要互相沟通,做自己的事情。

实施

因为我懒得写JDBC代码,所以我更懒得去获取mybatis,所以在代码中使用mysql的地方使用redis。

最后,分享一本采访书[JAVA核心知识点整理]涵盖JVM、锁定、高并发、反射、弹簧原理、微服务、动物园管理员、数据库、数据结构等”,以及Java208访谈问题(带答案)加入我的粉丝基础(Java填充路:)和免费得到!掌握这些知识点,你就可以在面试中赢得很多候选人,crit 9999分。机会留给有准备的人,只有有充分的准备,才能使自己在候选人中脱颖而出。

采访者:你经常注意到一些垃圾邮件包含短链接吗?

候选人:是的,像这样!

采访者:

为什么选择这种短链接?

有什么好处?

如果要实现短链接生成服务,您将如何设计它?

在本文中,我们来谈谈上面的问题!

首先,短URL:的好处

短。短信和许多平台(微博)都有文字限制。如果添加的链接太长,则无法写入文本。

好看。短链接比许多未知参数更简洁友好。

做一些统计很方便。如果你点击链接,有人会记录并分析它。

安全。不要公开访问参数。

这就是为什么我们现在收到的大多数垃圾邮件都是短网址。

那么短网址如何做呢?

短网址基础知识

从以下步骤使用的生成中生成短URL。

有一项服务会将长URL发送给您一个简短的URL。例如,

发送简短的网址到内容,如短信,然后发送。

用户点击短网址,浏览器会重定向301/302以访问相应的长网址。

显示相应的内容。

那么如何将长URL映射到短URL?

服务设计

如果你考虑长URL和短URL之间的真实对应关系,那么就去吧。

最理想的情况:我们使用算法将每个长URL唯一地转换为短URL。它还保持逆转换的能力。

但这是不可能的。如果有这样的算法,世界上所有的压缩算法都可以就位。

正确的想法是创建一个自动收报机。每当有新的长URL进入时,我们添加一个并返回新值。第一个网址返回'',两个返回''。

接下来,以QA:

的形式写几个小问题

如何存储通信?

这个相应的数据必须放在磁盘上,每次重启系统都不能重新注册,这样就可以使用mysql和其他数据库来存储。并且如果数据量很小且qps很低,则可以直接使用数据库的自增量主键来实现。/P>

如何确保长链接和短链接之间的一对一对应?

根据上述发行者策略,不能保证长链路和短链路之间的一对一对应关系。您使用相同的URL连续请求两次,结果值不同。

为了在长链接和短链接之间实现一对一的对应,我们需要付出很多空间,特别是对于快速响应,我们可能需要在内存中做一层缓存,这太浪费了。

但是,可以实现一些变体以实现部分一对一的对应关系,例如在K-V数据库中存储最新/最流行的对应关系,这可以节省空间并加快响应速度。

短网址存储

我们返回的短网址通常会转换为32位数,这样可以更有效地缩短网址长度

然后32位数字只是计算机的一个字符串。如何存放?直接存储字符串以找到等效值对于范围搜索来说太不友好了。

实际上,您可以直接存储十进制数字,这不仅占用更少的空间,而且还支持搜索。转换为更多/更少的十六进制代码以进一步缩短URL也更方便。

高并发性

如果直接存储在MySQL中,当并发请求增加时,数据库上的压力就太大,这可能会造成瓶颈。目前,可能会有一些优化。

高速缓存

以上保证了一对一的通信中也提到了长链接和短链接。在这里,我们将加快程序的处理。

您可以缓存流行的长链接(需要导入长链接的次数),最近的长链接(可以使用redis保存最后一小时)等,并将它们存储在内存或内存数据库中像redis。/P>

如果请求的长URL到达缓存,则直接检索并返回相应的短URL,无需执行构建操作。

批号

每次发送PIN时,都需要访问MySQL以获取当前的最大数量,并在获取后更新最大数量。这种压力相对较大。

我们每次都可以从数据库中获取10,000个数字,然后在内存中发出它们。当剩余数量小于1000时,我们将向MySQL重新提交个数字。在最后一批数字发布后,批量写入。/P>

这样可以将数据库的连续操作移动到代码中,并进行异步获取和写入操作,以确保服务继续保持高并发性。

分布式

上面设计的系统只有一个点,即编号设备是单点,易于挂起。

可以使用分布式服务。如果分发,如果每个发件人在发送号码后需要与其他发件人同步,则可能不会太麻烦。

另一个想法是,你可以有两个编号设备,一个发行号码和一个双号码。发送号码后,它不再增加1,而是增加2。

比喻可用,我们可以分别使用1000个服务,发出0-999个号码,每个号码后递增1000个。这很简单,服务基本上不需要彼此沟通,做自己的事情。

实施

因为我懒得编写JDBC代码,所以我更懒于获取Mybatis,因此在代码中使用MySQL的地方使用Redis。

最后,分享一本采访书[Java核心知识点整理]涵盖JVM,锁定,高并发,反射,Spring原理,微服务,Zookeeper,数据库,数据结构等“,以及Java208面试问题(带答案)加入我的粉丝群(Java Fill Road:)并免费获得!掌握这些知识点,你可以在面试中赢得很多候选人,获得9999分。机会留给准备好的人,只有充分的准备,可以使自己在候选人中脱颖而出。

频道热点
  1. 采访者:您是否经常注意到某些垃圾邮件包含短链接?候选人:是的,就像这样!记者:为什么选择这种短链接?有什么好处?如果您要实施短链接生成服务,您将如何设计它?在本文中,我们来谈谈上述问题!首先,短网址
  2.   尤文亚洲行,到韩国进行热身赛,结果尤文和K联赛全明星队的战斗成为3-3,但最重要的是C罗纳尔多没有出?
  3.     “如果不是尤纳斯出任广东宏远的主教练,如果他能够在坚持一个赛季,或许他就会在CBA证明自己了!?
  4.   ?李元芳的大招相当尴尬,理论上来说这个大招有着峡谷最高的伤害,当然事实也是如此,打龙这种蠢蠢的生?
  5. ?李乐诗想儿子们一人学一样乐器,开演唱会 歌手乔伊斯去了将军澳电视城的视频节目《流行经典50年》。她说她会唱三首国语歌。有慢慢的合唱,我必须事先读普通话老师。当被问到今年是否会有音乐计划时,她说她希望
  6. 采访者:您是否经常注意到某些垃圾邮件包含短链接?候选人:是的,就像这样!记者:为什么选择这种短链接?有什么好处?如果您要实施短链接生成服务,您将如何设计它?在本文中,我们来谈谈上述问题!首先,短网址
  7. ?最近几天在国内制作的动漫,没有任何宣传,火!这是《哪吒之魔童降世》。说实话,这部戏剧被一群网民称为“国家的崛起”。这不是没有道理的。无论是戏剧的完成还是主题的深度,这部剧都给了我们太多的惊喜。同样,
  8.   07:36  来源:易云道姓名风水老师将会进入事业巅峰,财富顺利,赚大钱的四大生肖  每个人都想功成名
  9.   尤文亚洲行,到韩国进行热身赛,结果尤文和K联赛全明星队的战斗成为3-3,但最重要的是C罗纳尔多没有出?
  10.   07:36  来源:易云道姓名风水老师将会进入事业巅峰,财富顺利,赚大钱的四大生肖  每个人都想功成名
新闻排行
  1.   07:36  来源:易云道姓名风水老师将会进入事业巅峰,财富顺利,赚大钱的四大生肖  每个人都想功成名

      07:36  来源:易云道姓名风水老师将会进入事业巅峰,财富顺利,赚大钱的四大生肖  每个人都想功成名...

  2. 弹簧春天很明亮,春天很温暖,春天已经满了。鸟和花,鲜花和鲜花,唱歌和跳舞万子千红,草长长,春天满是花

    弹簧春天很明亮,春天很温暖,春天已经满了。鸟和花,鲜花和鲜花,唱歌和跳舞万子千红,草长长,春天满是花...

  3. 弹簧春天很明亮,春天很温暖,春天已经满了。鸟和花,鲜花和鲜花,唱歌和跳舞万子千红,草长长,春天满是花

    弹簧春天很明亮,春天很温暖,春天已经满了。鸟和花,鲜花和鲜花,唱歌和跳舞万子千红,草长长,春天满是花...

  4. 早上8点,张叔叔从ICU的床上睁开眼睛,听着周围各种监视器的声音。张爷爷终于松了一口气。但是当我想到昨晚

    早上8点,张叔叔从ICU的床上睁开眼睛,听着周围各种监视器的声音。张爷爷终于松了一口气。但是当我想到昨晚...

  5. 采访者:您是否经常注意到某些垃圾邮件包含短链接?候选人:是的,就像这样!记者:为什么选择这种短链接?有什么好处?如果您要实施短链接生成服务,您将如何设计它?在本文中,我们来谈谈上述问题!首先,短网址

    采访者:您是否经常注意到某些垃圾邮件包含短链接?候选人:是的,就像这样!记者:为什么选择这种短链接?有什么好处?如果您要实施短链接生成服务,您将如何设计它?在本文中,我们来谈谈上述问题!首先,短网址...

  6. 陕西旅游信息公共ID:sx710075遵循该地区是西安最年轻的地区。它曾经是秦汉时期的旅游胜地。它被称为“中国

    陕西旅游信息公共ID:sx710075遵循该地区是西安最年轻的地区。它曾经是秦汉时期的旅游胜地。它被称为“中国...

  7.     红烧大虾  用料:  对虾若干;料酒三勺;糖一小勺;生抽两勺;淀粉适量;蒜末五小瓣(按自己口

        红烧大虾  用料:  对虾若干;料酒三勺;糖一小勺;生抽两勺;淀粉适量;蒜末五小瓣(按自己口...

  8.   这是疯了吧!  不要命了吗?7月22日在福州机场有一个非常激动人心的场景!网友

      这是疯了吧!  不要命了吗?7月22日在福州机场有一个非常激动人心的场景!网友...

  9.     “如果不是尤纳斯出任广东宏远的主教练,如果他能够在坚持一个赛季,或许他就会在CBA证明自己了!?

        “如果不是尤纳斯出任广东宏远的主教练,如果他能够在坚持一个赛季,或许他就会在CBA证明自己了!?...

  10. 弹簧春天很明亮,春天很温暖,春天已经满了。鸟和花,鲜花和鲜花,唱歌和跳舞万子千红,草长长,春天满是花

    弹簧春天很明亮,春天很温暖,春天已经满了。鸟和花,鲜花和鲜花,唱歌和跳舞万子千红,草长长,春天满是花...

友情链接