自动化运维工具Ansible教程(一)【入门篇】

文章目录

  • 前言
  • Ansible 入门到精通
    • 入门篇
    • 进阶篇
    • 精通篇
    • 入门篇
      • 1. Ansible 简介
      • 2. 安装 Ansible
        • 1. 通过包管理器安装:
        • 2. 通过源码安装:
      • 3. Ansible 的基本概念和核心组件
      • 4. 编写和运行第一个 Ansible Playbook
      • 5. 主机清单和组织结构
        • 主机清单
        • 组织结构
      • 6. Ansible 常用模块和任务
      • 7. Ansible 变量和模板
      • 8. Ansible 条件和循环
  • 参考文档

在这里插入图片描述

前言

ansible 学习大纲
在这里插入图片描述
Ansible 是一个开源的自动化工具,用于配置管理、应用部署和任务执行。它以简单、可读性强的 YAML 格式的 Playbooks 为基础,使得自动化任务变得简单、可维护和可扩展。

  1. 简单易用:Ansible 的设计目标之一是简单易用。它使用 YAML 语法定义任务和配置,无需编写复杂的脚本或编程代码。初学者可以快速上手,同时也适用于复杂的自动化需求。

  2. 无代理:Ansible 使用 SSH 协议进行远程连接和执行任务,无需在远程主机上安装任何代理程序。这使得部署和管理变得简单,同时减少了对目标主机的依赖和配置要求。

  3. 基于模块化:Ansible 基于模块化的架构,提供了丰富的模块来管理各种不同类型的系统、服务和应用。这些模块可以执行各种任务,如安装软件包、配置文件、启动服务等。

  4. 声明式语法:Ansible Playbooks 使用声明式语法描述所需的状态和配置,而不是编写特定的步骤和命令。这使得配置管理和自动化任务的维护更加直观和可读性强。

  5. 可扩展性:Ansible 可以轻松扩展以适应不同规模和复杂度的环境。它支持分组管理、变量管理、角色和插件等功能,可以构建复杂的自动化流程和组织结构。

  6. 强大的生态系统:Ansible 拥有庞大的社区和活跃的贡献者,提供了大量的模块、角色和插件。Ansible Galaxy 是一个社区驱动的集市,提供了现成的角色和模块,可用于加速和共享自动化任务的开发。

Ansible 的应用场景广泛,可以用于服务器配置管理、应用部署、云基础设施管理、网络设备配置、持续集成/持续部署 (CI/CD) 等。它的简单性、可读性和可扩展性使得 Ansible 成为许多组织和开发团队的首选自动化工具。

Ansible 入门到精通

入门篇

  1. Ansible 简介
  2. 安装 Ansible
  3. Ansible 的基本概念和核心组件
  4. 编写和运行第一个 Ansible Playbook
  5. 主机清单和组织结构
  6. Ansible 常用模块和任务
  7. Ansible 变量和模板
  8. Ansible 条件和循环

进阶篇

  1. Ansible 的高级主题(例如:角色、动态清单、变量管理等)
  2. 使用 Ansible Vault 进行加密和解密
  3. Ansible 远程执行和连接方式
  4. 高级 Ansible Playbook 技巧
  5. 使用 Ansible 进行系统配置和部署
  6. Ansible 的容器和云集成
  7. Ansible 自动化测试和检查
  8. Ansible 运维和故障排除

精通篇

  1. Ansible 在企业级环境中的应用和扩展
  2. Ansible 与其他自动化工具的集成
  3. Ansible 最佳实践和实际案例分析
  4. Ansible 性能优化和容错机制
  5. Ansible 社区和资源

入门篇

1. Ansible 简介

2. 安装 Ansible

安装 Ansible 主要有两种方式:通过包管理器和源码安装。

1. 通过包管理器安装:

对于基于 Debian 的系统(如 Ubuntu),可以使用 apt-get 命令来安装 Ansible:

sudo apt-get update
sudo apt-get install software-properties-common
sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt-get install ansible

对于基于 Red Hat 的系统(如 CentOS),可以使用 yum 命令来安装 Ansible:

sudo yum install epel-release
sudo yum install ansible

2. 通过源码安装:

如果你需要使用 Ansible 的最新版本,或者你的系统没有预包装的 Ansible,你可以选择通过源码安装。首先,你需要安装一些必要的依赖,然后从 GitHub 上克隆 Ansible 的源码,并安装:

