当前位置: 首页 > news >正文

obdiag如何实现一键采集20+故障场景的诊断信息——《OceanBase诊断系列》之九

作者简介:靖顺,OcenaBase 开发工程师,专注于数据库诊断与调优


1. 前言

在2024年初,我与一线运维人员交流时,他们纷纷提及在运维过程中遭遇的难题——OceanBase出现问题时,排查工作不容易,有时需要依赖原厂的支持人员。然而,线上交流效率不高,故障排查的时间又尤为宝贵,他们反馈说,花费在信息采集上的时间过多,这无疑影响了服务的SLA。因此,我向他们推荐了obdiag这个工具,并建议他们使用一行命令进行信息采集。几位支持人员给出了反馈,他们认为目前obdiag的诊断信息采集虽然功能全面,但各项采集任务是独立的,如采集日志、主机信息、SQL信息等,这对于单个问题的排查来说仍显繁琐。他们期望能针对常见的故障场景提供套餐式的一键采集功能,以更高效地完成信息采集工作。

本着客户第一的原则。这个需求必须高效优先去做。就有了2024年1月31号发布的obdiag 1.6版本,支持场景化的一键诊断信息采集

2. obdiag 场景化信息采集使用

2.1 支持的场景列表

执行如下命令可查看支持的场景

obdiag gather scene list

结果如下:

#obdiag gather scene list[Other Problem Gather Scenes]:
---------------------------------------------------------------------------------------
command                                                   info_en               info_cn
---------------------------------------------------------------------------------------
obdiag gather scene run --scene=other.application_error   [application error]   [应用报错问题]
---------------------------------------------------------------------------------------[Obproxy Problem Gather Scenes]:
----------------------------------------------------------------------------------
command                                           info_en             info_cn
----------------------------------------------------------------------------------
obdiag gather scene run --scene=obproxy.restart   [obproxy restart]   [obproxy无故重启]
----------------------------------------------------------------------------------[Observer Problem Gather Scenes]:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
command                                                                                                            info_en                         info_cn
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
obdiag gather scene run --scene=observer.backup                                                                    [backup problem]                [数据备份问题]
obdiag gather scene run --scene=observer.backup_clean                                                              [backup clean]                  [备份清理问题]
obdiag gather scene run --scene=observer.clog_disk_full                                                            [clog disk full]                [clog盘满]
obdiag gather scene run --scene=observer.cluster_down                                                              [cluster down]                  [集群无法连接]
obdiag gather scene run --scene=observer.compaction                                                                [compaction]                    [合并问题]
obdiag gather scene run --scene=observer.cpu_high                                                                  [High CPU]                      [CPU高]
obdiag gather scene run --scene=observer.delay_of_primary_and_backup                                               [delay of primary and backup]   [主备库延迟]
obdiag gather scene run --scene=observer.io                                                                        [io problem]                    [io问题]
obdiag gather scene run --scene=observer.log_archive                                                               [log archive]                   [日志归档问题]
obdiag gather scene run --scene=observer.long_transaction                                                          [long transaction]              [长事务]
obdiag gather scene run --scene=observer.memory                                                                    [memory problem]                [内存问题]
obdiag gather scene run --scene=observer.perf_sql --env "{db_connect='-hxx -Pxx -uxx -pxx -Dxx', trace_id='xx'}"   [SQL performance problem]       [SQL性能问题]
obdiag gather scene run --scene=observer.recovery                                                                  [recovery]                      [数据恢复问题]
obdiag gather scene run --scene=observer.restart                                                                   [restart]                       [observer无故重启]
obdiag gather scene run --scene=observer.rootservice_switch                                                        [rootservice switch]            [有主改选或者无主选举的切主]
obdiag gather scene run --scene=observer.sql_err --env "{db_connect='-hxx -Pxx -uxx -pxx -Dxx', trace_id='xx'}"    [SQL execution error]           [SQL 执行出错]
obdiag gather scene run --scene=observer.suspend_transaction                                                       [suspend transaction]           [悬挂事务]
obdiag gather scene run --scene=observer.unit_data_imbalance                                                       [unit data imbalance]           [unit迁移/缩小 副本不均衡问题]
obdiag gather scene run --scene=observer.unknown                                                                   [unknown problem]               [未能明确问题的场景]
---------------------------------------------------------------------------------------------------------------------------------------------------------------------

