Day00_场景题

news2024/11/15 21:50:51

文章目录

  • 资料
  • 项目经历
  • 技能清单
  • 自我介绍
      • QPS和TPS?
      • 如何设计一个排行榜的功能?
      • 如何解决大文件上传问题
      • 延时任务处理场景
      • 如何设计一个秒杀系统?
      • 分布式幂等性如何设计?
      • 如果你的系统的QPS 突然提升10倍你会怎么设计?
      • 如何从零搭建 10 万级QPS 大流量、高并发优惠券系统?
      • 高 QPS,高并发的场景下可能会出现redis超时,请问如何解决?
      • 如何设计 RPC 框架在10 万QPS下实现毫秒级的服务调用?
      • 在你上一家公司中是如何如何实现蓝绿发布的?
      • 使用分布式调度框架该考虑哪些问题?
      • OOM、CPU预警、内存预警之类的问题如何排查?
          • 第一步,通过业务⽇志分析排查
          • 第二步,可以通过APM 分析排查
          • 第三步,物理环境排查
          • 第四步,使用arthas工具
          • 第五步,使用JVM 问题定位命令
          • 第六步,内存分析工具 MAT
      • 线上的 API 接口响应比较慢,该如何快速排查和定位问题?
      • 所有接口响应慢,如何排查
      • MySQL 数据库cpu 飙升的话,要怎么处理呢?
      • 百万级别数据的Excel 如何快速导入到数据库中?
      • 如果JVM出现频繁FullGC该如何解决
      • JVMOOM问题如何排查和解决?
      • java.lang.OutOfMemoryError: Java heap space堆内存溢出问题如何排查和解决?
      • 数据库出现死锁如何排查?
      • 聊聊你印象最深刻的项目,或者做了什么优化
      • 聊聊项目,好的设计,好的代码

资料

https://doocs.github.io/advanced-java/#/?id=%e4%ba%92%e8%81%94%e7%bd%91-java-%e5%b7%a5%e7%a8%8b%e5%b8%88%e8%bf%9b%e9%98%b6%e7%9f%a5%e8%af%86%e5%ae%8c%e5%85%a8%e6%89%ab%e7%9b%b2

《2024年更新Java面试指南(配套Java面试突击-V5.0)》的以下内容:
系统设计题

项目经历

在这里插入图片描述
在这里插入图片描述

技能清单

在这里插入图片描述

自我介绍

在这里插入图片描述

有比较丰富的redis使用场景,还有就是之前项目上面强依赖于netty,所以我也研究过netty的源码

QPS和TPS?

什么是QPS?

Queries Per Second,意思是每秒查询率。就是每秒的查询数,对数据库而言就是数据库每秒执行的 sql 数( insert、select、update、delete 等)

如下图:系统服务器向MySql服务器发送了一条sql,对于MySQL服务器来说,QPS为1(一秒内)

在这里插入图片描述

TPS:

tps(transactions per second)每秒事务数。以 commit 成功次数为准。

如下图,系统服务器中的一个请求处理向Mysql发送了2条insert和1条update,并成功执行了commit(1秒内),则对于MySQL服务器来说,TPS为1,QPS为3。

这里是引用

如何设计一个排行榜的功能?

①MySQL 的 ORDER BY 关键字

SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC/DESC;

②Redis 的 sorted set

如果说你的项目需要排序数据量比较小并且业务场景不复杂的话,直接使用 MySQL 的ORDER BY 关键字就可以了,没必要为了排行榜引入一个 Redis。

如何解决大文件上传问题

试想一个,你想上传一个 5g 的视频,上传进度到 99% 的时候,特么的,突然网络断了,这个时候,你
发现自己竟然需要重新上传。我就问你抓狂不?

有没有解决办法呢? 答案就是:分片上传!只需要先将文件切分成多个文件分片,然后再上传这些小的文件分片。前端发送了所有文件分片之后,服务端再将这些文件分片进行合并即可。使用分片上传主要有下面 2 点好处:

  1. 断点续传 :上传文件中途暂停或失败(比如遇到网络问题)之后,不需要重新上传,只需要上传那
    些未成功上传的文件分片即可。所以,分片上传是断点续传的基础。
  2. 多线程上传 :我们可以通过多线程同时对一个文件的多个文件分片进行上传,这样的话就大大加快
    的文件上传的速度。

延时任务处理场景

