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

Prometheus监控实战之Blackbox_exporter黑盒监测

1 Blackbox_exporter应用场景

blackbox_exporter是Prometheus官方提供的exporter之一,可以提供HTTP、HTTPS、DNS、TCP以及ICMP的方式对网络进行探测。

1.1 HTTP 测试

定义 Request Header信息

判断 Http status / Http Respones Header / Http Body内容

1.2 TCP 测试

业务组件端口状态监听

应用层协议定义与监听

1.3 ICMP 测试

主机探活机制

1.4 POST 测试

接口联通性

1.5 SSL证书过期时间

2 Blackbox_exporter安装

下载地址:https://prometheus.io/download/

2.1 下载安装包

# wget ​ ​https://github.com/prometheus/blackbox_exporter/releases/download/v0.22.0/blackbox_exporter-0.22.0.linux-amd64.tar.gz​​

2.2 解压并重命名

# tar xf blackbox_exporter-0.22.0.linux-amd64.tar.gz# mv blackbox_exporter-0.22.0.linux-amd64 /usr/local/blackbox_exporter

2.3 授权

# chown -R root.root /usr/local/blackbox_exporter

2.4 使用systemd进行管理blackbox_exporter服务

# cat >/etc/systemd/system/blackbox_exporter.service <<EOF[Unit]Description=Blackbox ExporterWants=network-online.targetAfter=network-online.target[Service]User=rootExecStart=/usr/local/blackbox_exporter/blackbox_exporter --config.file=/usr/local/blackbox_exporter/blackbox.ymlRestart=on-failureWantedBy=default.targetEOF

2.5 添加开机自启动

# systemctl daemon-reload# systemctl enable blackbox_exporterCreated symlink from /etc/systemd/system/default.target.wants/blackbox_exporter.service to /etc/systemd/system/blackbox_exporter.service.

2.6 启动Blackbox_exporter

# systemctl start blackbox_exporter

3 blackbox.yml配置文件详解

官方解释: ​ ​https://github.com/prometheus/blackbox_exporter/blob/master/CONFIGURATION.md

3.1 默认配置

运行blackbox exporter时,需要用户提供探针的配置信息,这些配置信息可能是以下几种信息:

  • 自定义的HTTP头信息
  • 探测时需要的一些 TSL(秘钥证书) 配置
  • 探针本身的验证行为

在 blackbox exporter每一个探针配置称为一个 module,并且以YAML配置文件的形式提供给blackbox exporter,每一个module主要包含以下配置内容:

  • 探针类型(prober)
  • 验证访问超时时间(timeout)
  • 当前探针的具体配置项

3.1.1 探针类型: http https tcp dns icmp

prober: <prober_string>

必选

3.1.2 超时时间

[timeout: <duration>]

默认单位:秒

3.1.3 探针的详细配置,最多只能配置其中一个

[ http: <http_probe> ][ tcp: <tcp_probe> ][ dns: <dns_probe> ][ icmp: <icmp_probe> ]

3.2 <http_probe>可配置参数

3.2.1 此探针接受的状态代码

[ valid_status_codes: <int>, ... | default = 2xx ]

默认为2xx。

3.2.2 此探针接受的HTTP版本

[ valid_http_versions: <string>, ... ]

3.2.3 探针将使用的HTTP方法

[ method: <string> | default = "GET" ]

3.2.4 为探针设置的HTTP标头

headers:
[ <string>: <string> ... ]

3.2.5 探针是否将遵循任何重定向

[ no_follow_redirects: <boolean> | default = false ]

3.2.6 如果存在SSL,则探测失败

[ fail_if_ssl: <boolean> | default = false ]

3.2.7 如果不存在SSL,则探测失败

[ fail_if_not_ssl: <boolean> | default = false ]

3.2.8 如果响应主体与正则表达式匹配,则探测失败

fail_if_body_matches_regexp:[ - <regex>, ... ]

3.2.9 如果响应主体与正则表达式不匹配,则探测失败

fail_if_body_not_matches_regexp:[ - <regex>, ... ]

3.2.10 如果响应头与正则表达式匹配,则探测失败。对于具有多个值的标头,如果*至少一个*匹配,则失败

fail_if_header_matches:[ - <http_header_match_spec>, ... ]

3.2.11 如果响应头与正则表达式不匹配,则探测失败。对于具有多个值的标头,如果* none *不匹配,则失败

fail_if_header_not_matches:[ - <http_header_match_spec>, ... ]