2.2 使用说明

运行如下命令即可一键采集某个场景下所有的故障信息

obdiag gather scene run --scene={SceneName}
--scene={SceneName}SceneName 是对需要执行收集的场景Example1:
obdiag gather scene run --scene=observer.unknown

选项说明如下:

选项名是否必选数据类型默认值说明
--scenestring默认为空场景名,可以通过obdiag gather scene list 查看当前版本支持哪些场景
--fromstring默认为空日志收集的开始时间,格式为: yyyy-mm-dd hh:mm:ss,不需要加引号,例如 1970-01-01 12:00:00
--tostring默认为空日志收集的结束时间,格式为: yyyy-mm-dd hh:mm:ss,不需要加引号,例如 1970-01-01 13:00:00
--sincestring默认为空日志收集最近的某段时间,格式为: \<n> <m\|h\|d>,其中,n 表示待输入的时间数字,m 表示分钟,h 表示小时,d 表示天,例如 30m表示收集最近 30 分钟的日志。
--envstring默认为空部分场景需要额外的参数才能支持,统一放到了--env这个参数里边
--store_dirstring默认为命令执行的当前路径存储结果的本地路径。
-cstring~/.obdiag/config.yml配置文件路径

例子:

应用报错问题
obdiag gather scene run --scene=other.application_errorobproxy无故重启
obdiag gather scene run --scene=obproxy.restart数据备份问题
obdiag gather scene run --scene=observer.backup备份清理问题
obdiag gather scene run --scene=observer.backup_cleanclog盘满
obdiag gather scene run --scene=observer.clog_disk_full 合并问题
obdiag gather scene run --scene=observer.compaction CPU高
obdiag gather scene run --scene=observer.cpu_high主备库延迟
obdiag gather scene run --scene=observer.delay_of_primary_and_backup 日志归档问题
obdiag gather scene run --scene=observer.log_archive长事务
obdiag gather scene run --scene=observer.long_transaction 内存问题
obdiag gather scene run --scene=observer.memorySQL性能问题, 此处env中的trace_id对应gv$ob_sql_audit的trace_id
obdiag gather scene run --scene=observer.perf_sql --env "{db_connect='-hxx -Pxx -uxx -pxx -Dxx', trace_id='xx'}"   数据恢复问题
obdiag gather scene run --scene=observer.recovery observer无故重启
obdiag gather scene run --scene=observer.restart  有主改选或者无主选举的切主
obdiag gather scene run --scene=observer.rootservice_switch  SQL 执行出错, 此处env中的trace_id对应gv$ob_sql_audit的trace_id
obdiag gather scene run --scene=observer.sql_err --env "{db_connect='-hxx -Pxx -uxx -pxx -Dxx', trace_id='xx'}"    悬挂事务
obdiag gather scene run --scene=observer.suspend_transaction unit迁移/缩小 副本不均衡问题
obdiag gather scene run --scene=observer.unit_data_imbalance 未能明确问题的场景
obdiag gather scene run --scene=observer.unknownio问题
obdiag gather scene run --scene=observer.io

3. 自定义添加场景

场景化信息采集有两种方式:

  • yaml编排:通过yaml的方式进行采集项的编排,添加后执行器会按照编排顺序依次执行,采集所需要的信息。(适用于简单场景,普通用户都可添加)
  • hardcode方式:通过硬编码(写python脚本)的方式进行采集,流程自主控制,执行器执行的时候会自动跳转到hardcode模式进行采集。(需要下载obdiag源代码,新增后编译使用,适用于开发者)

3.1 yaml 编排添加场景

在用户目录下增加~/.obdiag/gather/tasks场景即可,注意:一个yaml对应一个场景, 如下:

.
├── obproxy
│   └── restart.yaml
├── observer
│   ├── backup_clean.yaml
│   ├── backup.yaml
│   ├── clog_disk_full.yaml
│   ├── cluster_down.yaml
│   ├── compaction.yaml
│   ├── delay_of_primary_and_backup.yaml
│   ├── io.yaml
│   ├── log_archive.yaml
│   ├── long_transaction.yaml
│   ├── memory.yaml
│   ├── recovery.yaml
│   ├── restart.yaml
│   ├── rootservice_switch.yaml
│   ├── suspend_transaction.yaml
│   ├── unit_data_imbalance.yaml
│   └── unknown.yaml
└── other└── application_error.yaml

