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

【MySQL工具】pt-heartbeat

功能

pt-heartbeat - 监控 MySQL 复制延迟。

用法

pt-heartbeat [OPTIONS] [DSN] --update|--monitor|--check|--stop

pt-heartbeat 用于测量 MySQL 或 PostgreSQL 服务器上的复制延迟。您可以使用它来更新主服务器或监控从服务器。如果可能,MySQL 连接选项将从您的 .my.cnf 文件中读取。

启动守护进程以在主服务器上更新 test.heartbeat 表:

pt-heartbeat -D test --update -h master-server --daemonize

从服务器上监控复制延迟:

pt-heartbeat -D test --monitor -h slave-serverpt-heartbeat -D test --monitor -h slave-server --dbi-driver Pg

 

检查从服务器延迟一次并退出(使用可选的 DSN 指定从服务器主机):

pt-heartbeat -D test --check h=slave-server

风险

Percona Toolkit 是成熟的、在真实世界中经过验证的,并且经过了充分测试,但所有数据库工具都可能对系统和数据库服务器造成风险。在使用此工具之前,请:

  • 阅读工具的文档
  • 查看工具已知的“BUG”
  • 在非生产服务器上测试该工具
  • 备份您的生产服务器并验证备份

描述

pt-heartbeat 是一个两部分的 MySQL 和 PostgreSQL 复制延迟监控系统,通过查看实际复制的数据来测量延迟。这避免了对复制机制本身(例如 MySQL 的 SHOW SLAVE STATUS)的依赖,因为它是不可靠的。

SHOW SLAVE STATUS 为什么不可靠?

第一部分是 pt-heartbeat 的 --update 实例,连接到主服务器并每 --interval 秒更新一个时间戳(“心跳记录”)。由于心跳表可能包含来自多个主服务器的记录(参见“多从层次结构”),服务器的 ID(@@server_id)用于标识记录。

第二部分是 pt-heartbeat 的 --monitor 或 --check 实例,连接到从服务器,检查来自其直接主服务器或指定的 --master-server-id 的复制的心跳记录,并计算与当前系统时间的差异。如果从服务器和主服务器之间的复制延迟或中断,则计算的差异将大于零,并且如果指定了 --monitor,可能会增加。

您必须手动在主服务器上创建心跳表,或者使用 --create-table。请参阅 --create-table 以获取正确的心跳表结构。建议使用 MEMORY 存储引擎,但对于 MySQL 当然不是必需的。

心跳表必须包含一个心跳行。默认情况下,如果不存在心跳行,则会插入一个心跳行。如果数据库用户没有 INSERT 权限,则可以使用 --[no]insert-heartbeat-row 选项禁用此功能。

pt-heartbeat 仅依赖于复制到从服务器的心跳记录,因此无论复制机制如何(内置复制、Continuent Tungsten 等系统),都可以工作。它在复制层次结构中的任何深度都可以工作;例如,它将可靠地报告从服务器落后于其主服务器的主服务器的主服务器。如果复制停止,它将继续工作并报告(准确地!)从服务器与主服务器之间的延迟越来越大。

pt-heartbeat 的最大分辨率为 0.01 秒。主服务器和从服务器的时钟必须通过 NTP 进行紧密同步。默认情况下,--update 检查在秒的边缘发生(例如 00:01),--monitor 检查发生在秒的中间(例如 00:01.5)。只要服务器的时钟保持紧密同步,复制事件在半秒内传播,pt-heartbeat 就会报告零秒延迟。

如果连接出现错误,pt-heartbeat 将尝试重新连接,但如果在首次启动时无法获得连接,则不会重试。

--dbi-driver 选项允许您使用 pt-heartbeat 监视 PostgreSQL。据报道,它与 Slony-1 复制很好地配合使用。

级联复制结构

