面试题汇总06-场景题线上问题排查难点亮点

面试题汇总06-场景题&线上问题排查&难点亮点

  • 【一】场景题
    • 【1】订单到期关闭如何实现
    • 【2】每天100w次登录请求,4C8G机器如何做JVM调优?
      • (1)问题描述和分析
      • (2)堆内存设置
      • (3)垃圾收集器选择
      • (4)各区大小设置
      • (5)添加必要的日志
    • 【3】如果你的业务量突然提升100倍QPS你会怎么做?
  • 【二】线上问题排查
    • 【1】RocketMQ消费堆积问题排查
    • 【2】RT飙高问题排查过程
    • 【3】数据库死锁问题排查过程
      • (1)现象
      • (2)背景介绍
      • (3)死锁日志
      • (4)问题排查
      • (5)索引分析
      • (6)加锁原理
      • (7)解决方法
    • 【4】数据库死锁问题排查问题2
    • 【5】慢sql问题排查(联合索引失效)
      • (1)问题排查
      • (2)问题解决
    • 【6】线上sql优化的整体思路
    • 【7】POI导致内存溢出排查(结果查询数据导出)
      • (1)问题描述
      • (2)问题排查
      • (3)问题解决
    • 【8】频繁FullGC问题排查
      • (1)问题定位
  • 【三】项目难点&亮点
    • 【1】引入分布式锁解决并发问题
    • 【2】redis的多种使用案例
    • 【3】easyExcel的多线程导出导入
    • 【4】

【一】场景题

【1】订单到期关闭如何实现

在电商、支付等系统中,一般都是先创建订单(支付单),再给用户一定的时间进行支付,如果没有按时支付的话,就需要把之前的订单(支付单)取消掉。这种类似的场景有很多,还有比如到期自动收货、超时自动退款、下单后自动发送短信等等都是类似的业务问题。

订单的到期关闭的实现有很多种方式,分别有:

1、被动关闭(不推荐)
2、定时任务(推荐,适合时间精确度要求不高的场景)
3、DelayQueue(不推荐,基于内存,无法持久化)
4、时间轮(不推荐,基于内存,无法持久化)
5、kafka(MQ 方案不推荐,大量无效调度)
6、RocketMQ延迟消息(MQ 方案不推荐,大量无效调度)
7、RabbitMQ死信队列(MQ 方案不推荐,大量无效调度)
8、RabbitMQ插件(MQ 方案不推荐,大量无效调度)
9、Redis过期监听(不推荐,容易丢消息)
10、Redis的ZSet(不推荐,可能会重复消费)
11、Redisson(推荐,可以用)

Redisson中定义了分布式延迟队列RDelayedQueue,这是一种基于我们前面介绍过的zset结构实现的延时队列,它允许以指定的延迟时长将元素放到目标队列中。

其实就是在zset的基础上增加了一个基于内存的延迟队列。当我们要添加一个数据到延迟队列的时候,redisson会把数据+超时时间放到zset中,并且起一个延时任务,当任务到期的时候,再去zset中把数据取出来,返回给客户端使用。


定义一个Redisson客户端:

@Configurationpublic class RedissonConfig {        @Bean(destroyMethod="shutdown")    
public RedissonClient redisson() throws IOException {Config config = new Config();	config.useSingleServer().setAddress("redis://127.0.0.1:6379");		        RedissonClient redisson = Redisson.create(config);return redisson;
}}

接下来,在想要使用延迟队列的地方做如下方式:

org.redisson.api.RBlockingDeque;import org.redisson.api.RDelayedQueue;import org.redisson.api.RedissonClient;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import java.time.LocalDateTime;import java.time.format.DateTimeFormatter;import java.util.concurrent.TimeUnit;
@Componentpublic class RedissonOrderDelayQueue {@Autowired    RedissonClient redisson;public void addTaskToDelayQueue(String orderId) {              RBlockingDeque<String> blockingDeque = redisson.getBlockingDeque("orderQueue");RDelayedQueue<String> delayedQueue = redisson.getDelayedQueue(blockingDeque);System.out.println(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "添加任务到延时队列里面");        delayedQueue.offer(orderId, 3, TimeUnit.SECONDS);        delayedQueue.offer(orderId, 6, TimeUnit.SECONDS);        delayedQueue.offer(orderId, 9, TimeUnit.SECONDS);    }public String getOrderFromDelayQueue() {        RBlockingDeque<String> blockingDeque = redisson.getBlockingDeque("orderQueue");        RDelayedQueue<String> delayedQueue = redisson.getDelayedQueue(blockingDeque);        String orderId = blockingDeque.take();        return orderId;    }
}

