简单认识Zabbix监控系统及配置

news2025/1/9 17:15:19

文章目录

  • 一、zabbix概述
    • 1、定义
    • 2、zabbix监控原理
    • 3、监控对象
    • 4、zabbix的3种架构
      • (1) C/S架构
      • (2)分布式架构:zabbix-proxy-client架构
      • (3) master-node-client架构
    • 5、zabbix监控模式
  • 二、部署zabbix服务端
    • 1.关闭防火墙和selinux,设置服务器名称,同步时间
    • 2、下载zabbix和相关软件
    • 3、修改 zabbix server 配置文件,修改数据库的密码
    • 4、修改 zabbix 的 php 配置文件
    • 5、启动 zabbix 相关服务
    • 6、浏览器访问zabbix:http://192.168.116.60/zabbix
  • 三、部署 zabbix 客户端
    • 1.关闭防火墙和selinux,设置服务器名称,同步时间
    • 2.下载zabbix客户端
    • 3.修改客户端配置文件并开启
    • 4.在服务端验证zabbix-agent2 的连通性
    • 5.新建客户端
  • 四、监控模板
    • 1.使用官方或已开发设计好的模板
    • 2.自定义监控模板
      • (1)监控客户端主机登录人数
      • (2)监控nginx客户端状态信息
  • 五、设置邮件报警
    • 1.设置报警媒介
  • 六、配置zabbix服务端自动发现与自动注册
    • 1.自动发现
    • 2.自动注册
  • 七、部署zabbix代理服务器
  • 八、SNMP监控


一、zabbix概述

1、定义

zabbix是一个基于 web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。

zabbix能监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制以让系统管理员快速定位、解决存在的各种问题。

zabbix由两部分构成,zabbix server与可选组件zabbix agent。通过c/s 模式采集数据,通过b/s 模式在web端展示和配置。

zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux等平台上。

zabbix agent需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU等信息的收集。

2、zabbix监控原理

zabix agent安装在被监控的主机上,zabiboix agent负责定期收集客户端本地各项数据,并发送至zabbix server端,zabbix server收到数据后,将数据存储到数据库中,用户基于Zabbix WEB可以看到数据在前端展现图像。当zabbix监控某个具体的项目,该项目会设置一个触发器阈值,当被监控的指标超过该触发器设定的阈值,会进行一些必要的动作,动作包括发送信息(邮件、微信、短信)、发送命令( shell命令、reboot、restart、install等)。

3、监控对象

zabbix 监控部署在系统中,包含常见的五个程序:zabbix_server、zabix_agent、zabbix proxy、zabbix_get、zabix_sender等。

(1)zabbix server
zabbix服务端守护进程,其中 zabbix_agent、zabbix_get、zabbix_sender、zabbix _proxy的数据最终都提交给zabbix server;

(2)zabbix agent
客户端守护进程,负责收集客户端数据,例如:收集CPU负载、内存、硬盘使用情况等;

(3)zabbix proxy
zabbix分布式代理守护进程,通常大于500台主机,需要进行分布式监控架构部署;

(4)zabbix get
zabbix 数据接收工具,单独使用的命令,通常在server或者 proxy端执行获取远程客户端信息的命令;

(5)zabbix sender
zabbix数据发送工具,用户发送数据给 server或 proxy端,通常用户耗时比较长的检查。
在这里插入图片描述

4、zabbix的3种架构

(1) C/S架构

(1)被监控的机器和zabbix直接相连zabbix agent负责采集服务器的信息,zabbix server 负责存储并通过web展示硬件信息

(2)zabbix服务端与客户端是最简单的架构,监控机器和别监控机器之间不经过任何处理,直接由zabbix-server 和zabbix-agent之间进行数据交换。

(3)适用于网络比较简单,尽量在局域网内,设备比较少的监控环境

在这里插入图片描述

(2)分布式架构:zabbix-proxy-client架构