如果复制层次结构中有多个从服务器,这些从服务器又是其他从服务器的主服务器,例如“主服务器 -> 从服务器1 -> 从服务器2”,则可以在从服务器以及主服务器上运行 --update 实例。默认的心跳表(参见 --create-table)是根据 server_id 列进行索引的,因此每个服务器都将更新 server_id=@@server_id 的行。

对于 --monitor 和 --check,如果未指定 --master-server-id,则工具尝试发现并使用从服务器的直接主服务器。如果此失败,或者如果您想要监视来自另一个主服务器的延迟,则可以指定 --master-server-id 来使用。

例如,如果复制层次结构是“主服务器 -> 从服务器1 -> 从服务器2”,对应的服务器 ID 分别是 1、2 和 3,您可以:

pt-heartbeat --daemonize -D test --update -h master
pt-heartbeat --daemonize -D test --update -h slave1

从服务器1 然后检查(或监视)从主服务器到从服务器2的复制延迟:

pt-heartbeat -D test --master-server-id 1 --check slave2

从服务器2 或者检查从从服务器1到从服务器2的复制延迟:

pt-heartbeat -D test --master-server-id 2 --check slave2

从服务器2 停止在从服务器1上的 --update 实例不会影响主服务器上的实例。

主服务器和从服务器状态

默认的心跳表(参见 --create-table)具有保存 SHOW MASTER STATUS 和 SHOW SLAVE STATUS 信息的列。这些列是可选的。如果存在任何列,它们对应的信息将被保存。

参数详解

至少指定 --stop、--update、--monitor 或 --check 中的一个。

--update、--monitor 和 --check 三者互斥。

--daemonize 和 --check 互斥。

此工具接受额外的命令行参数。有关详细信息,请参阅“SYNOPSIS”和使用信息。

--ask-pass

连接到 MySQL 时提示输入密码。

--charset

缺省:-A;类型:字符串

默认字符集。如果值为 utf8,则设置 Perl 的 STDOUT 的 binmode 为 utf8,将 mysql_enable_utf8 选项传递给 DBD::mysql,并在连接到 MySQL 后运行 SET NAMES UTF8。任何其他值都会在连接到 MySQL 后设置 STDOUT 的 binmode,但不使用 utf8 层,并在连接到 MySQL 后运行 SET NAMES。

--check

检查一次从服务器的延迟并退出。如果还指定了 --recurse,则工具将尝试发现给定从服务器的从服务器,并检查并打印它们的延迟。在打印延迟之前,会打印每个从服务器的主机名或 IP 和端口。--recurse 仅适用于 MySQL。

--check-read-only

检查服务器是否启用了 read_only;如果启用了,工具将跳过执行任何插入操作。另请参阅 --read-only-interval。

--config

类型:数组

读取此逗号分隔的配置文件列表;如果指定了此选项,则必须将其作为命令行上的第一个选项。

--create-table

如果不存在,创建心跳 --table。

此选项会导致使用以下 MAGIC_create_heartbeat 表定义创建由 --database 和 --table 指定的表:

CREATE TABLE heartbeat (ts                    varchar(26) NOT NULL,server_id             int unsigned NOT NULL PRIMARY KEY,file                  varchar(255) DEFAULT NULL,    -- SHOW MASTER STATUSposition              bigint unsigned DEFAULT NULL, -- SHOW MASTER STATUSrelay_master_log_file varchar(255) DEFAULT NULL,    -- SHOW SLAVE STATUSexec_master_log_pos   bigint unsigned DEFAULT NULL  -- SHOW SLAVE STATUS
);

心跳表至少需要一行记录。如果您手动创建了心跳表,则必须执行以下操作来插入一行记录:

INSERT INTO heartbeat (ts, server_id) VALUES (NOW(), N);

如果使用 --utc 参数,则执行以下操作:

INSERT INTO heartbeat (ts, server_id) VALUES (UTC_TIMESTAMP(), N);