sudo apt-get install git python3-pip
git clone https://github.com/ansible/ansible.git
cd ansible
sudo pip3 install .

安装完成后,你可以使用 ansible --version 命令来检查 Ansible 是否已经成功安装,以及其版本信息。

3. Ansible 的基本概念和核心组件

在这里插入图片描述

Ansible的一些基本概念和核心组件:

  1. 主机清单(Inventory):主机清单是一个定义可管理主机的文件或文件集合。它指定了Ansible应该在哪些主机上执行任务。主机清单可以是静态的(静态清单文件)或动态的(通过外部脚本或插件生成)。

  2. Playbook:Playbook是一个YAML格式的文件,用于定义Ansible的配置、部署和管理任务。它由一个或多个Play(任务集合)组成,每个Play定义了一组在一组主机上执行的任务。

  3. 模块(Modules):模块是Ansible的基本执行单元,用于执行具体的任务。Ansible提供了丰富的模块库,用于管理文件、安装软件包、配置服务等各种操作。

  4. 任务(Tasks):任务是在Playbook中定义的单个操作步骤。每个任务通常使用一个模块来执行特定的操作,例如安装软件包、复制文件、启动服务等。

  5. 角色(Roles):角色是一种组织和复用Playbook的机制。它将相关的任务、变量和文件组织到单个目录结构中,使得管理和维护复杂的配置变得更加容易。

  6. 变量(Variables):变量用于存储和传递数据,以在Playbook中进行配置和任务执行。变量可以在不同的层次(全局、主机组、主机、角色等)进行定义和使用。

  7. 模板(Templates):模板是一种允许在文件复制过程中进行动态渲染的机制。它使用Jinja2模板引擎,可以根据变量和条件生成最终的配置文件。

  8. 插件(Plugins):插件是可扩展Ansible功能的组件。它们可以修改或扩展Ansible的核心行为,包括主机清单解析、任务执行、变量处理等。

  9. 控制节点(Control Node):控制节点是运行Ansible的主机或服务器。它是执行Ansible命令和Playbook的机器,与目标主机通过SSH建立连接并进行管理操作。

这些是Ansible的一些基本概念和核心组件。通过理解这些概念,您可以开始编写和执行Ansible Playbook,实现自动化的系统配置和管理

4. 编写和运行第一个 Ansible Playbook

在这里插入图片描述

要编写一个部署包含 Spring Boot 项目、Redis、MySQL 和 Nginx 的 Ansible Playbook, 可以按照以下步骤进行操作:

  1. 主机清单(Host Inventory)
    指定你要在其中部署和管理应用程序的主机列表。它是一个文本文件,其中包含主机的名称或 IP 地址,并按组织和分类进行分组。主机清单告诉 Ansible 在哪些主机上执行特定的任务或角色。
    主机清单文件通常具有 .ini.yaml 扩展名
    我们有两个组 [web_servers][database_servers],每个组中列出了相应主机的名称和 IP 地址。你需要根据你的实际部署环境和需求来创建和维护主机清单文件。
[web_servers]
web1 ansible_host=192.168.1.10
web2 ansible_host=192.168.1.11[database_servers]
db1 ansible_host=192.168.1.20
db2 ansible_host=192.168.1.21
  1. 创建一个名为 deploy.yml 的 Ansible Playbook 文件。
    在这个 Playbook 中,我们首先定义了一些变量,例如项目名称、项目版本和 MySQL 的 root 密码。你可以根据实际情况修改这些变量的值。
    接下来,我们列出了一系列任务:
  • 更新 apt 缓存
  • 安装 Java Development Kit (JDK)
  • 安装 Redis
  • 安装 MySQL
  • 对 MySQL 进行安全设置
  • 安装 Nginx
  • 配置 Nginx
  • 部署 Spring Boot 项目
  • 启动 Spring Boot 项目