3.2.12 HTTP探针的TLS协议的配置

tls_config:[ <tls_config> ]

3.2.13 目标的HTTP基本身份验证凭据

basic_auth:[ username: <string> ][ password: <secret> ]

3.2.14 目标的承载令牌

[ bearer_token: <secret> ]

3.2.15 目标的承载令牌文件

[ bearer_token_file: <filename> ]

3.2.16 用于连接到目标的HTTP代理服务器。

[ proxy_url: <string> ]

3.2.17 HTTP探针的IP协议(ip4,ip6)

[ preferred_ip_protocol: <string> | default = "ip6" ]
[ ip_protocol_fallback: <boolean> | default = true ]

3.2.18 探针中使用的HTTP请求的主体。

body: [ <string> ]<http_header_match_spec>header: <string>,regexp: <regex>,[ allow_missing: <boolean> | default = false ]

4 常用几种应用场景

4.1 HTTP检测(监控网站状态)

4.1.1 blackbox配置

# vim http_code.yamlmodules:http_2xx:prober: httphttp:method: GEThttp_post_2xx:prober: httphttp:method: POST

4.1.2 Prometheus配置

  - job_name: 'blackbox_http_2xx'metrics_path: /probeparams:module: [http_2xx]static_configs:- targets:- https://www.baidu.com- https://www.yangxingzhen.comrelabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__#blackbox exporter 所在节点replacement: 10.10.50.24:9115

针对每1个探针服务(如http_2xx)定义一个采集任务,并且直接将任务的采集目标定义为我们需要探测的站点。在采集样本数据之前通过relabel_configs对采集任务进行动态设置。

  • 根据Target实例的地址,写入__param_target 标签中,__param_<name>形式的标签表示,在采集任务时会在请求目标地址中添加<name>参数,等同于params的设置;
  • 获取__param_target的值,并覆写到instance标签中;
  • 覆写Target实例的__address__标签值为BlockBox Exporter实例的访问地址。

4.1.3 Prometheus热加载配置文件

# curl -X POST http://10.10.50.24:9090/-/reload

4.1.4 访问blackbox_exporter

浏览器输入http://10.10.50.24:9115

4.1.5 访问Prometheus的UI查看下targets

浏览器输入http://10.10.50.24:9090

 查询数据

4.1.6  定义HTTP请求

HTTP服务通常会以不同的形式对外展现,有些可能就是一些简单的网页,而有些则可能是一些基于REST的API服务。对于不同类型的HTTP的探测需要管理员能够对HTTP探针的行为进行更多的自定义设置,包括:HTTP请求方法、HTTP头信息、请求参数等。对于某些启用了安全认证的服务还需要能够对HTTP探测设置相应的Auth支持。对于HTTPS类型的服务还需要能够对证书进行自定义设置。

如下所示,这里通过method定义了探测时使用的请求方法,对于一些需要请求参数的服务,还可以通过headers定义相关的请求头信息,使用body定义请求内容:

1)blackbox.yaml

# vim /usr/local/blackbox_exporter/blackbox.ymlmodules:http_2xx:prober: httphttp:method: GEThttp_post_2xx:prober: httptimeout: 5shttp:method: POSTheaders:Content-Type: application/jsonbody: '{"user_login": "admin" "user_pass": "Aa123456"}'
# systemctl restart blackbox_exporter 

2)prometheus配置:

# 添加以下内容- job_name: 'blackbox_http_post_2xx'metrics_path: /probeparams:module: [http_post_2xx]static_configs:- targets:- http://10.10.50.24:30080/wp-login.phprelabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__#blackbox exporter 所在节点replacement: 10.10.50.24:9115

3)保存配置并热加载配置文件

# curl -X POST ​ ​http://10.10.50.24:9090/-/reload

4)访问Prometheus的UI查看下targets,浏览器输入http://10.10.50.24:9090

查询数据

5)如果HTTP服务启用了安全认证,Blockbox Exporter内置了对basic_auth的支持,可以直接设置相关的认证信息即可: 

http_basic_auth_example:prober: httptimeout: 5shttp:method: POSTheaders:Host: "login.example.com"basic_auth:username: "username"password: "mysecret"

 6)对于使用了Bear Token的服务也可以通过bearer_token配置项直接指定令牌字符串,或者通过bearer_token_file指定令牌文件。

7)对于一些启用了HTTPS的服务,但是需要自定义证书的服务,可以通过tls_config指定相关的证书信息:

