自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 【Java】如何解决高并发下的库存抢购超卖少买问题?

我相信很多人都看到过相关资料,但是在实践过程中,仍然会碰到具体的实现无法满足需求的情况,比如说有的实现无法秒杀多个库存,有的实现新增库存操作缓慢,有的实现库存耗尽时会变慢等等。这是因为对于不同的需求,库存争抢的具体实现是不一样的,我们需要详细深挖,理解各个锁的特性和适用场景,才能针对不同的业务需要做出灵活调整。由于秒杀场景是库存争抢非常经典的一个应用场景,接下来我会结合秒杀需求,带你看看如何实现高并发下的库存争抢,相信在这一过程中你会对锁有更深入的认识。

2024-06-14 17:53:04 613

原创 【Java】你们采用微服务架构,请问你是什么做系统拆分的?

业务拆分的方法有很多,最简单便捷的方式是:从表开始

2024-06-14 17:49:55 723

原创 【Java】在做同城多活方案中如何实现机房之间的数据同步?

最后,我再啰嗦一下使用Otter的注意事项:第一,为了保证数据的完整性,变更表结构时,我们一般会先从从库修改表结构,因此在设置Otter同步时,建议将pipeline同步设置为忽略DDL同步错误;第二,数据库表新增字段时,只能在表结尾新增,不能删除老字段,并且建议先把新增字段同步到目标库,然后再同步到主库,因为只有这样才不会丢数据;Otter通过Canal将机房内主库的数据变更同步到Otter Node内,然后经由Otter的SETL整理后,再同步到对面机房的Node节点中,从而实现双机房之间的数据同步。

2024-06-13 15:54:19 926

原创 【Java】使用分布式调度框架该考虑哪些问题?

这里的核心指导思想是让账户中心完成用户的注册逻辑,将用户写入到账户中心数据库,然后发送一条消息到 MQ 服务器,再给返回用户“注册成功”。之后,引入两个消费者,分别对消息进行对应的处理,异步赠送优惠券或者积分。这个方法的架构思路非常不错,但是我们还不得不思考一个问题:如何保证写入数据库与消息发送这两个步骤的一致性呢?我们希望这两个步骤要么一起成功,要么一起失败,绝不能出现用户数据成功写入数据库,但消息发送失败的情况。因为这样用户无法收到优惠券,容易产生一系列的投诉和纠纷。

2024-06-13 15:46:54 888

原创 【Java】如何提升RocketMQ顺序消费性能?

我们先来了解一下 RocketMQ 顺序消费的实现原理。RocketMQ 支持局部顺序消息消费,可以保证同一个消费队列上的消息顺序消费。例如,消息发送者向主题为 ORDER_TOPIC 的 4 个队列共发送 12 条消息, RocketMQ 可以保证 1、4、8 这三条按顺序消费,但无法保证消息 4 和消息 2 的先后顺序。那 RocketMQ 是怎么做到分区顺序消费的呢?我们可以看一下它的工作机制:顺序消费实现的核心要点可以细分为三个阶段。

2024-06-12 14:59:20 1005

原创 【Java】如何根据应用场景选择合适的消息中间件?

消息中间件的应用场景主要有两个:异步解耦与削峰填谷。我们首先通过电商平台用户注册送积分、送优惠券这个场景来理解异步解耦合。如果不使用消息中间件,电商平台送积分的实现也许是下图这个样子:我们简单看一下这个流程。从架构角度看,上面这个实现方法有一个非常严重的问题,那就是可扩展性低。例如,如果要在春节期间调整活动策略,在发送积分的同时,还需要额外发送新春大礼包,开发人员为了实现这一功能,就不得不修改用户注册流程,并重新部署用户注册模块。从功能维度来看,这次需求的变更集中在活动相关的内容。

2024-06-12 14:55:30 1122

原创 【Java】在你上一家公司中是如何如何实现蓝绿发布的?