可在observer增加一个~/.obdiag/gather/tasks/observer/test.yaml的场景

具体编写详情参见官网文档链接。 

例子:

info_en: "[io problem]"
info_cn: "[io问题]"
command: obdiag gather scene run --scene=observer.io
task:- version: "[2.0.0.0, 4.0.0.0]"steps:- type: sqlsql: "show variables like 'version_comment';"global: true- type: sqlsql: "SELECT * FROM oceanbase.v$ob_cluster"global: true- type: sqlsql: "SELECT * FROM oceanbase.__all_zone WHERE name='idc';"global: true- type: sqlsql: "select svr_ip,zone,with_rootserver,status,block_migrate_in_time,start_service_time,stop_time,build_version from oceanbase.__all_server order by zone;"global: true- type: sqlsql: "SELECT zone, concat(svr_ip, ':', svr_port) observer, cpu_capacity, cpu_total, cpu_assigned, cpu_assigned_percent, mem_capacity, mem_total, mem_assigned, mem_assigned_percent, unit_Num, round(`load`, 2) `load`, round(cpu_weight, 2) cpu_weight, round(memory_weight, 2) mem_weight, leader_count FROM oceanbase.__all_virtual_server_stat ORDER BY zone,svr_ip;"global: true- type: sqlsql: "select tenant_id,tenant_name,primary_zone,compatibility_mode from oceanbase.__all_tenant;"global: true- type: sqlsql: "show parameters like '%syslog_level%';"global: true- type: sqlsql: "show parameters like '%syslog_io_bandwidth_limit%';"global: true- type: sqlsql: "select count(*),tenant_id,zone_list,unit_count from oceanbase.__all_resource_pool group by tenant_id,zone_list,unit_count;"global: true- type: sshssh: "df -h"global: false- type: sshssh: "cat /proc/sys/fs/aio-nr"global: false- type: sshssh: "cat /proc/sys/fs/aio-max-nr"global: false- type: logglobal: falsegrep: "IO"- type: sysstatglobal: falsesysstat: ""- version: "[4.0.0.0, *]"steps:- type: sqlsql: "show variables like 'version_comment';"global: true- type: sqlsql: "SELECT * FROM oceanbase.DBA_OB_ZONES;"global: true- type: sqlsql: "SELECT * FROM oceanbase.DBA_OB_SERVERS;"global: true- type: sqlsql: "SELECT * FROM oceanbase.GV$OB_SERVERS;"global: true- type: sqlsql: "SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS;"global: true- type: sqlsql: "SELECT * FROM oceanbase.DBA_OB_RESOURCE_POOLS;"global: true- type: sqlsql: "SELECT * FROM oceanbase.DBA_OB_TENANTS;"global: true- type: sqlsql: "SELECT c.TENANT_ID, e.TENANT_NAME, concat(c.NAME, ': ', d.NAME) `pool:conf`,concat(c.UNIT_COUNT, ' unit: ', d.min_cpu, 'C/', ROUND(d.MEMORY_SIZE/1024/1024/1024,0), 'G') unit_info FROM oceanbase.DBA_OB_RESOURCE_POOLS c, oceanbase.DBA_OB_UNIT_CONFIGS d, oceanbase.DBA_OB_TENANTS e WHERE c.UNIT_CONFIG_ID=d.UNIT_CONFIG_ID AND c.TENANT_ID=e.TENANT_ID AND c.TENANT_ID>1000 ORDER BY c.TENANT_ID;"global: true- type: sqlsql: "SELECT a.TENANT_NAME,a.TENANT_ID,b.SVR_IP FROM oceanbase.DBA_OB_TENANTS a, oceanbase.GV$OB_UNITS b WHERE a.TENANT_ID=b.TENANT_ID;"global: true- type: sqlsql: "show parameters like '%syslog_level%';"global: true- type: sqlsql: "show parameters like '%syslog_io_bandwidth_limit%';"global: true- type: sqlsql: "select * from __all_virtual_io_quota limit 20"global: true- type: sshssh: "df -h"global: false- type: sshssh: "cat /proc/sys/fs/aio-nr"global: false- type: sshssh: "cat /proc/sys/fs/aio-max-nr"global: false- type: logglobal: falsegrep: "IO"- type: sysstatglobal: falsesysstat: ""