http_custom_ca_example:prober: httphttp:method: GETtls_config:ca_file: "/certs/my_cert.crt"

8)自定义探针

在默认情况下HTTP探针只会对HTTP返回状态码进行校验,如果状态码为2XX(200 <= StatusCode < 300)则表示探测成功,并且探针返回的指标probe_success值为1。

如果用户需要指定HTTP返回状态码,或者对HTTP版本有特殊要求,如下所示,可以使用valid_http_versions和valid_status_codes进行定义:

http_2xx_example:prober: httptimeout: 5shttp:valid_http_versions: ["HTTP/1.1", "HTTP/2"]valid_status_codes: [200,301,302]

默认情况下,Blockbox返回的样本数据中也会包含指标probe_http_ssl,用于表明当前探针是否使用了SSL:

# HELP probe_http_ssl Indicates if SSL was used for the final redirect# TYPE probe_http_ssl gaugeprobe_http_ssl 0

而如果用户对于HTTP服务是否启用SSL有强制的标准。则可以使用fail_if_ssl和fail_if_not_ssl进行配置。fail_if_ssl为true时,表示如果站点启用了SSL则探针失败,反之成功。fail_if_not_ssl刚好相反。

http_2xx_example:prober: httptimeout: 5shttp:valid_status_codes: []method: GETno_follow_redirects: falsefail_if_ssl: falsefail_if_not_ssl: false

除了基于HTTP状态码,HTTP协议版本以及是否启用SSL作为控制探针探测行为成功与否的标准以外,还可以匹配HTTP服务的响应内容。使用fail_if_matches_regexp和fail_if_not_matches_regexp用户可以定义一组正则表达式,用于验证HTTP返回内容是否符合或者不符合正则表达式的内容。

http_2xx_example:prober: httptimeout: 5shttp:method: GETfail_if_matches_regexp:- "Could not connect to database"fail_if_not_matches_regexp:- "Download the latest version here"

4.2 TCP(监控主机端口存活状态)

4.2.1 检测端口是否存活,在blackbox.yml 配置文件中使用的配置是tcp_connect模块

# vim /usr/local/blackbox_exporter/blackbox.yml# 添加以下内容tcp_connect:timeout: 5sprober: tcp

4.2.2 添加Prometheus配置

# vim /usr/local/prometheus/prometheus.yml# 添加以下内容- job_name: 'blackbox_check_ports'metrics_path: /probeparams:module: [tcp_connect]static_configs:- targets:- 10.10.50.24:9115- 10.10.50.24:9090relabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__#blackbox exporter 所在节点replacement: 10.10.50.24:9115

4.2.3 Prometheus热加载配置文件

# curl -X POST ​ ​http://10.10.50.24:9090/-/reload

4.2.4 访问Prometheus的UI查看下targets

浏览器输入http://10.10.50.24:9090

查询数据

4.3 ICMP 测试(主机探活)

4.3.1 通过 ping(icmp) 检测服务器的存活,在blackbox.yml使用的配置是icmp模块

# vim /usr/local/blackbox_exporter/blackbox.yml# 添加以下内容icmp:prober: icmptimeout: 5sicmp:ttl: 5

4.3.2 添加Prometheus配置 

# vim /usr/local/prometheus/prometheus.yml# 添加以下内容- job_name: 'blackbox_check_hosts'metrics_path: /probeparams:module: [icmp]static_configs:- targets:- 10.10.50.24- 10.10.50.23relabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__#blackbox exporter 所在节点replacement: 10.10.50.24:9115

4.3.3 Prometheus热加载配置文件

# curl -X POST ​ ​http://10.10.50.24:9090/-/reload

4.3.4 访问Prometheus的UI查看下targets

浏览器输入http://10.10.50.24:9090

查询数据

4.4 检测SSL证书过期时间

4.4.1 检测SSL证书,在blackbox.yml配置文件中使用的配置是模块

# vim /usr/local/blackbox_exporter/blackbox.yml# 添加以下内容http_2xx:prober: httphttp:method: GETpreferred_ip_protocol: "ipv4"valid_http_versions: ["HTTP/1.1", "HTTP/2"]valid_status_codes: [200,301,302,303]

4.4.2 添加Prometheus配置

 vim /usr/local/prometheus/prometheus.yml# 添加以下内容- job_name: 'blackbox_check_ssl'metrics_path: /probeparams:module: [http_2xx]static_configs:- targets:- https://www.yangxingzhen.com- https://www.i7ti.cnrelabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__#blackbox exporter 所在节点replacement: 10.10.50.24:9115

