自动化工具ansible部署和实践
1 介绍和部署
1.1 介绍
-
ansible的功能
我爱你在当今的IT自动化领域,Ansible无疑是一个无法被忽视的重要角色。其便利性和高效性受到了广大开发者和系统管理员的一致好评,成为了配置管理和应用部署的首选工具。然而,对于一些初学者来说,Ansible的概念和架构可能会显得有些复杂和难以理解。因此,我打算通过一系列深入解析Ansible的博文,帮助大家更好地理解和使用这一工具。基于ssh协议实现远程管理,可以实现多种批量管理操作.
-
批量系统配置
-
批量软件部署
-
批量文件拷贝
-
批量运行命令
2.ansible的角色
-
管理端:不需要启动任何服务,默认服务端不需要任何的配置
-
受控端:基于ssh免秘钥,没有客户端软件需要安装
3.ansible命令
Ansible 命令是一种强大的自动化工具,它允许系统管理员和开发者在多台机器上自动执行任务。其中,Ad-Hot模式是一个概念性的名称,它与编写Ansible playbook的概念相似,类似于直接在命令行输入shell命令与编写shell scripts之间的关联。
具体而言,Ansible命令由以下三个主要部分组成:
- 1. Ansible 匹配的资产主机:这是你希望在其上执行任务的目标机器或一组机器。
- 2. 使用的模块 -m:这是你希望执行的具体动作或任务,Ansible提供了许多预定义的模块以供选择。
- 3. 模块的参数 -a:这允许你为特定模块传递参数,以便进一步定制其行为。
Ad-Hoc 命令的基本格式如下:
ansible [pattern] -m [module] -a '[module arguments]' [options]
其中:
-
[pattern]:用来匹配目标主机或主机组的模式。 -
-m [module]:指定要使用的模块。 -
-a '[module arguments]':指定模块的参数。 -
[options]:其他可选参数。
详细解释一些常用的选项:
-
-a 'Arguments',--args='Arguments':指定模块的参数。
-
-m NAME,--module-name=NAME:指定要执行的模块名。默认使用
command模块,所以如果只是执行单一命令,可以省略-m参数。 -
-u Username,--user=Username:指定执行远程命令的用户,默认使用当前用户。
-
-U,--sudo-user=SUDO_User:sudo 到哪个用户,默认为 root。
-
-k,--ask-pass:提示输入 SSH 密码,而不是假设基于密钥的验证。
-
-K,--ask-sudo-pass:提示输入 sudo 密码。
-
-s,--sudo:使用 sudo 运行命令。
-
-S,--su:使用 su 命令运行命令。
-
-f NUM,--forks=NUM:指定并行任务数,默认为 5。
-
--private-key=PRIVATE_KEY_FILE:指定私钥文件的路径,用于 SSH 连接验证。
-
-v,--verbose:输出详细信息。
-
all:针对
hosts文件中定义的所有主机执行命令。 -
-M MODULE_PATH,--module-path=MODULE_PATH:指定模块的搜索路径。
-
-o,--one-line:压缩输出,尝试将输出信息压缩到一行中显示。
-
-B SECONDS,--background=SECONDS:在后台运行命令,并指定超时时间。
-
-P NUM,--poll=NUM:在后台模式下,每隔多少秒检查一次作业状态。
-
-T SECONDS,--timeout=SECONDS:设置命令执行的超时时间。
-
-c CONNECTION,--connection=CONNECTION:指定连接类型,如
paramiko(SSH)、ssh或local。 -
--tags=TAGS:只执行指定标签的任务。
-
--list-hosts:只打印将执行 playbook 的主机列表,并不真正执行 playbook。
-
--list-tasks:列出 playbook 中所有将被执行的任务。
-
-C,--check:只测试命令会改变什么内容,而不会真正执行。
-
--syntax-check:检查 playbook 的语法,但不执行。
-
-l SUBSET,--limit=SUBSET:进一步限制所选主机或主机组。
-
--skip-tags=SKIP_TAGS:跳过标签匹配的任务。
-
-e EXTRA_VARS,--extra-vars=EXTRA_VARS:设置额外的变量。
1.2 ansible软件安装部署
-
环境规划
| 主机名 | IP地址 | 用途 |
|---|---|---|
| master01 | 10.0.0.61 | 管理段 |
| backup | 10.0.0.41 | 受控端 |
| nfs01 | 10.0.0.31 | 受控端 |
| web01 | 10.0.0.7 | 受控端 |
-
免秘钥配置
生成秘钥对
ssh-keygen -t dsa
分发秘钥
sh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.7
sh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.31
sh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.41
免交互批量分发秘钥参考我的批量免秘钥分发脚本
3) 口令登录方式配置[备选]
如果企业限制不允许使用ssh免秘钥方式,也可以使用在ansible的主机配置中,制定远程主机用户名和密码的方式
[root@xxxx ~]# vim /etc/ansible/hosts
[noah]
172.16.1.7
172.16.1.31 ansible_user=root ansible_password=123456
172.16.1.41
要先按装了
ansibl软件,才会有该配置文件
-
安装
ansible
软件安装
yum install -y ansible
若受控主机有启用selinux,会影响ansible链接,在不能禁用的情况下,客户机可以安装以下程序
yum install -y libselinux-python
-
主机列表创建
cp /etc/ansible/hosts{,.bak}
cat >/etc/ansible/hosts <<"EOF"
[noah]
172.16.1.7
172.16.1.31
172.16.1.41
EOF
1.3 用法说明
-
语法
ansible 主机信息 -m 模块名称 -a "相关模块参数""主机信息:远程主机IP地址,主机组名称,all代表所有主机
-m:指定使用哪个模块
-a:模块中的参数和功能
ping模块
[root@xxxx ~]# ansible all -m ping
172.16.1.41 | SUCCESS => {
"changed": false,
"ping": "pong"
}
172.16.1.7 | SUCCESS => {
"changed": false,
"ping": "pong"
}
172.16.1.31 | SUCCESS => {
"changed": false,
"ping": "pong"
}
ping模块没有参数,不用跟-e
2) 返回颜色ansible会根据返回结果的类型不同,显示不同的颜色
-
绿色:查看远程主机信息,不会对远程主机系统做任何修改
-
红色:执行操作出现异常错误
-
黄色:对远程主机系统进行修改操作
-
粉色:警告或者忠告信息
其它示例:
以 root 用户身份对所有主机执行 df -h 命令:
ansible all -m command -a "df -h" --become --become-user root
使用 yum 模块安装 nginx,并提示输入密码:
ansible webservers -m yum -a "name=nginx state=present" -k
以 john 用户身份对 appservers 主机组执行 uptime 命令,并限制并发数为 5:
ansible appservers -m command -a "uptime" -u john -f 5
重启 testhosts 组的所有机器,每次重启 10 台:
ansible testhosts -a "/sbin/reboot" -f 10
使用额外的变量执行 playbook:
ansible-playbook update.yml --extra-vars "hosts=vipers user=admin"
只对这个两个 IP 执行任务:
ansible [pattern] -m [module] -a '[module arguments]' --limit=192.168.0.10,192.168.0.11
ansible常用命令解释
ansible-doc
# ansible-doc -h Usage: ansible-doc [options] [module...]
该指令用于查看模块信息,常用参数有两个-l 和 -s ,具体如下:
//列出所有已安装的模块 # ansible-doc -l//查看具体某模块的用法,这里如查看command模块 # ansible-doc -s command
ansible-galaxy
# ansible-galaxy -h Usage: ansible-galaxy [init|info|install|list|remove] [--help] [options] ...
ansible-galaxy指令用于方便的从https://galaxy.ansible.com/ 站点下载第三方扩展模块,我们可以形象的理解其类似于centos下的yum、python下的pip
ansible-playbook
通过读取playbook 文件后,执行相应的动作,
ansible-pull
该指令使用需要谈到ansible的另一种模式---pull 模式,这和我们平常经常用的push模式刚好相反,其适用于以下场景:你有数量巨大的机器需要配置,即使使用非常高的线程还是要花费很多时间;
ansible-vault
ansible-vault主要应用于配置文件中含有敏感信息,又不希望他能被人看到,vault可以帮你加密/解密这个配置文件,属高级用法。主要对于playbooks里比如涉及到配置密码或其他变量时,可以通过该指令加密,这样我们通过cat看到的会是一个密码串类的文件,编辑的时候需要输入事先设定的密码才能打开。这种playbook文件在执行时,需要加上 –ask-vault-pass参数,同样需要输入密码后才能正常执行。具体该部分可以参看官网
2 命令类常用模块
ansible模块列表
https://docs.ansible.com/ansible/latest/modules/modules_by_category.html
2.1 command[命令模块]
-
官方链接:
http://docs.ansible.com/ansible/latest/modules/command_module.html
说明:该模块与shell模块类似,但不能识别特殊符号 -
常用参数:
free_form [必须]表示执行command模块时,必须要有linux合法命令信息,如ls
chdir 在执行某个命令前,先切换目录
creates 判断一个文件是否存在,如果已经存在了,后面的命令就不会执行
removes 判断一个文件是否存在,如果不存在,后面的命令就不会执行
-
举例
-
chdir参数
[root@xxxx ~]# ansible 172.16.1.31 -m command -a "chdir=/tmp/ pwd"
172.16.1.31 | SUCCESS | rc=0 >>
/tmp
-
creates参数
[root@xxxx ~]# ansible 172.16.1.41 -m command -a "creates=/etc/rsyncd.conf hostname"
172.16.1.41 | SUCCESS | rc=0 >>
skipped, since /etc/rsyncd.conf exists
[root@xxxx ~]# ansible 172.16.1.41 -m command -a "creates=/etc/rsyncd.123456 hostname"
172.16.1.41 | SUCCESS | rc=0 >>
backup
-
removes参数
[root@xxxx ~]# ansible 172.16.1.41 -m command -a "removes=/etc/rsyncd.conf hostname"
172.16.1.41 | SUCCESS | rc=0 >>
backup
[root@xxxx ~]# ansible 172.16.1.41 -m command -a "removes=/etc/rsyncd.1212213123 hostname"
172.16.1.41 | SUCCESS | rc=0 >>
skipped, since /etc/rsyncd.1212213123 does not exist
2.2 shell[万能模块]
-
官方链接
https://docs.ansible.com/ansible/latest/modules/shell_module.html#shell-module
说明:shell模块可以满足command模块所有功能,并且可以支持识别特殊字符信息 < > | ; -
常用参数
free_form [必须]表示执行command模块时,必须要有linux合法命令信息,如ls
chdir 在执行莫个命令前,先切换目录
creates 判断一个文件是否存在,如果已经存在了,后面的命令就不会执行
removes 判断一个文件是否存在,如果不存在,后面的命令就不会执行
-
举例
[root@xxxx ~]# ansible 172.16.1.41 -m shell -a "hostname;pwd"
172.16.1.41 | SUCCESS | rc=0 >>
backup
/root
可以使用该名模,执行所有linux的命令,所以叫万能模块
2.3 script[脚本模块]
-
官方连接
https://docs.ansible.com/ansible/latest/modules/script_module.html#script-module -
常用参数
free_form [必须]表示执行command模块时,必须要有linux合法命令信息,如ls
chdir 在执行莫个命令前,先切换目录
creates 判断一个文件是否存在,如果已经存在了,后面的命令就不会执行
removes 判断一个文件是否存在,如果不存在,后面的命令就不会执行
-
举例
-
先查看脚本
[root@xxxx ~]# cat /server/scripts/mk.sh
#!/bin/sh
mkdir -p /root/abc/def
touch /root/abc/123.txt
ls -lh /root/abc/*
-
在调用这个脚本远程执行
[root@xxxx ~]# ansible 172.16.1.7 -m script -a "/server/scripts/mk.sh"
172.16.1.7 | SUCCESS => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 172.16.1.7 closed.\r\n",
"stdout": "-rw-r--r-- 1 root root 0 6月 18 17:05 /root/abc/123.txt\r\n\r\n/root/abc/def:\r\n总用量 0\r\n",
"stdout_lines": [
"-rw-r--r-- 1 root root 0 6月 18 17:05 /root/abc/123.txt",
"",
"/root/abc/def:",
"总用量 0"
]
}
3 文件类常用模块
3.1 copy[复制模块]
-
官方链接:
https://docs.ansible.com/ansible/latest/modules/copy_module.html#copy-module -
常用参数
backup 对数据信息进行备份
src 定义要推送数据信息
dest [必须]定义将数据推送到远程主机什么目录中
owner 设置复制后的文件属主权限
group 设置复制后的文件属组权限
mode 设置复制后的文件权限(600 755)
-
举例
-
backup参数
ansible 172.16.1.41 -m copy -a "src=/tmp/01.txt dest=/tmp/ backup=yes"
-
src,dest参数
ansible 172.16.1.41 -m copy -a "src=/tmp/01.txt dest=/tmp/"
3.2 file[文件操作模块]
-
官方链接
https://docs.ansible.com/ansible/latest/modules/file_module.html#file-module -
常见参数
src 定义要推送数据信息
dest [必须]定义将数据推送到远程主机什么目录中
owner 设置文件属主权限
group 设置文件属组权限
mode 设置文件权限(600 755)
state 用于指定创建目录或文件
-
举例
-
权限参数
ansible 172.16.1.7 -m file -a "dest=/tmp/01.txt owner=oldboy group=oldboy mode=600"
-
state创建文件
ansible 172.16.1.41 -m file -a "dest=/tmp/02.txt state=touch"
-
state创建目录
ansible 172.16.1.41 -m file -a "dest=/tmp/01dir state=directory"
4 包管理.系统服务管理.定时任务模块
4.1 yum[包管理模块]
-
官方链接
https://docs.ansible.com/ansible/latest/modules/yum_module.html#yum-module -
常用参数
name [必须]执行要安装软件的名称,以及软件的版本
state installed安装 absent(卸载)
list 指定软件名称,查看软件是否可以安装,以及是否安装过
-
举例
ansible 172.16.1.41 -m yum -a "name=iftop state=installed"
ansible 172.16.1.41 -m yum -a "name=iftop state=absent"
ansible 172.16.1.41 -m yum -a "list=iftop"
4.2 service[系统服务管理模块]
-
官方链接
https://docs.ansible.com/ansible/latest/modules/service_module.html#service-module -
常用参数
name [必须]指定要管理的服务名称(管理的服务一定在chkconfig中可以看到)
state stopped started restarted reloaded
enabled yes表示服务开机自启动 no表示服务开机不要自动启动
-
举例
ansible 172.16.1.41 -m service -a "name=crond state=started enabled=yes"
4.3 cron[定时任务模块]
-
官方链接
https://docs.ansible.com/ansible/latest/modules/cron_module.html#cron-module -
常用参数
minute 分,写法同系统定时任务,如[0-59] [*] [*/n]
hour 时,写法同上
day 日,写法同上
month 月,写法同上
weekday 周,写法同上
job 执行命令,如job='/bin/sh /server/scripts/test.sh &>/dev/null'
-
举例
-
添加定时任务
ansible 172.16.1.41 -m cron -a "minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null'"
ansible 172.16.1.41 -m cron -a "name=oldboy02 minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null'"
-
删除定时任务
ansible 172.16.1.41 -m cron -a "name=oldboy02 minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null' state=absent"
ansible 172.16.1.41 -m cron -a "name=oldboy01 state=absent"
-
注释定时任务
ansible 172.16.1.41 -m cron -a "name=oldboy01 minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null' disabled=yes"a
ansible 172.16.1.41 -m cron -a "name=oldboy01 job='/bin/sh /server/scripts/test.sh &>/dev/n相关文章:
自动化工具ansible部署和实践
1 介绍和部署 1.1 介绍 ansible的功能 我爱你在当今的IT自动化领域,Ansible无疑是一个无法被忽视的重要角色。其便利性和高效性受到了广大开发者和系统管理员的一致好评,成为了配置管理和应用部署的首选工具。然而,对于一些初学者来说&#…...
无人机推流直播平台EasyDSS视频技术如何助力冬季森林防火
冬季天干物燥,大风天气频繁,是森林火灾的高发期。相比传统的人力巡查,无人机具有更高的灵敏度和准确性,尤其在夜间或浓雾天气中,依然能有效地监测潜在火源。 无人机可以提供高空视角和实时图像传输,帮助巡…...
React Fiber
React Fiber 是 React 16 引入的全新重写的协调(Reconciliation)算法的实现,旨在改善 React 的更新机制和性能,尤其是在复杂应用和大量更新的场景下。它使得 React 更加灵活、可调度,能够实现优先级控制和中断更新等特…...
【前端】JavaScript 中的 map() 方法:高级解析与应用
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 💯前言💯map() 方法的定义与核心特性1.1 方法定义1.2 主要特性 💯map() 方法的语法与高级用法2.1 基本语法2.2 简化写法与箭头函数2.3 结合链式操作 💯ma…...
《智能体开发实战(高阶)》四、系统化的日志周报智能体开发计划
智能体扩展与完善规划 为了将前几个章节的智能体逐步扩展为支持整个公司团队使用的高效工具,以下是分阶段的完善与扩写规划。每个阶段旨在提升功能覆盖范围、处理能力和用户体验,并为企业提供实际价值。 阶段一:基础功能完善 目标:巩固现有功能,提升健壮性和适用性。 支…...
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球最受欢迎的Web服务器软件,支持约30.2%的所有活跃网站。凭借其可靠性、灵活性和强大的功能,Apache数十年来一直是互联网的中坚力量。 一、Apache Web服务器的工作原理 Apache Web服务器的工作原理如下: 接收HTTP请求࿱…...
Mybatis——(2)
2.2 Mybatis 工具类(了解) 为了简化MyBatis的开发,可将MyBatis进一步封装。 import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apa…...
景联文科技入选中国信通院发布的“人工智能数据标注产业图谱”
近日,由中国信息通信研究院、中国人工智能产业发展联盟牵头,联合中国电信集团、沈阳市数据局、保定高新区等70多家单位编制完成并发布《人工智能数据标注产业图谱》。景联文科技作为人工智能产业关键环节的代表企业,入选图谱中技术服务板块。…...
修改浏览器地址栏参数
Vue 修改当前页面地址栏参数 function updateUrlParameter(param: string, value: string) {const url new URL(window.location.href); // 获取当前页面的 URL// 解析哈希部分const hash url.hash ? url.hash.slice(1) : "";const [path, queryString] hash.sp…...
Spring Boot教程之二十五: 使用 Tomcat 部署项目
Spring Boot – 使用 Tomcat 部署项目 Spring Boot 是一个基于微服务的框架,在其中创建可用于生产的应用程序只需很少的时间。Spring Boot 建立在 Spring 之上,包含 Spring 的所有功能。如今,它正成为开发人员的最爱,因为它是一个…...
解决 Git 默认不区分文件名大小写的问题
不得不说 Git 默认不区分文件名大小写真是一个大坑,由于之前的项目目录比较乱,项目下的文件夹命名都不规范,这两天一直在整理,然后今天从服务器将项目重新 clone 下来后发现,之前将所有文件名首字母改成大写的改动全部…...
python学opencv|读取图像(十二)BGR图像转HSV图像
【1】引言 前述已经学习了opencv中图像BGR相关知识,文章链接包括且不限于下述: python学opencv|读取图像(六)读取图像像素RGB值_opencv读取灰度图-CSDN博客 python学opencv|读取图像(七)抓取像素数据顺利…...
信息安全工程师-选择题考点总结
密码理论知识 基础理论 一个密码系统至少由明文、密文、加密算法、解密算法和密钥五个部分组成,而其安全性是由密钥决定的。 按照密钥特征的不同,密码体制分为:对称密码体制和非对称密码体制。 按照对明文加密方式的不同,密码体制分为:流密码和分组密码。 非对称密码体…...
重学SpringBoot3-WebClient配置与使用详解
更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-WebClient配置与使用详解 1. 简介2. 环境准备2.1 依赖配置 3. WebClient配置3.1 基础配置3.2 高级配置3.3 retrieve()和exchange()区别 4. 使用示例4.1 …...
springBoot中的日志级别在哪里配置
在Spring Boot中,日志级别的配置可以通过多种方式来实现,主要包括在配置文件中设置、使用自定义的logback配置文件,以及在代码中动态配置等。以下是一些具体的配置方法: 一、在配置文件中设置日志级别 Spring Boot默认使用appli…...
统一身份安全管理体系的业务协同能力
随着集团企业数字化组织转型深化,各组织机构间业务协同程度提升。研发业务协同、数据驱动生产决策等数字化生产协作工作体系得以展开,企业内数据流转加快。企业对统一身份安全管理体系的业务协同管理和支撑能力要求提升: 统一身份管理流程需…...
JAVA课堂笔记23(IO流 (java.io包中))
第五章:IO流 (java.io包中) 三、字符流 1. 字符流的父类(抽象类): Reader:字符输入流 对应的操作为读操作 功能方法:read方法 Writer:字符输出流 对应的操作为写操作 功能方法:write方法 …...
C# DLT645 97/07数据采集工具
电表模拟器 97协议测试 07协议测试 private void btnSend_Click(object sender, EventArgs e) {string addr txtAddr.Text.Trim();string data txtDataFlg.Text.Trim();byte control 0x01;switch (cmbControl.SelectedIndex){case 0: control (byte)0x01; break;// 97协议c…...
中后台管理信息系统:Axure12套高效原型设计框架模板全解析
中后台管理信息系统作为企业内部管理的核心支撑,其设计与实现对于提升企业的运营效率与决策能力具有至关重要的作用。为了满足多样化的中后台管理系统开发需求,一套全面、灵活的原型设计方案显得尤为重要。本文将深入探讨中后台管理信息系统通用原型方案…...
Reactor 响应式编程(第四篇:Spring Security Reactive)
系列文章目录 Reactor 响应式编程(第一篇:Reactor核心) Reactor 响应式编程(第二篇:Spring Webflux) Reactor 响应式编程(第三篇:R2DBC) Reactor 响应式编程(…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