随着微服务应用的不断增加,各个微服务之间的依赖关系也变得比较复杂,各个微服务的更新、升级部署给整个服务域的稳定性带来很大挑战。在进行技术方案的设计之前,我们先来了解一下生产环境的基本部署情况,如下图所示:用户在面向用户端(下文通称 C 端)下单后,C 端订单系统需要远程调用订单域中的“创建订单“接口。同时,订单域、运单域相关服务都需要调用基础服务域,进行基础数据的查询服务。从这里也可以看出,基础服务的稳定运行对整个微服务体系至关重要。那如何确保基础服务域不受版本的影响,始终能够提供稳定可控的服务呢?

2024-06-11 17:45:54 778

原创 【Java】 如何设计RPC框架在10万QPS下实现毫秒级的服务调用?

来思考这样一个场景:你的垂直电商系统的 QPS 已经达到了每秒 2 万次,在做了服务化拆分之后,由于我们把业务逻辑都拆分到了单独部署的服务中,那么假设你在完成一次完整的请求时需要调用 4~5 次服务,计算下来,RPC 服务需要承载大概每秒 10 万次的请求。而你该如何设计 RPC 框架承载如此大的请求量呢?我建议你:选择合适的网络模型,有针对性地调整网络参数优化网络传输性能;选择合适的序列化方式,以提升封包、解包的性能。

2024-06-11 17:36:45 752

原创 【Java】如果让你设计一个支持千万级流量的架构,你会怎么设计?

对于这个问题,需要从系统全链路的视角,从前端请求到后端服务评估各环节的性能指标,要从全链路的视角上进行高性能的设计。。减少请求次数:减少前端脚本与后端服务的请求次数,有三种方案。而页面静态化就是缓存的一种方式,相当于把整个页面元素缓存起来,那么缓存在哪里呢?通常是将页面文件事先存储在 CDN 节点中,比如将商品详情页做静态化,就是将商品详情页的页面元素存储在 CDN 节点,然后所有请求就可以直接以由 CDN 来提供服务,就不会到达后端服务了,就减少了对后端服务的压力。

2024-06-04 17:18:44 1042

原创 【Java】如何让系统抗住双十一的预约抢购活动?

在大促活动期间,“预约抢购”已经是各大电商平台的主要促销手段,京东自然也会和一些大的供应商合作,推出一些低价的爆款产品,比如 2019 年的 “1499 元抢购飞天茅台”活动,就让很多人每天准时准点拿着手机拼人品。那这类电商领域的大促抢购场景涉及专栏的哪些内容呢?它们是怎么通过架构设计的方式组合在一起,实现一个完整的需求流程呢?这就是今天要讨论的话题。我们先把需求梳理一下,总的来说,实现一个抢购系统大概可以分为四个阶段。接下来,我们就针对各阶段容易出现的问题,来分析其中的技术考点和解决方案。

2024-06-04 17:13:01 1344

原创 【Java】如何设计一个支持5 亿用户规模的网约车系统?

网约车的官方定义是:“以互联网技术为依托,构建服务平台,整合供需信息,使用符合条件的车辆和驾驶员,提供非巡游的预约出租汽车服务的经营活动。”通俗地说就是:利用互联网技术平台,将乘客的乘车信息发送给合适的司机,由司机完成接送乘客的服务。网约车包含专车、快车、拼车等多种形式。中国目前网约车用户规模约5亿,我们准备开发一个可支撑目前全部中国用户使用的网约车平台,应用名称为“Udi”。

2024-06-03 17:39:05 949

原创 【Java】设计一个支持敏感数据存储和传输安全的加解密平台

在一个应用系统运行过程中,需要记录、传输很多数据,这些数据有的是非常敏感的,比如用户姓名、手机号码、密码、甚至信用卡号等等。这些数据如果直接存储在数据库,记录在日志中,或者在公网上传输的话,一旦发生数据泄露,不但可能会产生重大的经济损失,还可能会使公司陷入重大的公关与法律危机。公司上下辛苦十几年,一夜回到解放前。所以,敏感信息必须进行加密处理,也就是把敏感数据以密文的形式存储、传输。这样即使被黑客攻击,发生数据泄露,被窃取的数据也是密文,获取数据的人无法得到真实的明文内容,敏感数据依然被保护着。