---
- name: Deploy Spring Boot Projecthosts: 172.16.57.56 # 替换为你的目标主机清单vars:project_name: icepip-first-project # 项目名称project_version: 1.0.0  # 项目版本mysql_root_password: your_mysql_root_password  # MySQL root 密码tasks:- name: Update apt cache  # 更新 apt 缓存become: yesapt:update_cache: yes- name: Install Java Development Kit (JDK)  # 安装 Java Development Kit (JDK)become: yesapt:name: openjdk-11-jdkstate: present- name: Install Redis  # 安装 Redisbecome: yesapt:name: redis-serverstate: present- name: Install MySQL  # 安装 MySQLbecome: yesapt:name: mysql-serverstate: present- name: Secure MySQL installation  # 安全设置 MySQL 安装become: yesmysql_user:name: rootpassword: "{{ mysql_root_password }}"login_unix_socket: /var/run/mysqld/mysqld.sockhost: localhostcheck_implicit_admin: yeslogin_user: rootlogin_password: ""priv: "*.*:ALL,GRANT"state: present- name: Install Nginx  # 安装 Nginxbecome: yesapt:name: nginxstate: present- name: Configure Nginx  # 配置 Nginxbecome: yestemplate:src: nginx.conf.j2dest: /etc/nginx/nginx.confvalidate: /usr/sbin/nginx -tnotify:- Restart Nginx- name: Deploy Spring Boot project  # 部署 Spring Boot 项目become: yescopy:src: target/{{ project_name }}-{{ project_version }}.jardest: /opt/{{ project_name }}.jar- name: Start Spring Boot project  # 启动 Spring Boot 项目become: yesshell: |nohup java -jar /opt/{{ project_name }}.jar > /dev/null 2>&1 &handlers:- name: Restart Nginx  # 重启 Nginxbecome: yesservice:name: nginxstate: restarted

Configure Nginx 任务中,使用了一个名为 nginx.conf.j2 的模板文件来配置 Nginx。你需要创建这个模板文件并定义适合你的项目的 Nginx 配置。定义了一个名为 Restart Nginx 的处理程序,在配置更改时重新启动 Nginx 服务。

  1. 创建一个名为 nginx.conf.j2 的模板文件
    Nginx 配置了一个监听端口为 80 的服务器块,将请求代理到运行在本地的 Spring Boot 项目的 8080 端口。
