面试中如何化解懵逼,从一个短网址服务说起

后端面试之系统设计-短网址(Short URL)服务怎么设计? 短网址生成算法数据库怎么设计怎么重定向高并发情况下的高可用数据量过大怎么处理【码农在新加坡】,有更多好的技术分享。【码农在新加坡】,欢迎关注。后端面试之系统设计-短网址(ShortURL)服务怎么设计?httpshttpshttpshttpshttps。......... 阅读详情

640?wx_fmt=jpeg

作者:寒食君

来源:公众号寒食君

我觉得面试题可以分为两种,一种是“客观题”,比如考察面试者知不知道那个知识点、面试者对这个知识点的理解有多深。比如,面试官可能会问你:“知道Java的内存模型吗?来说说吧。”

另外一种是“主观题”,即抛出一个场景问题,考察在主观上,面试者将会如何动用自己的知识去解决。比如,面试官会这样问你:“假如需求中有一个注册登录模块,你会怎么去设计实现它?”

两者比较,我觉得第二种问题难度更大。因为客观题是可以通过刷题和记忆来提升自己的,而主观题就考察了你对这些知识是否真的理解、能够将它们组织运用起来、是否有关的实战经验等。

640?wx_fmt=jpeg

下面我将针对第二种问题,以一个我实际遇到过的真实面试问题来展开。当然,和实际开发有些不同的是,面试更需要保持冷静、随机应变、有逻辑地思考问题、清晰流畅的语言表达,尤其是面对从未涉足过,一时半会毫无头绪的问题。

记得在实习面试的时候,我遇到了这个问题:现在市面上有一些将长网址变为短网址的服务(百度的dwz.cn就是这样的一个服务,可以去体验一下),比如你短信里收到的链接就是短网址,这些是如何实现的呢?

640?wx_fmt=png

我当时听到这个问题有点懵,这面试官不按套路出牌啊,怎么不问我面经里的知识点?

640?wx_fmt=jpeg

懵归懵,心态一定不能炸,于是我故作镇定:不好意思,这个问题我之前没接触过,请先给我两分钟思考下。

我首先梳理了一下问题,总结出这个问题所要达成的目标:

1.使网址变短

2.依然可用(不会产生冲突)

我的第一反应是:长网址变短网址,这不是数据的压缩吗?那么怎么才能将一个字符串压缩成另一个字符串呢?而且不会产生冲突。我想到了签名算法,比如MD5这种,它可以将任意长的字符串经过签名后都变成指定的相同长度。

但是呢,它存在问题,首先,MD5在理论上也是可能产生碰撞的。可以尝试换用SHA-1或其他散列算法。其次,输出的签名是定长,比如说32位,那么无论原网址多长,输出输出的短网址都是32位,对于原长度小于32位的网址来说,它不仅没有缩短,反而加长了,所以这在通用性上存在问题。

此时我又想到了另一种方法。在ASCII字符集中,一个字符占一个字节,我能不能自己定义一个新的字符集和编码方式,比如用四位来确定一个字符,通过这种方式让数据尽量“挤”一些。仔细一想,这应该是无法实现的,因为128个字符最少也需要7位来表示,无论如何4位也无法胜任。既然4位无法胜任,那么6位呢?因为有一个著名的Base64编解码方法,可以将64个字符从一个字节的8位,重新编排为6位,这样就能使得字符串变短了。

Base64的方法看上去可以,但实际是行不通的,因为在Base64表中,不存在像“-”、“.”、“:”这种网址中出现的字符。

640?wx_fmt=png

眼看两分钟就过去了,没办法,我只能先把面试官稳住。我告诉了他我刚才的想法,然后又自己否决了它,为了再争取一点思考的时间。

把你思考的痕迹展现出来,说明你是真的在思考,假如你思考的内容是有逻辑的话,面试官也会理解。如果你实在没有头绪,也可以尝试向面试官要一些提示。

640?wx_fmt=jpeg

于是我继续考虑这个问题,因为信息本身的长度,使用自定义编码的方式其实是收效甚微的。难道我走错了方向?既然都是映射,我我什么一定要在字符串本身做文章呢?

我灵光一闪,或许我可以这样,直接来一个网址,我自增一个,用来作为这个网址的key。比如:来一个google.com 我编号1,来一个github.com 我编号2....

此时,我看面试官已经等了一会儿了,不能再拖了,于是我赶紧把上面的想法说了,面试官一边应答,一边听了我的想法,然后问我:“那么遇到相同的长网址呢?查表吗?”

640?wx_fmt=jpeg

我回答:“每次遇到请求都去查表的话,一旦请求数量上去了,可能会遇到阻塞的问题。可以使用内存数据库来做缓存,但是如果被查询的长网址的量非常大,内存好像也存在问题。”

