???Ansible-使用roles

文章目录

  • 一、Ansible的内置的或官方推荐创建的目录及文件
    • 介绍
    • roles目录解释
      • 1、roles/自定义角色名目录下
      • 2、roles/自定义角色名目录/tasks目录下
      • 3、roles/自定义角色名目录/handlers目录下
      • 4、roles/自定义角色名目录/templates目录下
      • 5、roles/自定义项目名目录/files目录下
      • 6、roles/自定义项目名目录/meta目录下
        • 定义角色依赖的好处,何时需要定义角色依赖
          • 好处
          • 何时必须定义角色的依赖关系
          • 何时不必要定义角色的依赖关系
  • 二、使用`ansible-galaxy`创建角色的规范目录结构
    • 什么是`ansible-galaxy`
      • 使用方法
      • 命令选项
    • 如何使用`ansible-galaxy`创建role规范目录结构
  • 使用Ansible roles的执行流程
  • 三、案例-使用Ansible roles搭建Nginx负载均衡
    • 创建角色规范目录
    • 配置meta目录、files目录、templates目录
      • meta目录定义角色依赖
      • templates目录存放嵌入变量的Nginx主配置文件、Nginx网站应用负载均衡配置文件
        • nginx.j2
        • site.j2
    • 编写tasks目录的playbook文件main.yaml
  • ToDoHere???????????????
    • 创建并编写项目入口文件
    • 测试结果
  • 四、案例-部署所有rsync-client和rsync-server服务

在Ansible中使用角色是一种模块化和重用配置的方法。角色允许你定义一系列的任务、文件、模板和变量,这些可以在不同的主机和项目中重用。下面是一个简单的示例,展示如何在Ansible
playbook中使用角色。

首先,确保你已经创建了角色目录结构。一个典型的角色目录结构如下:

roles/
└── nginx/
    ├── files/
    ├── handlers/
    │   └── main.yml
    ├── meta/
    │   └── main.yml
    ├── tasks/
    │   └── main.yml
    ├── templates/
    ├── vars/
    └── defaults/
        └── main.yml

每个目录的作用如下:

  • files/ :包含需要分发到远程主机的文件。
  • handlers/ :定义了通知事件的处理器。
  • meta/ :定义角色的依赖关系。
  • tasks/ :定义角色的任务。
  • templates/ :包含需要传输到远程主机的模板文件。
  • vars/ :定义角色的变量。
  • defaults/ :定义默认变量。

接下来,在你的playbook中使用角色。以下是一个示例playbook,它将 nginx 角色应用于 web_servers 主机组:

---
- hosts: web_servers
  become: yes  # 使用管理员权限执行任务
  roles:
    - nginx

在这个playbook中:

  • hosts: web_servers 指定了目标主机组。
  • become: yes 表示使用管理员权限执行任务。
  • roles: 指定了要应用的角色列表。
    确保你的 nginx 角色已经正确定义在 roles/目录下,并且你的Ansible配置文件(通常是 ansible.cfg )正确指向了包含角色的目录。

最后,运行你的playbook:

ansible-playbook your_playbook.yml

这将应用 nginx 角色到 web_servers 主机组中的所有主机。

一、Ansible的内置的或官方推荐创建的目录及文件

介绍

Ansible的内置目录结构和官方推荐的最佳实践可以帮助用户更好地组织和管理项目。以下是Ansible常见的目录及文件结构:

  1. Ansible项目目录结构

通常,Ansible项目会包含以下几个主要目录和文件:

  • inventory: 存放主机清单文件,定义要管理的主机和组。
  • playbooks: 存放Ansible Playbook文件的目录,Playbook用于定义要执行的任务。
  • roles: 存放角色的目录,角色是用于组织Playbook的重用模块。
    • tasks/: 存放任务文件。
    • handlers/: 存放处理程序。
    • templates/: 存放模板文件。
    • files/: 存放静态文件。
    • vars/: 存放变量文件。
    • defaults/: 存放默认变量。
  • group_vars/: 存放针对组的变量文件。
  • host_vars/: 存放针对单个主机的变量文件。
  • library/: 自定义模块的目录。
  • filter_plugins/: 自定义过滤器的目录。
  • README.md: 项目的说明文件。
  1. 官方推荐的目录