4.4.3 Prometheus热加载配置文件

# curl -X POST ​ ​http://10.10.50.24:9090/-/reload

4.4.4 访问Prometheus的UI查看下targets

浏览器输入http://10.10.50.24:9090

查询数据

4.4.5 时间戳转换

这里以yangxingzhen.com的SSL证书为例,证书过期时间为2023年10月15日

# date -d "@1697327999"Sun Oct 15 07:59:59 CST 2023

4.5 相关告警规则

4.5.1 主机端口不通

probe_success{job="blackbox_check_ports"} == 0

4.5.2 主机ping不通

probe_success{job="blackbox_check_hosts"} == 0

4.5.3 非200HTTP状态码

probe_http_status_code{job="blackbox_http_2xx"} != 200

4.5.4 SSL证书还有30天过期

probe_ssl_earliest_cert_expiry{job="blackbox_check_ssl"} - time() < 86400 * 30
 

相关文章:

Prometheus监控实战之Blackbox_exporter黑盒监测

1 Blackbox_exporter应用场景 blackbox_exporter是Prometheus官方提供的exporter之一&#xff0c;可以提供HTTP、HTTPS、DNS、TCP以及ICMP的方式对网络进行探测。 1.1 HTTP 测试 定义 Request Header信息 判断 Http status / Http Respones Header / Http Body内容 1.2 TC…...

【蓝桥杯集训·每日一题】AcWing 1051. 最大的和

文章目录一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解三、知识风暴线性DP一、题目 1、原题链接 1051. 最大的和 2、题目描述 对于给定的整数序列 A{a1,a2,…,an}&#xff0c;找出两个不重合连续子段&#xff0c;使得两子段中所有数字的和最…...

【Unity工具,简单应用】Photon + PUN 2,做一个简单多人在线聊天室

【Unity工具&#xff0c;简单应用】Photon PUN 2&#xff0c;做一个简单多人聊天室前置知识&#xff0c;安装&#xff0c;及简单UI大厅聊天室简单同步较复杂同步自定义同步最终效果前置知识&#xff0c;安装&#xff0c;及简单UI 【Unity工具&#xff0c;简单学习】PUN 2&…...

程序员增加收入实战 让小伙伴们都加个鸡腿

文章目录前言1️⃣一、发外包平台&#x1f481;&#x1f3fb;‍♂️二、朋友介绍✍️三、打造自己的个人IP&#x1f44b;&#x1f3ff;四、混群拉单&#x1f933;&#x1f3ff;五、面试拉单&#x1f4bb;六、技术顾问&#x1f9b4;七、开发个人项目总结&#xff1a;前言 程序员…...

GPIO四种输入和四种输出模式

GPIO的结构图如下所示&#xff1a; 最右端为I/O引脚&#xff0c;左端的器件位于芯片内部。I/O引脚并联了两个用于保护的二极管。 输入模式 从I/O引脚进来就遇到了两个开关和电阻&#xff0c;与VDD相连的为上拉电阻&#xff0c;与VSS相连的为下拉电阻。再连接到TTL施密特触发…...

ChatGPT能够改变时代吗?一点点思考

都知道ChatGPT的出现对整个世界产生了剧烈的影响&#xff0c;前不久出的ChatGPT4更是在ChatGPT3.5的基础上展现了更强的功能。比如说同一个问题&#xff0c;ChatGPT3.5还是乱答的&#xff0c;ChatGPT4已经能给出正确解了。当然这只能说明技术是进步的。 虽然如此&#xff0c;很…...

Markdown如何使用详细教程

目录 一、Markdown 标题 二、Markdown 段落 三、Markdown 字体 四、Markdown 分隔线 五、Markdown 列表 六、Markdown 引用 七、Markdown 代码 八、Markdown 链接 九、Markdown 图片 十、Markdown 表格 前言 当前许多网站都广泛使用 Markdown 来撰写博客&#xff0c;…...

HTML5庆祝生日蛋糕烟花特效

HTML5庆祝生日蛋糕烟花特效 <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>HTML5 Birthday Cake Fireworks</title><style>canvas {position: absolute;top: 0;left: 0;z-index: -1;}</style> </h…...

算法套路四——反转链表