其中 N 是服务器的 ID;不要使用 @@server_id,因为它会被复制,从服务器将插入自己的服务器 ID 而不是主服务器的服务器 ID。

这将由 --create-table 参数自动完成。

仍然支持一种传统版本的心跳表:

CREATE TABLE heartbeat (id int NOT NULL PRIMARY KEY,ts datetime NOT NULL
);

传统表不支持在多个从服务器层次结构(例如“主服务器 -> 从服务器1 -> 从服务器2”)的每个从服务器上进行 --update 实例。要手动向传统表中插入所需的一行记录,请执行以下操作:

INSERT INTO heartbeat (id, ts) VALUES (1, NOW());

如果使用 --utc 参数,则执行以下操作:

INSERT INTO heartbeat (id, ts) VALUES (1, UTC_TIMESTAMP());

--create-table-engine

指定用于心跳表的存储引擎。默认的存储引擎是 InnoDB,适用于 MySQL 5.5.5 及以上版本。

--daemonize

在后台进行分叉并与 shell 分离。仅适用于 POSIX 操作系统。

--database

short form: -D; type: string

用于连接的数据库。

--dbi-driver

 默认值:mysql;类型:字符串

指定连接的驱动程序;支持 mysql 和 Pg。

--defaults-file

 short form: -F; type: string

仅从给定文件中读取 mysql 选项。您必须提供绝对路径名。

--file

 类型:字符串

将最新的 --monitor 输出打印到此文件。

当使用 --monitor 时,将输出打印到指定的文件中,而不是 STDOUT。该文件在每次间隔时打开、截断并关闭,因此它只包含最新的统计信息。在使用 --daemonize 时很有用。

--frames

类型:字符串;默认值:1m,5m,15m

平均值的时间段。

在给定 --monitor 时指定计算移动平均值的时间段。以逗号分隔的数字列表形式指定。后缀可以是 s 表示秒,m 表示分钟,h 表示小时,或 d 表示天。最大帧的大小确定了最大内存使用量,因为在内存中保留了指定数量的每秒样本以计算平均值。您可以指定任意数量的时间段。

--help

 显示帮助并退出。

--host

short form: -h; type: string

连接到主机。

--[no]insert-heartbeat-row

 默认值:yes

如果 --table 中不存在心跳行,则插入一行心跳行。

心跳 --table 需要一个心跳行,否则没有东西可以 --update、--monitor 或 --check!默认情况下,如果尚未存在心跳行,则工具将插入一个心跳行。如果数据库用户没有 INSERT 权限,可以通过指定 --no-insert-heartbeat-row 来禁用此功能。

--interval

 类型:浮点数;默认值:1.0

更新或检查心跳 --table 的频率。更新和检查从第一个整秒开始,然后每隔 --interval 秒进行一次 --update,每隔 --interval 加上 --skew 秒进行一次 --monitor。

例如,如果在 00:00.4 开始一个 --update 实例,间隔为 0.5 秒,则第一个更新将在 00:01.0 发生,下一个将在 00:01.5 发生,依此类推。如果在 00:10.7 开始一个 --monitor 实例,间隔为 0.05 秒,并且默认的 0.5 秒 --skew,则第一次检查将在 00:11.5(00:11.0 + 0.5)进行,这将是距离最后一次更新 --update 工作间隔的 --skew 秒,因为实例是以同步间隔进行检查的,它发生在 00:11.0。

工具在更新或检查之前等待并从第一个整秒开始,以简化间隔计算。因此,工具可能在更新或检查之前等待最多 1 秒。

最小(最快)间隔为 0.01,最大精度为两位小数,因此 0.015 将四舍五入为 0.02。

如果使用传统的心跳表(见 --create-table),则最大精度为 1s,因为 ts 列的类型是 datetime。

--log

类型:字符串

将所有输出打印到此文件中。

当进行守护化时,将输出打印到指定的文件中。

--master-server-id

类型:字符串

