关键词:
一、考点聚焦
如何设计与实现一个短网址系统
1.什么是短网址系统?包含哪些功能(接口)
2.短网址系统的存储设计?需要存储哪些字段?
3.如何设计算法生成短网址?
二、什么是短网址系统?
TinyUrl Service
1.把一个长网址转成短网址的服务
2.比如 https://bitly.com/
3.转换之后网址的后缀不超过7
位(字符或者数字)
场景和限制
使用场景:提供短网址服务为公司其他各业务服务
1.功能:一个长网址转成短网址并存储;根据短网址还原长url
2.要求短网址的后缀不超过7
位(大小写字母和数字)
3.预估峰值插入请求数量级:数百;查询请求数量级:数千
数据存储设计:
根据需求设计数据存储方式
1.使用Mysql
即可满足
2.需要的字段有哪些?
Mysql
数据表:
字段 | 说明 |
---|---|
id | ID |
token | token |
url | 原网址 |
created_at | 创建时间 |
三、算法实现设计
短网址生成算法有哪些?对比优缺点
1.两个API
:long2short_url
、short2long_url
2.常用算法:hash
算法截取;自增序列算法
3.对比多种算法,我们采取自增序列算法实现
思路解析图:
进制转换:不断取余,倒序输出
def mybin(num): # 10进制--> 2进制串
if num == 0:
return 0
res = []
while num:
num, rem = divmod(num, 2) # divmode()函数返回 num//2, num%2
res.append(str(rem))
return ''.join(reversed(res))
CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
def encode(num):
if num == 0:
return CHARS[0]
res = []
while num:
num, rem = divmode(num, len(CHARS)) # 62
res.append(CHARS[rem])
return ''.join(reversed(res))
print(encode(1)) # a
print(encode(62)) # 9
编码实现:
使用Flask
框架演示本系统实现
1.代码里实现了短网址生成算法
2.数据库使用Mysql
3.计数器使用Redis
import os
from flask import Flask, jsonify, render_template, request
from flask_mysqldb import MySQL
from flask.ext.redis import FlaskRedis
app = Flask(__name__)
app.config['MYSQL_USER'] = 'root'
app.config['MYSQL_PASSWORD'] = os.getenv('MYSQL_PASS')
app.config['MYSQL_DB'] = 'test'
app.config['MYSQL_CURSORCLASS'] = 'DictCursor'
mysql = MySQL(app)
redis_store = FlaskRedis(app)
CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
def encode(num):
if num == 0:
return CHARS[0]
res = []
while num:
num, rem = divmode(num, len(CHARS)) # 62
res.append(CHARS[rem])
return ''.join(reversed(res))
@app.route('/shorten', methods=['POST'])
def shorten_url():
long_url = request.json['url']
index = int(redis_store.incr('SHORT_CNT'))
token = encode(index)
sql = "INSERT INTO short_url(token, url) VALUES(%s, %s)"
cur = mysql.connection.cursor()
cur.execute(sql, (token, long_url))
mysql.connection.commit()
short_url = 'https://short.com/' + token
return jsonify(dict(url=short_url))
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=1)
数据库表结构:
CREATE TABLE short_url(
id bigint unsigned NOT NULL AUTO_INCREMENT,
token varchar(10),
url varchar(2048),
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY ('id')
KEY `idx_token` (`token`)
);
回答重点:
回答要点,最好图文并茂
1.遵守三个要素回答
2.包含数据表的设计、api
的设计、算法的设计
3.图文并茂,有数据表、接口定义、流程图
10-1系统设计考点解析(代码片段)
一、考点聚焦:1.什么是系统设计?2.系统设计需要掌握哪些知识?3.如何设计和实现一个后端系统服务的设计?二、什么是系统设计?SystemDesign:1.系统设计是一个定义系统架构、模块、接口和数据满足特定需... 查看详情
2021年下半年系统架构设计师下午真题及答案解析
试题一(共25分) 某公司拟开发一套机器学习应用开发平台,支持用户使用浏览器在线进行基于机器学习的智能应用开发活动。该平台的核心应用场景是用户通过拖拽算法组件灵活定义机器学习流程,采用自助方式进行... 查看详情
10-1系统设计考点解析(代码片段)
一、考点聚焦:1.什么是系统设计?2.系统设计需要掌握哪些知识?3.如何设计和实现一个后端系统服务的设计?二、什么是系统设计?SystemDesign:1.系统设计是一个定义系统架构、模块、接口和数据满足特定需... 查看详情
url短网址系统的算法设计及实践
在通常情况下,URL是由系统生成的,通常包括URI路径,多个查询参数,可以对参数进行加密和解密。当人们要分享某个URL,比如短信,邮件,社交媒体,这就需要短URL。而短网址,顾名思义就是在长度上比较短的网址。简单来说... 查看详情
后端面试之系统设计-短网址(shorturl)服务怎么设计?(代码片段)
...加坡】,欢迎关注。个人博客网站:后端面试之系统设计-短网址(ShortURL)服务怎么设计?背景短网址(shorturl),就是将长网址缩短为一个很短的网址,用户访问这个短网址可以重定向到原本... 查看详情
后端面试之系统设计-短网址(shorturl)服务怎么设计?(代码片段)
...加坡】,欢迎关注。个人博客网站:后端面试之系统设计-短网址(ShortURL)服务怎么设计?背景短网址(shorturl),就是将长网址缩短为一个很短的网址,用户访问这个短网址可以重定向到原本... 查看详情
数据结构与算法简记--实现一个短网址系统(代码片段)
实现一个短网址系统短网址服务把一个长的网址转化成一个短的网址,访问这个短网址,就相当于访问原始的网址原始网址:https://github.com/wangzheng0822/ratelimiter4j短网址:http://t.cn/EtR9QEG上面第二个网址是通过新浪提供的短网址服... 查看详情
2018年系统架构设计师下午真题及答案解析
...xff09;某文化产业集团委托软件公司开发一套文化用品商城系统,业务涉及文化用品销售、定制、竞拍和点评等板块,以提升商城的信息化建设水平。该软件公司组织项目组完成了需求调研,现已进入到系统架构设计阶... 查看详情
「systemdesign」设计一个短链接系统
短链接系统可以把比较长的URL网址转换成简短的网址字符串,短链接的优势是方便传播。适合在一些对字符串长度有要求的场景中使用,比如短信,微博等,比如https://www.cnblogs.com/myshowtime/p/16227260.html转换成短链... 查看详情
2022年下半年系统架构设计师下午真题及答案解析
试题一(25分)某电子商务公司拟升级其会员与促销管理系统,向用户提供个性化服务,提高用户的粘性。在项目立项之初,公司领导层一致认为本次升级的主要目标是提升会员管理方式的灵活性,由于当前用户规模... 查看详情
后端面试之系统设计-短网址(shorturl)服务怎么设计?(代码片段)
...加坡】,欢迎关注。个人博客网站:后端面试之系统设计-短网址(ShortURL)服务怎么设计?背景短网址(shorturl),就是将长网址缩短为一个很短的网址,用户访问这个短网址可以重定向到原本... 查看详情
短网址
...。2.生成短网址后,保存短网址与原网址映射关系,由本系统域名对外转发并跳转。使用第二种方法实现方式如下:1publicclassShortUrl{2publicstaticStringShortText(StringoriginalUrl){3Stringkey="com.maidepiao";4Stri 查看详情
系统架构设计师2009-2018历年综合知识案例分析论文真题及答案详细解析
https://blog.csdn.net/xxlllq/article/details/85049295??系统架构设计师复习资料当您看了这篇文章有何疑问,可先看最后的评论,有可能您遇到的问题其他人已经提出我已回复。2018/12/14查询成绩后知道自己通过了系统架构设计师的考试(每... 查看详情
2018年下半年软件设计师下午真题及答案解析
...09;某房产中介连锁企业欲开发一个基于Web的房屋中介信息系统,以有效管理房源和客户,提高成交率。该系统的主要功能是:1.房源采集与管理。系统自动采集外部网站的潜在房源信息,保存为潜在房源。由经纪人联系... 查看详情
2018年系统架构设计师上午真题及答案解析
...序列如下表所示。如果采用最短移臂调度算法,那么系统的响应序列应为( )。A.②⑧③④⑤①⑦⑥⑨ B.②③⑧④⑥⑨①⑤⑦C.①②③④⑤⑥⑦⑧⑨ D.②⑧③⑤⑦①④⑥⑨2.3.某计算机系统中的进程管... 查看详情
2022年下半年系统架构设计师上午真题及答案解析
1.云计算服务体系结构如下图所示,图中①、②、③分别与SaaS、PaaS、Iaas相对应,图中①、②、③应为( )。A.应用层、基础设施层、平台层 B.应用层、平台层、基础设施层C.平合层、应用层、基础设施层 D.平台... 查看详情
13.go语言高并发与微服务实战---综合实战:秒杀系统的设计与实现
13.综合实战:秒杀系统的设计与实现 秒杀系统设计原则: 1.数据要尽量少 2.请求数尽量少 3.路径要尽量短 4.依赖要尽量少 5.尽量不要有单点 查看详情
13.go语言高并发与微服务实战---综合实战:秒杀系统的设计与实现
13.综合实战:秒杀系统的设计与实现 秒杀系统设计原则: 1.数据要尽量少 2.请求数尽量少 3.路径要尽量短 4.依赖要尽量少 5.尽量不要有单点 查看详情