(1)被监控的机器和zabbix中间有个proxy代理,zabbix agent将采集的信息传到代理上由代理同一传给zabbix server进行前端页面展示和数据存储。

(2)proxy是server和客户端沟通的桥梁,proxy本身没有前端且其本身并不存放数据,只是将agent发来的数据暂时存放,而后再提交给server,这种架构是和master-node-client架构做比较的架构,
(3)一般适用于跨机房、跨网络、或中型网络架构的监控
在这里插入图片描述

(3) master-node-client架构

(1)master下有node节点,node可以存储数据,node有自己的配置文件和数据库注意负责将配置信息和监控数据与master同步,node下可以直接接入主机或接入代理proxy。

(2)适用于跨机房、跨网络、大环境下

在这里插入图片描述

5、zabbix监控模式

(1)主动模式:zabbix agent主动将采集到的监控信息传输给zabbix server

(2)被动模式:zabbix server向zabbix agent索引采集到的监控信息,zabbix agent返回采集到的数据

二、部署zabbix服务端

zabbix 服务端 zabbix_server 默认使用 10051 端口
zabbix_server:192.168.116.60(内存至少 2G,推荐 4G)

1.关闭防火墙和selinux,设置服务器名称,同步时间

systemctl disable --now firewalld
setenforce 0
hostnamectl set-hostname zbx-server
su
ntpdate ntp.aliyun.com

2、下载zabbix和相关软件

#获取 zabbix 的下载源
rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm 
#更换 zabbix.repo 为阿里源
cd /etc/yum.repos.d
sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' zabbix.repo
 
yum clean all && yum makecache
yum install -y zabbix-server-mysql zabbix-agent
 
#安装SCL(Software Collections),便于后续安装高版本的 php,默认 yum 安装的 php 版本为 5.4,版本过低,zabbix 5.0 版本对 php 版本最低要 7.2.0 版本。SCL 可以使得在同一台机器上使用多个版本的软件,而又不会影响整个系统的依赖环境。软件包会安装在 /etc/opt/rh/ 目录下。
yum install -y centos-release-scl 

还需要修改一下zabbix源,开启前端环境下载
在这里插入图片描述

#安装前端环境
yum install -y zabbix-web-mysql-scl zabbix-apache-conf-scl
 
#安装 zabbix 所需的数据库
yum install -y mariadb-server mariadb
systemctl enable --now mariadb
 
#初始化数据库
mysql_secure_installation

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

#导入数据库信息
zcat /usr/share/doc/zabbix-server-mysql-5.0.15/create.sql.gz | mysql -uroot -pabc123 zabbix

在这里插入图片描述

3、修改 zabbix server 配置文件,修改数据库的密码

vim /etc/zabbix/zabbix_server.conf 
......
DBPassword=zabbix       #124行,指定 zabbix 数据库的密码

4、修改 zabbix 的 php 配置文件

vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
......
php_value[date.timezone] = Asia/Shanghai      #24行,取消注释,修改时区

5、启动 zabbix 相关服务

systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm

6、浏览器访问zabbix:http://192.168.116.60/zabbix

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以点击主机查看图形化数据,但会出现中文乱码,需要导入字符集

#解决 zabbix-server Web页面中文乱码问题
yum install -y wqy-microhei-fonts
\cp -f /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/fonts/dejavu/DejaVuSans.ttf

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

三、部署 zabbix 客户端

zabbix 5.0 版本采用 golang 语言开发的新版本客户端 agent2 。
客户端 zabbix_agent2 默认使用 10050 端口。

zabbix_agent01:192.168.116.70

1.关闭防火墙和selinux,设置服务器名称,同步时间

systemctl disable --now firewalld
setenforce 0
hostnamectl set-hostname zbx-agent01
su
ntpdate ntp.aliyun.com

2.下载zabbix客户端

#设置 zabbix 的下载源,安装 zabbix-agent2
rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm 
 
cd /etc/yum.repos.d
sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo
 