3.2 硬编码添加场景

源代码下载: GitHub - oceanbase/oceanbase-diagnostic-tool: OceanBase Diagnostic Tool is designed to help OceanBase users quickly gather necessary information and analyze the cause of the problem.

开发者在该目录下增加{project_dir}/handler/gather/scene场景, 建议一个场景一个.py文件。

│   ├── gather/ 一键收集功能
│   │   ├── gather_awr.py awr报告收集代码
│   │   ├── gather_log.py 日志收集代码
│   │   ├── gather_obadmin.py 解析clog/slog的代码
│   │   ├── gather_obproxy_log.py 收集obproxy代码
│   │   ├── gather_obstack2.py 收集堆栈信息的代码
│   │   ├── gather_perf.py 收集火焰图的代码
│   │   ├── gather_plan_monitor.py 收集并行SQL的代码
│   │   ├── gather_scenes.py 场景化收集的入口代码
│   │   ├── gather_sysstat.py 收集主机信息的代码
│   │   ├── scenes/ 场景化信息采集的处理代码
│   │   │   ├── base.py
│   │   │   ├── cpu_high.py cpu高场景
│   │   │   ├── list.py 场景列表展示的代码
│   │   │   ├── register.py 硬编码场景注册代码
│   │   │   └── sql_problem.py sql问题采集的代码
│   │   ├── step/ 场景化采集的执行器
│   │   │   ├── base.py 
│   │   │   ├── sql.py sql执行器
│   │   │   └── ssh.py ssh执行器
│   │   └── tasks/ 收集场景的yaml文件

3.2.1 模版
#!/usr/bin/env python
# -*- coding: UTF-8 -*
# Copyright (c) 2022 OceanBase
# OceanBase Diagnostic Tool is licensed under Mulan PSL v2.
# You can use this software according to the terms and conditions of the Mulan PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
#          http://license.coscl.org.cn/MulanPSL2
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v2 for more details."""
@file: test.py
@desc:
"""class TestScene(object):def __init__(self, nodes, cluster, report_path, task_variable_dict=None, args=None, env={}):if task_variable_dict is None:self.task_variable_dict = {}else:self.task_variable_dict = task_variable_dictself.nodes = nodesself.cluster = clusterself.report_path = report_pathself.args = argsself.env = envself.is_ssh = Truedef execute(self): # 执行函数passdef xxx(self):pass

3.2.2 例子

#!/usr/bin/env python
# -*- coding: UTF-8 -*
# Copyright (c) 2022 OceanBase
# OceanBase Diagnostic Tool is licensed under Mulan PSL v2.
# You can use this software according to the terms and conditions of the Mulan PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
#          http://license.coscl.org.cn/MulanPSL2
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v2 for more details."""
@file: test.py
@desc:
"""
import os
from utils.shell_utils import SshHelper
from common.logger import logger
from handler.gather.gather_obstack2 import GatherObstack2Handler
from handler.gather.gather_perf import GatherPerfHandlerclass TestScene(object):def __init__(self, nodes, cluster, report_path, task_variable_dict=None, args=None, env={}):if task_variable_dict is None:self.task_variable_dict = {}else:self.task_variable_dict = task_variable_dictself.nodes = nodesself.cluster = clusterself.report_path = report_pathself.args = argsself.env = envself.is_ssh = Truedef execute(self): # 执行函数self.__gather_obstack() # 例self.__gather_perf()self.__gather_cmd_info()def __gather_obstack(self):logger.info("gather obstack start")obstack = GatherObstack2Handler(nodes=self.nodes, gather_pack_dir=self.report_path, is_scene=True)obstack.handle(self.args)logger.info("gather obstack end")def __gather_perf(self):logger.info("gather perf start")perf = GatherPerfHandler(nodes=self.nodes, gather_pack_dir=self.report_path, is_scene=True)self.args = ParserAction.add_attribute_to_namespace(self.args, 'scope', "all")perf.handle(self.args)logger.info("gather perf end")

4. 附录

  • obdiag 官方文档: OceanBase分布式数据库-海量数据 笔笔算数
  • obdiag github地址: GitHub - oceanbase/oceanbase-diagnostic-tool: OceanBase Diagnostic Tool is designed to help OceanBase users quickly gather necessary information and analyze the cause of the problem.

