系统设计
文章平均质量分 79
JavaEdge.
关注并私信我,获取更多大厂求职经验。《编程严选网》创始人
展开
-
图解API设计风格,看一眼就忘不了了!
点击下方“JavaEdge”,选择“设为星标”第一时间关注技术干货!免责声明~任何文章不要过度深思!万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案」;不要急着评判文章列出的观点,只需代入其中,适度审视一番自己即可,能「跳脱出来从外人的角度看看现在的自己处在什么样的阶段」才不为俗人。怎么想、怎么做,全在乎自己「不断实践中寻找适合自己的大道」1...原创 2023-11-18 23:59:23 · 260 阅读 · 0 评论 -
获取Top 10热门搜索关键词算法设计
搜索引擎每天接收大量用户搜索请求,把这些用户输入的搜索关键词记录,再离线统计分析,得到热门TopN搜索关键词。现有一包含10亿个搜索关键词的日志文件,如何快速获取热门榜Top 10搜索关键词?可用堆解决,堆的几个应用:优先级队列、求Top K和求中位数。原创 2023-01-13 04:40:46 · 964 阅读 · 0 评论 -
2024年系统设计备战TopN书单!
点击下方“JavaEdge”,选择“设为星标”第一时间关注技术干货!免责声明~任何文章不要过度深思!万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案」;不要急着评判文章列出的观点,只需代入其中,适度审视一番自己即可,能「跳脱出来从外人的角度看看现在的自己处在什么样的阶段」才不为俗人。怎么想、怎么做,全在乎自己「不断实践中寻找适合自己的大道」0...原创 2023-11-16 21:43:16 · 294 阅读 · 0 评论 -
Google Docs系统设计详解(协作文档编辑)
点击下方“JavaEdge”,选择“设为星标”第一时间关注技术干货!免责声明~任何文章不要过度深思!万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案」;不要急着评判文章列出的观点,只需代入其中,适度审视一番自己即可,能「跳脱出来从外人的角度看看现在的自己处在什么样的阶段」才不为俗人。怎么想、怎么做,全在乎自己「不断实践中寻找适合自己的大道」1...原创 2023-11-26 21:51:22 · 640 阅读 · 0 评论 -
如何备战2024年系统设计面试?
点击下方“JavaEdge”,选择“设为星标”第一时间关注技术干货!原创 2023-11-15 15:20:41 · 684 阅读 · 6 评论 -
如何用Java设计自动售货机?
如何用Java设计自动售货机?是大多在高级Java开发人员面试中经常被问到的好问题之一。在典型的编码面试中,你会得到一个问题描述来开发一个售货机,在有限的时间内,通常2到3小时内,你需要在Java中编写设计文档、工作代码和单元测试。这种Java面试的一个关键优势是可以一次测试候选人的许多基本技能。为了完成售货机的设计、编码和单元测试,候选人需要在这三个方面都非常出色。顺便说一句,这种真实世界的问题也是一个很好的练习,可以提高你的面向对象分析和设计技能,如果你想成为一个好的应用程序开发人员,这一点非常重要。原创 2023-11-16 14:10:00 · 1076 阅读 · 1 评论 -
撮合交易系统简介
金融市场:为了应对更高峰值的成交量,国内各金融机构,主要是交易所和银联、中心之间需求越来越多:其中最重要的就是撮合系统:系统拓扑图:委托终端/柜台:网关:排队机:撮合核心:委托单流转顺序:在我国的金融市场之下,主要包括两大市场:商业银行拿到个人存款后:所以,货币市场就是资金流动市场。帮助企业上市,即发行中介(投行)。委托中介(经纪)个人必须通过证券公司,才能在交易所开户。后续使用 k8s。我们重点攻克后端服务的原创 2023-03-28 22:03:55 · 1634 阅读 · 0 评论 -
IM即时通信系统数据多端同步解决方案
在 IM Server 收到加好友请求后且处理成功过后,IM Server 再主动发送特定指令及对应变化的好友信息给到其它设备端。而且客户端通过 SDK 去拉取好友,还是全量拉取,若只是为一个好友数变化而全量。数据同步强依赖于业务服务端,若回调过程任一节点失败,依旧无法同步通讯录。因为好友数据其实是不会频繁变化的,导致每次拉去的数据可能都是一样的。业务服务可以知道谁加了谁的,即可调用 IM 服务通知客户端拉取。业务服务端和 IM 服务端需新增交互逻辑。每个客户端定时轮询服务端,请求好友列表。原创 2023-03-16 13:57:26 · 580 阅读 · 0 评论 -
位图:爬虫URL去重最佳方案
布隆过滤器非常适合这种不需要100%准确的、允许存在小概率误判的大规模判重场景。除了爬虫网页去重这个例子,还有比如统计一个大型网站的每天的UV数,也就是每天有多少用户访问了网站,我们就可以使用布隆过滤器,对重复访问的用户,进行去重。布隆过滤器的误判率,主要跟哈希函数的个数、位图的大小有关。当我们往布隆过滤器中不停地加入数据之后,位图中不是true的位置就越来越少了,误判率就越来越高了。所以,对于无法事先知道要判重的数据个数的情况,我们需要支持自动扩容的功能。原创 2023-02-13 15:24:04 · 443 阅读 · 0 评论 -
如何减少频繁创建数据库连接的性能损耗?
池子的最大值、最小值设置很重要,初期可依据经验设置,后面还是需要根据实际运行情况调整。池子中的对象需在使用前预先初始化完成,即预热,如使用线程池时,就要预初始化所有核心线程。若池子未经预热,可能导致系统重启后产生较多慢请求。池化技术核心是一种空间换时间优化方法的实践,所以要关注空间占用情况,避免出现空间过度使用出现内存泄露或频繁GC。原创 2023-01-16 02:13:22 · 3657 阅读 · 1 评论 -
大厂如何过滤垃圾短信?
如果只是自己盘脑袋想,哪些单词属于特殊单词,那势必有比较大的主观性,也很容易漏掉某些单词。可基于概率统计方法,借助计算机强大的计算能力,找出哪些单词最常出现在垃圾短信中,将这些最常出现的单词,作为特殊单词,用来过滤短信。不过这种方法的前提是,我们有大量的样本数据,也就是说,要有大量的短信(比如1000万条短信),并且我们还要求,每条短信都做好了标记,它是垃圾短信还是非垃圾短信。原创 2023-01-10 23:06:00 · 462 阅读 · 0 评论 -
电商系统概要设计
首先,系统的角色是:用户、运营人员和老板。这三个角色对电商系统的需求是:用户使用系统来购物,运营人员负责销售商品,老板关注系统中经营数据。电商系统最核心的流程就是用户购物的流程,流程从用户浏览选购商品开始,加购、下单、支付、运营人员发货、用户确认收货,至此流程结束。细化这个流程之后,我们可以分析出,支撑这个流程几个核心的功能模块:商品、订单、购物车、支付和库存。此外,还需要促销、用户、账户、搜索推荐和报表这些必备的功能模块支撑,才能构成一个完整的电商系统。原创 2023-01-04 22:47:36 · 1426 阅读 · 2 评论 -
NewSQL如何解决高可用、分片?
无论你其他方面做的比Old SQL好再多,SQL和ACID是刚需,这个命你革不掉的。你不支持SQL,就不会有多少人用。所以近几年很多之前不支持SQL的数据库,都开始支持SQL了,甚至于像Spark、Flink这样的流计算平台,也都开始支持SQL。当然,虽然说支持SQL,但这里面各个产品的支持程度是参差不齐的,多多少少都有一些缩水。对于ACID的支持,基本上等同于就没有。New SQL它来了!完整地支持SQL和ACID,提供和Old SQL隔离级别相当的事务能力;高性能、高可靠、高可用,支持水平扩容。原创 2023-01-03 20:02:15 · 561 阅读 · 1 评论 -
海量数据查询方案设计
海量数据的主要用途,就是支撑离线分析类业务的查询,根据数据量规模不同,由小到大可选:关系型数据库,列式数据库和一些大数据存储系统。TB量级下数据,若可接受相对较贵的硬件成本,ES很好。对于海量数据来说,存储系统无银弹,重要的是思想,根据业务对数据查询方式,反推数据应该使用什么存储系统、如何分片,以及如何组织。即使是同样一份数据,也要根据不同的查询需求,组织成不同的数据结构,存放在适合的存储系统中,才能在每一种业务中都达到理想的查询性能。原创 2023-01-03 19:25:35 · 2507 阅读 · 8 评论 -
不停机更换数据库解决方案
设计在线切换数据库的技术方案,首先要保证安全性,确保每一个步骤一旦失败,都可以快速回滚。此外,还要确保迁移过程中不丢数据,这主要是依靠实时同步程序和对比补偿程序来实现。上线同步程序,从旧库中复制数据到新库中,并实时保持同步;上线双写订单服务,只读写旧库;开启双写,同时停止同步程序;开启对比和补偿程序,确保新旧数据库数据完全一样;逐步切量读请求到新库上;下线对比补偿程序,关闭双写,读写都切换到新库上;下线旧库和订单服务的双写功能。原创 2023-01-02 23:11:09 · 2305 阅读 · 2 评论 -
分布式对象存储设计原理
保存像图片、音视频这类大文件就是对象存储。不仅有很好的大文件读写性能,还可通过水平扩展实现近乎无限容量,并兼顾服务高可用、数据高可靠。对象存储“全能”,主要因,,相对于MySQL、Redis这类单机存储系统来说。虽然这些非原生存储系统,也具备集群能力,但它们构建大规模分布式集群非常不容易。这些原生分布式存储如何实现这些特性?“互相抄作业”,除了存储的数据结构不一样,提供的查询服务不一样以外,这些分布式存储系统,面临的很多问题都一样,实现方法差不多。原创 2023-01-01 19:44:31 · 2005 阅读 · 10 评论 -
金融系统性能优化之道
如何优化金融系统。首先我们分析了为什么金融系统会有吞吐量和延时这两个优化的方向。普惠金融和互联网业务类似,面向大众,对系统吞吐量要求非常高。机构金融专业性特别强,对延时要求非常高。吞吐量优化:分库分表和使用消息队列。分库分表有按哈希值和范围这两种不同的划分方式。这两种划分方式都有各自的优缺点,但是它们都有正确性、延时、容灾和容量限制这四个问题。我会在第三个模块讲解应该如何解决这些问题。消息队列的作用是对流量做削峰填谷。原创 2022-12-31 02:03:36 · 398 阅读 · 2 评论 -
金融业务的数据存储选型
选择存储类型前先要对数据类型分类。按数据之间关系的复杂度,金融数据分为图数据类型、没有关系的数据类型和树状数据类型,它们分别对应了图数据库、时序数据库和关系型数据库。因为金融业务需要准确地定义数据,所以很少用到图的数据结构。一般会在风控和反洗钱领域用到图相关的工具。金融市场数据一般使用时序数据库。相比关系型数据库常用的行存储方式,时序数据库用了列存储的方式,这个方式在存储、读取和计算上都有很大的速度优势。KDB是金融行业的专用列存储数据库,它具有更高的执行效率。原创 2022-12-30 21:40:47 · 1469 阅读 · 9 评论 -
金融业务如何高性能传输数据
金融数据分为交易数据和市场数据两种。金融交易数据的处理和互联网处理方法非常类似,在处理的时候需要做好数据限流的架构选型。市场数据的处理分为非实时和实时两种。非实时市场数据的处理也和互联网处理方法类似,在处理的时候,对订阅发布和消息这两种不同架构选择,我们要做好区分。因为市场数据具有实效性,我们可以容忍偶然的数据丢失,这也给了数据系统一个很大的优化空间。实时市场数据的消费者分为不同的级别。实时数据系统的架构和用户一样,也是分为不同级别。数据会层层分发下去,不同层级有不同的延时情况和部署方案。原创 2022-12-29 23:35:34 · 481 阅读 · 0 评论 -
互联网电商大厂的分布式事务使用案例
没有一种分布式事务的服务或组件,能简单解决分布式系统下的数据一致性问题。使用分布式事务时,更多情况是,用分布式事务理论指导设计和开发,自行解决数据一致性问题。即要解决分布式一致性问题,须掌握分布式事务实现原理。即使是数据库事务,它考虑到性能因素,大部分情况下不能也不需要百分之百地实现ACID,所以才有事务隔离级别。分布式事务也是事务,也需遵从ACID。但实际分布式系统中,因为须兼顾性能、高可用,不可能完全满足ACID。分布式事务实现都是“残血版”事务,相比数据库事务,更加“残血”。原创 2022-12-14 22:41:50 · 1264 阅读 · 0 评论 -
购物车系统设计
购物车系统的主要功能包括:加购、购物车列表页和结算下单核心实体:只有一个“购物车”实体至少包括:SKUID、数量、加购时间和勾选状态属性购物车内的数据在多端一致用户登录前后购物车内商品能无缝衔接除了每个用户的“用户购物车”,还要实现一个“暂存购物车”保存用户未登录时加购的商品,并在用户登录后自动合并“暂存购物车”和“用户购物车”。暂存购物车存储在客户端浏览器或App,可存放到Cookie或LocalStorage。Redis存储会有更高的性能,可以支撑更多的并发请求。原创 2022-12-13 13:34:52 · 4307 阅读 · 2 评论 -
大厂如何打造可扩展的高并发系统?
高可扩展性是一个设计的指标,它表示可以通过增加机器的方式来线性提高系统的处理能力,从而承担更高的流量和并发。架构设计之初,为什么不预先考虑好使用多少台机器,支持现有的并发呢?因为峰值流量不可控。一般基于成本考虑,在业务平稳期,会预留30%~50%冗余以应对运营活动或者推广可能带来的峰值流量,但当有个突发事件,流量可能瞬间2~3倍甚至更高。比如明星出事,其微博下或围观,或互动,微博流量短时间内增长迅速,微博信息流也短暂出现无法刷出新的消息的情况。架构的改造已经来不及,最快的就是堆机器。不过需保证,扩原创 2022-12-13 00:45:50 · 835 阅读 · 0 评论 -
互联网电商大厂库存系统设计案例讲解
但真实情况, 库存只是一个数值,无论是存在mysql数据库还是redis缓存,减值时都要控制顺序,只能串行来扣减,当然为保证安全性,会设计一些锁控制。最上面会查询当前的剩余库存(可能不准确,但没关系,这里只是第一步粗略校验),前置校验,如果已经没有库存,前置拦截生效,减少数据库写。所以,数据库扣减方案第一次升级主要针对 库存前置校验 模块的优化,作为前置拦截器,承载流量很大,若将流量全部压到主库,很容易把数据压垮。库存校验时读取从数据库。主要依赖数据库特性,保证扣减的一致性,逻辑简单,开发部署成本低。原创 2022-11-20 23:11:15 · 1594 阅读 · 2 评论 -
华为技术专家教你如何实现一个Java连接池?
获得连接归还连接最小空闲连接数最大连接数内部实现功能:连接建立连接心跳保持连接管理空闲连接回收连接可用性检测JedisPool继承JedisPoolAbstract又继承抽象类Pool,Pool内部持有Apache Common的GenericObjectPool:所以JedisPool连接池就是直接复用GenericObjectPool,并没有自己实现一套池。综上,Jedis API属于连接池和连接分离,JedisPool是线程安全的连接池,Jedis是非线程安全的单一连接。原创 2021-03-19 17:18:11 · 1576 阅读 · 0 评论 -
千万级用户ms级抽奖N名设计方案
你有什么更好的方案吗?原创 2022-09-19 23:53:40 · 693 阅读 · 0 评论 -
设计新鲜事(News Feed)系统
问清需求再设计不做关键词大师不试图设计一个最牛的系统,要设计一个够用的系统先设计MVP,再逐步优化系统设计无标准答案,和面试官一起探讨分析的过程比结果更重要。原创 2022-09-14 21:53:49 · 919 阅读 · 0 评论 -
短链系统设计-用户自定义短链
实现一个顾客短网址,使得顾客能创立他们自己的短网址。即你需要在前文基础上再实现一个。把一个长网址转换成一个以开头的短网址把一个短网址转换成一个长网址设定一个长网址的短网址为+keylong2Short生成的短网址的key的长度应该等于6 (不算域名和反斜杠)。可以使用的字符只有。如:abcD9E任意两个长的url不会对应成同一个短url,反之亦然如果不能完成用户期望的设定, 那么应该返回"error", 反之如果成功将长网址与短网址对应,应该返回这个短网址。原创 2022-09-13 15:19:56 · 780 阅读 · 0 评论 -
短链系统设计性能优化-分片策略优化
中心化的服务器集群和跨地域的 web server 之间通信较慢:如中国的 Server 需访问美国的 DB。若原来的 short key 是 AB1234,则现在的 short key 是。并将 hash(long_url)%62直接放到 short url。若数据重复写到中国 DB,如何解决一致性问题?这样,就能同时通过 short、long 得到分片键。为何不让中国的 Server 访问中国的 DB 呢?还可以维护一份域名白名单,访问对应地域的 DB。缺点:DB 的机器数目不能超过 62。原创 2022-09-13 15:17:01 · 519 阅读 · 0 评论 -
短链系统设计性能优化-分片键选型及全局自增 ID 策略
但使用全局自增 id 不是解决 tiny url最佳方案。该 DB不存储真实数据,也不负责其他查询。为避免单点故障,可能需要多台 DB。原创 2022-09-13 15:16:03 · 421 阅读 · 0 评论 -
短链系统设计-服务设计
该系统其实很简单,只需要有一个 service即可:URL Service。POST /data/shorten(不太推荐,不符合 REST 设计风格,但也有人在用)UrlService.encode(long_url):编码方法。UrlService.decode(long_url):解码方法。GET / REST 风格。那么,你们公司的短链系统是选择哪种服务设计呢?原创 2022-09-13 15:13:23 · 364 阅读 · 0 评论 -
短链系统设计-存储设计
为避免重复, 我们可以按照字典序依次使用, 或者在随机生成的基础上用一个集合来记录是否使用过。long ur 转成一个 6 位的 short url。短网址是固定的格式: “http://tiny.url/” + 6个字符, 字符可任意。随机取一个 6 位的 shortURL,若没使用过,就绑定到改 long url。关系型数据库表:只需Short key和 long url两列,并分别建立索引。tiny url需要写的代码不复杂,nosql+1。缺点:生成短链接的速度,随着短链接越多而越慢。原创 2022-09-13 15:08:24 · 629 阅读 · 0 评论 -
短链系统设计性能优化-缓存提速及CDN
实现一个顾客短网址,使得顾客能创立他们自己的短网址。即你需要在前文基础上再实现一个。把一个长网址转换成一个以开头的短网址把一个短网址转换成一个长网址设定一个长网址的短网址为+keylong2Short生成的短网址的key的长度应该等于6 (不算域名和反斜杠)。可以使用的字符只有。如:abcD9E任意两个长的url不会对应成同一个短url,反之亦然如果不能完成用户期望的设定, 那么应该返回"error", 反之如果成功将长网址与短网址对应,应该返回这个短网址。原创 2022-09-13 15:05:37 · 464 阅读 · 0 评论 -
短链系统设计-场景需求及性能要求分析
如脉脉,不会纵容你发太长的网址,会给你转成短链。原创 2022-09-13 15:05:03 · 370 阅读 · 0 评论 -
【防止重复下单】分布式系统接口幂等性实现方案
如订单支付后,seller要发货,发货完成后要填个快递单号。假设seller填个666,刚填完,发现填错了,赶紧再修改成888。对订单服务,这就是2个更新订单的请求。系统异常时666请求到了,单号更成666,接着888请求到了,单号又更新成888,但是666更新成功的响应丢了,调用方没收到成功响应,自动重试,再次发起666请求,单号又被更新成666了,这数据显然就错了!创建订单服务,可通过预生成订单号,然后利用DB的订单号唯一约束,避免重复写入订单,实现创建订单服务的幂等性。原创 2020-03-20 10:06:20 · 6321 阅读 · 17 评论 -
大厂的优惠券系统是如何设计的?
1 Scenario 场景电商系统的促销手段(Electronic Commerce Systems):优惠券拼团砍价老带新优惠券的种类满减券直减券折扣券优惠券系统的核心流程发券**发券的方式:**同步发送 or 异步发送领券谁能领?所有用户 or 指定的用户领取上限一个优惠券最多能领取多少张?领取方式用户主动领取 or 自动发放被动领取用券作用范围商品、商户、类目计算方式是否互斥、是否达到门槛等需求拆解商家侧:创建原创 2022-05-09 22:15:17 · 4371 阅读 · 4 评论