yum install -y zabbix-agent2

3.修改客户端配置文件并开启

#修改 agent2 配置文件
vim /etc/zabbix/zabbix_agent2.conf
......
Server=192.168.116.60			#80行,指定 zabbix 服务端的 IP 地址
ServerActive=192.168.116.60		#120行,指定 zabbix 服务端的 IP 地址
Hostname=zbx-agent01			#131行,指定当前 zabbix 客户端的主机名
 
#开启服务
systemctl enable --now zabbix-agent2.service

在这里插入图片描述

4.在服务端验证zabbix-agent2 的连通性

#安装 zabbix 主动获取数据的命令
yum install -y zabbix-get                
 
#测试
zabbix_get -s '192.168.116.70' -p 10050 -k 'agent.ping'
zabbix_get -s '192.168.116.70' -p 10050 -k 'system.hostname'

在这里插入图片描述

5.新建客户端

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

四、监控模板

1.使用官方或已开发设计好的模板

Browse Zabbix / Zabbix - ZABBIX GIT
Zabbix searcher - 900+ Zabbix projects: templates, scripts, integrations, …
Zabbix community templates

2.自定义监控模板

(1)监控客户端主机登录人数

首先再客户端自定义键(这里演示的用于监控主机登录人数,阈值为3,大于3报警)

 在/etc/zabbix/zabbix_agent2.d/下新建.conf文件,在里面自定义键,格式为

UserParameter=<key>,<commend>

在这里插入图片描述
之后重启服务读取文件配置 systemctl restart zabbix-agent2.service

可以在服务端使用命令进行测试(当前登录数为4)
在这里插入图片描述
测试无误就可以添加自定义模板了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建配置应用集
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建配置触发器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建配置图形
在这里插入图片描述
在这里插入图片描述
将模板添加到客户端中
在这里插入图片描述
查看图形(监控到了登录人数)
在这里插入图片描述

(2)监控nginx客户端状态信息

客户端安装nginx,模拟监控nginx服务器

vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
 
yum install nginx -y 

修改nginx配置文件/etc/nginx/conf.d/default.conf,打开状态统计
在这里插入图片描述
重启服务,查看状态统计页面

systemctl start nginx
curl -s 127.0.0.1/status

在这里插入图片描述
编写监控nginx状态信息脚本,获取以上值,并给执行权限
在这里插入图片描述

#/bin/bash
#Description:Automated monitoring nginx performance and process nginx_status scripts
HOST="localhost"
PORT=80
URL="status"
NGINX_COMMAND=$1
#检查nginx状态
nginx_check() {
    if [ -f /sbin/pidof ]; then
       /sbin/pidof nginx | wc -w
    else
       ps aux | grep -v "grep" | grep -c "nginx:"
    fi
}
#nginx状态相关信息的值
nginx_active(){
    /usr/bin/curl -s "http://$HOST:$PORT/${URL}/" 2> /dev/null | awk '/Active/ {print $NF}'
}
 
nginx_reading(){
    /usr/bin/curl -s "http://$HOST:$PORT/${URL}/" 2> /dev/null | awk '/Reading/ {print $2}'
}
 
nginx_writing(){
    /usr/bin/curl -s "http://$HOST:$PORT/${URL}/" 2> /dev/null | awk '/Writing/ {print $4}'
}
 
nginx_waiting(){
    /usr/bin/curl -s "http://$HOST:$PORT/${URL}/" 2> /dev/null | awk '/Waiting/ {print $6}'
}
 
nginx_accepts(){
    /usr/bin/curl -s "http://$HOST:$PORT/${URL}/" 2> /dev/null | awk 'NR==3 {print $1}'
}
 
nginx_handled(){
    /usr/bin/curl -s "http://$HOST:$PORT/${URL}/" 2> /dev/null | awk 'NR==3 {print $2}'
}
 