worker_processes auto;
events {worker_connections 1024;
}
http {server {listen 80;server_name your_domain;location / {proxy_pass http://localhost:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}}
}
  1. 保存并关闭 deploy.ymlnginx.conf.j2 文件。

  2. 运行 Ansible Playbook:

		ansible-playbook deploy.yml

Ansible 将连接到目标主机并按照 Playbook中定义的任务顺序执行操作。它会安装和配置 Redis、MySQL 和 Nginx,然后部署和启动 Spring Boot 项目。

5. 主机清单和组织结构

主机清单(Host Inventory)和组织结构在 Ansible 中起着关键的作用。它们用于定义和组织要管理的主机以及如何对它们进行分类和分组。

主机清单

  1. 主机清单文件:主机清单文件是一个文本文件,其中列出了要在 Ansible 中管理的主机的信息。它可以包含主机名、IP 地址、连接信息和其他变量。主机清单文件可以使用 .ini.yaml 格式编写。

  2. 主机组:主机组是一种将主机按逻辑或功能进行分组的方式。你可以基于不同的标准(如角色、地理位置、环境等)将主机分成不同的组。这样,你可以根据需要在组级别或单个主机级别上执行任务。

  3. 组变量:组变量是应用于特定主机组的变量。它们以组的名称作为键,可以在主机清单文件中定义。通过组变量,你可以在一次性中为一组主机设置共享的属性和配置。

  4. 主机变量:主机变量是应用于单个主机的变量。它们以主机的名称作为键,可以在主机清单文件中定义。主机变量允许你为特定主机设置独立的属性和配置。

  5. 动态主机清单:动态主机清单是一种动态生成主机清单的机制。它可以从外部源(如云提供商、配置管理数据库等)获取主机信息,并在运行时构建主机清单。这对于动态环境中的自动化和弹性部署非常有用。

通过合理组织和使用主机清单和组织结构,你可以更好地管理和扩展 Ansible 部署。你可以根据你的项目需求和部署架构,灵活地定义主机组、变量和组织结构,以便有效地执行任务和角色。

在Ansible中,主机清单是一个配置文件,它包含了被Ansible管理的所有主机的列表。主机清单通常用于制定哪些主机应该接受哪些特定的命令和配置。

主机清单的基本结构是这样的:

在这个例子中,web_serversdatabase_servers就是组(组名),

[web_servers]
web1 ansible_host=192.168.1.10
web2 ansible_host=192.168.1.11[database_servers]
db1 ansible_host=192.168.1.20
db2 ansible_host=192.168.1.21

组织结构

Ansible的组织结构是通过主机清单来管理的,可以构建高级别的抽象结构,这意味着可以有子组、父组,甚至可以有嵌套的子组。 atlantaraleigh是子组;southeast是父组,它包含了两个子组(atlanta, raleigh);usa是一个更大的父组,包含了更多的子组。同时,在[southeast:vars]下定义的变量(some_server,halon_system_timeout,self_destruct_countdown,escape_pods) 将对southeast组以及其下的所有子组和主机生效。

[atlanta]
host1
host2[raleigh]
host3
host4[southeast:children]
atlanta
raleigh[southeast:vars]
some_server=foo.southeast.example.com
halon_system_timeout=30
self_destruct_countdown=60
escape_pods=2[usa:children]
southeast
northeast
southwest
northwest

这种组织结构的设计使得Ansible能够非常轻松地管理大型的网络结构。你可以简单地通过改变组或父组的配置来改变一大组机器的行为。

6. Ansible 常用模块和任务

Ansible 提供了丰富的模块来执行各种任务。下面是一些常用的 Ansible 模块和任务的示例:

  1. apt 模块:用于管理基于 APT(Debian、Ubuntu)的软件包。可以安装、升级、移除软件包,并更新本地的软件包缓存。
- name: Install nginxapt:name: nginxstate: present
  1. yum 模块:用于管理基于 YUM(Red Hat、CentOS)的软件包。可以安装、升级、移除软件包,以及管理软件包仓库。
- name: Install httpdyum:name: httpdstate: present
  1. copy 模块:用于将文件从控制节点复制到远程主机。可以指定源文件路径和目标路径,并设置文件权限和所有权。
- name: Copy configuration filecopy:src: /path/to/source/file.confdest: /etc/destination/file.confowner: rootgroup: rootmode: 0644
  1. template 模块:用于使用模板引擎生成文件,并将其复制到远程主机。可以使用变量和条件逻辑来自定义生成的文件。
- name: Generate configuration file from templatetemplate:src: /path/to/template.conf.j2dest: /etc/destination/file.confowner: rootgroup: rootmode: 0644
  1. service 模块:用于管理系统服务的状态。可以启动、停止、重新启动服务,并设置服务的启动状态。
- name: Start nginx serviceservice:name: nginxstate: started
  1. command 模块:用于在远程主机上执行命令并获取输出结果。
- name: Execute a commandcommand: ls -l /path/to/directoryregister: result- name: Print command outputdebug:var: result.stdout

这只是一小部分常用的 Ansible 模块和任务示例。Ansible 还提供了许多其他模块,涵盖了各种任务,包括文件操作、用户管理、数据库操作、云资源管理等。你可以根据具体需求选择适当的模块和任务,构建自己的 Ansible Playbooks。

7. Ansible 变量和模板

在 Ansible 中,变量和模板的定义可以在不同的位置和方式进行。以下是几种常见的定义方式:

1. 主机清单文件中定义变量: 可以在主机清单文件中为每个主机或主机组定义变量。这些变量将应用于特定的主机或主机组,可以在 Playbooks 和模板中使用。主机变量使用 host_varsgroup_vars 目录来组织,文件名与主机名或组名相对应。

示例(位于 host_vars 目录下的文件):

# host_vars/web1.yml
http_port: 8080

示例(位于 group_vars 目录下的文件):

# group_vars/web_servers.yml
http_port: 8080

2. Playbook 文件中定义变量: 可以在 Playbook 文件中定义变量,这些变量将应用于整个 Playbook 中的任务。可以使用 vars 关键字定义变量。

示例:

- name: Configure web serverhosts: web_serversvars:http_port: 8080tasks:- name: Install and configure web server...

3. 命令行中定义变量: 可以在运行 Ansible 命令时通过命令行参数定义变量。可以使用 -e--extra-vars 参数来传递变量。

示例:

ansible-playbook playbook.yml -e "http_port=8080"

4. 注册变量: 在任务执行期间,可以使用 register 关键字将命令执行的结果保存到变量中。注册变量可以在后续任务中使用。

示例:

- name: Execute a commandcommand: ls -l /path/to/directoryregister: result- name: Print command outputdebug:var: result.stdout

5. 模板文件中定义变量: 可以在模板文件中使用变量占位符,并在 Playbook 中通过 template 模块将变量值传递给模板。

示例模板文件 template.conf.j2

# Configuration file
server_ip = {{ ansible_host }}
http_port = {{ http_port }}

在 Playbook 中使用 template 模块:

- name: Generate configuration file from templatetemplate:src: template.conf.j2dest: /etc/destination/file.confowner: rootgroup: rootmode: 0644

8. Ansible 条件和循环

在 Ansible 中,条件和循环用于控制任务的执行流程和处理复杂的配置情况。以下是 Ansible 中条件和循环的用法和示例:

条件

使用条件语句可以根据不同的条件来执行或跳过任务。

  1. when 关键字:when 关键字允许你在任务级别使用条件判断。任务只有在条件为真时才会执行。
- name: Install package if OS is CentOS 7yum:name: package_namestate: presentwhen: ansible_distribution == 'CentOS' and ansible_distribution_major_version == '7'
  1. failed_when 关键字:failed_when 关键字允许你在任务执行失败时自定义失败的条件。
- name: Execute a command and ignore non-zero return codecommand: some_commandfailed_when: false
  1. changed_when 关键字:changed_when 关键字允许你自定义任务是否被标记为已更改的条件。
- name: Execute a command and always report as changedcommand: some_commandchanged_when: true

循环

使用循环结构可以对列表、字典等数据进行迭代,执行重复的任务。

  1. with_items 关键字:with_items 关键字用于循环遍历列表。
- name: Create multiple usersuser:name: "{{ item }}"state: presentwith_items:- user1- user2- user3
  1. loop 关键字:loop 关键字用于循环遍历任意可迭代对象,包括列表、字典等。
- name: Create multiple usersuser:name: "{{ item }}"state: presentloop:- user1- user2- user3
  1. with_dict 关键字:with_dict 关键字用于循环遍历字典。
- name: Set multiple factsset_fact:"{{ item.key }}": "{{ item.value }}"with_dict:key1: value1key2: value2key3: value3
  1. with_fileglob 关键字:with_fileglob 关键字用于循环遍历匹配指定文件模式的文件列表。
- name: Copy filescopy:src: "{{ item }}"dest: /path/to/destination/with_fileglob:- /path/to/files/*.txt- /path/to/files/*.conf

参考文档

  1. Ansible 官方文档 ↗: Ansible 官方文档是学习 Ansible 的最全面和权威的资源。它包含了 Ansible 的所有功能、模块和概念的详细说明,并提供示例和最佳实践指南。

  2. Ansible 官方示例 ↗: Ansible 官方示例库包含了一系列使用 Ansible 的示例 Playbooks,涵盖了各种常见的用例和场景。这些示例可以帮助你学习和理解如何使用 Ansible 进行自动化配置和部署。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过finalshell快速在ubuntu上安装jdk1.8

这篇文章主要介绍一下怎么通过finalshell连接ubuntu,然后在ubuntu上安装jdk1.8,让不熟悉linux操作系统的童鞋也能快速地完成安装。 目录 一、准备一台虚拟机 二、安装finalshell远程连接工具 三、获取ubuntu虚拟机的ip地址 四、通过finalshell连接u…

C语言 —— 初步入门知识(第一个C语言程序、数据类型、变量常量、字符与注释)

本篇文章介绍C语言的基础知识,使读者对C语言能够有一个大概的认识. 不会细写每一个知识点, 但是能够入门C语言, 进行初步的C语言代码阅读. 首先, 什么是语言? 对于人和人之间进行交流的语言, 我们知道, 可以通过汉语, 英语, 日语等语言进行交流. 那么对于人和计算…

SAP GUI 8.0 SMARTFORMS 使用SCR LEGACY TEXT EDITOR GUI8.00 禁用MSWORD

Smartforms使用WORD作为编辑器是很痛苦的一个事情,不支持拖拽,还很慢,各种不习惯,总之是非常的不舒服,能导致失眠。 在S/4以前的系统,可以使用TCODE I18N或者程序RSCPSETEDITOR或者暴力党直接改表TCP0I来…

C#难点语法讲解之委托---从应用需求开始讲解

一、委托的定义 委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。 简单解释:变量好控制,方法不好控制,委托可以把方法变成变量 二、例子解释定义 如果我们有一个数组,里面有10个…

Spring Security 的身份验证绕过漏洞CVE-2023-34035

文章目录 0.前言漏洞漏洞介绍描述 1.参考文档2.基础介绍2.1 组件简介:2.2 漏洞简介: 3.解决方案3.1. 升级版本 0.前言 背景:公司收到关于 Spring Security 的一个身份验证绕过漏洞的通知,该漏洞被标识为 CVE-2023-34035 漏洞 高 …

java项目之固定资产管理系统(源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的固定资产管理系统。源码和部署相关看文章末尾! 开发环境: 后端: 开发语言:Java 框架&…

尚硅谷JAVA数据结构与算法--希尔排序

一、希尔排序 也称缩小增量排序,分为交换法和移动法,移动法速度更快。 交换法: package 希尔排序; //交换法 import java.util.Arrays;public class ShellSort {public static void main(String[] args) {int[] arr{7,1,4,6,8,9,5,2,3,10}…

前端架构设计:构建可维护、可扩展的现代Web应用

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 引言 前端架构设计是现…

EndNote21 | 账户同步问题

问题:无法同步,提示如下图所示。 原因:网络问题。 解决方法:国内网络无法实现同步,解决上网问题即可。

Ubuntu下Nginx配置ModSecurity详细思路及过程

下面是一个简介: Ubuntu是一个linux操作系统,Nginx是一个web服务器软件,ModSecurity是一款开源的web应用防火墙(江湖人称“WAF”)。 如果上面的概念没有一定的了解,下面的内容其实也能看。就是不好操作。…

设计模式之中介者模式

尽管将一个系统分割成许多对象通常可以增加其可复用性,但是对象间相互连接的激增又会降低其可复用性 大量的连接使得一个对象不可能在没有其他对象的支持下工作,系统表现为一个不可分割的整体,所以,对系统的行为进行任何较大的改…

美创科技入选第二届安徽省网络和数据安全应急技术支撑单位

9月11日,2023年安徽省网络安全宣传周活动在阜阳市正式启动。安徽省委常委、宣传部部长陈舜出席并宣布网安周正式启动。阜阳市委书记刘玉杰、省委宣传部副部长、省委网信办主任张杰华出席并致辞。 开幕式上,省委网信办副主任齐海洋发布第二届安徽省网络和…

[论文阅读] SADGA: Structure-Aware Dual Graph Aggregation Network for Text-to-SQL

“SADGA: Structure-Aware Dual Graph Aggregation Network for Text-to-SQL” 是一篇 text2sql 领域的论文,发布于 NeurIPS 2021。 原文链接:https://arxiv.org/abs/2111.00653 项目代码链接:https://github.com/DMIRLAB-Group/SADGA 总体…

搜好货API接口解析,实现获得搜好货商品详情

要解析搜好货API接口并实现获取搜好货商品详情,你需要按照以下步骤进行操作: 了解搜好货开放平台:访问搜好货开放平台官网,找到API接口相关的开发者文档、指南等信息。注册开发者账号:在搜好货开放平台上注册一个开发…

C++之vector迭代器函数begin、end、rebegin、rend、cbegin、cend、crbegin、crend总结(二百零一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

文心一言 VS 讯飞星火 VS chatgpt (93)-- 算法导论9.2 1题

一、用go语言,证明:在 RANDOMIZED-SELECT 中,对长度为0的数组,不会进行递归调用。 文心一言: 在 Go 语言中,我们可以通过实现一个函数来检查数组的长度,如果长度为0,则不进行递归调…

vue3中的吸顶导航交互实现 | VueUse插件

目的:浏览器上下滚动时,若距离顶部的滚动距离大于78px,吸顶导航显示,小于78px隐藏。使用vueuse插件中的useScroll方法​​​​​​​和动态类名控制进行实现 1. 安装 npm i vueuse/core 2. 获得滚动距离 项目中导入&#xff0…

财富潮涌:银行发展绿色经济创新路径

在《玩转金融新“绿”潮,银行纷纷亮大招》内容中,我们带大家了解了商业银行有关绿色信贷产品、绿色债券产品及绿色投资的内容。今天,我们将继续带大家了解商业银行绿色金融实践路径中关于绿色财富、绿色服务和绿色运营的分析。 在绿色金融实…

文件路径中的/,\的区别和文件路径的常见用法

/是Unix和类Unix系统上的路径分隔符.现代Windows通常可以同时使用\和/交换文件路径,但微软\几十年来一直主张使用路径分隔符. 关于文件路径的常用方法再学习一下: "./":代表目前所在的目录 "../":代表上一层目录 以&q…

线性代数的本质(一)——向量空间

文章目录 向量空间向量及其性质基与维数向量的坐标运算 《线性代数的本质》 - 3blue1brown 高中数学A版选修4-2 矩阵与变换 《线性代数及其应用》(第五版) 《高等代数简明教程》- 蓝以中 向量空间 In the beginning Grant created the space. And Grant said, Let there be vec…