linux部署ansible自动化运维
ansible自动化运维
1,编写ansible的仓库(比赛已经安装,无需关注)
1、虚拟机右击---设置---添加---CD/DVD驱动器---完成---确定
2、将ansible.iso的光盘连接上(右下角呈绿色状态)
3、查看光盘挂载信息
df -h
4、挂载光盘(/dev/sr1)
mount /dev/sr1 /opt
df -h
5、编写ansible的仓库
cd /etc/yum.repos.d/
ls
vim ansible.repo
1 [Ansible]
2 name=Ansible
3 baseurl=file:///opt
4 gpgcheck=0
5 enabled=1
yum clean all #清理缓存
yum makecache #建立缓存
yum repolist #刷新
2,部署ansible(前面的仓库就是用来部署ansible的)
CentOS7安装ansible
更新yum仓库的镜像源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
安装epel扩展包(扩展包才有ansible软件包)
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
安装ansible
yum install -y ansible
5、查询ansible是否安装
rpm -q ansible
3,ansible生效配置文件
1、当系统中有多个absible的配置文件时,只能有一个生效,谁的优先级越大谁就生效
2、查看生效的配置文件
ansible --version
3、要求使用普通用户来做ansible,并且ansible的生效文件有要求,例如在用户的家目录
cp /etc/ansible/ansible.cfg .
ls
ansible --version
4、因为当前生效的配置文件为/root/ansible.cfg,所以必须修改/root/ansible.cfg的文件才能往后面做
4,清单文件
1、相当于老师手中的花名册,清单文件中有哪些主机就说明这些主机可以被控制节点管理
vim /root/ansible.cfg
14 inventory = /root/inventory 指的清单文件的位置
15 #inventory = /etc/ansible/hosts 默认清单文件存放的位置
2、创建指定的清单文件
vim /root/inventory
[test] #表示主机组的名字
192.168.23.142 #表示主机组下面的主机
3、验证清单文件是否生效,简称:列出清单树
ansible-inventory --graph
备注:带@表示组名
5,ad-hoc临时命令
命令格式:ansible 主机/主机组 [-m 模块] -a "命令"
1、使用临时命令测试ls(报错,原因:因为没有输入密码)
ansible test -a "ls"
2、再次使用临时命令 -k 指定密码
ansible test -a "ls" -k
3、使用临时命令查看对端的当前所在路径
ansible test -a "pwd" -k
4、使用临时命令查看对端的主机名
ansible test -a "hostname" -k
5、使用临时命令在对端主机上的当前所在路径创建文件
ansible test -a "touch 1.txt" -k
6、使用临时命令查看对端的当前所在路径的文件
ansible test -a "ls" -k
6,免密
因为当前是root用户,所以只需要做以下2步
1、在主配置文件中取消指纹验证
vim /root/ansible.cfg
72 host_key_checking = False
73 #host_key_checking = False
2、在清单文件中添加密码
vim /root/inventory
[all:vars]
ansible_password=123456
[test]
192.168.23.142
3、再次测试
ansible test -a "useradd user1"
ansible test -a "id user1"
7.修改tab的缩进-为playbook做准备
vim ~/.vimrc
set number ts=2 sw=2 et
8.帮助
1、统计ansible中有多少个模块有帮助
ansible-doc -l | wc -l
2、在模块中过滤出user
ansible-doc -l | grep user
3、查看user的帮助
ansible-doc user
/EX
9.集中缩进
1、跳转到要缩进的行
2、按ctrl v进入可视化块模式
3、按↑↓键选中要缩进的行
4、按I在行首输入
5、按tab缩进
6、按ecs(两下)
10.编写简单的playbook
Ansible常用模块列表:
模块名称 | 功能描述 |
ping | 检查指定节点机器是否还能连通。 |
command | 在远程主机执行命令,不支持管道符和重定向。 |
raw | 执行原始的命令,不通过模块子系统。 |
shell | 类似于command模块,但支持更全面的功能,包括管道和重定向。 |
script | 在远程主机上执行本地脚本。 |
template | 将模板文件复制到远程主机并支持变量替换。 |
yum | 管理RedHat/CentOS系统的软件包。 |
apt | 管理Ubuntu/Debian系统的软件包。 |
copy | 复制文件到远程主机。 |
fetch | 从远程主机获取文件到本地。 |
file | 管理文件和目录的属性。 |
unarchive | 解压归档文件到远程主机。 |
user | 管理用户账户。 |
group | 管理用户组。 |
service | 管理系统服务。 |
firewalld | 管理firewalld防火墙规则。 |
cron | 管理定时任务。 |
dnf | 管理Fedora系统的软件包(类似于yum)。 |
synchronize | 同步本地和远程主机之间的文件和目录。 |
wait_for | 等待某个条件满足后再继续执行。 |
pause | 暂停执行一段时间。 |
fail | 人为地使任务失败,并显示错误信息。 |
debug | 输出变量的值,用于调试。 |
创建用户
vim user.yml
- --- #表示playbook的开头(可省,但不建议省)
- - name: useradd # - name:表示解释说明,解释此playbook的功能
- hosts: test #表示此playbook应该到哪些主机组和主机上,如果有多个用,隔开
- tasks: #接下来具体要实施的任务
- - name: Add the user 'johnd' #- name:解释说明,对此任务的解释说明
- user: #模块名
- name: qq1 #创建用户的名
- uid: 1010 #用户的uid
ansible-playbook user.yml
备注:红色表示错误,黄色表示更改,绿色表示没有更改
根据红色报错信息修正错误之后
验证实验效果
ansible test -a "grep qq1 /etc/passwd"
创建组
1、在模块中过滤出group
ansible-doc -l | grep group
2、查看user的帮助
ansible-doc group
/EX
3,编写playbook vim group.yml
---
- name: groupadd
hosts: test
tasks:
- name: Ensure group "somegroup" exists
group:
name: group1
state: present
4,根据检查排错 ansible-playbook group.yml
5,验证实验效果 ansible test -a "tail -n 1 /etc/group"
安装软件包+开启服务
管理软件包的模块
ansible-doc -l | grep yum
ansible-doc yum
/EX
管理服务的模块
ansible-doc -l | grep service
ansible-doc service
/EX
编写vim httpd.yml
1 ---
2 - name: web
3 hosts: test
4 tasks:
5 - name: install the latset version of Apache
6 yum:
7 name: httpd
8 state: latest
9 - name: Start service httpd, if not started
10 service:
11 name: httpd
12 state: started
13 enabled: yes
验证playbook是否配置成功 ansible-playbook httpd.yml
验证实验效果 ansible test -a "systemctl status httpd"
修改httpd的端口号(默认80端口)
替换配置文件中某一行的模块
ansible-doc -l | grep line
ansible-doc lineinfile
/EX
编辑playbook vim apache.yml
---
- name: listen
hosts: test
tasks:
- name: Ensure the default Apache port is 8080
lineinfile:
path: /etc/httpd/conf/httpd.conf
regexp: '^Listen '
insertafter: '^#Listen '
line: 'Listen 8080'
state: present
backup: yes
检验配置是否成功:ansible-playbook apache.yml
验证配置效果
ansible test -a "grep ^Listen /etc/httpd/conf/httpd.conf"
复制文件
查找复制文件的模块
ansible-doc -l | grep copy
ansible-doc copy
/EX
编辑playbook vim copy.yml
---
- name: copy
hosts: test
tasks:
- name: Copy file with owner and permissions
copy:
src: /etc/fstab
dest: /var/tmp/fstab
排查错误 ansible-playbook copy.yml
验证实验结果 ansible test -a "ls -ld /var/tmp/fstab"
11.循环(loop)
1,批量创建用户(未循环操作)vim useradd.yml
---
- name: loop useradd
hosts: test
tasks:
- name: Add the user
user:
name: qq10
- name: Add the user
user:
name: qq11
- name: Add the user
user:
name: qq12
排查错误 ansible-playbook useradd.yml
验证实验结果 ansible test -a "tail -n 3 /etc/passwd"
2,批量创建用户(使用循环操作)vim useradd1.yml
---
- name: loop
hosts: test
tasks:
- name: Add the user
user:
name: "{{ item }}"
loop:
- wx1
- wx2
- wx3
#"{{ item }}"跟loop是固定搭配
#loop下面就行你要循环的名字
ansible-playbook useradd1.yml
ansible test -a "tail -n 3 /etc/passwd"
3,通过循环批量创建组 vim group1.yml
---
- name: groupadd loop
hosts: test
tasks:
- name: Ensure group "somegroup" exists
group:
name: "{{ item }}"
state: present
loop:
- group10
- group20
- group30
ansible-playbook group1.yml
ansible test -a "tail -n 3 /etc/group"
12,利用变量实现模板复制
查看帮助
ansible-doc -l |grep setup
ansible-doc setup
/EX
使用临时命令找变量
查找ipv4相关的变量 ansible test -m setup -a "filter=*ipv4*"
查找bios相关的变量 ansible test -m setup -a "filter=*bios*"
查找cpu相关的变量 ansible test -m setup -a "filter=*cpu*"
1、编写模板,需求内容如下:
被控节点的ipv4地址
被控节点的bios版本
被控节点的CPU颗数
2、编写模板
vim test.j2
{{ ansible_default_ipv4.address }} {{ ansible_bios_version }} {{ ansible_processor_vcpus }}
3、编写playbook将test.j2的模板复制到被控节点并显示具体值
复制带有变量的模板
ansible-doc -l | grep temp
ansible-doc template
编写playbook vim template.yml
---
- name: template
hosts: test
tasks:
- name: Template a file to /etc/files.conf
template:
src: test.j2
dest: /tmp/test.txt
ansible-playbook template.yml
ansible test -a "cat /tmp/test.txt"
使用普通用户
要求使用user1用户部署ansible,生效的配置文件为/home/user1/ansible.cfg,清单文件路径为/home/user1/inventory
1、查看当前生效的配置文件
ansible --version
2、修改生效的配置文件
cp /etc/ansible/ansible.cfg .
ls
3、修改清单文件
vim ansible.cfg
inventory = /home/user1/inventory
inventory = /etc/ansible/hosts
4、修改清单文件内容
vim /home/user1/inventory
[dev]
192.168.23.142
图形化的方式显示 Ansible 库存(inventory)的结构 ansible-inventory --graph
5、使用临时命令做测试(报错)
ansible dev -a "ls"
这个错误信息表明,Ansible 尝试通过 SSH 连接到目标主机,但被拒绝了。拒绝的原因可能是以下几种情况之一:
- SSH 密钥问题:目标主机拒绝了你的 SSH 密钥。这可能是因为你使用的密钥没有被添加到目标主机的 ~/.ssh/authorized_keys 文件中。
- 用户名或密码错误:如果你使用的是密码认证方式,那么可能是用户名或密码错误。
- SSH 配置问题:目标主机的 SSH 配置可能不允许你使用的认证方式。
- 防火墙或网络问题:目标主机的防火墙可能阻止了 SSH 连接,或者存在其他网络问题。
为了进一步排查这个问题,你可以尝试以下步骤:
- 检查 SSH 密钥:确保你使用的 SSH 密钥已经被添加到目标主机的 ~/.ssh/authorized_keys 文件中。
- 检查用户名和密码:如果你使用的是密码认证方式,确保你输入的用户名和密码是正确的。
- 检查 SSH 配置:查看目标主机的 SSH 配置文件(通常是 /etc/ssh/sshd_config),确保配置允许你使用的认证方式。
- 检查防火墙和网络配置:确保目标主机的防火墙没有阻止 SSH 连接,并且网络配置正确。
ansible dev -a "ls" -k
SSH password: 被控节点的密码
ansible dev -a "touch 1.txt" -k
SSH password: 被控节点的密码
ansible dev -a "ls" -k
SSH password: 被控节点的密码
6、免密
vim ansible.cfg
#取消指纹验证
72 host_key_checking = False
73 #host_key_checking = False
#远程用户使用root身份执行
109 remote_user = root
110 #remote_user = root
设置密码 vim inventory
1 [all:vars]
2 ansible_password=123456
3 [dev]
4 192.168.23.142
测试验证实验结果
ansible dev -a "useradd stu1"
ansible dev -a "id stu1"
7,loop循环-未 vim loop.yml
---
- name: loop
hosts: dev
tasks:
- name: Add the user
user:
name: student1
- name: Add the user
user:
name: student2
验证实验效果
ansible-playbook loop.yml
ansible dev -a "tail -n 2 /etc/passwd"
8,loop循环
vim loop.yml
---
- name: loop
hosts: dev
tasks:
- name: Add the user
user:
name: "{{ item }}"
loop:
- stu10
- stu11
- stu12
ansible-playbook loop.yml
ansible dev -a "tail -n 3 /etc/passwd"
9,创建组 vim group.yml
---
- name: groupadd
hosts: dev
tasks:
- name: Ensure group "somegroup" exists
group:
name: "{{ item }}"
state: present
loop:
- group10
- group20
- group30
ansible-playbook group.yml
ansible dev -a "tail -n 3 /etc/group"
10,item.name、item.uid、item.groups
vim loop.yml
---
- name: loop
hosts: dev
tasks:
- name: Add the user
user:
name: "{{ item.name }}"
uid: "{{ item.uid }}"
group: "{{ item.group }}"
loop:
- name: userq1
uid: 1050
group: group10
- name: userq2
uid: 1040
group: group20
- name: userq3
uid: 1030
group: group30
ansible-playbook loop.yml
ansible dev -a "tail -n 3 /etc/passwd"
ansible dev -a "id userq1"
ansible dev -a "id userq2"
ansible dev -a "id userq3"
相关文章:
linux部署ansible自动化运维
ansible自动化运维 1,编写ansible的仓库(比赛已经安装,无需关注) 1、虚拟机右击---设置---添加---CD/DVD驱动器---完成---确定 2、将ansible.iso的光盘连接上(右下角呈绿色状态) 3、查看光盘挂载信息 df -h…...
springboot421社区医疗服务可视化系统(论文+源码)_kaic
摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装社区医疗服务可视化系统软件来发挥其高效地信息处理的作用…...
vue渲染时闪光白屏问题怎么解决(笔记)
Vue渲染时出现闪光白屏问题,可能是因为页面内容需要较长时间才能加载完成,而在加载期间,页面会显示白屏或者空白内容,给用户体验带来负面影响。 解决方法: 为标签绑定 v-cloak 在样式中写 v-clock {displaÿ…...
duxapp 2024-12-09 更新 PullView可以弹出到中间,优化CLI使用体验
UI库 修复 Button 禁用状态失效的问题Modal 组件即将停用,请使用 PullView 基础库 PullView side 新增 center 指定弹出到屏幕中间PullView 新增 duration 属性,指定动画时长新增 useBackHandler hook 用来阻止安卓端点击返回键 RN端 修复 windows …...
vue调试插件vue Devtools下载安装
Vue.js Devtools_6.6.3_Chrome插件下载_极简插件 进图官网点击推荐下载下载该调试工具 解压缩找到扩展程序开启开发者模式 将解压缩的文件拖拽到该页面空白处,点击添加扩展程序 点击详情允许访问文件网址 页面右键检查可以发现已经成功添加该页面调试插件...
.net core使用AutoMapper
AutoMapper 是一个用于 .NET 平台的对象映射工具,它简化了不同对象类型之间的转换过程。在软件开发中,尤其是在分层架构的应用程序里,常常需要在不同的对象模型之间进行数据传递,例如从数据库实体到视图模型、DTO(数据…...
HTTP头注入
注入类漏洞经久不衰,多年保持在owasp Top 10的首位。今天就聊聊那些被人遗忘的http头注入。用简单的实际代码进行演示,让每个人更深刻的去认识该漏洞。 3|0HOST注入 在以往http1.0中并没有host字段,但是在http1.1中增加了host字段ÿ…...
110.【C语言】编写命令行程序(1)
目录 1.前置知识 "命令"的含义 运行C语言程序 2.介绍 main函数的参数 实验1 执行结果 实验2 执行结果 修改代码 实验3 分析 方法:遍历数组argv[]中的所有参数 执行结果 修改代码 执行结果 1.前置知识 "命令"的含义 WINR输入cmd,在cmd窗口下…...
k8s 之 StatefulSet
深入理解StatefulSet(一):拓扑状态 k8s有状态与无状态的区别 无状态服务:deployment Deployment被设计用来管理无状态服务的pod,每个pod完全一致.什么意思呢? 无状态服务内的多个Pod创建的顺序是没有顺序的. 无状态服务内的多…...
PTA 7-2 从身份证号码中提取出出生年月
分数 12 作者 崔孝凤 单位 山东理工大学 输入一个18位的身份证号码,提取出年份和月份并输出,请判断输入的号码是否是18位,如果不是请提示"Invalid data,input again!",并重新输入新的号码。 输入格式: 输入一个18位…...
Plugin - 插件开发04_Spring Boot中的SPI机制与Spring Factories实现
文章目录 Pre方案概览使用插件的好处Spring Boot中的SPI机制与Spring Factories实现1. Spring Boot中的SPI机制Spring Factories文件 2. Spring Factories实现原理3. Code3.1 定义一个服务接口3.2 定义 实现类3.3 配置 spring.factories 文件3.4 创建一个Controller来加载插件3…...
GUNS搭建
一、准备工作 源码下载: 链接: https://pan.baidu.com/s/1bJZzAzGJRt-NxtIQ82KlBw 提取码: criq 官方文档 二、导入代码 1、导入后端IDE 导入完成需要,需要修改yml文件中的数据库配置,改成自己的。 2、导入前端IDE 我是用npm安装的yarn npm…...
路径规划之启发式算法之十四:蜘蛛蜂优化算法(Spider Wasp Optimizer, SWO)
蜘蛛蜂优化算法(Spider Wasp Optimizer, SWO)是一种受自然界中蜘蛛蜂行为启发的元启发式智能优化算法。由Mohamed Abdel-Basset等人于2023年提出,算法模拟了雌性蜘蛛蜂的狩猎、筑巢和交配行为,具有独特的更新策略,适用于具有不同探索和开发需求的广泛优化问题。 一、算法背…...
OpenGL ES详解——多个纹理实现混叠显示
目录 一、获取图片纹理数据 二、着色器编写 1. 顶点着色器 2. 片元着色器 三、绑定和绘制纹理 1. 绑定纹理 2. 绘制纹理 四、源码下载 一、获取图片纹理数据 获取图片纹理数据代码如下: //获取图片1纹理数据 mTextureId loadTexture(mContext, R.mipmap.…...
Java多线程与线程池技术详解(八)
《星游记》 “如果只有傻瓜才相信梦想,那么就叫我大傻瓜吧!” 《一人之下》 “想走的路不好走,想做人不好做,都说是身不由己,不是废话么。己不由心,身又岂能由己!” 目录 上一篇博客习题讲解 编…...
2024年12月11日Github流行趋势
项目名称:maigret 项目维护者:soxoj, kustermariocoding, dependabot, fen0s, cyb3rk0tik项目介绍:通过用户名从数千个站点收集个人档案信息的工具。项目star数:12,055项目fork数:870 项目名称:uv 项目维护…...
ThinkPHP 6.0 PHP新手教程
1、系统配置文件 下面系统自带的配置文件列表及其作用: 配置文件名描述app.php应用配置cache.php缓存配置console.php控制台配置cookie.phpCookie配置database.php数据库配置filesystem.php磁盘配置lang.php多语言配置log.php日志配置middleware.php中间件配置rou…...
【Excel学习记录】02-单元格格式设置
1.单元格格式工具美化表格 单元格格式位置 选中单元格,右键→设置单元格格式 合并居中 跨越合并 字体类型、大小、颜色、填充底纹、边框 斜线 软回车:alt enter 格式刷 2.单元格数字格式 格式不影响数值,只是展示形式 日期本质也是数…...
Paimon Tag和Branch创建文件存储过程
结论: 如果data-file被引用则不会被压缩,压缩仅针对未被引用的文件,创建tag时候根据当前快照进行创建 1、实际表和Manifest的内容 查看tag的内容 select * from table$tags;或者直接查看tag ossutil cat oss://test-dataware/warehouse/te…...
HCIA笔记8--DHCP、Telnet协议
1. DHCP介绍 对于主机的网络进行手动配置,在小规模的网络中还是可以运作的,但大规模网络是无力应对的。因此就有了DHCP协议来自动管理主机网络的配置。 DHCP(Dynamic Host Configuration Protocol): 动态主机配置协议,主要需要配置的参数有…...
Tableau数据可视化与仪表盘搭建
1.Tableau介绍 可视化功能 数据赋能 数据赋能就是将我们的数据看板发布到我们的线上去 这里的IP地址是业务部门可以通过账号密码登入的 我们也可以根据需要下载,选中并点击下载即可 下载下来之后,自己就能根据数据进行自定义的分析 也可以下载图片 还有…...
Django结合websocket实现分组的多人聊天
其他地方和上一篇大致相同,上一篇地址点击进入, 改动点1:在setting.py中最后再添加如下配置: # 多人聊天 CHANNEL_LAYERS {"default":{"BACKEND": "channels.layers.InMemoryChannelLayer"} }因此完整的se…...
自动驾驶控制与规划——Project 1: 车辆纵向控制
目录 零、任务介绍一、环境配置1.1 CARLA的配置1.2 Docker Ubuntu 20.04 ROS2 Foxy的配置 二、算法2.1 定速巡航2.2 自适应巡航2.3 离散PID控制 三、代码实现3.1 代码补全3.2仿真验证 零、任务介绍 课程主页 配置Carla仿真器配置carla-ros-bridge补全src\ros-bridge\carla_s…...
基于python实现自动化的验证码识别:探索与实践
基于python实现自动化的验证码识别:探索与实践 一、验证码的类型及特点(一)图像验证码(二)短信验证码(三)语音验证码 二、验证码识别的方法*(一)传统图像处理方法&#x…...
如何保证消息队列的高可用?(RabbitMQ)
RabbitMQ 是基于主从(非分布式)做高可用性的,RabbitMQ 有三种模式:单机模式、普通集群模式、镜像集群模式 1、单机模式:一般没人生产用单机模式 2、普通集群模式: 普通集群模式用于提高系统的吞吐量&…...
es的join是什么数据类型
在 Elasticsearch 中,parent 并不是一个独立的数据类型,而是与 join 数据类型一起使用的一个概念。join 数据类型用于在同一个索引中建立父子文档之间的关系,允许你在一个索引内表示层级结构或关联关系。通过 join 字段,你可以定义不同类型的文档(如父文档和子文档),并指…...
爬虫基础之代理的基本原理
在做爬虫的过程中经常会遇到一种情况,就是爬虫最初是正常运行、正常抓取数据的,一切看起来都是那么美好,然而一杯茶的工夫就出现了错误,例如 403 Forbidden,这时打开网页一看,可能会看到“您的IP访问频率太…...
golang实现简单的reids服务2
golang实现redis兼容的redis服务实现redis兼容的redis服务思路 golang实现redis兼容的redis服务 之前做的redis服务是通过tcp封装的自定义协议 原版项目地址:https://github.com/dengjiayue/my-redis.git 那么能不能实现一个redis兼容的redis服务,这样一般的redis包也可以调…...
CSS常用的尺寸单位
像素px 以屏幕上的一个点为单位,比较稳定和精确用的最多 em 以字体大小为参考,(是自身字体大小的倍数)当自身的字体大小改变时,em也会随着改变em * font-size px rem 以根元素 < html > 作为参考ÿ…...
计算机网络 备查
OSI 七层模型 七层模型协议各层实现的功能 简要 详细 TCP/IP协议 组成 1.传输层协议 TCP 2.网络层协议 IP 协议数据单元(PDU)和 封装 数据收发过程 数据发送过程 1. 2.终端用户生成数据 3.数据被分段,并加上TCP头 4.网络层添加IP地址信息…...
JavaEE 【知识改变命运】05 多线程(4)
文章目录 单例模式什么是单例模式饿汉模式懒汉模式多线程- 懒汉模式分析多线程问题第一种添加sychronized的方式第二种添加sychronized的方式改进第二种添加sychronized的方式(DCL检查锁) 阻塞队列什么是阻塞队列什么是消费生产者模型标准库中的阻塞队列…...
迭代器和生成器
一、迭代器(Iterator) 1. 什么是迭代器? 迭代器是一个可以在某一集合(如列表、元组等)中逐个访问元素的对象。它提供了一个方法,可以记住遍历的位置,每次取出一个元素,直到所有元素…...
小发现,如何高级的顺序输出,逆序输出整数的每一位(栈,队列)
当我还是初学者的时候,我经常思考有没有比慢慢求每一位数字然后考虑正序,逆序输出要快的办法...长期琢磨,必有所获! 我刚学数据结构的时候还没意识到栈,队列还能这样用,虽然说有点杀鸡用牛刀的感觉&#x…...
前端换行、空格的多种表现形式
换行 1、<br> 标签 这是最直接的方式,用于在文本中插入一个简单的换行。<br> 标签是一个空元素,意味着它不需要结束标签。 示例: <p>这是第一行。<br>这是第二行。</p>2、CSS white-space 属性 通过CSS的w…...
自己总结:selenium高阶知识
全篇大概10000字(含代码),建议阅读时间30min 一、等待机制 如果有一些内容是通过Ajax加载的内容,那就需要等待内容加载完毕才能进行下一步操作。 为了避免人为操作等待,会遇到的问题, selenium将等待转换…...
无线遥控红外通信
无线遥控红外通信 红外发射装置一般是指红外遥控器由 键盘电路 ,红外编码电路 电源电路 和红外发射 电路组成 一般的红外线波长为940nm左右,外形与普通发光二极管相同 红外遥控为了提高抗干扰性能和降低电源消耗,红外遥控器常用载波的方式传送…...
第一个C++程序--(蓝桥杯备考版)
第一个C程序 基础程序 #include <iostream>//头⽂件 using namespace std;//使⽤std的名字空间 int main()//main函数 {cout << "hello world!" << endl; //输出:在屏幕打印"hello world!" return 0;}main函数 main 函数是…...
Rust包管理和构建工具
Cargo 是 Rust 语言的包管理和构建工具。它提供了一套完整的工具链,用于管理 Rust 项目的依赖关系、编译代码、运行测试和生成文档。Cargo 极大地简化了 Rust 项目的开发和部署过程,使得开发者可以专注于编写代码,而不是处理构建系统的复杂性…...
STM32输入捕获详解
目录 一、引言 二、输入捕获原理 三、寄存器介绍 四、配置步骤 1.开启时钟 2.GPIO 初始化 3.初始化定时器 4.配置输入捕获模式 5.使能捕获和更新中断 6.设置中断分组并编写中断服务函数 7.使能定时器 五、程序示例 六、总结 一、引言 在嵌入式系统开发中࿰…...
利用高德地图API,如何在PHP与vue3中实现地图缩放功能
文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...
Selenium WebDriver:自动化网页交互的利器
Selenium WebDriver:自动化网页交互的利器 在当今快速发展的Web开发领域,自动化测试已经成为确保应用程序质量和用户体验的重要手段。Selenium WebDriver,作为Selenium工具包中的核心组件,正是这一领域的佼佼者。本文将详细介绍S…...
uniapp -- 实现页面滚动触底加载数据
效果 首选,是在pages.json配置开启下拉刷新 {"path": "pages/my/document/officialDocument","style": {"navigationStyle":</...
用ChatGPT-o1进行论文内容润色效果怎么样?
目录 1.引导问题发现 2.角色设定 3.整理常问修改 4.提供样例 5.小细节 小编在这篇文章中分享如何充分利用ChatGPT-o1-preview来提升论文润色的技巧。小编将持续跟进最新资源和最新的调研尝试结果,为宝子们补充更多实用的写作技巧。这些技巧将有助于您更有效地利…...
6 C/C++输⼊输出(下)(未完续)
1. OJ(online judge)题⽬输⼊情况汇总 在竞赛的 OJ 题⽬中,⼀般关于输⼊场景总结为下⾯四类: 接下来,我们就结合题⽬,给⼤家分别介绍。 1.1 单组测试⽤例 练习1 B2009 计算 (ab)/c 的值 - 洛谷 | 计算机科…...
题海拾贝:力扣 20、有效的括号
Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路! 我的博客:<但凡.-CSDN博客 我的专栏:《编程之路》、《题海拾贝》、《数据结构与算法之美》 欢迎点赞、关注! 1、题目 2、题解 这…...
视频推拉流EasyDSS无人机直播技术巡查焚烧、烟火情况
焚烧作为一种常见的废弃物处理方式,往往会对环境造成严重污染。因此,减少焚烧、推广绿色能源和循环经济成为重要措施。通过加强森林防灭火队伍能力建设与长效机制建立,各地努力减少因焚烧引发的森林火灾,保护生态环境。 巡察烟火…...
基于Hermite多项式的三维反时间波的生成
原创:daode3056(daode1212) 反时间波,也称为时间反演波,是一种在特定条件下能够实现波的聚焦和传播的技术。反时间波的产生基于时间反演技术,其原理和方法通常有: 1. [时间反演信号处理原理]: 时间反演技术并不是指时间…...
数据结构与算法复习AVL树插入过程
环境 $ cat /proc/version Linux version 6.8.0-45-generic (builddlcy02-amd64-115) (x86_64-linux-gnu-gcc-13 (Ubuntu 13.2.0-23ubuntu4) 13.2.0, GNU ld (GNU Binutils for Ubuntu) 2.42) #45-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug 30 12:02:04 UTC 2024 #include <std…...
MetaGPT源码 (Memory 类)
目录 MetaGPT源码:Memory 类例子 MetaGPT源码:Memory 类 这段代码定义了一个名为 Memory 的类,用于存储和管理消息(Message)对象。Memory 提供了多种操作消息的功能,包括添加单条或批量消息、按角色或内容筛选消息、删除最新消息…...
day1数据结构,关键字,内存空间存储与动态分区,释放
小练习 在堆区空间连续申请5个int类型大小空间,用来存放从终端输入的5个学生成绩,然后显示5个学生成绩,再将学生成绩升序排序,排序后,再次显示学生成绩。显示和排序分别用函数完成(两种排序方法࿰…...