nginx_requests(){
    /usr/bin/curl -s "http://$HOST:$PORT/${URL}/" 2> /dev/null | awk 'NR==3 {print $3}'
}
#命令获取对应值
case $NGINX_COMMAND in
    check)
        nginx_check
        ;;
    active)
        nginx_active
        ;;
    reading)
        nginx_reading
        ;;
    writing)
        nginx_writing
        ;;
    waiting)
        nginx_waiting
        ;;
    accepts)
        nginx_accepts
        ;;
    handled)
        nginx_handled
        ;;
    requests)
        nginx_requests
        ;;
    *)
        echo $"USAGE:$0 {check|active|reading|writing|waiting|accepts|handled|requests}"
esac

脚本测试无误
在这里插入图片描述
自定义监控变量,用于模板使用
在这里插入图片描述

UserParameter=nginx.status[*],/etc/zabbix/zabbix_shell/zabbix_nginx.sh $1
#[*] 代表自定义变量nginx.status传入的值
#$1 代表前面变量传入的值作为此脚本执行的参数,获取对应状态值

重启服务systemctl restart zabbix-agent2.service,在服务端进行测试
在这里插入图片描述
测试无误,去前端自定义模板
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、设置邮件报警

1.设置报警媒介

点击左边菜单栏【管理】中的【报警媒介类型】,点击【创建媒体类型】
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加告警告知邮箱
点击左边菜单栏【用户设置】–>【报警媒介】,点击【添加】
在这里插入图片描述

在这里插入图片描述

六、配置zabbix服务端自动发现与自动注册

1.自动发现

zabbix 自动发现(对于 agent2 是被动模式)是zabbix server 主动的去发现所有的客户端,然后将客户端的信息登记在服务端上。缺点是如果定义的网段中的主机数量多,zabbix server 登记耗时较久,且压力会较大。

首先添加一台客户端,安装好zabbix-agent2服务,修改配置文件指定服务端地址和客户端名称,然后开启服务

服务端和客户端都需要配置彼此的域名解析
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.自动注册

zabbix 自动注册(对于 agent2 是主动模式),zabbix agent2 会主动上报自己的信息,发给 zabbix server。缺点是可能因为配置文件配置错误或者网络不通等原因导致 zabbix agent2 可能找不到 zabbix server。

先禁用自动发现,删除客户端02,做自动注册
在这里插入图片描述
在这里插入图片描述
在客户端配置文件开启自动注册,然后重启服务
在这里插入图片描述
添加自动注册动作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、部署zabbix代理服务器

配置zabbix代理,分担 server 的集中式压力,解决多机房之间的网络延时问题。
在这里插入图片描述
首先关闭防火墙,修改主机名,安装代理

systemctl disable --now firewalld
setenforce 0
hostnamectl set-hostname zbx-proxy
 
rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm 
cd /etc/yum.repos.d
sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo
 
yum install -y zabbix-proxy-mysql zabbix-get

安装代理所需数据库,做初始化,密码设的是123123

yum install -y mariadb-server mariadb
systemctl enable --now mariadb
mysql_secure_installation

添加数据库和用户,授权,导入数据库表信息

mysql -uroot -p123123
CREATE DATABASE zabbix_proxy character set utf8 collate utf8_bin;
GRANT all ON zabbix_proxy.* TO 'zabbix'@'%' IDENTIFIED BY 'zabbix';
flush privileges;
quit
#退出后导入表数据
zcat /usr/share/doc/zabbix-proxy-mysql-5.0.29/schema.sql.gz | mysql -uroot -p123123 zabbix_proxy

在这里插入图片描述
在这里插入图片描述
修改agent 指向代理的地址

vim /etc/zabbix/zabbix_agent2.conf
......
Server=192.168.116.40			#80行,指定 zabbix 代理服务器的 IP 地址
ServerActive=192.168.116.40		#120行,指定 zabbix 代理服务器的 IP 地址

还需要在每台主机添加域名解析
在这里插入图片描述
之后去服务端指定代理
在这里插入图片描述
创建客户端时添加代理
在这里插入图片描述
之后依次重启server、proxy、client 服务