使用offer方法将两条延迟消息添加到RDelayedQueue中,使用take方法从RQueue中获取消息,如果没有消息可用,该方法会阻塞等待,直到消息到达。

我们使用 RDelayedQueue 的 offer 方法将元素添加到延迟队列,并指定延迟的时间。当元素的延迟时间到达时,Redisson 会将元素从 RDelayedQueue 转移到关联的 RBlockingDeque 中。

使用 RBlockingDeque 的 take 方法从关联的 RBlockingDeque 中获取元素。这是一个阻塞操作,如果没有元素可用,它会等待直到有元素可用。

所以,为了从延迟队列中取出元素,使用 RBlockingDeque 的 take 方法,因为 Redisson 的 RDelayedQueue 实际上是通过转移元素到关联的 RBlockingDeque 来实现延迟队列的。

【2】每天100w次登录请求,4C8G机器如何做JVM调优?

(1)问题描述和分析

首先,我们需要问清楚,一天100W次的登录,在一天内有没有某个时段是高峰的?高峰期的QPS大概可以达到多少。

如果没有高峰期,虽然100万听上去

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

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

相关文章

C和C++有什么区别?

C和C是两种不同的编程语言&#xff0c;虽然它们有许多相似之处&#xff0c;但也存在一些关键的区别。 C是一种过程化编程语言&#xff0c;专注于函数和流程控制&#xff0c;非常适合系统级编程。而 C是一种面向对象编程语言&#xff0c;支持类、对象和封装、继承、多态等特性。…

动态规划-杨辉三角

118.杨辉三角 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。输入&#xff1a;int 输出&#xff1a;二元列表 思路&#xff1a; 面向结果编程&#xff01;&#xff01;&#xff01; class Solution {public List<List<Integer>> genera…

powershell绑定按钮事件的两种方式

写一个powershell的简单GUI做本地任务&#xff0c;试验出2个方法&#xff1a; 方法1&#xff1a; function btn1_click {write-host $text1.Text -ForegroundColor Green -BackgroundColor Black }$btn1.Add_Click({btn1_click})方法2&#xff1a; $btn2_click {write-host $…

C++语言的并查集

并查集&#xff08;Union-Find&#xff09;在C中的实现与应用 引言 并查集&#xff08;Union-Find&#xff09;&#xff0c;又称为不相交集合&#xff08;Disjoint Set&#xff09;&#xff0c;是一种用于处理动态连通性问题的数据结构。它的主要功能包括合并两个集合&#x…

基于大模型的病态窦房结综合征预测及治疗方案研究报告

目录 一、引言 1.1 研究背景与目的 1.2 研究意义 二、病态窦房结综合征概述 2.1 定义与病因 2.2 临床表现与分型 2.3 诊断方法 三、大模型在病态窦房结综合征预测中的应用 3.1 大模型介绍 3.2 数据收集与预处理 3.3 模型训练与优化 四、术前预测与准备 4.1 风险预…

2026考研数学张宇武忠祥复习视频课,高数基础班+讲义PDF

2026考研数学武忠祥老师课&#xff08;网盘&#xff09;&#xff1a;点击下方链接 2026考研数学武忠祥网课&#xff08;最新网盘&#xff09; 一、基础阶段&#xff08;3-5个月&#xff09; 目标&#xff1a;搭建知识框架掌握基础题型 教材使用&#xff1a; 高数&#xff1a;…

linux命令二

1.将windows文件上传到linux 将文件传到光驱里&#xff0c;再将光驱进行挂载&#xff0c;mount 2.linux安装的文件存储 普通执行 程序 bin 配置文件 /etc 日志文件 /var/log 3.rpm 主查询 命令&#xff1a;rpm -q 包名 查询已安装的软件包 通过软件 -qa 查询所有已安装的软件包…

k8s的StorageClass存储类和pv、pvc、provisioner、物理存储的链路

k8s的StorageClass存储类和pv、pvc、provisioner、物理存储的链路 StorageClass能自动创建pv 在控制器中&#xff0c;直接声明storageClassName&#xff0c;不仅能自动创建pvc&#xff0c;也能自动创建pv stoageclass来自于provisioner&#xff0c;provisioner来自于pod&#x…

systemd 与 SysVinit

1. 什么是 systemd 和 SysVinit&#xff1f; systemd 和 SysVinit 都是 Linux 的初始化系统&#xff08;init system&#xff09;&#xff0c;用于管理系统启动、服务、进程和日志。 比较项SysVinitsystemd启动方式逐步启动&#xff08;串行&#xff09;并行启动&#xff08;…

QML菜单控件:菜单的常规用法