2024-06-03 17:34:56 784 3

原创 【Java】如何避免超预期的高并发压力压垮系统?

在互联网高可用架构设计中,限流是一种经典的高可用架构模式。因为某些原因,大量用户突然访问我们的系统时,或者有黑客恶意用DoS(Denial of Service,拒绝服务)方式攻击我们的系统时,这种未曾预期的高并发访问对系统产生的负载压力可能会导致系统崩溃。解决这种问题的一个主要手段就是限流,即拒绝部分访问请求,使访问负载压力降低到一个系统可以承受的程度。这样虽然有部分用户访问失败,但是整个系统依然是可用的,依然能对外提供服务,而不是因为负载压力太大而崩溃,导致所有用户都不能访问。

2024-06-01 17:23:51 678

原创 【Java】微博系统设计:怎么应对热点事件的突发访问压力?

微博(microblog)是一种允许用户即时更新简短文本(比如140个字符),并可以公开发布的微型博客形式。今天我们就来开发一个面向全球用户、可以支持10亿级用户体量的微博系统,系统名称为“Weitter”。我们知道,微博有一个重要特点就是部分明星大V拥有大量的粉丝。如果明星们发布一条比较有话题性的个人花边新闻,比如宣布结婚或者离婚,就会引起粉丝们大量的转发和评论,进而引起更大规模的用户阅读和传播。这种突发的单一热点事件导致的高并发访问会给系统带来极大的负载压力,处理不当甚至会导致系统崩溃。

2024-06-01 17:19:46 660

原创 【Java】搜索引擎设计:信息搜索怎么避免大海捞针?

我们准备开发一个针对全网内容的搜索引擎,产品名称为“Bingoo”。一个完整的搜索引擎包括分布式爬虫、索引构造器、网页排名算法、搜索器等组成部分,Bingoo的系统架构如下。分布式爬虫通过存储服务器将爬取的网页存储到分布式文件集群HDFS,为了提高存储效率,网页将被压缩后存储。存储的时候,网页一个文件挨着一个文件地连续存储,存储格式如下。

2024-05-31 16:19:10 984

原创 【Java】需要设计一款基于LBS的交友系统,如何设计地理空间邻近算法?

交友与婚恋是人们最基本的需求之一。随着互联网时代的不断发展,移动社交软件已经成为了人们生活中必不可少的一部分。然而,熟人社交并不能完全满足年轻人的社交与情感需求,于是陌生人交友平台悄然兴起。我们决定开发一款基于地理位置服务(LBS)的应用,为用户匹配邻近的、互相感兴趣的好友,应用名称为“Liao”。Liao面临的技术挑战包括:面对海量的用户,如何为其快速找到邻近的人,可以选择的地理空间邻近算法有哪些?Liao如何在这些算法中选择出最合适的那个?

2024-05-30 17:33:30 776

原创 【Java】如何设计一个支持三千万用户同时在线的短视频系统?

短视频(short video)通常时长在15分钟以内,主要是在移动智能终端上进行拍摄、美化编辑或加特效,并可以在网络社交平台上进行实时分享的一种新型视频形式。短视频具有时间短、信息承载量高等特点,更符合当下网民手机使用行为习惯,短视频的用户流量创造了巨大的商机。我们准备开发一个面向全球用户的短视频应用,用户总量预计20亿,应用名称:QuickTok。视频文件和其他媒体文件相比,会更大一点,这就意味着存储短视频文件需要更大的存储空间,播放短视频也需要更多的网络带宽。

2024-05-29 17:40:11 792

原创 【Java】如何设计一个支持万亿 GB 网盘实现秒传与限速的系统?