面试官说:“不一定要存全量的,其实只要存一些热门的,当请求过来,判断是否击中缓存,若击中,就刷新失效时间,这样,热门的一直在缓存中,而非热门的就会被缓存淘汰。若未击中,就查表或重新生产,具体是查表快,还是重新生产快,这个需要测试。”

“那么,如果对一个热度不高的长网址进行了多次生成,出现了多个不同的短网址的话,就无法一对一了吧?”这下变成我反过来提问了。

面试官说:“为什么一定要一对一呢?不热门的网址,本身出现的可能性较低,多生产几次,不会浪费很多空间。”

我恍然大悟,原来自己的思维一直被自己限制着。如何跳脱这种桎梏,只有多见识,多实践才可以弥补。

(完)

扫码关注“寒食君”

640?wx_fmt=png

面试题|短url系统设计 短url系统设计题目Constants设计方法1: counterbase62编码方法2 随机数方法3 MD5scale 题目 设计短url系统,将长url转换为7字符的短url,并可以根据短url查询原url; www.world.com/abc1234 Constants 系统MUA以及数据容量预估: MUA:30M 数据容量模型: long url : 2KB (2048 charac... 阅读详情

相关推荐

面试题-在浏览器输入网址后执行发生什么

在浏览器输入网址后执行发生什么? 第一步:查找域名对应的IP地址。 浏览器缓存->系统缓存->路由器缓存->dns缓存->根域服务器 第二步:浏览器向IP响应的web服务器发送一个HTTP请求 第三步:服务器响应请求,发回网页内容 第四步:浏览器解析网页内容 ...

千寻的博客 1万+

面试场景题系列:设计URL短链

在本章中,我们将解决一个有趣且经典的系统设计面试问题:设计类似TinyURL的URL缩短器。

launch2020的博客 1711

数据挖掘实战:决策树 + 聚类 + 关联规则,零 Key 离线可跑(Python 源码)

数据挖掘实战包。用 Python 标准库实现 CART 风格决策树、K-Means 聚类与 Apriori 关联规则,在虚构「星河便利店」会员表和购物篮上跑通分类、分群与购物篮分析,并给出准确率、轮廓系数、支持度/置信度/提升度。零第三方依赖、零 API Key 即可离线跑通。含 4 个样例、离线冒烟、中文 README(含「使用方法」)。均为作者原创可运行源码。MIT。作者 blog.youkuaiyun.com/mtl1994

面试的时候怎么回答如何设计一个短链接系统?说完方案面试官惊呆了

总的来说,设计短链接系统需要综合考虑存储、算法、性能、扩展性等多个方面。通过合理的技术选型和架构设计、可以构建一个高性能、高可用的短链接系统。

wy990880的博客 1564

产业园区如何高效对接企业技术需求与高校科研成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

国央企创新负责人如何快速掌握本地科技资源分布与匹配情况?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

如何实现一个类似新浪微博的短链接服务!

点击蓝色“架构文摘”关注我哟加个“星标”,每天上午 09:25,干货推送!来源:https://www.cnblogs.com/rickiyang/p/12178644.html短链接,...

架构文摘 902

国央企创新负责人如何实现科技成果的精准识别与高效筛选?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

如何将一个长URL转换为一个短URL?

一、前言 前几天整理面试题的时候,有一道试题是《如何将一个很长的URL转换为一个短的URL,并实现他们之间的相互转换?》,现在想起来这是一个绝对不简单的问题,需要考虑很多方面,今天和大家一起学习研究一下! 短网址:顾名思义,就是将长网址缩短到一个很短的网址,用户访问这个短网址可以重定向到原本的长网址(也就是还原的过程)。这样可以达到易于记忆、转换的目的,常用于有字数限制的微博、二维码等等场景。...

徐刘根的博客 7万+

信号完整性仿真SI之Cadence Sigrity SPEED2000_眼图仿真(四)

今天给大家分享一个仿真的操作流程,是关于Cadence Sigrity SPEED2000的时域波形仿真和眼图仿真。我们会经常看见硬件工程师调试示波器上的一些信号的波形变化,其实这些也可以通过仿真电路的搭建来做出投板前的仿真,来优化走线,以减少版本的迭代次数。如果要和实际的信号保持一致,就要求仿真设置的参数和实际的参数保持一致,这也是仿真的重点和难点。下面先让我们了解一下Cadence Sigrity SPEED2000时域仿真的操作流程: 1.仿真模式选择与文件导入 选择Cadence Sigrity下的

刘小同学的博客 1万+

深入浅出PWM:用示波器带你理解占空比与滤波效果

本文通过示波器实测,深入浅出地解析了PWM(脉宽调制)的核心原理。从占空比与平均电压的关系入手,详细演示了RC及有源滤波器如何将数字方波“翻译”为平滑模拟电压,并探讨了PWM-DAC的精度、响应速度等关键设计考量,为硬件调试与电路设计提供了实用的实践指导。

weixin_29292431的博客 345

系统设计与实现

无

MaYingColdPlay的博客 1723

SimpleFOC STM32实战:基于F103与HAL库,剖析速度环与电流环的协同控制

本文详细介绍了基于STM32F103与HAL库的SimpleFOC实战应用,重点剖析速度闭环控制与电流环的协同工作原理。通过开发环境搭建、参数调试技巧及性能优化方案,帮助开发者高效实现无刷电机精准控制,适用于机器人、无人机等高精度应用场景。

weixin_29170327的博客 476

介绍我的一位技术大牛朋友:寒食君

和寒食君认识,是在互联网上一次偶然的聊天。他和大部分人一样,来自一座小城,读了一所普通的大学。但是又有点不太一样,他不甘平庸,不惧挑战。他知道自己想要什么,在技术这条路上,他走得很笃定,...

程序员小灰的博客 1396

3D视觉-结构光测量-线结构光测量

线结构光测量中,由激光器射出的激光光束透过柱面透镜扩束,再经过准直,产生一束片状光。这片光束像刀刃一样横切在待测物体表面,因此线结构光法又被成为光切法。线结构光测量常采用二维面阵CCD作为接受器件,因此只要通过增加垂直于面阵探测器的第三维度方向,就可以实现对三维物体的测量。

qq_20660115的博客 3129

H3C BGP联盟实验

bgp,bgp联盟,bgp公认团体属性,

一只懒羊羊 970

在爱奇艺的B站大佬,有点强

和寒食君认识,是几年前在互联网上一次偶然的聊天。他和大部分人一样,来自一座小城,读了一所普通的大学。但是又有点不太一样,他不甘平庸,不惧挑战。他知道自己想要什么,在技术这条路上,他走得很...

a934079371的博客 261

基于POD和神经网络的多工况温度场重构反演系统

本文提出了一种基于本征正交分解(POD)和神经网络的多工况温度场重构反演系统。该系统通过POD方法从多工况温度场数据中提取主要特征模态,构建神经网络模型建立工况参数与POD模态系数的映射关系,实现温度场的快速重构。系统采用Python实现,包含数据预处理、POD分解、神经网络训练和温度场重构等模块。实验结果表明,该方法能够有效降低计算复杂度,实现高精度的温度场预测。

huanghm88的专栏 276

URL短网址生成算法原理

短网址(Short URL),顾名思义就是在形式上比较短的网址。通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流。目前已经有许多类似服务,借助短网址您可以用简短的网址替代原来冗长的网址,让使用者可以更容易的分享链接。         例如:http://t.cn/SzjPjA         短网址服务,可能很多朋友都已经不再陌生,现在大部分微博、手机邮件

在你最感兴趣的事物上,隐藏着你人生的秘密 4万+

duilib入门基础一 容器之 BOX、VBOX、HBOX布局及其子控件align排列方式

序 容器 duilib有以下主要布局容器 Box(自由布局容器) VBox(垂直布局容器) HBox(水平布局容器) TabBox(多标签布局容器) TileBox(格子布局容器) ChildBox(子布局容器) ScrollableBox(可滚动容器) 一、Box容器布局 Box容器及其扩展VBox HBox是其中最常用的容器。 相对Box来说,HBox, VBox更好理解些 1.1 VBox HBox VBox下的各个控件垂...

目前打算换一个工作,有招聘windows c++方向的也欢迎联系,北京、济南 最好 3083

关于React Native Android找不到node的错误

最近,按照官方文档初始化了一个React Native项目,但是在Android端运行的时候,报了如下的一个错误。 org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:recordFilesBeforeBundleCommandDebug'. Caused by: org.gradle.process.internal.ExecException: A problem occurred starting p

xiangzhihong8的专栏 4246

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

面试官:你平时是否留意过一些垃圾短信中包含短链接? 候选人:有的,就像下面这样! 面试官: 为什么选择这种短链接这种方式? 有什么好处? 如果让你实现一个短链接的生成服务,你会怎么设计? 这篇文章,我们就来聊聊上述问题! 首先,短url的好处: 短. 短信和许多平台(微博)有字数限制,太长的链接加进去都没有办法写正文了. 好看. 比起一大堆不...

qq_39581763的博客 486

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

浏览器输入一个网址后执行的过程

当我们在浏览器里输入一个网址后它的底层大概是这样的 我们把网络包当成一块buffer 客户端浏览器会通过DNS解析出网址的IP地址 通过这个IP地址找到客户端到服务器的路径, 然后向服务器发送一个请求 加上HTTP头,发出一个HTTP请求, buffer再给TCP层,在TCP加上了TCP头,里面含有目标端口 buffer再给三层,然后加上IP头,里面含有目标地址 buffer再给二...

OrangeRawNorthland的博客 910

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: 华为无愧于芯
下一篇: Elastic Search 上市了,Slack上市了,我也要写个软件,走上人生巅峰
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值