计算 --monitor 或 --check 的延迟从此主服务器 ID。如果未给出,则 pt-heartbeat 尝试连接到服务器的主服务器并确定其服务器 ID。

--monitor

持续监视从服务器延迟。

指定 pt-heartbeat 应该每秒检查一次从服务器的延迟,并报告到 STDOUT(或如果给出了 --file,则报告到文件)。输出是当前延迟,然后是给定的 --frames 中时间段的移动平均值。例如,

5s [  0.25s,  0.05s,  0.02s ]

--fail-successive-errors

类型:整数

如果指定,则 pt-heartbeat 将在给定数量的连续 DBI 错误后失败(无法连接到服务器或发出查询)。

--password

 short form: -p; type: string

连接时使用的密码。如果密码包含逗号,则必须用反斜杠转义:“exam,ple”

--pid

 类型:字符串

创建给定的 PID 文件。如果 PID 文件已存在并且其中包含的 PID 与当前 PID 不同,则工具不会启动。但是,如果 PID 文件存在并且其中包含的 PID 不再运行,则工具将用当前 PID 覆盖 PID 文件。工具退出时,PID 文件会自动删除。

--port

 short form: -P; type: int

用于连接的端口号。

--print-master-server-id

打印自动检测或给定的 --master-server-id。如果指定了 --check 或 --monitor,则指定此选项将在每行的末尾打印自动检测到或给定的 --master-server-id。

--read-only-interval

类型:整数

当指定了 --check-read-only 时,发现服务器为只读时的间隔。如果未指定,则使用 --interval。

--recurse

 类型:整数

在 --check 模式下递归检查从服务器的深度。

尝试递归地发现从服务器,直到指定的深度。在发现服务器之后,对每个服务器运行检查,并打印主机名(如果可能),然后是从服务器延迟。

目前,此功能仅适用于 MySQL。请参阅 --recursion-method。

--recursion-method

类型:数组;默认值:processlist,hosts

用于查找从服务器的首选递归方法。

可能的方法包括:

METHOD       USES
===========  ==================
processlist  SHOW PROCESSLIST
hosts        SHOW SLAVE HOSTS
none         Do not find slaves

不查找从服务器 processlist 方法优先,因为 SHOW SLAVE HOSTS 不可靠。但是,如果服务器使用非标准端口(不是 3306),则需要使用 hosts 方法。通常情况下,pt-heartbeat 会找到从服务器,但是您可以给出首选方法,它将首先使用。如果找不到任何从服务器,则会尝试其他方法。

--replace

 在 --update 中使用 REPLACE 而不是 UPDATE。

在 --update 模式下运行时,使用 REPLACE 而不是 UPDATE 来设置心跳表的时间戳。REPLACE 语句是 MySQL 对 SQL 的扩展。当您不知道表是否包含任何行时,此选项非常有用。它必须与 --update 一起使用。

--run-time

类型:时间

运行的时间,然后退出。

--sentinel

类型:字符串;默认值:/tmp/pt-heartbeat-sentinel

如果此文件存在,则退出。

--slave-user

类型:字符串

设置要用于连接到从服务器的用户。此参数允许您在从服务器上使用一个具有较少权限的不同用户,但该用户必须存在于所有从服务器上。

--slave-password

类型:字符串

设置要用于连接到从服务器的密码。可以与 --slave-user 一起使用,用户的密码必须在所有从服务器上相同。

--set-vars

类型:数组

设置此逗号分隔的变量=值对的 MySQL 变量。

默认情况下,工具设置:

wait_timeout=10000

命令行中指定的变量将覆盖这些默认值。例如,指定 --set-vars wait_timeout=500 将覆盖 10000 的默认值。

如果无法设置变量,则工具会打印警告并继续执行。

--skew

类型:浮点数;默认值:0.5

延迟检查的时间。