网盘,又称云盘,是提供文件托管和文件上传、下载服务的网站(File hosting service)。人们通过网盘保管自己拍摄的照片、视频,通过网盘和他人共享文件,已经成为了一种习惯。我们准备开发一个自己的网盘应用系统,应用名称为“DBox”。十几年前曾经有个段子,技术人员对老板说:您不能在公司电脑打开您家里电脑的文件,再贵的电脑也不能。事实上,随着网盘技术的成熟,段子中老板的需求已经成为现实:网盘可以自动将家里电脑的文件同步到公司电脑,老板可以在公司的电脑打开家里电脑的文件了。网盘的主要技术挑战是。

2024-05-28 17:25:41 909

原创 【Java】短 URL 生成器设计:百亿短 URL 怎样做到无冲突?

所以在生成的时候,需要先校验该短URL是否已经映射为其他的长URL,如果是,那么需要重新计算(换单向散列算法,或者换Base64编码截断位置)。对于需要展示短URL的应用程序,由该应用调用短URL生成器生成短URL,并将该短URL展示给用户,用户在浏览器中点击该短URL的时候,请求发送到短URL生成器(短URL生成器以HTTP服务器的方式对外提供服务,短URL域名指向短URL生成器),短URL生成器返回HTTP重定向响应,将用户请求重定向到最初的原始长URL,浏览器访问长URL服务器,完成请求服务。

2024-05-27 15:15:02 823 1

原创 【Java】设计一个支持10W QPS的评论中台,你会怎么设计?

在B站,UP主每天都会发布海量的视频、动态、专栏等内容,随之而来的是弹幕和评论区的各种讨论。播放器中直接滚动播放的弹幕,如同调味剂,重在提升视频观看体验;而点进评论区,相对而言评论文本更长,内容的观点、形式都更丰富,更像是饭后甜点。随着业务不断发展,B站的评论系统逐渐组件化、平台化;通过持续演进架构设计,管理不断上升的系统复杂度,从而更好地满足各类用户的需求。评论的基础功能模块是相对稳定的。结合B站以及其他互联网平台的评论产品特点,评论一般还包括一些更高阶的基础功能:评论系统 中台,从总体的架构上来区分,分

2024-05-25 12:04:07 742

原创 【Java】如何从零搭建10万级 QPS 大流量、高并发优惠券系统?

👋春节活动中,多个业务方都有发放优惠券的需求,且对发券的 QPS 量级有明确的需求。所有的优惠券发放、核销、查询都需要一个新系统来承载。因此,我们需要设计、开发一个能够支持十万级 QPS 的券系统,并且对优惠券完整的生命周期进行维护。

2024-05-24 15:31:55 1029

原创 【Java】使用分布式调度框架该考虑哪些问题?

每次调度按照分页去查找数据,处理完一批数据,再查询下一批,如果查到待处理数据,就继续处理数据,直到没有待处理数据时,才结束本次业务处理。这样做的目的是,保证 user 表和 msg_send_record 的事务一致性,如果用户信息成功存入 user 表,msg_send_record 表中必然存在一条对应的记录,后续我们只需要根据 msg_send_record 表中的记录发送一条对应的 MQ 消息即可。在处理数据时,如果第一次处理数据失败了,我们需要将重试次数加一,并设置下一次调度的最小时间。

2024-05-23 16:00:14 724

原创 [JAVA] 2024最新Java面试指导指南!

可以从两个方面考虑一是工作年限,一般来说初入行:8K到12K1年到2年:10K到15K3年到5年:13K到22K5年以上:18K以上当然,不同的地区有点差别,但差别应该不是很大;另一个方面是参考大公司的工作标准,打开招聘信息,查看大公司的招聘信息。

2024-04-27 14:36:52 1324 1

原创 2024最全Java面试题及答案整理!

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力Java反射:在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法Java反射机制主要提供了以下功能:在运行时判断任意一个对象所属的类。在运行时构造任意一个类的对象。在运行时判断任意一个类所具有的成员变量和方法。

2024-04-26 17:04:22 937 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除