第一篇如何修炼成“神医”——《OceanBase诊断系列》之一
第二篇走进SQL审计视图——《OceanBase诊断系列》之二
第三篇快速收集诊断信息,敏捷诊断工具obdiag应用实践——《OceanBase诊断系列》之三
第四篇如何快速分析OB集群日志,敏捷诊断工具obdiag分析能力实践——《OceanBase诊断系列》之四
第五篇防患未然,OceanBase巡检工具应用实践——《OceanBase诊断系列》之五
第六篇obdiag帮你读懂全链路诊断日志——《OceanBase诊断系列》之六
第七篇如何排查合并问题——《OceanBase诊断系列》之七
第八篇轻松掌握锁冲突问题的排查方法——《OceanBase诊断系列》之八
第九篇obdiag如何实现一键采集20+故障场景的诊断信息——《OceanBase诊断系列》之九

相关文章:

obdiag如何实现一键采集20+故障场景的诊断信息——《OceanBase诊断系列》之九

作者简介&#xff1a;靖顺&#xff0c;OcenaBase 开发工程师&#xff0c;专注于数据库诊断与调优 1. 前言 在2024年初&#xff0c;我与一线运维人员交流时&#xff0c;他们纷纷提及在运维过程中遭遇的难题——OceanBase出现问题时&#xff0c;排查工作不容易&#xff0c;有时需…...

Cookie和Session的获取方法

1、Cookie的简单获取方法&#xff08;可以获取到所有的cookie&#xff09; &#xff08;1&#xff09;在参数里还有HttpServletResponse response这些&#xff0c;这些都是内置对象需要就拿不需要就删掉就可以&#xff0c;在这里我们用到的是HttpServletRequest request &…...

旅游市场游客满意度调查报告

民安智库开展游客满意度调查主要通过问卷调查的方式进行&#xff0c;在设计问卷时&#xff0c;应确保问题覆盖游客在某省旅游过程中可能遇到的各个方面&#xff0c;包括交通、住宿、餐饮、旅游景点、导游服务等。此外&#xff0c;还可以设置一些开放性问题&#xff0c;让游客提…...

为什么选用python开发web?

目前&#xff0c;不少公司在用python做web开发&#xff0c;前司用pythonflask做内容审核的后端。 java和php在web开发领域积累较久&#xff0c;有丰富的web开发生态组件可以使用&#xff0c;性能稳定&#xff0c;扩展性强&#xff0c;这个是事实&#xff0c;从这方面来讲&…...

C# Chart曲线控件专题

1.控件基本设置 chart1.ChartAreas[0].AxisY.IsStartedFromZero false; //设置Y轴自适应chart1.Series["瞬时值"].BorderWidth 2; // 设置曲线宽度为2个像素&#xff0c;注意[]中写入的Series的Namechart1.Series["瞬时值"].Color Color.Red; // 设置曲…...

Spring:StopWatch

文章目录 一、介绍二、使用1、导入相关的Spring包2、创建StopWatch实例和开始计时3、停止计时4、获取时间5、获取任务详情6、分阶段计时7、获取总耗时与各阶段耗时 三、案例 一、介绍 在Spring框架中&#xff0c;StopWatch类通常用于测量代码块的执行时间。您可以使用StopWatc…...

考研C语言复习进阶(5)

目录 1. 为什么使用文件 2. 什么是文件 2.1 程序文件 2.2 数据文件 2.3 文件名 3. 文件的打开和关闭 3.1 文件指针 3.2 文件的打开和关闭 4. 文件的顺序读写 ​编辑 ​编辑 4.1 对比一组函数&#xff1a; ​编辑 5. 文件的随机读写 5.1 fseek 5.2 ftell 5.3 rewind…...

[uni-app] 小程序码转为二维码, 小程序解析此码获取数据