默认情况下,将延迟检查半秒钟。由于更新尽快在主服务器的第二秒开始后发生,这允许一秒钟的复制延迟,然后报告从服务器比主服务器落后一秒钟。如果您的时钟不完全准确或有其他原因需要延迟从服务器更长或更短时间,可以调整此值。尝试将 PTDEBUG 环境变量设置为查看此选项的影响。

--stop

通过创建 sentinel 文件来停止运行的实例。

这应该有助于优雅地停止必要的 cron 作业,或者替换一个正在运行的实例。例如,如果您想每小时停止并重新启动 pt-heartbeat(只是为了确保每小时重新启动一次,在服务器崩溃或其他问题时),您可以使用类似以下的 cron 行:

0 * * * * :program:`pt-heartbeat` --update -D test --stop \--sentinel /tmp/pt-heartbeat-hourly

非默认的 --sentinel 将确保每小时 cron 作业仅停止以前使用相同选项(即从相同的 cron 作业)启动的实例。

另请参阅 --sentinel。

--table

类型:字符串;默认值:heartbeat

用于心跳的表。

不要指定 database.table;使用 --database 指定数据库。

请参阅 --create-table。

--update

更新主服务器的心跳。

--utc¶ 忽略系统时区,仅使用 UTC。默认情况下,pt-heartbeat 不会检查或调整不同系统或 MySQL 时区,这可能导致工具计算延迟不正确。指定此选项是一个好主意,因为它确保工具无论时区如何都能正确工作。

如果使用,此选项必须用于所有 pt-heartbeat 实例:--update、--monitor、--check 等。您可能应该在 --config 文件中设置此选项。将此选项与未使用此选项的 pt-heartbeat 实例混合使用将导致由于不同的时区(除非所有系统都设置为使用 UTC,否则不需要此选项)而产生错误的延迟读数。

--version

显示版本并退出。

--[no]version-check

默认值:yes

检查 Percona Toolkit、MySQL 和其他程序的最新版本。

这是一个标准的“自动检查更新”的功能,具有两个附加功能。首先,工具检查自身的版本,以及以下软件的版本:操作系统、Percona 监控和管理(PMM)、MySQL、Perl、MySQL Perl 驱动程序(DBD::mysql)和 Percona Toolkit。其次,它检查并警告已知存在问题的版本。例如,MySQL 5.5.25 存在严重的错误,并作为 5.5.25a 重新发布。

通过安全连接到 Percona 的版本检查数据库服务器执行这些检查。每个请求都由服务器记录,包括软件版本号和所检查系统的唯一 ID。ID 是由 Percona Toolkit 安装脚本生成的,或者当首次调用版本检查数据库时生成。

任何更新或已知问题都会在工具的正常输出之前打印到 STDOUT。此功能不应干扰工具的正常操作。

有关更多信息,请访问 https://www.percona.com/doc/percona-toolkit/LATEST/version-check.html。

版本

pt-heartbeat 3.5.7

相关文章:

【MySQL工具】pt-heartbeat

功能 pt-heartbeat - 监控 MySQL 复制延迟。 用法 pt-heartbeat [OPTIONS] [DSN] --update|--monitor|--check|--stop pt-heartbeat 用于测量 MySQL 或 PostgreSQL 服务器上的复制延迟。您可以使用它来更新主服务器或监控从服务器。如果可能,MySQL 连接选项将从您…...

实现vant的年月日时分秒组件

方法&#xff1a;van-datetime-picker&#xff08;type&#xff1a;datetime&#xff09;和 van-picker结合实现。 <template><div class"datetimesec-picker"><van-datetime-pickerref"timePickerRef"type"datetime" //年月日时…...

typescript 命名空间、装饰器

1、命名空间 命名空间&#xff1a;在代码量较大的情况下&#xff0c;为了避免各种变量命名的冲突&#xff0c;可将相似功能的函数、类、接口等放置到命名空间内。同Java的包.Net的命名空间一样&#xff0c;typescript 的命名空间可以将代码包裹起来&#xff0c;只对外暴露需要在…...