Ansible官方文档推荐的目录结构主要集中在以下几个方面:

  • 组织性: 通过roles和playbooks的目录组织,可以更好地重用和维护代码。
  • 可扩展性: 角色和目录结构使得项目更易于扩展和更新。
  • 清晰性: 采用清晰的命名和结构,让其他开发人员更容易理解项目。
  1. 示例结构

一个典型的Ansible项目目录结构可能如下所示:

my-ansible-project/
├── inventory/
│   └── hosts.ini
├── playbooks/
│   └── site.yml
├── roles/
│   └── webserver/
│       ├── tasks/
│       │   └── main.yml
│       ├── handlers/
│       │   └── main.yml
│       ├── templates/
│       │   └── httpd.conf.j2
│       ├── files/
│       │   └── index.html
│       ├── vars/
│       │   └── main.yml
│       └── defaults/
│           └── main.yml
├── group_vars/
│   └── all.yml
├── host_vars/
│   └── host1.yml
├── library/
├── filter_plugins/
└── README.md

这样的结构可以提高代码的可读性和可维护性,方便团队协作。

注意
如果要这样的结构的话,这里的playbooks目录下的site.yaml中是无法直接调用host_vars和group_vars中的变量的,除非使用include_vars

---
- name: 测试内置目录的主机清单识别,变量调用
  hosts: webservers
  become: no
  tasks:
    - include_vars: ../group_vars/webservers
    - name: 测试是否可以直接调用变量
      debug:
        msg: "user:{{user}},id:{{id}}"

最好将site.yaml放于host_vars和grou_vars目录的同一层级中;或者host_vars和group_vars目录不在这个结构里创建,如果要定义主机或主机组的变量,可以直接在Ansible默认的/etc/ansible/host_vars和/etc/ansible/group_vars目录下定义;这样不管site.yaml是否在playbooks目录中,都可以直接调用的

[root@m01 ~]# tree ansible-project/

ansible-project/
├── filter_plugins
├── group_vars
│   └── webservers
├── host_vars
├── inventory
│   └── hosts.ini
├── library
├── playbooks
├── READEME.md
├── roles
│   ├── roleA
│   │   ├── defaults
│   │   │   └── main.yml
│   │   ├── files
│   │   ├── handlers
│   │   │   └── main.yml
│   │   ├── meta
│   │   │   └── main.yml
│   │   ├── README.md
│   │   ├── tasks
│   │   │   └── main.yml
│   │   ├── templates
│   │   ├── tests
│   │   │   ├── inventory
│   │   │   └── test.yml
│   │   └── vars
│   │       └── main.yml
│   └── roleB
│       ├── defaults
│       │   └── main.yml
│       ├── files
│       ├── handlers
│       │   └── main.yml
│       ├── meta
│       │   └── main.yml
│       ├── README.md
│       ├── tasks
│       │   └── main.yml
│       ├── templates
│       ├── tests
│       │   ├── inventory
│       │   └── test.yml
│       └── vars
│           └── main.yml
└── site.yaml

# 执行:
cd ansible-project
ansible-playbook site.yaml -i inventory/hosts.ini

roles目录解释

存放项目中Ansible的定义的多个角色里的规范内容
在这里插入图片描述

1、roles/自定义角色名目录下

存放单个角色里的要做的,且便于Ansilbe识别处理的规范的内容

2、roles/自定义角色名目录/tasks目录下

定义角色的任务文件——main.yaml;且文件必须命名为 main.yaml;这个文件名是 Ansible 识别元数据的标准,其他名称不会被识别。

3、roles/自定义角色名目录/handlers目录下

定义通知事件的处理文件——main.yaml;且文件必须命名为 main.yaml;这个文件名是 Ansible 识别元数据的标准,其他名称不会被识别。