在这里插入图片描述
等待客户端全部亮起即可

八、SNMP监控

使用SNMP简单网络管理协议,对网络中的资源进行管理和实时监控。

首先在需要监控的路由器、交换机上安装snmp(这里以server本机为例)

yum install -y net-snmp net-snmp-utils.x86_64
 
systemctl start snmpd.service

然后去前端修改使用snmp
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Apollo Planning2.0决策规划算法代码详细解析 (1):环境搭建

背景: apollo开源团队近期更新了planning版本,对代码进行了一定程度上的重构。 重构后代码结构更加清晰,对扩展更为友好;此外,也更新了dreamview对pnc的支持,使得调试更加方便。 本教程将继续更新对于Apollo Planning2.0决策规划算法代码的详细解析,便于大家更好理解…

[鹏城杯 2022]简单包含

直接用php&#xff1a;// 有wtf 加脏数据绕过

Spring boot中的线程池-ThreadPoolTaskExecutor

一、jdk的阻塞队列&#xff1a; 二、Spring boot工程的有哪些阻塞队列呢&#xff1f; 1、默认注入的ThreadPoolTaskExecutor 视频解说&#xff1a; 线程池篇-springboot项目中的service层里简单注入ThreadPoolTaskExecutor并且使用_哔哩哔哩_bilibili 程序代码&#xff1a;…

Impala实践:解析glog打印的 C++ 报错堆栈

Impala实践&#xff1a;解析glog打印的 C 报错堆栈 Impala使用glog生成日志。生产环境用的都是release build&#xff0c;glog产生的报错堆栈里没有函数名&#xff0c;很难像Java报错堆栈那样方便定位问题。下面是 Impalad 日志中的一个报错&#xff1a; I0522 09:07:16.0020…

浅复制和深复制(使用python)

在编程语言中&#xff0c;复制通常是通过赋值操作来实现的。具体实现方式可能因编程语言而异。 1. 浅复制&#xff08;Shallow Copy&#xff09; 浅复制是指创建一个新对象&#xff0c;新对象的内容是原始对象的引用。换句话说&#xff0c;新对象和原始对象共享相同的数据&am…

【JVM】JVM 调优的参数都有哪些?

文章目录 1. 设置堆空间大小2. 虚拟机栈的设置3. 年轻代中Eden区和两个Survivor区的大小比例4. 年轻代晋升老年代阈值5. 设置垃圾回收收集器 1. 设置堆空间大小 设置堆的初始大小和最大大小&#xff0c;为了防止垃圾收集器在初始大小、最大大小之间收缩堆而产生额外的时间&…

【Linux系统编程】21.echo、env、fork、getpid、getppid

目录 echo PATH SHELL TERM LANG HOME env fork 返回值 getpid getppid 测试代码1 测试结果 测试代码2 测试结果 父子进程相同 父子进程不同 父子进程共享 echo 查看单个环境变量。 PATH 可执行文件的搜索路径。 SHELL 当前Shell。 TERM 当前终端类型。终端…

一休休的面试题

重点面试题(今天又看了很多的博客大概有个三十来篇吧所以总结了一休休的面试题)&#xff1a; ps:已经入秋了为什么还是这么热&#xff01;&#xff01;&#xff01; 1、受管 bean 的生命周期 对于普通的 Java 对象&#xff0c;new 的时候会去创建对象&#xff0c;而当它没有…

Redis进阶(3)——在Linux上基于Docker容器Redis搭建一主二从三哨兵 SpringBoot整合Redis哨兵

目录 引出redis主从搭建&#xff1a;一主2从6389Master准备文件redis.confredis.log日志文件运行容器查看日志方式tail 6390Slave6391Slave 创建3哨兵创建文件夹sentinel创建运行哨兵容器问题&#xff1a;脑裂问题 SpringBoot整合Redis哨兵启动1主2从&#xff0c;3哨兵pom.xml文…