算法套路四——反转链表 算法示例一&#xff1a;LeetCode206. 反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 初始化pre为空&#xff0c;cur为头指针 pre指针&#xff1a;记录当前结点的前一个结点 cur指针&#xff1a;记录当…...

多线程 (六) wait和notify

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…...

React--》状态管理工具—Mobx的讲解与使用

目录 Mobx的讲解与使用 Mobx环境配置 Mobx的基本使用 Mobx计算属性的使用 Mobx监听属性的使用 Mobx处理异步的使用 Mobx的模块化 Mobx的讲解与使用 Mobx是一个可以和React良好配合的集中状态管理工具&#xff0c;mobx和react的关系相当于vuex和vue之间的关系&#xff0…...

有效的括号长按键入验证外星语词典字符的最短距离用栈实现队列

有效的括号来源&#xff1a;杭哥20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09;bool isValid(char * s) {int szstrlen(s);char stack[sz];int k0;for (int i0;i<sz;i){if (s[i]( || s[i][ || s[i]{){stack[k]s[i];}else{if (k0){return false;}else if (s[i]} &am…...

《前端开发者的进阶之路》

前端作为Web开发的重要领域之一&#xff0c;不断地发展和演变着。除了基本的HTML、CSS、JavaScript技能&#xff0c;前端开发者需要掌握更多的进阶知识才能应对不断变化的需求。本文将介绍一些前端的进阶知识&#xff0c;帮助前端开发者进一步提高自己的技能水平。1.框架和库在…...

为什么说网络安全是风口行业?是IT行业最后的红利?

前言 “没有网络安全就没有国家安全”。当前&#xff0c;网络安全已被提升到国家战略的高度&#xff0c;成为影响国家安全、社会稳定至关重要的因素之一。 网络安全行业特点 1、就业薪资非常高&#xff0c;涨薪快 2021年猎聘网发布网络安全行业就业薪资行业最高人均33.77万&…...

使用shell 脚本,批量解压一批zip文件,解压后的文件放在以原zip文件名前10个字符的文件夹中的例子

#!/bin/bash for file in *.zip dofolder$(echo $file | cut -c 1-10)mkdir $folderunzip -q $file -d $folder doneecho "All zip files have been extracted." # 说明&#xff1a; # 1. for循环遍历当前目录下的所有zip文件 # 2. 使用cut命令提取zip文件名前10个字…...

01 | Msyql系统架构

目录MySQL系统架构连接器查询缓存分析器优化器执行器MySQL系统架构 大体来说&#xff0c;MySQL分为Server层和引擎层两部分。 Server层包含链接器、查询缓存、分析器、优化器和执行器&#xff0c;而引擎层负责的是数据的存储和读取&#xff0c;支持InnoDB、Myisam、Memory等多…...

Linux命令---设备管理

Linux setleds命令Linux setleds命令用来设定键盘上方三个 LED 的状态。在 Linux 中&#xff0c;每一个虚拟主控台都有独立的设定。语法setleds [-v] [-L] [-D] [-F] [{|-}num] [{|-}caps] [{|-}scroll]参数&#xff1a;-F&#xff1a;预设的选项&#xff0c;设定虚拟主控台的状…...

前端入门:HTML5+CSS3+JAAVASCRIPT

1、 初识HTML HTML:Hyper Text Markup Language(超文本标记语言) 。 超文本包括&#xff1a;文字、图片、音频、视频、动画等。 1.1、W3C标准 1.2、HTML基本结构 示例&#xff1a; <!-- DOCTYPE:告诉浏览器&#xff0c;我们要使用什么规划&#xff0c;这里是HTML --> …...

【头歌实验】课外作业一:开通ECS及使用Linux命令

文章目录一、完成下列实验并截图二、简要回答“课堂考核”内容三、在头歌、华为云或阿里云官网上&#xff0c;找出自己的课外学习资源&#xff0c;制定小组的课程学习计划、专业学习计划。四、习题1.10一、完成下列实验并截图 1、实验《ECS云服务器新手上路》 https://develo…...

CMSIS-RTOS2 RTX5移植到GD32L233

1、CMSIS-RTOS2是什么&#xff1f; 关于CMSIS-RTOS2的官方描述如下&#xff1a; CMSIS-RTOS v2 &#xff08;CMSIS-RTOS2&#xff09; 为基于 Arm Cortex 处理器的设备提供通用 RTOS 接口。它为需要RTOS功能的软件组件提供了一个标准化的API&#xff0c;因此为用户和软件行业带…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...