日常开发中,我们经常遇到这种延时任务处理场景,如:

  • 外卖订单超 30 分钟未支付,则自动取订单;
  • 用户注册成功 15 分钟后,发短信息通知用户等等。
  • 到期自动收货
  • 超时自动退款

在电商,支付等系统中,一设都是先创建订单(支付单),再给用户一定的时间进行支付,如果没有按时支付的话,就需要把之前的订单(支付单)取消掉。如何实现这种自动关单的需求?

①通过定时任务关闭订单:写一个定时任务定期扫描数据库中的订单。

不推荐,由于定时任务扫描的间隔是固定的,所以可能造成一些订单已经过期了一段时间才被扫描到,订单关闭的时间比正常时间晚一些。

②延时队列:

  • 在rabbitmq中不存在延时队列,rabbitmq都是通过设置消息的过期时间和死信队列来模拟出延时队列。
  • JDK 延迟队列 DelayQueue。这种方式不依赖任何第三方组件,是JDK自带的,但是由于DelayQueue 基于 JVM 内存,如果 JVM 重启了,那所有数据就丢失了。而且如果放入的数据过多,会造成JVMOOM。所以它只适合数据量较小,且丢失也不影响主业务的场景,比如内部系统的一些非重要通知,就算丢失,也不会有太大影响。
  • RocketMQ 的延迟队列。RocketMQ是支持延时队列的。在订单创建之后,我们就可以把订单作为一条消息投递到 rocketmq,并将延迟时间设置为 30 分钟,这样,30 分钟后我们定义的 consumer 就可以消费到这条消息,然后检查用户是否支付了这个订单。

③RabbitMQ 死信队列
谷粒商城里面的场景
除了 RocketMQ 的延迟队列,RabbitMQ 的死信队列也可以实现消息延迟功能。当 RabbitMQ 中的一条正常消息,因为过了存活时间(TTL 过期)、队列长度超限、被消费者拒绝等原因无法被消费时,就会被当成一条死信消息,投递到死信队列。基于这样的机制,我们可以给消息设置一个 ttl,然后故意不消费消息,等消息过期就会进入死信队列,我们再消费死信队列即可

如何设计一个秒杀系统?

以极低的价格,让大量的用户参与,进而造成系统在极短的时间内有极高的流量。因此其稳定性、高可用是我们考虑的第一位。

前端优化:

  • 动静分离
  • 请求频率限制:我们可以在用户发起秒杀请求之前让其进行答题或者输入验证码。这种方式一方面可以避免用户请求过于集中,另一方面可以有效解决用户使用脚本作弊。

后端优化

  • 增加缓存层 + 预热数据
  • MQ 异步处理
  • 限流、熔断、兜底

增加缓存层 + 预热数据

如果我们所有数据都去读取数据库,数据库可能无法承受较大的流量,此时一个常见的优化就是增加缓存层。

在引入缓存层的时候,我们需要考虑缓存击穿、缓存穿透的可能性。

另外,我们在秒杀活动开始之前,可以手动将热点数据加载到缓存中,从而避免秒杀时去请求数据库。

MQ 异步处理

我们知道秒杀活动一般涉及抢购、下单、支付、发货等阶段,而抢购与后续的几个阶段是可以异步执行的。为了避免对下单、支付、发货等阶段产生影响,我们可以将抢购阶段与后续阶段用 MQ 进行解耦处理。当用户抢购成功后,往消息队列中丢入一台消息,随后再由订单系统消费进行下单处理。

通过各系统之间的解耦处理,我们可以将原本同步的处理方式变为异步处理,从而大大的减少了请求的处理时间,提高了系统的并发处理能力。其次,也能避免系统之间相互影响,提高了整体系统的稳定性。

限流、熔断、降级

限流:避免因为请求太多导致整个系统都无法工作。当超过设置的限流阈值时,我们则直接拒绝该请求,提示用户抢购失败。

熔断:指的是请求的错误次数超过阈值时,不再到用后端服务,直接返回失败。

降级:指的是当服务失败或异常后,返回指定的默认信息、

完整流程
为了预告用户两天后什么东西要参与秒杀,我们将要秒杀的商品的相关信息提前三天从数据库上架到缓存中,而且这个定时任务是每天晚上凌晨3点执行(趁不是高峰期时间)。