聊聊服务端缓存那些事(预热、淘汰、污染、雪崩、穿透、击穿等)

文章目录 概要一、缓存预热二、缓存污染2.1、先更新数据库再更新缓存2.2、先更新缓存再更新数据库2.3、先删除缓存再更新数据库&#xff0c;读时再更新2.4、先更新数据库再删除缓存&#xff0c;读时再更新2.5、缓存污染总结2.6、删除缓存失败了怎么办&#xff1f;2.7、延迟双删…

【数据结构与算法】十大经典排序算法-堆排序

&#x1f31f;个人博客&#xff1a;www.hellocode.top &#x1f3f0;Java知识导航&#xff1a;Java-Navigate &#x1f525;CSDN&#xff1a;HelloCode. &#x1f31e;知乎&#xff1a;HelloCode &#x1f334;掘金&#xff1a;HelloCode ⚡如有问题&#xff0c;欢迎指正&#…

JZ33二叉搜索树的后序遍历序列

题目地址&#xff1a;二叉搜索树的后序遍历序列_牛客题霸_牛客网 题目回顾&#xff1a; 解题思路&#xff1a; 使用栈 栈的特点是&#xff1a;先进后出。 通读题目后&#xff0c;我们可以得出&#xff0c;二叉搜索树是左子节点小于根节点&#xff0c;右子节点大于根节点。 …

wps设置一键标题字体和大小

参考 wps设置一键标题字体和大小&#xff1a;https://www.kafan.cn/A/7v5le1op3g.html 统一一键设置

[FPGA IP系列] 2分钟了解FPGA中的BRAM

FPGA设计中&#xff0c;BRAM是一项非常关键的内置存储资源&#xff0c;FPGA开发需要熟练使用BRAM&#xff0c;今天再复习一下BRAM的知识&#xff0c;包括BRAM的定义、组成、应用等等。 一、BRAM介绍 1、BRAM的定义 RAM是Random Access Memory&#xff0c;也就是随机访问数据…

C字符串练习题(6.3.1)

编写一个程序&#xff0c;从键盘上读入一个小于1000的正整数&#xff0c;然后创建并输出一个字符串&#xff0c;说明该整数的值。例如&#xff0c;输入941&#xff0c;程序产生的字符串是“Nine hundred and forty one”。 #include<stdlib.h> #include<string.h>…

【STM32】FreeRTOS互斥量学习

互斥量&#xff08;Mutex&#xff09; 互斥量又称互斥信号量&#xff08;本质也是一种信号量&#xff0c;不具备传递数据功能&#xff09;&#xff0c;是一种特殊的二值信号量&#xff0c;它和信号量不同的是&#xff0c;它支持互斥量所有权、递归访问以及防止优先级翻转的特性…

Spring Boot 项目实现 Spring AOP

【注】实现在SpringBoot项目中&#xff0c;同时给两个类的方法添加AOP前置通知 1、创建一个SpringBoot项目 2、创建两个目标类和方法 package com.tqazy.learn_spring_project.spring_aop;import org.springframework.stereotype.Service;/*** ClassName SpringAopUserServi…

【树状数组优化哈希DP】CF1801 C

Problem - C - Codeforces 思路&#xff1a; Code&#xff1a; #include <bits/stdc.h>#define lowbit(x) (x & (-x))using i64 long long;constexpr int N 2e5 10; constexpr int mod 1e9 7;std::vector<int> V[N];int n, m, x, mxv 0; int a[N], id[N…

MySQL入门学习教程(一)

mysql简介 1、什么是数据库 &#xff1f; 数据库&#xff08;Database&#xff09;是按照数据结构来组织、存储和管理数据的仓库&#xff0c;它产生于距今六十多年前&#xff0c;随着信息技术和市场的发展&#xff0c;特别是二十世纪九十年代以后&#xff0c;数据管理不再仅仅…