短链系统设计-用户自定义短链
系统 用户 设计 自定义 短链
2023-06-13 09:12:29 时间
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。
创建自定义短链接:在 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
相关文章
- 一文带你系统掌握JDK8新特性
- 十几亿用户中心系统架构
- 用户与权限系统设计的问题(续)
- CentOS7-命令-查看目前登入系统的用户信息(w)
- 2.8K Star看看人家那智能在线爬虫系统,那叫一个优雅
- 删除Linux系统中的用户(linux中删除用户)
- 性能优化提升Linux系统I/O性能的有效方法(linux磁盘io)
- Linux系统下MM命令实现内存管理(linuxmm命令)
- 管理Linux系统的用户权限(linux的用户管理)
- 修改密码如何在Linux系统中修改用户密码(linux系统怎么)
- 参考手册深入理解Linux系统的Man参考手册(linux的man)
- 探究Linux系统的强大优势!(linux系统优势)
- 用户开启Linux之旅:新建用户(linux系统新建)
- Linux命令让您更好地掌握系统操作(linux命令执行路径)
- 用Oracle虚拟机运行XP系统,方便实现多平台应用兼容(oracle虚拟机xp)
- Uboot加速启动Linux,让系统更快运行!(uboot启动linux)
- 用户学会在Linux系统中切换MySQL用户(linux切换mysql)
- 优化系统性能建立361mysql集群环境(361mysql集群形式)
- Oracle系统中内置用户的作用及用途(oracle中的内置用户)
- 在Oracle系统中创建用户(oracle下创建用户)
- Oracle GC重装确保系统稳定性(oracle gc重装)
- 复杂系统中的用户权限数据库设计解决方案
- DJANGO-ALLAUTH社交用户系统的安装配置