GPT问答SAP BW

以下回答由GPT-3.5回答,仅供参考. 这个AI工具超好用&#xff0c;每天都有免费额度&#xff0c;写文章、总结长视频、画图等&#xff0c;都几秒搞定&#xff01;快去下载Sider Chrome或Edge插件&#xff0c;薅羊毛&#xff01; https://sider.ai/invited?c43b289bf2616575daecf…...

使用zdppy_amauth开发激活用户接口

服务端代码&#xff1a; 1、创建数据库连接对象2、初始化数据库3、声明一个上下文4、挂载用户相关的路由&#xff0c;这里主要由 用户登录接口用户注册注册获取用户列表接口激活指定用户接口 5、启动服务 import mcrud import api import amauth import env import contextli…...

c++ memset 指针示例

目录 C 传一个float指针&#xff0c;在函数内部修改指针的值 c memset 指针示例 C 传一个float指针&#xff0c;在函数内部修改指针的值 #include <iostream>// 定义一个函数&#xff0c;它接受一个指向float的指针 void modifyValue(float* ptr) {// 通过解引用指针来…...

24考研双非上岸武汉理工大学电子信息专硕,855考研经验

目录 一、考研择校经验 二、武理考研初试经验 三、武理考研复试经验 一、考研择校经验 我建议学弟学妹们确定院校时没必要一上来就说我一定要考某个院校。其实考哪个学校是要在考研备考的过程中慢慢探索&#xff0c;慢慢研究的&#xff0c;不过最晚9月初一定要确定院校了&a…...

使用KubeKey 快速交付k8s v1.28.8集群

文章目录 服务器配置使用kubekey部署k8s1. 操作系统基础配置2. 安装部署 K8s2.1 下载 KubeKey2.2 创建 K8s 集群部署配置文件 3. 验证 K8s 集群3.1 验证集群状态 4. 部署测试资源5.验证服务 服务器配置 主机名IPCPU内存系统盘数据盘用途vm-16-11-ubuntu192.168.9.131128256Gi5…...

nginx--压缩https证书favicon.iconginx隐藏版本号 去掉nginxopenSSL

压缩功能 简介 Nginx⽀持对指定类型的⽂件进行压缩然后再传输给客户端&#xff0c;而且压缩还可以设置压缩比例&#xff0c;压缩后的文件大小将比源文件显著变小&#xff0c;这样有助于降低出口带宽的利用率&#xff0c;降低企业的IT支出&#xff0c;不过会占用相应的CPU资源…...

通俗的理解网关的概念的用途(四):什么是网关设备?(网络层面)

任何一台Windows XP操作系统之后的个人电脑、Linux操作系统电脑都可以简单的设置&#xff0c;就可以成为一台具备“网关”性质的设备&#xff0c;因为它们都直接内置了其中的实现程序。MacOS有没有就不知道&#xff0c;因为没用过。 简单的理解&#xff0c;就是运行了具备第二…...

Spring JdbcTemplate实现自定义动态sql拼接功能

需求描述&#xff1a; sql 需要能满足支持动态拼接&#xff0c;包含 查询字段、查询表、关联表、查询条件、关联表的查询条件、排序、分组、去重等 实现步骤&#xff1a; 1&#xff0c;创建表及导入测试数据 CREATE TABLE YES_DEV.T11 (ID BINARY_BIGINT NOT NULL,NAME VARCH…...

第十一篇:操作系统新纪元:智能融合、量子跃迁与虚拟现实的交响曲

操作系统新纪元&#xff1a;智能融合、量子跃迁与虚拟现实的交响曲 1 引言 在数字化的浪潮中&#xff0c;操作系统如同一位智慧的舵手&#xff0c;引领着信息技术的航船穿越波涛汹涌的海洋。随着人工智能、物联网、量子计算等前沿技术的蓬勃发展&#xff0c;操作系统正站在一个…...

