Ansible--自动化运维工具
Ansible自动化运维工具介绍
1.Ansible介绍
Ansible是一款自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
Ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是Ansible所运行的模块,Ansible只是提供一种框架。主要包括:
(1) 连接插件connection plugins:负责和被监控端实现通信;
(2) host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3) 各种模块核心模块、command模块、自定义模块;
(4) 借助于插件完成记录日志邮件等功能;
(5) playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

2.Ansible工作原理
基于 SSH 和模块
Ansible 通过 SSH 协议连接到目标主机。这意味着它不需要在目标主机上安装额外的代理软件。它使用一系列的模块来执行具体的任务。这些模块是 Ansible 的核心功能单元,比如 “yum” 模块用于在基于 RPM 的系统(如 CentOS、Red Hat)上安装软件包,“apt” 模块用于 Debian 和 Ubuntu 系统的软件安装,“service” 模块用于管理系统服务等。当 Ansible 执行一个任务时,它会将相应的模块发送到目标主机,然后在目标主机上运行模块来完成任务。
Inventory 文件
Ansible 使用一个名为 “Inventory” 的文件来管理目标主机列表。这个文件可以是简单的文本格式,列出了主机的 IP 地址或主机名,也可以按照组进行分类。例如,你可以将所有的 Web 服务器放在一个名为 “web_servers” 的组中,将数据库服务器放在 “db_servers” 的组中。在 playbook 中,就可以针对不同的组执行不同的任务,比如只在 “web_servers” 组中安装和配置 Web 服务器软件。
3.Ansible工作流程
(1)加载配置文件: Ansible 默认查找 /etc/ansible/ansible.cfg 配置文件,这个文件包含了Ansible运行时的行为设定,如连接方式、插件路径等。
(2)解析Inventory: Ansible 使用 Inventory 文件(默认是 /etc/ansible/hosts)来确定需要操作的目标主机或主机组。
(3)编译Playbook或命令: Ansible 准备执行的Playbook或直接执行的Ad-Hoc命令,并解析其中的任务和模块调用。
(4)模块加载与执行策略准备: 对于每个任务,Ansible 加载相应的模块(如 command 模块),并准备执行上下文,包括变量、环境等。
(5)生成并传输临时脚本: Ansible 会根据任务和模块生成一个或多个临时的Python脚本,并通过SSH连接传输到目标主机的临时目录,通常位于目标用户的 ~/.ansible/tmp/ansible-tmp-<UNIQUE_ID>/ 目录下。
(6)赋予执行权限: 在目标主机上,Ansible 会给这个临时Python脚本加上执行权限,以便能够运行。
(7)执行远程脚本: Ansible 通过SSH在目标主机上执行这个临时脚本,并收集执行结果。
结果收集与处理: 执行完毕后,各个主机的执行结果被收集并汇总,Ansible根据这些结果决定是否继续执行后续任务,或是根据Playbook中的错误处理逻辑(如 rescue 和 always 块)进行操作。
(8)清理: 一旦任务执行完成,无论成功还是失败,Ansible 会清理目标主机上的临时文件,包括删除之前上传的Python脚本。
(9)退出与报告: 清理完成后,Ansible 进程在目标主机上退出,并向控制机报告最终的执行状态和结果。