小程序码缩小后太细, 不好扫, 还是改成二维码扫 记录解析该二维码 onLoad(e) {if (e.shareTimeline) { // 以单页面启动-朋友圈分享出的单页面this.shareTimeline e.shareTimeline;let param {certId: e.certId,uid: e.uid,unionid: e.unionid,openid: e.openid,}this.initD…...

【四 (3)数据可视化之 Seaborn 常用图表及代码实现 】

目录 文章导航一、介绍二、安装Seaborn三、导入Seaborn四、设置可以中文显示五、占比类图表1、饼图2、环形图 六、比较排序类1、条形图2、箱线图3、小提琴图 七、趋势类图表1、折线图 八、频率分布类1、直方图 九、关系类图表1、散点图2、成对关系图3、热力图 文章导航 【一 简…...

ASP.NET-Server.HtmlEncode

目录 背景: 1.转义特殊字符&#xff1a; 2.防止跨站脚本攻击&#xff08;XSS&#xff09;&#xff1a; 3.确保输出安全性&#xff1a; 4.保留原始文本形式&#xff1a; 5.与用户输入交互安全&#xff1a; 实例说明: 不用Server.HtmlEncode 效果展示: 用Server.HtmlEnc…...

Linux下进行JavaEE开发-安装JDK、Tomcat、MySQL

目录 JDKTomcatMySQL JDK 安装JDK步骤&#xff1a; 1、创建目录mkdir /opt/jdk 2、将jdk压缩包通过xftp6上传到该目录 3、cd /opt/jdk 4、tar -zxvf jdk-8u151-linux-x64.tar.gz 5、mkdir /usr/local/java 6、mv /opt/jdk/jdk1.8.0_151 /usr/local/java 7、修改环境变量…...

视频和图像编码标准或格式的发展关系

MPEG-2 继承 MPEG-1&#xff1a; MPEG-2 是 MPEG-1 的继任者&#xff0c;用于更高质量和分辨率的视频传输&#xff0c;如 DVD 和数字电视。 MPEG-4 继承 MPEG-2&#xff1a; MPEG-4 在 MPEG-2 的基础上增加了更多的功能和灵活性&#xff0c;适用于多媒体交互和网络传输。 H.2…...

移动云行动:5.5G技术引领数字化转型

刚刚结束的全国两会上&#xff0c;有人大代表建议应尽快发挥5G-A&#xff08;5.5G&#xff09;优势&#xff0c;加快试点城市布局。此前&#xff0c;中国移动已宣布将在300多个城市启动5.5G商用部署。在通信技术的历史长河中&#xff0c;4G改变了我们的生活方式&#xff0c;而5…...

Git如何与Gitee连接(主) , Git的基础使用方式简述(次)

作者前言 本章默认读者已经下好了git并拥有gitee账号&#xff0c;如果这两步没有完成的话&#xff0c;可以先去下载和注册账号接着继续阅读&#xff0c;由于写这篇博客的时候更关注的是怎么连接&#xff0c;所以先展示需要的部分&#xff0c;后面会介绍git的一些基本使用方法&…...

使用VLC实现自动播放视频

VLC是一款开源的多媒体播放器&#xff0c;它支持大量的视频和音频格式&#xff0c;并且具有强大的脚本和编程接口。虽然VLC本身并没有内置的编程语言&#xff0c;但你可以通过其命令行接口或Lua脚本来实现自动化播放视频的功能。 以下是一个简单的示例&#xff0c;展示如何使用…...

KY199 查找

描述&#xff1a; 输入数组长度 n 输入数组 a[1…n] 输入查找个数m 输入查找数字b[1…m] 输出 YES or NO 查找有则YES 否则NO 。 输入描述&#xff1a; 输入有多组数据。 每组输入n&#xff0c;然后输入n个整数&#xff0c;再输入m&#xff0c;然后再输入m个整数&#xff08;1&…...

html5播放flv视频

参考&#xff1a;flv-h265 - npmHTML5 FLV Player. Latest version: 1.7.0, last published: 6 months ago. Start using flv-h265 in your project by running npm i flv-h265. There are no other projects in the npm registry using flv-h265.https://www.npmjs.com/packag…...

【知识简略】 简单理解SpringCloud微服务架构:服务注册发现、配置中心、限流、熔断、降级、网关路由等

主要介绍Nacos那一套。 目录 微服务架构1.服务注册发现2.配置中心3.限流、熔断、降级4.网关路由 微服务架构 Spring Cloud 微服务架构中&#xff0c;Nacos 提供了一系列核心组件和服务治理功能&#xff0c;以下是对 Nacos 中涉及的相关组件及其功能的详细解释&#xff1a; 1.…...

福派斯课堂:选择黑背犬的狗粮时需要注意哪些细节?

亲爱的狗友们&#xff0c;选择适合黑背犬的狗粮可不是一件小事哦&#xff01;&#x1f43e; 毕竟&#xff0c;黑背犬作为活泼、聪明的犬种&#xff0c;它们的饮食需求可是很特别的。接下来&#xff0c;就让我们一起探讨一下选择黑背犬狗粮时需要注意的细节吧&#xff01; 1️⃣…...

Python QT 之PySide6简单入门

目录 1.开发环境配置 1.1 下载PySide6 2.2 配置pycharm相关快捷方式 PySide6_Designer - QT Designer 设计UI PySide6_UIC - 将QT Designer生成的UI文件转换为python文件 PySide6_RCC - 将RCC文件转换为python文件 2.第一个开发实例 2.1 QT desiger设计界面 2.2 将ui文…...

美团大规模KV存储挑战与架构实践

KV 存储作为美团一项重要的在线存储服务&#xff0c;承载了在线服务每天万亿级的请求量&#xff0c;并且保持着 99.995% 的服务可用性。在 DataFunSummit 2023 数据基础架构峰会上&#xff0c;我们分享了《美团大规模 KV 存储挑战与架构实践》&#xff0c;本文为演讲内容的整理…...

计算机基础1-汇编基础

汇编语言是一种低级的计算机语言&#xff0c;它直接与计算机硬件进行交互。在汇编语言中&#xff0c;指令由一系列助记符&#xff08;mnemonic&#xff09;组成&#xff0c;用于执行特定的操作&#xff0c;如数据传输、算术运算和控制流程等。每个指令都对应着一条机器码&#…...

六、项目进度管理

六、项目进度管理 根据项目的范围进行项目的进度管理 项目进度管理主要包含以下几个项目管理过程: 规划进度管理定义活动排列活动顺序估算活动持续时间制定进度计划控制进度 1、规划进度管理 ​ 规划进度管理是为规划、编制、管理、执行和控制项目进度而制定政策、程序和文…...

java操作HBase

创建一个学生信息表&#xff0c;用来存储学生的姓名&#xff08;姓名作为行键&#xff0c;且假设姓名不会重复&#xff09;以及考试成绩&#xff0c;其中考试成绩&#xff08;score&#xff09;是一个列族&#xff0c;存储了各个科目的考试成绩。然后向student中添加数据 1、HB…...

【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱

1 基本定义 移动中位数滤波算法是一种基于中位数的滤波方法&#xff0c;它通过对信号进行滑动窗口处理&#xff0c;每次取窗口内的中位数作为当前点的估计值&#xff0c;以去除噪声。该算法的主要思想是利用中位数的鲁棒性&#xff0c;对信号中的噪声进行有效的消除。 具体来说…...

浏览器 实现文件下载 完成回调 兼容ie11

首先保证 改文件资源能够通过get请求或者 post请求拿到&#xff0c;基于此基础上我们可以实现得知下载完成后的回调 代码如下 const getFileAndCallback (url, callback) > {//定义执行作用域const that this;//首先 初始化一个原生ajax对象const xhr new XMLHttpReques…...

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Grid)

网格容器&#xff0c;由“行”和“列”分割的单元格所组成&#xff0c;通过指定“项目”所在的单元格做出各种各样的布局。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 仅支持GridItem…...

Docker使用(四)Docker常见问题分析和解决收集整理

Docker使用(四)Docker常见问题分析和解决收集整理 五、常见问题 1、 启动异常 【描述】&#xff1a; 【分析】&#xff1a;[rootlocalhost ~]# systemctl status docker 【解决】&#xff1a; &#xff08;1&#xff09;卸载后重新安装&#xff0c;不能解决这个问题。 …...

通过spring boot/redis/aspect 防止表单重复提交【防抖】

一、啥是防抖 所谓防抖&#xff0c;一是防用户手抖&#xff0c;二是防网络抖动。在Web系统中&#xff0c;表单提交是一个非常常见的功能&#xff0c;如果不加控制&#xff0c;容易因为用户的误操作或网络延迟导致同一请求被发送多次&#xff0c;进而生成重复的数据记录。要针…...

C++ 作业 24/3/14

1、成员函数版本实现算术运算符的重载&#xff1b;全局函数版本实现算术运算符的重载 #include <iostream>using namespace std;class Test {friend const Test operator-(const Test &L,const Test &R); private:int c;int n; public:Test(){}Test(int c,int n…...