4、roles/自定义角色名目录/templates目录下

定义Jinja2文件;包含需要传输到远程主机的模板文件
xxx1.j2
xxx2.j2

这样存放的好处是:

task目录下的任务文件中使用了template模块时,src的路径就可以直接写xxx1.j2就不用写全路径了

5、roles/自定义项目名目录/files目录下

包含需要分发到远程主机的除了JInja2的文件。
aaa1.txt
aass.conf
这样存放的好处是:

task目录下的任务文件中使用了copy等推送模块时,src的路径就可以直接写aaa.txt就不用写全路径了

6、roles/自定义项目名目录/meta目录下

定义当前角色所依赖的其他角色的文件——main.yaml;且文件必须命名为 main.yaml;这个文件名是 Ansible 识别元数据的标准,其他名称不会被识别。

---
dependencies:
  - 所依赖的其他角色名

也就是说,执行当前角色的任务之前,需要先检查当前角色是否有依赖的角色,如果有,那么先执行它依赖的角色的任务,所有依赖的角色的任务都执行完了,再执行当前角色的任务

定义角色依赖的好处,何时需要定义角色依赖

在Ansible中定义角色依赖关系有以下几个好处:

好处
  1. 模块化管理

    • 通过将相关功能分散到不同的角色中,可以提高代码的可维护性和可重用性。依赖关系确保需要的角色能够自动被调用。
  2. 简化配置

    • 定义依赖关系可以减少重复配置。一个角色可以依赖于其他角色,从而避免在多个任务中重复编写相同的逻辑。
  3. 易于共享和协作

    • 在团队中工作时,明确的依赖关系可以帮助团队成员理解角色之间的关系,提高协作效率。
  4. 自动处理顺序

    • Ansible会自动处理依赖的执行顺序,确保依赖角色在主角色之前正确执行。
何时必须定义角色的依赖关系
  • 功能依赖
    当一个角色的功能显然依赖于另一个角色时,例如,一个角色需要数据库角色来设置数据库,必须定义依赖关系。

  • 公共资源
    如果多个角色使用相同的资源(如用户账户、配置文件等),则定义依赖关系确保这些资源先被创建或配置。

何时不必要定义角色的依赖关系
  • 独立角色
    如果一个角色可以独立工作,不依赖于其他角色的功能,那么就不需要定义依赖关系。

  • 简单任务
    对于一些简单的任务或脚本,仅执行单一功能的角色,可能没有必要引入依赖关系。

  • 非直接依赖
    如果角色之间的关系并不直接导致功能上的依赖,可以不定义依赖。例如,角色A和角色B都可以独立于其他角色运行。

总之,定义角色依赖关系是为了确保角色之间的相互作用和功能完整性,但并不是所有情况下都需要。根据具体情况判断是否添加依赖关系,以保持角色的清晰性与简洁性。



dependencies:
  - { role: roleB }

在这种情况下,使用花括号 {} 是为了明确将其视为一个字典。虽然在这个特定的场景中,省略花括号也是合法的,但使用花括号可以提高可读性,尤其是在复杂结构或者需要传递额外参数时。

3、 其他写法

如果您的角色有多个依赖,您可以这样写:

dependencies:
  - role: roleB
  - role: roleC

*4、 带有版本约束的依赖

如果需要指定依赖角色的版本,可以使用以下格式:

