短链系统设计-用户自定义短链

简介: 实现一个顾客短网址,使得顾客能创立他们自己的短网址。即你需要在前文基础上再实现一个 createCustom。

5 用户自定义短链接


实现一个顾客短网址,使得顾客能创立他们自己的短网址。即你需要在前文基础上再实现一个 createCustom。


需实现三个方法:


long2Short(url) 把一个长网址转换成一个以http://tiny.url/开头的短网址

short2Long(url) 把一个短网址转换成一个长网址

createCustom(url, key) 设定一个长网址的短网址为 http://tiny.url/ + key

注意:


long2Short 生成的短网址的key的长度应该等于6 (不算域名和反斜杠)。 可以使用的字符只有 [a-zA-Z0-9]。如: abcD9E

任意两个长的url不会对应成同一个短url,反之亦然

如果 createCustom 不能完成用户期望的设定, 那么应该返回 "error", 反之如果成功将长网址与短网址对应,应该返回这个短网址


5.1 基于 Base62


在URLTable里,直接新增一列custom_url记录对应的custom url是否可行?


不可行!对于大部分数据,该列其实都为空,就会浪费存储空间。


新增一个表,存储自定义 URL:CustomURLTable。

15.png



创建自定义短链接:在 CustomURLTable 中查询和插入


根据长链接创建普通短链接:


先查询CustomURLTable是否存在

再在URLTable查询和插入

同前文一样,用两个哈希表处理长网址和短网址之间的相互映射关系。需额外处理的是用户设定的网址与已有冲突时,需返回 “error”。注意:若用户设定的和已有恰好相同,则同样应该返回短网址。


public class TinyUrl2 {

   private HashMap<String,String> s2l = new HashMap<String,String>();

   private HashMap<String,String> l2s = new HashMap<String,String>();

   private int cnt = 0;

   private final StringBuffer tinyUrl = new StringBuffer("http://tiny.url/");

   private final String charset = "qwertyuiopasdfghjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM";

 

   private String newShortUrl() {

       StringBuffer res = new StringBuffer();

       for (int i = 0, j = cnt; i < 6; i++, j /= 62)

           res.append(charset.charAt(j % 62));

       cnt++;

       return tinyUrl + res.toString();

   }

 

   /*

    * @param long_url: a long url

    * @param key: a short key

    * @return: a short url starts with http://tiny.url/

    */

   public String createCustom(String long_url, String key) {

       String short_url = tinyUrl + key;

       if (l2s.containsKey(long_url)) {

           if (l2s.get(long_url).equals(short_url))

               return short_url;

           else

               return "error";

       }

       if (s2l.containsKey(short_url))

           return "error";

       l2s.put(long_url, short_url);

       s2l.put(short_url, long_url);

       return short_url;

   }

   /*

    * @param long_url: a long url

    * @return: a short url starts with http://tiny.url/

    */

   public String longToShort(String long_url) {

       if (l2s.containsKey(long_url))

           return l2s.get(long_url);

       String short_url = newShortUrl();

       l2s.put(long_url, short_url);

       s2l.put(short_url, long_url);

       return short_url;

   }

   /*

    * @param short_url: a short url starts with http://tiny.url/

    * @return: a long url

    */

   public String shortToLong(String short_url) {

       if (s2l.containsKey(short_url))

           return s2l.get(short_url);

       return "error";

   }

}



5.2 基于随机生成算法

无需做任何改动,直接把custom url当short url创建即可!


参考

https://www.zhihu.com/question/29270034

目录
相关文章
|
9月前
|
自然语言处理 NoSQL Redis
短链平台设计
一种生产环境可用的短链生成方法,将长度较长、难以识别的长链转换成长度可控的短链,点击短链再跳转回长链的方法
317 0
|
2月前
|
SQL JSON 缓存
小说系统方案搭建开发,实现系统的用户登录验证说明
本文总结了小说系统源码中常见的身份认证方式,涉及JWT和Shiro。传统的认证流程包括用户提交凭证、服务器保存Session数据、发送Session_id给客户端,后续请求携带Session_id。但这种方式在多服务器或跨域场景下扩展性差。解决方案有Session数据共享或持久化。作者将服务端维护Session信息的认证方式归类为传统方式,反之为非传统方式,后者扩展性更优。文中还介绍了实例项目的SQL建表结构,用于演示认证流程。
|
2月前
|
监控 小程序 安全
社区每周丨支付有礼支持引导用户收藏小程序及人脸认证接口更新(8.7-8.11)
社区每周丨支付有礼支持引导用户收藏小程序及人脸认证接口更新(8.7-8.11)
153 11
|
11月前
|
消息中间件 API 数据库
细谈商品详情API接口设计
随着互联网技术的发展,商品详情信息的展示和交互变得越来越重要。为了提供更好的用户体验,我们需要设计一套高效、稳定且易于扩展的商品详情API接口。本文将详细探讨商品详情API接口的设计,包括接口的通用性、安全性和扩展性等方面,并附有相应的代码实现。
|
数据挖掘 网络架构
短链系统设计-服务设计
该系统其实很简单,只需要有一个 service即可:URL Service。由于 tiny url只有一个 UrlService: 本身其实就是个小的独立应用 也无需关心其他任何业务功能
117 0
短链系统设计-服务设计
|
安全 Java API
手机号码归属地 API 实现防止骚扰电话,看这一篇就够了(内附设计思路和代码)
本文将会深入探讨如何利用手机号码归属地 API 在防止电话骚扰,此外,还会给大家列出手机号码归属地 API 的其他应用场景。
381 0
手机号码归属地 API 实现防止骚扰电话,看这一篇就够了(内附设计思路和代码)
|
缓存 安全 API
网络平台挑选实名制认证API接口的注意事项
网络平台实名制认证是对用户真实性身份进行的一种查验审核,有助于建立完善可靠的互联网信用基础。对于网络平台运营者来说,身份实名认证除了符合工信部监管政策外,也可以帮助平台方筛选掉部分无效客户,规避一定的风险,净化网络环境。
317 0
网络平台挑选实名制认证API接口的注意事项
|
存储 SQL NoSQL
短链系统设计-存储设计
3 Storage 数据存取(最能体现实践经验) select 选存储结构 scheme 细化数据表
108 0
|
小程序
符合预期的留言板小程序,新增消息通知功能!快来试用吧
符合预期的留言板小程序,新增消息通知功能!快来试用吧
235 0
符合预期的留言板小程序,新增消息通知功能!快来试用吧
|
存储 缓存 算法
系统设计系列之如何设计一个短链服务
短链服务的鼻祖是 TinyURL,是最早提供短链服务的网站,目前国内也有很多短链服务:新浪(t.cn)、百度(dwz.cn)、腾讯(url.cn)等等。
485 0
系统设计系列之如何设计一个短链服务