Ansible集群搭建
| Server节点 | 192.168.100.51 |
| Host1 节点 | 192.168.100.52 |
| Host2 节点 | 192.168.100.53 |
| Host3 节点 | 192.168.100.50 |
1.编写hosts文件
| 三个主机根据节点规划更改主机名,并编写映射文件 [root@server ~]# vi /etc/hosts 192.168.100.51 server 192.168.100.52 host1 192.168.100.53 host2 192.168.100.50 host3 |
2.配置免密登陆
主节点生成密钥对
| [root@server ~]# ssh-keygen -P "" -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:C6R237cwGYEIGvMJRvFWj6ZQ3h1qLdagV/GKNjY//W0 root@server The key's randomart image is: +---[RSA 2048]----+ | .B.o o +. | | . X * @ + | | o B % * o | | o O o . . | | + O S . | | . + * + o | | = * . | | . = oE | | o.. | +----[SHA256]-----+ |
-P "":设置空密码
-t rsa: 指定生成密钥的类型为RSA
将公钥发给受管制节点
| [root@server ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@host1 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" The authenticity of host 'host1 (192.168.100.52)' can't be established. ECDSA key fingerprint is SHA256:67lB1mL6LK/kJPxrKPAOU+3YIixzp0oA4aTCBoqf41c. ECDSA key fingerprint is MD5:c2:17:dc:da:a3:3d:31:28:1f:74:10:77:85:9d:9d:36. Are you sure you want to continue connecting (yes/no)? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@host1's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@host1'" and check to make sure that only the key(s) you wanted were added. |
三个受管制的节点一次发送,测试免密登陆:
| [root@server ~]# ssh host1 Last login: Sat Nov 23 14:41:46 2024 from server [root@host1 ~]# exit logout Connection to host1 closed. [root@server ~]# ssh host2 Last login: Sat Nov 23 14:41:51 2024 from server [root@host2 ~]# exit logout Connection to host2 closed. [root@server ~]# ssh host3 Last login: Sat Nov 23 01:33:26 2024 from 192.168.100.1 [root@host3 ~]# exit logout Connection to host3 closed. [root@server ~]# |

3.主节点安装Ansible
主节点安装epel-release源后,安装Ansible,并检查是否安装成功
| [root@server ~]# yum install -y epel-release [root@server ~]# yum install -y ansible [root@server ~]# ansible --version |

4.修改主机清单设置分组
ansible常见的配置文件
• /etc/ansible/ansible.cfg:主配置文件
• /etc/ansible/hosts:主机清单文件
• /etc/ansible/roles:角色目录
备份主机求清单文件
| [root@server ~]# cd /etc/ansible/ [root@server ansible]# ls ansible.cfg hosts roles [root@server ansible]# cp -f hosts hosts.bak [root@server ansible]# ls ansible.cfg hosts hosts.bak roles |
编写主机清单文件
| [root@server ansible]# vi hosts [all-servers] server host1 host2 host3 [node1] host1 [node2] host2 [node3] host3 [mysql_test] #规划节点host1和host2节点为数据库节点 host1 host2 [web_test] #规划节点host2和host3节点为web节点 host2 host3 [manager] server |
保存配置文件

Ansible模块基本使用
1.Ansible常用参数说明
| 参数 | 说明 |
| -h | 显示帮助信息 |
| -i | 指定inventory文件路径,默认路径为/etc/ansible/hosts |
| -l | 限制palybook或命令的作用范围 |
| -u | 连接远程主机时使用的用户名。 |
| -b | 相当于sudo |
| --become-user=USER | 提上权限后切换到的用户 |
| -m | 指定要使用的模块名 |
| -a | 指定模块的参数 |
| -f | 指定并发进程数,默认为5 |
| -v | 增加输出的详细程度 |
| -e | 指定变量名 |
| --diff | 修改文件时显示修改前后的差异 |
Ansible的执行状态
绿色:执行成功并且不需要做改变的操作
黄色:执行成功并且对目标主机做变更
红色:执行失败
粉色:警告信息
蓝色:显示ansible命令执行的过程
2.ping模块
ping模块用于检查指定节点机器是否连通,用法很简单,不涉及参数
主机如果在线,则回复pong
| [root@server ansible]# ansible -m ping node1 [WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details host1 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } |

以组为单位测试
| [root@server ansible]# ansible -m ping all |

3.command模块
command模块用于在远程主机上执行命令,ansible默认就是使用command模块。
| [root@server ansible]# ansible host1 -m command -a 'ls /etc/yum.repos.d/' |

相当于远程让host1节点执行ls命令
在受管制主机host1的/opt/目录下创建文件
| [root@server ansible]# ansible host1 -m command -a 'touch /opt/hzy' |


command模块有一个缺陷就是不能使用管道符和重定向功能。
Command模块也可以多节点执行
| [root@server ansible]# ansible -m command -a 'hostname' all |

4.shell模块
shell模块用于在受控机上执行受控机上的脚本,亦可直接在受控机上执行命令。
shell模块亦支持管道与重定向。
| [root@server ansible]# ansible host1 -m shell -a 'a=10086;echo $a' |

查看web_test组远程主机的系统版本
| [root@server ansible]# ansible web_test -m shell -a 'cat /etc/os-release | grep PRETTY_NAME | cut -d "=" -f2' |

5.user模块
主要用于管理远程系统上的用户账户,包括创建、修改和删除用户。
它允许你设置用户的密码、shell、主目录、权限等属性
常用参数:
| system | 创建用户设置用户是系统用户 |
| uid | 指定uid |
| group | 指定用户组 |
| home | 指定家目录 |
| comment | 用户的描述信息 |
| password | 指定用户密码 |
| state | 设置帐号状态,默认为present表示新建用户,指定值为absent表示删除 |
| update_password | 更新用户密码 |
| name | 指定用户名 |
| remove | 在使用state=absent时, 行为是与userdel –remove一致 |
| [root@server ansible]# ansible host1 -m user -a 'system=yes name=hongzy uid=777 comment="hzy"' |
指在host1节点创建一个名为hongzy的用户,uid为777,用户描述为hzy

检查hongzy用户是否被正确创建,调用shell模块
| [root@server ansible]# ansible host1 -m shell -a 'id hongzy ; grep ^hongzy: /etc/passwd | awk -F ":" '\''{print $5}'\''' |

删除hongzy用户
| [root@server ansible]# ansible host1 -m user -a 'name=hongzy state=absent remove=yes' |

再次调用shell模块检查hongzy是否被删除
| [root@server ansible]# ansible host1 -m shell -a 'id hongzy ; grep ^hongzy: /etc/passwd | awk -F ":" '\''{print $5}'\''' |

6.group模块
group模块用于在受控机上添加或删除组
常用参数
| gid | 用于设置组的GID |
| name | 指定组名称(必选项) |
| non_uniue | 允许组ID为非唯一值,与gid一起使用 |
| state | 指定用户组在远程主机上的状态,present和absent |
| system | 创建的用户组是否是系统组 |
创建组
| [root@server ansible]# ansible host1 -m group -a "name=footabll gid=1001 system=yes" |
创件一个组名为footbal,组ID为1001,并且是系统组

使用shell模块检查是否创建成功
| [root@server ansible]# ansible host1 -m shell -a "cat /etc/group | grep 1001" |

删除组
| [root@server ansible]# ansible host1 -m group -a "name=football gid=1001 state=absent" |

7.copy模块
在 Ansible 中,copy模块主要是将本地(执行 Ansible 任务的控制节点)的文件或目录复制到远程的host主机(被管理节点)。
常用参数
| src | 被复制文件的本地路径 |
| dest | 复制到管控节点的绝对路径(必选) |
| content | 可以指定文件的值(内容) |
| mode | 设置文件权限 |
| force | 当目标主机含有该文件时,但内容不同时,设为yes表示强制覆盖,设置为no,表示目标主机的目标位置不存在才复制 |
| backup | 在覆盖前,将源文件备份,备份文件包含时间信息 |
创建一个txt文件并写入内容
| [root@server ansible]# echo "hello word" > /root/test.txt |
将该文件复制到被管理主机host1节点的/opt/目录下并赋予权限755
| [root@server ansible]# ansible host1 -m copy -a 'src=/root/test.txt dest=/opt/copy.txt mode=755' |


再次使用copy模块,进行覆盖文件操作,使用backup参数
| [root@server ~]# ansible host1 -m copy -a 'src=/root/777.txt backup=yes dest=/opt/copy.txt' |

使用 Ansible 来调用 copy 模块,目的是将本地/root/777.txt 文件复制到名为 host2 的远程主机的 /opt/copt.txt 位置,并且设置了 backup=yes 参数,意味着如果远程主机上 /opt 目录下已经存在 copt.txt 文件,那么会先对原有的文件进行备份,再将本地的文件复制过去。

查看这两个文件

8.fetch模块
Ansible 的 fetch 模块用于从远程节点抓取文件并存储到Ansible控制器(执行Ansible任务的机器)上的指定目录
常用参数
| src | 要远程拉取的文件(只能是文件) |
| dest | 用来存放文件的目录 |
| flat | 设置为yes时,即使src是目录,也会将所有内容扁平化存储到dest |
| size | 限制抓取文件的大小 |
| force | 即使本地文件已经存在了仍旧抓取,默认yes,设置为no只有当远程文件比本地文件新或不同才执行抓取 |
| validate_checksum | 当设置为yes时在下载完成后校验文件的校验和确保文件完整无误 |
| fail_on_missing | 当设置为yes时,如果远程文件不存在,则标记任务失败,否则只是简单地跳过该文件 |
从远程主机抓取文件
| [root@server ~]# ansible host1 -m fetch -a 'src=/opt/copy.txt.2092.2024-11-24@10:33:45~ dest=/opt/' |

使用校验机制
| [root@server ~]# ansible host1 -m shell -a 'echo "fetch_text1" > /root/fetch.txt' [root@server ~]# ansible host1 -m fetch -a 'src=/root/fetch.txt dest=/opt/ validate_checksum=yes fail_on_missing=yes size=100k' |
增加了验证文件完整性,文件是否存在,文件大小限制

查看server节点下的/opt目录结构

9.file模块
file模块主要用于对文件的创建、删除、修改、权限、属性的更改。
常用参数
| path | 定义文件/目录的路径 |
| mode | 定义文件/目录的权限 |
| owner | 定义文件/目录的所有者 |
| group | 定义文件/目录的所属组 |
| state | 选项:directory、file、link、hard、touch、absent |
| dest | 被链接到的路径(state=link) |
| src | 被链接的源文件的路径(state=link) |
在指定路径下创建目录
| [root@server ~]# ansible web_test -m file -a 'path=/root/web mode=644 owner=root group=root state=directory' |
在/root目录下创建web目录,权限为644,所有者和所属组为root

查询root目录进行检查
| [root@server ~]# ansible web_test -m shell -a 'ls -l /root' |

创建软链接
| [root@server ~]# ansible web_test -m file -a 'path=/opt/web src=/root/web state=link' |

查看软链接是否创建成功
| [root@server ~]# ansible web_test -m command -a 'ls -l /opt' |

删除文件操作

删除web目录
| [root@server ~]# ansible web_test -m file -a 'path=/root/web state=absent' |

查看是否删除

10.yum模块
主要用于在基于 RPM 的 Linux 系统上管理软件包,它允许用户安装、更新、卸载软件包,并可配置额外的选项以控制操作的具体行为。
常用参数
| name | 所安装的软件包的名称 |
| state | 安装present,安装最新版本latest,卸载软件包absent |
| update_cache | 强制更新yum缓存 |
| conf_file | 指定远程安装是所依赖的配置文件 |
| disablerepo | 临时禁用yum源 |
| skip_borken | 跳过异常软件节点 |
让host1节点和host2节点安装net-tools软件包
| [root@server ~]# ansible host1,host2 -m yum -a 'name=net-tools state=present' |

使用netstat命令检测是否呗正确安装并且可以使用
| [root@server ~]# ansible host1,host2 -m shell -a 'netstat -lnpt' |

让host2卸载net-tools软件包
| [root@server ~]# ansible host2 -m yum -a 'name=net-tools state=absent' |

检测是否卸载成功
| [root@server ~]# ansible host2 -m shell -a 'echo $?' |

更新host1主机的所有软件包
| [root@server ~]# ansible host1 -m yum -a 'name=* state=latest' |

11.service模块
Ansible的service模块用于管理系统服务(如启动、停止、重启服务等)。
这个模块与特定的系统服务管理工具(如systemd、sysvinit、upstart等)兼容,能够跨不同的Linux发行版和系统管理框架工作
常用参数
| name | 服务的名称(必选) |
| state | started启动服务,stopped停止服务,restarted重启服务,reloaded重载配置 |
| enabled | 服务是否应该在系统启动时自动启动。至少需要指定state或enabled中的一个 |
| sleep | 当服务处于restarted状态时,停止与启动命令之间暂停的秒数 |
| use | 服务模块通常通过自动检测使用系统特定的模块,此设置可以强制使用特定模块。 |
| arguments | 额外的命令行参数,提供给服务管理命令。 |
使host1节点关闭防火墙
| [root@server ~]# ansible host1 -m service -a 'name=firewalld state=stopped' |

查看host1节点防火墙状态

再次启动host1节点的防火墙


12.script模块
Ansible的script模块允许你在远程主机上执行位于Ansible控制节点上的本地脚本
常用参数
| free_form | 直接提供脚本的路径以及可选参数 |
| creates | 指定远程运行的本地脚本的路径 |
| removes | 指定远程节点的一个文件名,文件不存在则不执行 |
| cmd | 要在远程节点上运行的本地脚本的路径 |
| chdir | 在远程节点执行脚本之前要切换到的目录路径 |
在server控制节点编写一个脚本
| [root@server ~]# vi root.sh #!/bin/bash #检测当天用户是否为root用户 if [ $USER == "root" ] then echo "当前为root用户" > /root/test else echo "当前是$USER用户,不是root用户" > /root/test fi |
让host1节点和host2节点执行该脚本文件
| [root@server ~]# ansible host1,host2 -m script -a '/root/root.sh' |

查看/root/test文件,检查脚本是否执行成功
| [root@server ~]# ansible host1,host2 -m shell -a 'cat /root/test' |

13.setup模块
Ansible的setup模块用于收集远程主机的信息,并将这些信息以facts的形式返回给Ansible控制节点。这些facts可以包括系统变量(如操作系统类型、架构、网络配置、已安装软件包等),并且在Playbook执行期间可以被其他任务使用。
常用参数
| filter | 用于筛选出特定的系统信息。通过指定一个或多个关键字,可以只获取与这些关键字相关的系统变量信息。 |
| fact_path | 指定自定义事实(custom facts)的路径。自定义事实是用户自己定义的关于主机的信息,除了Ansible默认收集的系统事实之外,用户可以通过在指定路径下创建文件来添加自定义的主机信息。 |
| gather_subnet | 控制setup模块收集信息的子集。默认情况下,setup模块会收集大量的系统信息,包括硬件、网络、操作系统等多个方面。使用gather_subset可以指定收集某些特定方面的信息,或者排除某些方面的信息。可能的值包括:all(全部)、min(最小集合)、hardware(硬件信息)、network(网络信息)、virtual(虚拟化信息)、ohai(类似Chef Ohai的扩展信息)、facter(使用Facter收集的信息)。 |
查看host1主机的内存信息
| [root@server ~]# ansible host1 -m setup -a "filter='*mem*'" |

检查(由于内存信息是实时更新的,所以会有所偏差)
| [root@server ~]# ansible host1 -m command -a "free -m" |

将查询到的信息保存
| [root@server ~]# ansible host1 -m setup -a 'filter="*mem*"' --tree /opt |

保存的信息存放在了server控制节点的/opt目录下

至此,Ansible的介绍和Ansible模块的基本使用就结束了,接下来会是playbook文件的编写以及后续基于ansible的实验搭建等,拜拜各位看官
相关文章:
Ansible--自动化运维工具
Ansible自动化运维工具介绍 1.Ansible介绍 Ansible是一款自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。…...
微信小程序学习指南从入门到精通
🗽微信小程序学习指南从入门到精通🗽 🔝微信小程序学习指南从入门到精通🔝✍前言✍💻微信小程序学习指南前言💻一、🚀文章列表🚀二、🔯教程文章的好处🔯1. ✅…...
微服务篇-深入了解使用 RestTemplate 远程调用、Nacos 注册中心基本原理与使用、OpenFeign 的基本使用
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 认识微服务 1.1 单体架构 1.2 微服务 1.3 SpringCloud 框架 2.0 服务调用 2.1 RestTemplate 远程调用 3.0 服务注册和发现 3.1 注册中心原理 3.2 Nacos 注册中心 …...
使用 Django 构建支持 Kubernetes API 测试连接的 POST 接口
文章目录 使用 Django 构建支持 Kubernetes API 测试连接的 POST 接口功能需求使用 kubectl 获取 Token命令解析输出示例 完整代码实现Kubernetes API 客户端类功能说明 Django 接口视图关键点解析 路由配置 接口测试请求示例响应结果成功错误 优化建议1. 安全性2. 错误处理3. …...
十二、正则表达式、元字符、替换修饰符、手势和对话框插件
1. 正则表达式 1.1 基本使用 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title&g…...
计算机毕业设计Python+大模型美食推荐系统 美食可视化 美食数据分析大屏 美食爬虫 美团爬虫 机器学习 大数据毕业设计 Django Vue.js
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
【后端面试总结】MySQL索引
数据库索引不只一种实现方法,但是其中最具代表性,也是我们面试中遇到最多的无疑是B树。 索引为什么选择B树 数据量很大的查找,是不能直接放入内存的,而是需要什么数据就通过磁盘IO去获得。 红黑树,AVL树等二叉查找树…...
[蓝桥杯 2021 省 AB2] 小平方
题目描述 小蓝发现,对于一个正整数 nn 和一个小于 nn 的正整数 vv,将 vv 平方后对 nn 取余可能小于 nn 的一半,也可能大于等于 nn 的一半。 请问,在 11 到 n−1n−1 中, 有多少个数平方后除以 nn 的余数小于 nn 的一半。 例如&…...
Jmeter测试工具的安装和使用,mac版本,jmeter版本5.2.1
Jmeter测试工具的安装和使用JSON格式请求 一、安装1、安装jdk包和设置java环境2、去官网下载Jmeter3、解压后,打开mac终端,进入apache-jmeter的bin文件开启jmeter 二、使用jmeter1、添加线程2、添加HTTP请求3、配置请求的协议、IP地址、端口号、请求方法…...
kmeans 最佳聚类个数 | 轮廓系数(越大越好)
轮廓系数越大,表示簇内实例之间紧凑,簇间距离大,这正是聚类的标准概念。 簇内的样本应该尽可能相似。不同簇之间应该尽可能不相似。 目的:鸢尾花数据进行kmeans聚类,最佳聚类个数是多少? plot(iris[,1:4…...
【纪念365天】我的创作纪念日
过去的一年 没有注意加入csdn已经有一年了。 这几天翻看小猴儿的通知才发现时间来到了一年的纪念日。稍稍思索想要将这一段时间的学习到的知识以及偶然遇到的机遇做一下总结。 上一次写纪念日是来到csdn128天的时候, 200天前我的学习状态是非常疯狂的。 只记得我当时…...
Opencv+ROS实现颜色识别应用
目录 一、工具 二、原理 概念 本质 三、实践 添加发布话题 主要代码 四、成果 五、总结 一、工具 opencvros ubuntu18.04 摄像头 二、原理 概念 彩色图像:RGB(红,绿,蓝) HSV图像:H࿰…...
蓝桥杯c++算法秒杀【6】之动态规划【下】(数字三角形、砝码称重(背包问题)、括号序列、异或三角:::非常典型的必刷例题!!!)
别忘了请点个赞收藏关注支持一下博主喵!!!! ! ! ! ! 关注博主,更多蓝桥杯nice题目静待更新:) 动态规划 三、括号序列 【问题描述】 给定一个括号序列,要求尽可能少地添加若干括号使得括号序列变得合…...
C++设计模式(单例模式)
一、介绍 1.动机 在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。 如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例? 这应该是类设计者的…...
前端---CSS(部分用法)
HTML画页面--》这个页面就是页面上需要的元素罗列起来,但是页面效果很差,不好看,为了让页面好看,为了修饰页面---》CSS CSS的作用:修饰HTML页面 用了CSS之后,样式和元素本身做到了分离的效果。---》降低了代…...
2024年最新版Java八股文复习
最新版本Java八股文复习,每天更新一篇,博主正在持续努力更新中~~~ 一、Java基础篇1、怎么理解面向对象?简单说说封装、继承、多态三大特性?2、多态体现在哪几个方面?3、面向对象的设计原则你知道有哪些吗?4…...
计算机毕业设计Hadoop+Spark音乐推荐系统 音乐预测系统 音乐可视化大屏 音乐爬虫 HDFS hive数据仓库 机器学习 深度学习 大数据毕业设计
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
MyBatis高级扩展
一、Mapper批量映射优化: 1.需求: Mapper 配置文件很多时,在全局配置文件中一个一个注册太麻烦,希望有一个办法能够一劳永逸 2.配置方式: Mybatis允许在指定Mapper映射文件时,只指定其所在的包: <mappers><package name"c…...
代码美学2:MATLAB制作渐变色
效果: %代码美学:MATLAB制作渐变色 % 创建一个10x10的矩阵来表示热力图的数据 data reshape(1:100, [10, 10]);% 创建热力图 figure; imagesc(data);% 设置颜色映射为“cool” colormap(cool);% 在热力图上添加边框 axis on; grid on;% 设置热力图的颜色…...
浅谈- “ 变量中 无符号 与 有符号 的 值转换 ”
在同一个表达式中,若同时出现 无符号变量 与 有符号变量 : 1、都转换为无符号类型:(注:2^324294967296)即unsigned int 的最大值 2、然后再运行表达式 实例: #include <stdio.h>char fun(…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...
PH热榜 | 2025-06-08
1. Thiings 标语:一套超过1900个免费AI生成的3D图标集合 介绍:Thiings是一个不断扩展的免费AI生成3D图标库,目前已有超过1900个图标。你可以按照主题浏览,生成自己的图标,或者下载整个图标集。所有图标都可以在个人或…...