开启一个定时任务,将要秒杀的商品的相关信息提前三天从数据库上架到缓存中:

  • ①gulimall-seckill每天凌晨三点远程调用gulimall-coupon服务的getLasts3DaySession()方法获取最近三天的秒杀活动————gulimall-coupon会查询“秒杀场次表”获取到最近三天的秒杀活动,然后根据活动id查询“秒杀场次和商品的关联表”获取到每一场秒杀活动参与秒杀的所有商品。将每一场秒杀活动的所有商品封装到SeckillSessionEntity的List<SeckilSkuRellationEntity>,然后三天的所有活动封装到List<SeckillSessionEntity>里面返回。
  • ②gulimall-seckill得到最近三天的秒杀活动后,将数据存到redis中————存到redis中的数据不仅仅是“这三天有几场秒杀活动,每个秒杀活动里面有多少商品”,还要把每件参与秒杀的商品的sku信息查询到存到

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2087626.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenCV绘图函数(9)填充多边形函数fillPoly()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 填充一个或多个多边形轮廓所包围的区域。 函数 cv::fillPoly 填充由若干个多边形轮廓所包围的区域。该函数可以填充复杂的区域&#xff0c;例如带…

【大模型】GPT系列模型基础

前言&#xff1a;GPT整体上与transformer结构相似&#xff0c;但只用了decoder部分。 目录 1. GPT2. GPT23. GPT34. 知识补充4.1 下游任务实现方式4.2 sparse attention 1. GPT 预训练&#xff1a;无监督&#xff0c;根据前k个词预测下一个词的概率。微调&#xff1a; 有监督&a…

AI嵌入式人工智能开发 --- 【1】初始RKNPU

目录 一、NPU的由来 二、RKNPU介绍 三、RKNPU单核框架 3.1 AHB/AXI 接口 3.2 卷积神经网络加速单元&#xff08;CNA&#xff09; 3.3 数据处理单元&#xff08;Data Processing Unit&#xff0c;DPU&#xff09; 3.4 平面处理单元&#xff08;Planar Processing Unit&a…

#驱动开发

内核模块 字符设备驱动 中断、内核定时器 裸机开发和驱动开发的区别&#xff1f; 裸机开发 驱动开发&#xff08;基于内核&#xff09; 相同点 都能够控制硬件&#xff08;本质&#xff1a;操作寄存器&#xff09; 不同点 用C语言给对应的地址里面写值 按照一定的框架格式…

【DSP+FPGA】基于DSP+FPGA XC7K325T与TMS320C6678的通用信号处理平台

DSP FPGA 协同处理架构板载 1 个TMS320C6678 多核DSP处理节点板载 1 片 XC7K325T FPGA处理节点板载 1 个FMC 接口板载4路SFP光纤接口FPGA 与 DSP 之间采用高速Rapid IO互联 基于FPGA与DSP协同处理架构的通用高性能实时信号处理平台&#xff0c;该平台采用1片TI的KeyStone系列多…

CSS3 文本效果(text-shadow,box-shadow,white-space等)

一 text-shadow text-shadow 属性是 CSS3 中用于为文本添加阴影效果的工具。它可以增强文本的可读性和视觉吸引力&#xff0c;提供丰富的视觉效果 1 语法 text-shadow: offset-x offset-y blur-radius color;offset-x&#xff1a;阴影相对于文本的水平偏移量。可以是正值&am…

c/c++: function和procedure的区别

https://www.cs.nthu.edu.tw/~ychung/slides/CSC4180/Alfred%20V.%20Aho,%20Monica%20S.%20Lam,%20Ravi%20Sethi,%20Jeffrey%20D.%20Ullman-Compilers%20-%20Principles,%20Techniques,%20and%20Tools-Pearson_Addison%20Wesley%20(2006).pdf 函数与过程的区别&#xff0c;一个…

AI语音识别神器Openai Whisper对中文的支持如何?

文章目录 前言一、资料准备二、Whisper环境搭建第一步&#xff1a;安装whisper第二步&#xff1a;安装ffmpeg 三、Whisper测试总结其他相关 前言 语音识别一直以来都是人工智能领域中一个不容忽视的技术&#xff0c;随着大模型时代的到来&#xff0c;这项技术也发生了质的变化…

解决MAC电脑SVN Android studio不能提交.so文件相关

目录 前言 确认问题原因 修改 SVN 配置文件 验证配置是否生效 其他注意事项 总结 前言 在使用 macOS 进行开发时&#xff0c;可能会遇到通过 SVN 在 Android Studio 中无法提交 .so 文件的问题。这通常是由于 SVN 配置文件中的 global-ignores 设置导致的&#xff0c;…