【大数据】学习笔记

文章目录 [toc]NAT配置IP配置SecureCRT配置PropertiesTerminal Java安装环境变量配置 Hadoop安装修改配置文件hadoop-env.shyarn-env.shslavescore-site.xmlhdfs-site.xmlmapred-site.xmlyarn-site.xml 环境变量配置 IP与主机名映射关系配置hostname配置映射关系配置 关闭防火墙…...

PHP 框架安全:ThinkPHP 序列 漏洞测试.

什么是 ThinkPHP 框架. ThinkPHP 是一个流行的国内 PHP 框架&#xff0c;它提供了一套完整的安全措施来帮助开发者构建安全可靠的 web 应用程序。ThinkPHP 本身不断更新和改进&#xff0c;以应对新的安全威胁和漏洞。 目录&#xff1a; 什么是 ThinkPHP 框架. ThinkPHP 框架…...

厂家自定义 Android Ant编译流程源码分析

0、Ant安装 Windows下安装Ant&#xff1a; ant 官网可下载 http://ant.apache.org ant 环境配置&#xff1a; 解压ant的包到本地目录。 在环境变量中设置ANT_HOME&#xff0c;值为你的安装目录。 把ANT_HOME/bin加到你系统环境的path。 Ubuntu下安装Ant&#xff1a; sudo apt…...

基于springboot+vue+Mysql的体质测试数据分析及可视化设计

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…...

uniapp的app端推送功能,不使用unipush

1&#xff1a;推送功能使用htmlPlus实现&#xff1a;地址HTML5 API Reference (html5plus.org) 效果图&#xff1a; 代码实现&#xff1a; <template><view class"content"><view class"text-area"><button click"createMsg&q…...

数据结构(四)————二叉树和堆(中)

制作不易&#xff0c;三连支持一下呗&#xff01;&#xff01;&#xff01; 文章目录 前言一、堆的概念及结构二、堆的实现三.堆的应用 总结 前言 CSDN 这篇博客介绍了二叉树中的基本概念和存储结构&#xff0c;接下来我们将运用这些结构来实现二叉树 一、堆的概念及结构 1…...

随便写点东西

1 react的高阶组件 1.1 操纵组件的props、对组件的props进行增删&#xff1b; 1.2 复用组件逻辑 服用的组件逻辑&#xff0c;互不影响&#xff1b;比如高阶组件中复用了input框&#xff0c;输入内容是互不影响的&#xff1b; 1.3 可以通过配置装饰器来实现高阶组件&#xff08…...

Mac 报错 Zsh: command not found :brew

Mac 安装其他命令时报错 Zsh: command not found :brew终于找到一个能行的&#xff0c;还能够配置国内下载源&#xff0c;记录一下 执行 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"选择一个开始继续执行即可...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...

消息队列系统设计与实践全解析

文章目录 &#x1f680; 消息队列系统设计与实践全解析&#x1f50d; 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡&#x1f4a1; 权衡决策框架 1.3 运维复杂度评估&#x1f527; 运维成本降低策略 &#x1f3d7;️ 二、典型架构设计2.1 分布式事务最终一致…...

Python的__call__ 方法

在 Python 中&#xff0c;__call__ 是一个特殊的魔术方法&#xff08;magic method&#xff09;&#xff0c;它允许一个类的实例像函数一样被调用。当你在一个对象后面加上 () 并执行时&#xff08;例如 obj()&#xff09;&#xff0c;Python 会自动调用该对象的 __call__ 方法…...

【Pandas】pandas DataFrame dropna

Pandas2.2 DataFrame Missing data handling 方法描述DataFrame.fillna([value, method, axis, …])用于填充 DataFrame 中的缺失值&#xff08;NaN&#xff09;DataFrame.backfill(*[, axis, inplace, …])用于**使用后向填充&#xff08;即“下一个有效观测值”&#xff09…...