Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >短链系统设计-用户自定义短链

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

作者头像
JavaEdge
发布于 2022-09-14 00:01:10
发布于 2022-09-14 00:01:10
2.3K00
代码可运行
举报
文章被收录于专栏:JavaEdgeJavaEdge
运行总次数:0
代码可运行

5 用户自定义短链接

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

需实现三个方法:

  • long2Short(url) 把一个长网址转换成一个以http://tiny.url/开头的短网址
  • short2Long(url) 把一个短网址转换成一个长网址
  • createCustom(url, key) 设定一个长网址的短网址为 http://tiny.url/ + key

注意:

  1. long2Short 生成的短网址的key的长度应该等于6 (不算域名和反斜杠)。 可以使用的字符只有 [a-zA-Z0-9]。如: abcD9E
  2. 任意两个长的url不会对应成同一个短url,反之亦然
  3. 如果 createCustom 不能完成用户期望的设定, 那么应该返回 "error", 反之如果成功将长网址与短网址对应,应该返回这个短网址

5.1 基于 Base62

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

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

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

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

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

  • 先查询CustomURLTable是否存在
  • 再在URLTable查询和插入

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/09/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
通过Beego将之前实现的短url项目实现
正好通过这个小例子对之前了解的beego框架的基本内容进行一个简单的应用 实现的完整代码地址:https://github.com/pythonsite/go_simple_code/tree/master/beego_short_url 数据库没有什么变化,还是和之前一样,主要是把处理逻辑放到beego中就可以了 代码的主要目录为: localhost:beego_short_url zhaofan$ tree . ├── beego_short_url ├── conf │ └── app.conf
coders
2018/03/30
7190
通过Beego将之前实现的短url项目实现
短链系统设计-存储设计
scalability 要求多高?存储和 qps 都不高,单机都能搞定。sql+1
JavaEdge
2022/09/14
5890
短链系统设计-存储设计
设计一个短链接系统
我们可以讲十进制的数字id,转换为一个62进制的数,例如20201122就可以转换为WvOi。
用户3467126
2020/12/01
1.5K0
设计一个短链接系统
聊聊base62与tinyURL
base64大家肯定是很熟悉了,那base62是什么东东,它常被用来做短url的映射。
code4it
2018/09/17
1.9K0
Python后端技术栈(八)--系统设计
Breathe. Take care. Stand still for a minute. What you are looking for might just be looking for you too.
小闫同学啊
2019/07/18
1.6K0
Python后端技术栈(八)--系统设计
用PHP代码批量生成百度、新浪短网址,打造最炫的api接口
了几个短网址API服务,于是把它们整理出来,方便以后使用,目前,提供靠谱的短网址API接口的公司不多(google、baidu、新浪微博、网易等),而像腾讯微博、淘宝这几个巨子的短网址服务都是仅供内部使用.
用户8099761
2023/05/10
1.1K0
【数据结构与算法】Leetcode刷题笔记
设计一个方法调用若干次,每次返回 1~max 的数字,从 1 开始,返回数字的比例减半,例如 max = 4,让大概
程序员波特
2024/10/11
2100
URL短网址生成算法原理
短网址(Short URL),是在形式上比较短的网址,通过映射关系跳转到原有的长网址。
阳光岛主
2019/02/18
4.6K2
Go实现短url项目
首先说一下这种业务的应用场景: 把一个长url转换为一个短url网址 主要用于微博,二维码,等有字数限制的场景 主要实现的功能分析: 把长url的地址转换为短url地址 通过短url获取对应的原始长u
coders
2018/03/19
1.2K0
Go实现短url项目
如何设计一个短链接系统
短链接是一种将长URL地址转换为较短、易于记忆的链接的技术。它通过使用特定的算法或服务将长链接压缩成更短的形式,以便在限制字符长度或需要更简洁的场景下使用。
柯柏技术笔记
2024/01/10
8040
如何设计一个短链接系统
短网址生成相关
/*** * 短链接转换工具类 * * @author Administrator * */ public class ShortUrlHelper { public static CloseableHttpClient httpClient; static { httpClient = HttpClients.createDefault(); } /** * 将长链接转为短链接(调用的新浪的短网址API),需接入相应API
Dream城堡
2020/11/11
2.2K0
面试的系统设计题,给我整懵了。。。
微博或者短信都有单条发送字数的限制,如果需要分享一个长网址,很容易越出限制,短链服务可以将长网址变成短网址,方便传播。
JavaSouth南哥
2024/12/05
1560
面试的系统设计题,给我整懵了。。。
leetcode535. Encode and Decode TinyURL
TinyURL is a URL shortening service where you enter a URL such as https://leetcode.com/problems/design-tinyurl and it returns a short URL such as http://tinyurl.com/4e9iAk.
眯眯眼的猫头鹰
2020/05/12
3950
系统设计:URL短链设计
让我们设计一个像TinyURL这样的URL缩短服务。此服务将提供短别名重定向到长URL。类似服务:bit.ly、goo.gl、qlink.me等。难度等级:轻松
小诚信驿站
2021/09/03
6.4K3
系统设计:URL短链设计
如何实现一个短链接服务 | 短链接生成原理
短链接,通俗来说,就是将长的URL网址,通过程序计算等方式,转换为简短的网址字符串。
梦溪
2021/08/09
19.3K3
短链接算法收集与分析
一般来说,第三步是我们比较头疼的,如何将一个长的URL字符串,映射成一个较短的字符串呢。我总结了三种办法:
大江小浪
2018/07/25
1.7K0
30个类手写Spring核心原理之自定义ORM(下)(7)
EntityOperation主要实现数据库表结构和对象类结构的映射关系,代码如下:
Tom弹架构
2021/12/17
5470
微信公众号开发之推广支持
前几篇文章详细介绍了微信App支付、公众号支付、微信红包、微信刷卡以及支付宝支付,今天来聊聊 推广支持之生成带参数的二维码、长链接转短链接
Javen
2018/08/21
2.1K0
微信公众号开发之推广支持
Flink自定义OSS的Sink
基于上篇说明的OSS异常内容和功能弱的缘故,考虑自定义Sink处理的方式。主要关注点是文件命名的动态化和高效批写入。
平常心
2021/06/11
5.3K1
搭建短链接平台详细分析及具体代码实现
短链接,又称缩略网址服务、缩址、短址、短网址、缩略网址、网址缩短、缩短网址、URL缩短等,指的是一种互联网上的技术与服务。此服务可以提供短URL以代替原来可能较长的URL,将长的URL地址缩短。
Mintimate
2021/08/12
3.8K0
搭建短链接平台详细分析及具体代码实现
相关推荐
通过Beego将之前实现的短url项目实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档