目录 引言&#x1f4da;相关阅读&#x1f528;BUG修复工程结构示例详解示例1&#xff1a;上下文菜单&#xff08;ContextMenu&#xff09;示例2&#xff1a;菜单栏&#xff08;MenuBar&#xff09;示例3&#xff1a;动态菜单示例4&#xff1a;快捷键菜单示例5&#xff1a;可选项…

【Vue-路由案例】面经基础版

目录 <<回到导览1.面经基础版1.1.VueCli建项目1.1.1.VueCli 自定义项目1.1.2.ESlint代码规范 1.2.项目路由1.2.1.一级路由配置1.2.2.二级配置路由1.2.3.设置高亮1.2.4.发生请求、渲染1.2.5.跳转传参、再发请求1.2.6.体验优化1.2.7.keep-alive <<回到导览 1.面经基…

【T2I】MIGC: Multi-Instance Generation Controller for Text-to-Image Synthesis

code&#xff1a;CVPR 2024 MIGC: Multi-Instance Generation Controller for Text-to-Image Synthesis [CVPR 2024] MIGC: Multi-Instance Generation Controller for Text-to-Image Synthesis - 知乎 Abstract 我们提出了一个多实例生成(Multi-Instance Generation, MIG)任务…

用AI来了解用户都在关注的品牌问题是什么?

​ ​​用户重复问的核心问题整理​​ 基于百度文心一言、豆包、KIMI、腾讯元宝、DeepSeek五大模型的回答&#xff0c;企业最关注的GEO问题可归纳为以下10类&#xff08;按优先级排序&#xff09;&#xff1a; ​​1. GEO是什么&#xff1f;与传统SEO有何本质区别&#xff1f…

OpenCv(七)——模板匹配、打包、图像的旋转

目录 一、模板匹配 模板匹配原理 1、单模板之间的匹配 &#xff08;1&#xff09;读取并显示待匹配的图片和模板图片 &#xff08;2&#xff09;模板匹配并绘制匹配位置的外接矩形 &#xff08;3&#xff09;显示最终的效果 2、模板与多个对象匹配&#xff0c;仅匹配当前…

蓝桥云客 最大和

问题描述 小蓝在玩一个寻宝游戏&#xff0c;游戏在一条笔直的道路上进行&#xff0c;道路被分成了 n 个方格&#xff0c;依次编号 1 至 n&#xff0c;每个方格上都有一个宝物&#xff0c;宝物的分值是一个整数&#xff08;包括正数、负数和零&#xff09;&#xff0c;当进入一…

【C++算法】49.分治_归并_计算右侧小于当前元素的个数

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解 题目链接&#xff1a; 315. 计算右侧小于当前元素的个数 题目描述&#xff1a; 解法 归并排序&#xff08;分治&#xff09; 当前元素的后面&#xff0c;有多少个比我小。&#xff08;降序&…

IPSec简单例子

实验说明 使用Ensp模拟器实现IPsec隧道实验。IPSec是一种VPN技术&#xff0c;配置的思路首先是两个网络先通&#xff0c;然后配置ACL、IEK和IPSec对等体&#xff0c;从而建立VPN隧道。 实验拓扑 配置过程 1 配置IP地址以及OSPF路由 # 配置中使用了简写命令&#xff0c;不熟…

车载联网终端4G汽车TBOX介绍定义与概述

汽车 TBOX&#xff08;Telematics Box&#xff09;是专为汽车设计的远程通信终端设备&#xff0c;属于车联网系统的关键组成部分。车联网系统一般包含主机、汽车 T - BOX、手机 APP 及后台系统。融合了车身网络和 4G 无线通信技术&#xff0c;为汽车提供丰富的 Telematics 服务…

《DeepSeek RAG 增强检索知识库系统》Ollama DeepSeek 流式应答页面对接之三

前言 自从有了 AI 工具以后&#xff0c;所有以前头疼前端页面开发的后端程序员&#x1f468;&#x1f3fb;‍&#x1f4bb;&#xff0c;都漏出了友善&#x1f60a;微笑&#xff01; 主要我们可以清楚地表达编写页面诉求&#xff0c;AI 工具就可以非常准确且迅速的完成代码的实…

【MyBatis】深入解析 MyBatis:关于注解和 XML 的 MyBatis 开发方案下字段名不一致的的查询映射解决方案

注解查询映射 我们再来调用下面的 selectAll() 这个接口&#xff0c;执行的 SQL 是 select* from user_info&#xff0c;表示全列查询&#xff1a; 运行测试类对应方法&#xff0c;在日志中可以看到&#xff0c;字段名一致&#xff0c;Mybatis 就成功从数据库对应的字段中拿到…