比特币牛市将至背后

作者&#xff1a;Arthur Hayes 编译&#xff1a;Liam 「此处所表达的任何观点均为作者个人意见&#xff0c;不应作为投资决策依据&#xff0c;也不应被视为参与投资交易的推荐或建议。」 我打破常规&#xff0c;前往南半球滑雪两周&#xff0c;为北半球的暑假画上圆满的句号。我…

03. SpringBoot 项目创建

接下来我们将要完成一个基础的 Springboot 项目的创建&#xff0c;并且将项目上传到 Gitee 1. 查看官网&#xff0c;选择版本 学习任何一门技术&#xff0c;一定要学会从官网了解一手信息&#xff0c;无论是哪个博主的博客都是有时效性的&#xff0c;我们要掌握这样的习惯&…

Runtime Asset Database 运行时资产数据库

运行时资产数据库是一个库,旨在简化Unity应用程序中运行时保存和加载子系统的实现。此库复制并扩展了Unity编辑器中常见的预制件、预制件变体和资源的概念,使其在运行时比以往任何时候都更容易管理和操纵游戏资源,并在运行时动态实现与Unity编辑器类似的工作流。 Unity开发人…

晟鑫商会与家盛资本携手合作,共创金融科技新篇章

在数字化浪潮的推动下,金融科技正成为全球经济发展的新引擎。近日,晟鑫商会与家盛资本宣布达成战略合作伙伴关系,旨在通过创新合作,共同开拓市场新机遇,促进双方在数字经济领域的深入发展。两家机构的联合预示着在金融科技领域将开启一段新的旅程。 晟鑫商会,作为互联网商业合作…

做好价格监测这些点要注意

品牌在进行数据监测时&#xff0c;首要关注点在于数据本身的准确率与覆盖率&#xff0c;而在价格监测方面亦是如此。品牌需高度关注电商价格监测系统输出的价格、促销信息、销量等数据。一旦促销信息出现不准确的情况&#xff0c;到手价必然会受到影响&#xff0c;进而对后端治…

USB PHY——ULPI

ULPI协议的全称是UTMI Low Pin Interface。从名字上就可以看出ULPI是UTMI的Low Pin版本。 ULPI是在UTMI的基础上封装了一层。 ULPI需要读写寄存器&#xff0c;而UTMI只需直接拉高或拉低信号线。 从这张图可以看出 ULPI 是在 UTMI level3 再往上一层 外设参考设计

ssm面向企事业单位的项目申报小程序论文源码调试讲解

2 系统实现的技术支持 2.1微信开发者工具 在传统web浏览器中&#xff0c;在加载htm15页面时先加载视图层的html和css&#xff0c;后加载逻辑层的java script&#xff0c;然后返回数据并在浏览器中展示页面。而微信开发者工具的系统层是基于Native System的&#xff0c;视图层和…

COMP9315-week2-lecture1

COMP9315 19T2 Week 2 Lecture 1_哔哩哔哩_bilibili C:\python\COMP9315-master\19T2\Lectures\weel02.pdf COMP9315 24T1 - Course Notes (unsw.edu.au) 前面三分之一时间讲week1的练习题&#xff0c;是一个存储过程 COMP9315-master\19T2\Lecture Exercises\week01\ex05\…

AcWing859. Kruskal算法求最小生成树

一定要看这个链接的讲解视频&#xff1a;强烈推荐&#xff01;&#xff01;&#xff01;【图-最小生成树-Prim(普里姆)算法和Kruskal(克鲁斯卡尔)算法】 文章目录 1.题目2.Kruskal基本思想&#xff1a;3.逐行解释代码&#xff1a; 1.题目 2.Kruskal基本思想&#xff1a; Krus…

sql-labs46-50通关攻略

第46关 一.查询数据库 http://172.16.1.142/Less-46/?sort1%20and%20updatexml(1,concat(0x7e,(select%20database()),0x7e),1)--http://172.16.1.142/Less-46/?sort1%20and%20updatexml(1,concat(0x7e,(select%20database()),0x7e),1)-- 二.查表 http://172.16.1.142/Les…

Eureka:Spring Cloud中的服务注册与发现如何实现?

Eureka&#xff1a;Spring Cloud中的服务注册与发现如何实现&#xff1f; 1、什么是服务注册与发现&#xff1f;2、Eureka的工作原理3、Eureka的优势 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在微服务架构的浪潮中&#xff0c;服务注…