dependencies:
  - { role: roleB, src: git+https://github.com/user/roleB.git, version: 'v1.0' }
  • meta/main.yml中的dependencies字段用于定义角色间的依赖关系。
  • 使用花括号是可选的,但可以提高可读性。
  • 可定义多个依赖和版本约束。

二、使用ansible-galaxy创建角色的规范目录结构

什么是ansible-galaxy

ansible-galaxy命令用于管理Ansible角色,方便用户从Galaxy库中下载角色、初始化新角色等。它的出现是为了简化角色的管理和共享,提高用户的自动化工作效率。

使用方法

  1. 安装角色:

    ansible-galaxy install <role_name>
    

    用于安装指定的角色。

  2. 初始化角色:

    ansible-galaxy init <role_name>
    

    创建一个新的角色目录结构。

  3. 更新角色:

    ansible-galaxy install -f <role_name>
    

    强制更新已安装的角色。

  4. 移除角色:

    ansible-galaxy remove <role_name>
    

    删除指定的角色。

  5. 列出已安装角色:

    ansible-galaxy list
    

    显示当前环境中已安装的角色。
    只会在默认目录中查找:
    在这里插入图片描述

命令选项

  • install: 安装角色。


  • init: 初始化新角色。


  • remove: 移除角色。
  • list: 列出已安装的角色。
  • info: 显示角色的详细信息。
  • search: 搜索Galaxy中的角色。
  • dependencies: 处理角色依赖。

这些选项提供了强大的功能,使用户能够方便地管理和使用Ansible角色,从而提升自动化管理的效率。

如何使用ansible-galaxy创建role规范目录结构

mkdir roles
cd roles

ansible-galaxy init roleA

在这里插入图片描述
j

使用Ansible roles的执行流程

注:
先寻找一个角色中的meta目录是否定义了依赖角色;如果有,那么先执行定义的依赖角色中的任务,这样依次递归执行

三、案例-使用Ansible roles搭建Nginx负载均衡

创建角色规范目录

# roles目录下创建名为loadBalance的角色规范目录
cd roles
ansible-galaxy init loadBalance

配置meta目录、files目录、templates目录

meta目录定义角色依赖

暂无功能上有依赖的角色

templates目录存放嵌入变量的Nginx主配置文件、Nginx网站应用负载均衡配置文件

nginx.j2

site.j2

编写tasks目录的playbook文件main.yaml

ToDoHere???????????????

创建并编写项目入口文件

touch site.yaml
---
- name: the project play
  hosts: all
  become: no
  roles:
    - {role: lb,when: ansible_hostname is match 'lb*'}

---
- name: the project play
  hosts: all
  become: no
  roles:
    - role: lb
      when: ansible_hostname is match 'lb*'

解释:

在Ansible中,- {role: lb,when: ansible_hostname is match 'lb*'} 是一个任务(task)的定义,它使用了Ansible的YAML语法。让我们分解一下这个语法:

  1. -:在Ansible的playbook中,这个符号表示一个新的任务的开始。

  2. {}:大括号用于定义一个字典(dictionary),在Ansible中,任务通常以字典的形式定义。

  3. role: lb:这是一个键值对(key-value pair),其中role是键,lb是值。在Ansible中,role是一个特殊的关键字,用于指定要应用的角色。这里的lb不是变量,而是一个硬编码的字符串,表示要应用的角色名称。

  4. when: ansible_hostname is match 'lb*':这也是一个键值对,其中when是键,ansible_hostname is match 'lb*'是值。when同样是Ansible中的特殊关键字,用于定义任务执行的条件。这里的条件是检查ansible_hostname变量的值是否符合正则表达式'lb*'

    • ansible_hostname是一个变量,它在Ansible中自动设置为当前被管理主机的主机名。
    • is match是一个条件测试,用于检查左侧的变量是否匹配右侧的正则表达式。
    • 'lb*'是一个正则表达式,*表示任意数量的字符。

所以,这里的rolewhen不是变量,而是Ansible playbook语法中用于定义任务属性的特殊关键字。lbansible_hostname is match 'lb*'是与这些关键字关联的值,分别指定了要应用的角色和执行任务的条件。

通用语法可以表示为:

- {关键字1: 值1, 关键字2: 值2, ...}

在这个通用语法中,关键字是Ansible预定义的,比如rolewhen,而值则是根据你的具体需求来指定的。



在Ansible中,指定角色和条件的方式可以有多种写法。以下是一些替代写法:

  1. 使用- name: 来指定任务名称,然后使用when: 条件语句:
- name: Apply lb role when hostname matches 'lb*'
  role: lb
  when: ansible_hostname is match('lb*')
  1. 使用include_role模块来引入角色,同时指定条件:
- include_role:
    name: lb
  when: ansible_hostname is match('lb*')
  1. 使用import_role模块来引入角色,然后使用when:
- import_role:
    name: lb
  when: ansible_hostname is match('lb*')
  1. 使用block来组合多个任务,并使用when:条件语句:
- block:
    - role: lb
  when: ansible_hostname is match('lb*')
  1. 使用with_items来迭代一个列表,并对每个主机应用角色:
- role: lb
#  when: ansible_hostname is match('lb*')
  with_items: "{{ groups['all'] }}"
  1. 使用set_fact来设置一个变量,然后使用这个变量在when:中:
- name: Set fact for lb hosts
  set_fact:
    is_lb_host: "{{ ansible_hostname is match('lb*') }}"
  when: ansible_hostname is match('lb*')

- role: lb
  when: is_lb_host

每种写法都有其适用场景,你可以根据你的具体需求和Ansible playbook的结构来选择最合适的写法。



当然,Ansible playbooks 提供了多种方式来实现相同的功能。以下是一些替代写法,用于定义角色分配和条件执行:

  1. 使用 when 关键字的另一种写法
- {role: lb, when: "'lb' in ansible_hostname"}

这里使用 'lb' in ansible_hostname 来检查主机名是否包含 lb

  1. 使用 with_itemsloop 来动态分配角色
- role: lb
  when: ansible_hostname in groups['lb_group']

这里假设你有一个名为 lb_group 的主机组,包含所有以 lb 开头的主机。

  1. 使用 include_role 模块
- name: Apply lb role to hosts
  include_role:
    name: lb
  when: ansible_hostname is match('lb*')

使用 include_role 模块可以更灵活地控制角色的包含。

  1. 使用 hosts 关键字指定特定的主机
- hosts: lb*
  roles:
    - lb

这里直接在 hosts 关键字中使用通配符来指定所有以 lb 开头的主机。

  1. 使用 with_items 循环
- name: Apply lb role to specific hosts
  hosts: all
  tasks:
    - name: Apply lb role
      role: lb
      when: ansible_hostname in ['lba', 'lbb', 'lbc']

这里假设 lba, lbb, lbc 是特定的主机名。

  1. 使用 ansible_facts 变量
- name: Apply lb role based on fact
  hosts: all
  tasks:
    - name: Set fact
      set_fact:
        is_lb_host: "{{ ansible_hostname is match('lb*') }}"
    - name: Apply lb role
      role: lb
      when: is_lb_host

这里使用 set_fact 模块来设置一个事实变量,然后根据这个变量来决定是否执行角色。

  1. 使用 ansible_group 变量
- name: Apply lb role to hosts in lb_group
  hosts: lb_group
  roles:
    - lb

这里假设 lb_group 是一个包含所有以 lb 开头的主机的组。

这些替代写法提供了不同的方法来实现相同的功能,可以根据具体的需求和场景选择最合适的写法。

测试结果

ansible-playbook 入口文件位置

四、案例-部署所有rsync-client和rsync-server服务

注:
下面的写法有问题:
就算rsync-client写了ansible_hostname is match ‘web*’
由于rsync-server定义了依赖是rsync-client,且ansible_hostname == ‘backup’,所以执行rsync-server时跳转到rsync-client时仍然只会对backup主机执行任务
在这里插入图片描述
解决办法:

rsync-server可以不用定义rsync-client依赖
在入口文件这样写:

---
- name: project play
  hosts: all
  roles:
    - role: rsync-server
      when: ansible_hostname == 'backup'
    - role: rsync-client
      when: ansible_hostname is match 'web*'

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SSM超市售卖管理系统-计算机毕业设计源码23976

目 录 摘要 Abstract 1 绪论 1.1研究的背景和意义 1.2研究内容 1.3论文结构与章节安排 2 开发技术介绍 2.1 SSM框架 2.2 MySQL数据库 3 超市售卖管理系统系统分析 3.1 可行性分析 3.2 系统流程分析 3.2.1 数据流程 3.3.2 业务流程 3.3 系统功能分析 3.3.1 功…

港科夜闻 | 香港科大颁授荣誉大学院士予五位杰出人士

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大颁授荣誉大学院士予五位杰出人士。香港科大9月24日向五位杰出人士颁授荣誉大学院士&#xff0c;他们分别为包弼德教授、简吴秋玉女士、高秉强教授、吴永顺先生及容永祺博士(按姓氏英文字母排序)。荣誉大学院士颁…

BUG——IMX6ULL编译正点原子Linux内核报错

最初编译的是正点原子改过的Linux内核&#xff0c;可能是版本问题&#xff0c;一直报错&#xff0c;无法成功编译。然后换成NXP官方Linux内核6.6版本&#xff0c;初始编译虽然也报各种错&#xff0c;但都是缺少库或相关工具&#xff0c;全部安装后就可以成功编译出镜像了&#…

WiFi无线连接管理安卓设备工具:WiFiADB

介绍 WiFi ADB 使您能够通过 WiFi TCP/IP 连接直接在设备上轻松调试和测试 Android 应用&#xff0c;无需使用 USB 数据线。在启用 WiFi 上的 ADB 后&#xff0c;打开控制台将电脑连接到设备。 手机和电脑在同一个WiFi然后电脑上运行adb connect x.x.x.x:x命令即可 下载 谷…

IoT网关的主要功能有哪些?天拓四方

在数字化浪潮席卷全球的今天&#xff0c;物联网&#xff08;IoT&#xff09;技术凭借其独特的优势&#xff0c;逐渐在各个领域展现出强大的生命力。而IoT网关&#xff0c;作为连接物理世界与数字世界的桥梁&#xff0c;其在物联网体系中的作用愈发凸显。 一、数据聚合与预处理…

leetcode每日一题day15(24.9.25)——公司命名

思路&#xff1a;首先如果没有相同的后缀&#xff0c;则无论只要不是相同的首字母交换都不会出现重复情况&#xff0c;如果有重复后缀&#xff0c;则还需多增加个不能和&#xff0c;首字符与另一相同后缀字串的首字符相同的字串交换。 主要矛盾已经明确&#xff0c;则可对矛盾…

Redis集群的两种方式

1.Redis集群 1.1 搭建主从集群 单节点Redis的并发能力是有上限的&#xff0c;要进一步提高Redis的并发能力&#xff0c;就需要搭建主从集群&#xff0c;实现读写的分离。一般情况下&#xff0c;主节点负责写操作&#xff0c;从节点负责读操作。而从节点如何得知数据呢&#xff…

SpringBoot文档管理系统:架构与功能

第2章相关技术 2.1 Java技术介绍 Java语言擅长开发互联网类应用和企业级应用&#xff0c;现在已经相当的成熟&#xff0c;而且也是目前使用最多的编程语言之一。Java语言具有很好的面向对象性&#xff0c;可以符合人的思维模式进行设计&#xff0c;封装是将对象的属性和方法尽可…

【4.6】图搜索算法-DFS和BFS解合并二叉树

一、题目 给定两个二叉树&#xff0c;想象当你将它们中的一个覆盖到另一个上时&#xff0c;两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是 如果两个节点重叠&#xff0c;那么将他们的 值相加作为节点合并后的新值&#xff0c;否则不为 NUL L…

DERT目标检测源码流程图main.py的执行

DERT目标检测源码流程图main.py的执行 官网预测脚本 补充官网提供的预测部分的代码信息。 from PIL import Image import requests import matplotlib.pyplot as pltimport torch from torch import nn from torchvision.models import resnet50 import torchvision.transform…

网页设计html心得

一&#xff0c;认识网页 说到网页&#xff0c;其实大家并不陌生 1.1网页究竟是什么&#xff1f; 网页主要由文字、图像和超链接等元素构成。当然&#xff0c;除了这些元素&#xff0c;网页中还可以包含音频、视频以及Flash等。 1.2网页是如何形成的呢&#xff1f; 1.特殊的…

笔记整理—linux进程部分(1)进程终止函数注册、进程环境、进程虚拟地址

对于mian()函数而言&#xff0c;执行前也需要先执行一段引导代码才会去执行main()函数&#xff0c;该部分的代码包含构建c语言的运行环境等配置&#xff0c;如清理bss段等。 在使用gcc去编译程序的时候&#xff0c;使用gcc -v xxx.c可见链接过程。在编译完成后可见xxx.out文件。…

动态规划算法:12.简单多状态 dp 问题_打家劫舍_C++

目录 题目链接&#xff1a;LCR 089. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 一、题目解析 题目&#xff1a; 解析&#xff1a; 二、算法原理 1、状态表示 状态表示&#xff1a; 2、状态转移方程 状态转移方程推理&#xff1a; 3、初始化 dp表初始化: 特殊…

【优选算法】(第七篇)

目录 ⽔果成篮&#xff08;medium&#xff09; 题目解析 讲解算法原理 编写代码 找到字符串中所有字⺟异位词&#xff08;medium&#xff09; 题目解析 讲解算法原理 编写代码 ⽔果成篮&#xff08;medium&#xff09; 题目解析 1.题目链接&#xff1a;. - 力扣&#…

神经网络(一):神经网络入门

文章目录 一、神经网络1.1神经元结构1.2单层神经网络&#xff1a;单层感知机1.3两层神经网络&#xff1a;多层感知机1.4多层神经网络 二、全连接神经网络2.1基本结构2.2激活函数、前向传播、反向传播、损失函数2.2.1激活函数的意义2.2.2前向传播2.2.3损失函数、反向传播2.2.4梯…

连锁店收银系统如何选择?

在新零售背景下&#xff0c;连锁店的收银系统扮演着至关重要的角色。随着科技的不断发展和消费者需求的不断变化&#xff0c;一款功能齐全的收银系统不仅可以提高便利店的运营效率&#xff0c;还可以提供更好的消费体验。以下是连锁店收银系统必备的功能。 1.收银系统能支持独…

Mac制作Linux操作系统启动盘

前期准备 一个 Mac 电脑 一个 U 盘&#xff08;8GB 以上&#xff09; 下载好 Linux 系统镜像&#xff08;iso 文件&#xff09; 具体步骤 挂载 U 盘 解挂 U 盘 写系统镜像到 U 盘 完成 一、挂载 U 盘 首先插入 U 盘&#xff0c;打开终端输入下面的命令查看 U 盘是否已经 m…

python单例和工厂模式

设计模式 设计模式是一种编程套路&#xff0c;可以极大的方便程序的开发 最常见、最经典的设计模式&#xff0c;就是学习的面向对象 除了面向对象之外&#xff0c;在编程中也有很多既定的套路可以方便开发&#xff0c;我们称之为设计模式&#xff1a; 单例、工厂模式建造者…

IDEA2020运行项目时不从配置的maven仓库找jar包,从C盘默认路径下找jar包

目录 问题描述&#xff1a; 解决方案&#xff1a; 问题描述&#xff1a; 使用IDEA2020做java开发&#xff0c;idea的设置中maven仓库地址配在D盘&#xff0c; maven的配置文件setting.xml中的仓库也已经确认配置到D盘&#xff0c; 项目根据pom文件自动下载jar包时也会下载到…

IDEA 系列产品 下载

准备工作 下载 下载链接&#xff1a;https://www.123865.com/ps/EF7OTd-mbHnH 仅供参考 环境 演示环境&#xff1a; 操作系统&#xff1a;windows10 产品&#xff1a;IntelliJ IDEA 版本&#xff1a;2024.1.2 注意&#xff1a;如果需要其他产品或者版本可以自行下载&#xff0…