全网最详细HAProxy入门小知识

news2024/11/25 2:37:04

目录

一. 负载均衡

负载均衡的意义:

负载均衡的类型:

二. HAProxy 简介

HAProxy 的特点:

社区版和企业版:

三. HAProxy 的安装和服务信息

1、实验环境

1)安装并配置 Nginx

2)在客户端测试

2、安装:

3、haproxy的基本配置信息

global 配置: 解释 global 配置段中常用的参数

全局配置

 proxies 配置: 解释 defaults、frontend、backend 和 listen 配置段中常用的参数

配置 HAProxy

 

测试

 若在webserver1中停止 Nginx 服务

四. HAProxy 的算法

静态算法: 按照事先定义好的规则进行调度,例如:

  static-rr: 基于权重的轮询调度,不支持动态调整权重。

 first: 根据服务器在列表中的位置,自上而下进行调度,忽略权重设置。 

测试:

动态算法: 基于后端服务器状态进行调度,例如:

        roundrobin: 基于权重的轮询动态调度算法,支持动态调整权重和慢启动。

动态调整权重 

        leastconn: 加权的最少连接的动态调度算法,根据当前连接最少的后端服务器进行优先调度,适合长连接场景。

其他算法:

        source: 基于源地址 hash,可以将请求转发到同一台后端服务器,支持取模法和一致性 hash。

测试:

        uri: 基于 URI hash,可以将请求转发到缓存服务器或 CDN 服务提供商。

uri 取模法配置示例

uri 一致性hash配置示例

 访问测试

        url_param: 基于 URL 参数 hash,可以追踪用户行为,确保来自同一个用户的请求始终发往同一个后端服务器。

一致性hash配置示例

测试访问:

        hdr: 基于 HTTP 头部 hash,可以基于客户端浏览器类型进行调度。

一致性hash配置示例:

测试访问:

五. 高级功能及配置

1、基于 cookie 的会话保持:

配置示例:

验证cookie信息:

2、HAProxy 状态页:

启用状态页

3、IP 透传:

四层IP透传

4、ACL:

ACL示例-域名匹配

测试结果:

5、自定义 HAProxy 错误界面:

基于自定义的错误页面文件

6、HAProxy 四层负载:

对 MySQL 服务实现四层负载

   在后端服务器安装和配置mariadb服务

启动mariadb服务,并在MySQL数据库中创建一个新用户,并授予该用户对所有数据库和表的完全访问权限,用户名是cfy,密码是1

测试

7、HAProxy https 实现:

https配置示例

六、建议


一. 负载均衡


负载均衡的意义:


高可用性: 当一台服务器出现故障时,负载均衡器可以将流量自动切换到其他健康的服务器,保证业务的持续运行。
并发处理能力: 将流量分散到多台服务器,提高整体并发处理能力,避免单点性能瓶颈。
水平扩展: 可以方便地添加或删除服务器,实现业务的水平扩展。
成本节约: 多台服务器可以共用一个公网 IP 地址,降低 IT 成本。
安全性: 隐藏内部服务器 IP 地址,提高安全性。


负载均衡的类型:


硬件负载均衡器: 例如 F5、Netscaler、Array 等,性能强大,功能丰富,但价格昂贵。
软件负载均衡器
        四层负载均衡器: 例如 LVS、Nginx(upstream 模块)、HAProxy(模拟四层转发),基于         IP+Port 进行调度,性能较高。
        七层负载均衡器: 例如 Nginx(proxy_pass)、HAProxy,基于应用层信息进行调度,功能能        更丰富,但性能略低于四层。


二. HAProxy 简介


HAProxy 的特点:


高并发: 可以处理数万甚至数十万的并发连接。
高性能: 基于 C 语言开发,性能优越。
功能丰富: 支持七层代理、会话保持、标记、路径转移等功能。
易于配置: 使用固定格式的配置文件,配置简单。


社区版和企业版

  社区版功能丰富,满足大部分需求;

  企业版提供更高级的功能,例如 24x7 支持服务、实时仪表盘、高级安全特性等。


三. HAProxy 的安装和服务信息

1、实验环境

主机名IP角色
cfy.LAPTOP-N69PF4KV]192.168.2.158客户端
haproxyeth0:172.25.254.100haproxy
webserver1eth0:192.168.0.10真实服务器(RS)
webserver2eth0:192.168.0.20真实服务器(RS)

1)安装并配置 Nginx

[root@webserver1 ~]#  dnf install nginx -y
[root@webserver1 ~]# echo webserver1 - 172.25.254.10 > /usr/share/nginx/html/index.html
[root@webserver1 ~]# systemctl enable --now nginx

 

2)在客户端测试


2、安装

提供软件包下载地址和安装命令。

[root@haproxy ~]# dnf install haproxy -y


 

3、haproxy的基本配置信息


1)global 配置: 解释 global 配置段中常用的参数


        nbproc: 开启的 HAProxy worker 进程数。
        nbthread: 每个进程开启的线程数。
        maxconn: 每个进程的最大并发连接数。
        maxsslconn: 每个进程 SSL 最大连接数。
        spread-checks: 后端服务器状态检查随机提前或延迟百分比时间。
        pidfile: 指定 pid 文件路径。
        log: 定义全局的 syslog 服务器。

全局配置
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
global
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     100000
    user        haproxy
    group       haproxy
    daemon

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

    # utilize system-wide crypto-policies
    ssl-default-bind-ciphers PROFILE=SYSTEM
    ssl-default-server-ciphers PROFILE=SYSTEM
    #nbproc 2     #启用多进程
    #cpu-map 1 0  #第一个线程用第一个核心
    #cpu-map 2 1  #第二个线程用第二个核心
    nbthread 2    #启用多线程

[root@haproxy ~]# systemctl restart haproxy.service


 2)proxies 配置: 解释 defaults、frontend、backend 和 listen 配置段中常用的参数


        mode: 指定 HAProxy 实例使用的连接协议,例如 http、tcp。
        option: 配置选项,例如 httplog、dontlognull、http-server-close、forwardfor 等。
        retries: 连接后端服务器失败次数。
        timeout: 设置各种超时时间,例如 http-request、queue、connect、client、server、http-        keep-alive、check 等。
        maxconn: 当前后端 server 的最大并发连接数。
        server: 定义后端 real server,必须指定 IP 和端口,可以设置权重、检查间隔、连续失效次数、连续有效次数等。

配置 HAProxy
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
分开写
frontend webcluster
    bind *:80
    mode http
    use_backend webcluster-host

backend webcluster-host
    balance roundrobin
    server web1 172.25.254.10:80
    server web2 172.25.254.20:80

合并写
listen webcluster
    bind *:80
    mode http
    balance roundrobin
    server web1 172.25.254.10:80
    server web2 172.25.254.20:80


[root@haproxy ~]# systemctl enable haproxy

配置 HAProxy 作为负载均衡器,将接收到的 HTTP 请求均匀分配到两台后端服务器(172.25.254.10 和 172.25.254.20)

3)测试

 若在webserver1中停止 Nginx 服务
[root@webserver1 ~]# systemctl stop nginx.service

 


四. HAProxy 的算法


1、静态算法: 按照事先定义好的规则进行调度,例如:


  1)static-rr: 基于权重的轮询调度,不支持动态调整权重。

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
listen webserver_80
    bind 172.25.254.100:80
    mode http
    balance static-rr
    server webserver1 172.25.254.10:80 weight 2 check inter 3s fall 3 rise 5
    server webserver2 172.25.254.20:80 weight 1 check inter 3s fall 3 rise 5

 2)first: 根据服务器在列表中的位置,自上而下进行调度,忽略权重设置。 

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
listen webserver_80
    bind 172.25.254.100:80
    mode http
    balance first
    server webserver1 172.25.254.10:80 maxconn 3 check inter 3s fall 3 rise 5
    server webserver2 172.25.254.20:80 check inter 3s fall 3 rise 5

测试:

webserver2能被调度到


2、动态算法: 基于后端服务器状态进行调度,例如:


        1)roundrobin: 基于权重的轮询动态调度算法,支持动态调整权重和慢启动。

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
listen webserver_80
    bind 172.25.254.100:80
    mode http
    balance roundrobin
    server webserver1 172.25.254.10:80 weight 1 check inter 3s fall 3 rise 5
    server webserver2 172.25.254.20:80 weight 1 check inter 3s fall 3 rise 5
动态调整权重 
[root@haproxy ~]# echo "set weight webserver_80/webserver1 2" | socat stdio
/var/lib/haproxy/haproxy.sock


        2)leastconn: 加权的最少连接的动态调度算法,根据当前连接最少的后端服务器进行优先调度,适合长连接场景。

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
listen webserver_80
    bind 172.25.254.100:80
    mode http
    balance leastconn
    server webserver1 172.25.254.10:80 weight 1 check inter 3s fall 3 rise 5
    server webserver2 172.25.25420:80 weight 1 check inter 3s fall 3 rise 5


3、其他算法


        1)source: 基于源地址 hash,可以将请求转发到同一台后端服务器,支持取模法和一致性 hash。

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
listen webserver_80
bind 172.25.254.100:80
    mode http
    balance source
    server webserver1 172.25.254.10:80 weight 1 check inter 3s fall 3 rise 5
    server webserver2 172.25.254.20:80 weight 1 check inter 3s fall 3 rise 5

测试:


        2)uri: 基于 URI hash,可以将请求转发到缓存服务器或 CDN 服务提供商。

uri 取模法配置示例
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg.
listen webserver_80
    bind 172.25.254.100:80
    mode http
    balance uri
    server webserver1 172.25.254.10:80 weight 1 check inter 3s fall 3 rise 5
    server webserver2 172.25.254.20:80 weight 1 check inter 3s fall 3 rise 5
    uri 一致性hash配置示例
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
listen webserver_80
    bind 172.25.254.100:80
    mode http
    balance uri
    hash-type consistent
    server webserver1 172.25.254.10:80 weight 1 check inter 3s fall 3 rise 5
    server webserver2 172.25.254.20:80 weight 1 check inter 3s fall 3 rise 5
 访问测试

访问不同的uri,确认可以将用户同样的请求转发至相同的服务器

[root@webserver1 ~]# echo 172.25.254.10 - index1.html > /usr/share/nginx/html/index1.html
[root@webserver1 ~]# echo 172.25.254.10 - index2.html > /usr/share/nginx/html/index2.html
[root@webserver1 ~]# echo 172.25.254.10 - index3.html > /usr/share/nginx/html/index3.html


[root@webserver2 ~]# echo 172.25.254.20 - index1.html > /usr/share/nginx/html/index1.html
[root@webserver2 ~]# echo 172.25.254.20 - index2.html > /usr/share/nginx/html/index2.html
[root@webserver2 ~]# echo 172.25.254.20 - index3.html > /usr/share/nginx/html/index3.html


       3)url_param: 基于 URL 参数 hash,可以追踪用户行为,确保来自同一个用户的请求始终发往同一个后端服务器。

一致性hash配置示例
[root@haproxy ~]#  vim /etc/haproxy/haproxy.cfg
listen webserver_80
    bind 172.25.254.100:80
    mode http
    balance url_param name,userid  #支持对多个url_param hash
    hash-type consistent
    server webserver1 172.25.254.10:80 weight 1 check inter 3s fall 3 rise 5
    server webserver2 172.25.254.20:80 weight 1 check inter 3s fall 3 rise 5

测试访问:


        4)hdr: 基于 HTTP 头部 hash,可以基于客户端浏览器类型进行调度。

一致性hash配置示例:
[root@haproxy ~]#  vim /etc/haproxy/haproxy.cfg
listen webserver_80
    bind 172.25.254.100:80
    mode http
    balance hdr(User-Agent)
    hash-type consistent
    server webserver1 172.25.254.10:80 weight 1 check inter 3s fall 3 rise 5
    server webserver2 172.25.254.20:80 weight 1 check inter 3s fall 3 rise 5
测试访问:
[cfy.LAPTOP-N69PF4KV] ⮞  curl -v 172.25.254.100
[cfy.LAPTOP-N69PF4KV] ⮞  curl -vA "firefox" 172.25.254.100
[cfy.LAPTOP-N69PF4KV] ⮞  curl -vA "sougou" 172.25.254.100


五. 高级功能及配置

介绍HAProxy高级配置及实用案例


1、基于 cookie 的会话保持

通过 cookie 保持用户会话,提高用户体验。

配置示例:

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
listen webserver_80
    bind 172.25.254.100:80
    option forwardfor
    mode http
    balance roundrobin
    cookie WEBCOOKIE insert nocache indirect
    server webserver1 192.168.0.10:80 cookie web1 weight 1 check inter 3s fall 3 rise 5
    server webserver2 192.168.0.20:80 cookie web2 weight 1 check inter 3s fall 3 rise 5

验证cookie信息:

[cfy.LAPTOP-N69PF4KV] ⮞ curl -b WEBCOOKIE=web1 172.25.254.100
webserver1 - 172.25.254.10
[cfy.LAPTOP-N69PF4KV] ⮞ curl -b WEBCOOKIE=web2 172.25.254.100
webserver2 - 172.25.254.20


2、HAProxy 状态页

通过 web 界面查看 HAProxy 的运行状态,例如服务器状态、连接数、流量统计等。

启用状态页

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
listen stats:
    mode http
    bind 0.0.0.0:8888
    stats enable
    log global
    stats uri /status     #自定义stats page uri
    stats auth cfy:cfy    #认证,此行可以出现多次


3、IP 透传

四层IP透传

将客户端真实 IP 地址透传给后端服务器,用于访问统计和安全防护。

#nginx 配置:在访问日志中通过变量$proxy_protocol_addr 记录透传过来的客户端IP
[root@rs1 ~]# vim /etc/nginx/nginx.conf
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request"'
                '"$proxy_protocol_addr"'
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for"';

server {
listen 80 proxy_protocol; #启用此项,将无法直接访问此网站,只能通过四层代理
访问
listen [::]:80;
server_name _;
root /usr/share/nginx/html;

}
}

#修改haproxy
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg

listen webserver_80
bind 172.25.254.100:80
mode tcp
balance roundrobin
server webserver1 172.25.254.10:80 send-proxy weight 1 check inter 3s fall 3
rise 5


4、ACL

基于包过滤的访问控制技术,可以根据设定的条件对数据包进行过滤,例如基于源地址、源端口、目标地址、目标端口、请求方法、URL、文件后缀等信息。

ACL示例-域名匹配

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
frontend testacl
    bind :80
    mode http
    ########### ACL settings #######################
    acl web_host hdr_dom(host) www.cfy.org

    ########### host ###########################
    use_backend cfy_host if web_host

    ########### default server ###################
    default_backend default_webserver

backend cfy_host
    mode http
    server web1 172.25.254.10:80 check weight 1 inter 3s fall 3 rise 5
    server web2 172.25.254.20:80 check weight 1 inter 3s fall 3 rise 5

backend default_webserver
    mode http
    server web1 172.25.254.10:80 check weight 1 inter 3s fall 3 rise 5

测试结果:


5、自定义 HAProxy 错误界面

对指定的报错进行重定向,进行优雅的显示错误页面。

基于自定义的错误页面文件

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
defaults
    mode http

    timeout client 1m
    timeout server 1m
    timeout http-keep-alive 10s
    timeout check 10s
    maxconn 1000000

    errorfile 503 /haproxy/errorpages/503page.http

[root@haproxy ~]# vim /haproxy/errorpages/503page.http


6、HAProxy 四层负载

针对除 HTTP 以外的 TCP 协议应用服务访问的应用场景,例如 MySQL、Redis、Memcache、RabbitMQ 等。

对 MySQL 服务实现四层负载

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
listen mysql_port
    bind :3306
    mode tcp
    balance leastconn
    server mysql1 172.25.254.10:3306 check
    server mysql2 172.25.254.20:3306 check
   在后端服务器安装和配置mariadb服务
[root@webserver1 ~]#  yum install mariadb-server -y
[root@webserver2 ~]#  yum install mariadb-server -y

[root@webserver1 ~]# vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
server-id=1

[root@webserver2 ~]# vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
server-id=2

启动mariadb服务,并在MySQL数据库中创建一个新用户,并授予该用户对所有数据库和表的完全访问权限,用户名是cfy,密码是1
[root@webserver1 ~]# systemctl start mariadb
[root@webserver2 ~]# systemctl start mariadb


[root@webserver1 ~]#  mysql -e "grant all on *.* to cfy@'%' identified by '1';"
[root@webserver2 ~]#  mysql -e "grant all on *.* to cfy@'%' identified by '1';"

测试
[cfy.LAPTOP-N69PF4KV] ⮞ mysql -ucfy -p1 -h 172.25.254.100 -e "show variables like 'hostname'"
[cfy.LAPTOP-N69PF4KV] ⮞ mysql -ucfy -p1 -h 172.25.254.100 -e  "select @@server_id"


7、HAProxy https 实现

配置 HAProxy 支持 https 协议,实现证书安全。

https配置示例

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
frontend webserver
    bind *:80
    redirect scheme https if !{ ssl_fc }
    mode http
    use_backend webcluster
frontend webserver-https
    bind *:443 ssl crt /etc/haproxy/cfy.org.pem
    mode http
    use_backend webcluster
backend webcluster
    mode http
    balance roundrobin
    server web1 172.25.254.10:80 check inter 3s fall 3 rise 5
    server web2 172.25.254.20:80 check inter 3s fall 3 rise 5

六、建议

在实际部署 HAProxy 时,需要根据具体的应用场景选择合适的配置和算法。
可以使用 socat 工具动态调整 HAProxy 的配置,例如服务器权重和状态。
可以使用 HAProxy 的状态页监控 HAProxy 的运行状态,及时发现并解决问题。
希望这份更详细的解读能够帮助您更好地理解 HAProxy,并将其应用于您的项目中。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【项目实战】C++视频共享点播系统

目录 一、项目介绍 1.1 对视频共享点播系统的认识 1.2服务端程序负责功能 1.3 服务端功能模块划分 1.4 项目界面演示 1.5预备知识 二.环境搭建 2.1 安装 Jsoncpp 库 2.1.1 使用jsoncpp 2.2 引入httplib库 2.2.1 安装Git(如果你的系统尚未安装Git&#xf…

基于Hadoop的共享单车分布式存储与计算

文章目录 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主项目介绍研究背景研究目的和意义国内外研究现状总体研究思路数据可视化每文一语 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主 项目介绍 共享单车的普及带…

Elasticsearch:使用 ES|QL 进行地理空间搜索

作者:来自 Elastic Craig Taverner 多年来,Elasticsearch 一直具有强大的地理空间搜索和分析功能,但其 API 与典型的 GIS 用户习惯的 API 截然不同。在过去的一年中,我们添加了 ES|QL 查询语言,这是一种管道查询语言&a…

React原理之React整体渲染流程

前置知识:深度优先搜索(DFS)、Fiber 节点 在上一篇 React原理篇之 React 整体架构解读中,提到了 Fiber 架构中的几个核心概念: Scheduler(调度器):根据任务的优先级安排任务执行顺序。Reconciler&#xff…

CUDA-MODE 第一课课后实战(下)

我的课程笔记,欢迎关注:https://github.com/BBuf/how-to-optim-algorithm-in-cuda/tree/master/cuda-mode CUDA-MODE 第一课课后实战(下) Nsight Compute Profile结果分析 继续对Nsight Compute的Profile结果进行分析&#xff0…

PyQT 串口改动每次点开时更新串口信息

class MainWindow(QWidget, Ui_Form):def __init__(self):super().__init__(parentNone)self.setupUi(self)self.comboBox.installEventFilter(self) # 加载事件过滤器self.comboBox.addItems(get_ports())def eventFilter(self, obj, event): # 定义事件过滤器if isinstance(o…

前端容器化部署:解决重启容器时的静态资源丢失问题

文章目录 什么是前端容器化?重启容器时静态资源丢失的问题解决静态资源丢失的方案1. 使用持久化卷创建和挂载卷使用Docker Compose定义卷 2. 使用对象存储将静态资源上传到对象存储 3. 使用构建时持久化使用CI/CD管道 4. 使用动态加载和缓存使用浏览器缓存使用服务端…

Java 8日期时间API革新:从Date到LocalDate、LocalTime与LocalDateTime的转型与优势解析

文章目录 前言一、基础介绍1.Date2.LocalDate3.LocalTime4.LocalDateTime 二、区别三、推荐场景四、推荐原因总结 前言 在Java的发展历程中,日期和时间的处理一直是开发者们关注的焦点。从早期的java.util.Date类到java.util.Calendar接口,虽然为日期时间…

Linux从0到1——进程池

Linux从0到1——进程池 1. 进程池的概念2. 进程池实现思路3. 进程池的代码实现3.1 创建管道,创建子进程3.2 封装任务3.3 Work接口3.4 发送任务3.5 回收资源,关闭管道(重点)3.6 改造CreatChannels接口 4. 完整代码 1. 进程池的概念…

数据结构面试-核心概念-问题理解

目录 1.数据结构及其分类 2.时间复杂度与空间复杂度及大O表示法 3.循环队列及其判断队空和队满的方法 4.栈与队列在计算机系统中的应用 5.串的模式匹配算法 6.线索二叉树、二叉搜索树、平衡二叉树 7.哈夫曼树与哈夫曼编码 8.DFS与BFS 9.最小生成树及其构建算法 10.最短…

谭晓生解读:AI如何重塑网络安全的未来?

导语 | 当前,对网络安全而言,每一次新的信息技术浪潮都蕴含着巨大机会,同时也意味着巨大的挑战。大模型的发展,是带来了更大的AI安全风险,还是将赋能提升网络安全呢?网络安全正在迎来一场重大范式转移&…

【网络编程】TCP通信基础模型实现

tcpSer.c #include <myhead.h> #define SER_IP "192.168.119.143" // 设置IP地址 #define SER_PORT 6666 // 设置端口号 int main(int argc, const char *argv[]) {// 1.创建socketint serfd socket(AF_INET, SOCK_STREAM, 0);// 参数1表示ipv4// 参数2表…

基于redis的zset实现排行榜

文章目录 &#x1f31e; Sun Frame&#xff1a;SpringBoot 的轻量级开发框架&#xff08;个人开源项目推荐&#xff09;&#x1f31f; 亮点功能&#x1f4e6; spring cloud模块概览常用工具 &#x1f517; 更多信息1.sun-club-subject集成redis1.sun-club-domain引入依赖2.sun-…

Linux 内核源码分析---内核 Netlink 套接字

linux 内核一直存在的一个严重问题就是内核态和用户态的交互的问题&#xff0c;对于这个问题内核大佬们一直在研究各种方法&#xff0c;想让内核和用户态交互能够安全高效的进行。如系统调用&#xff0c;proc&#xff0c;sysfs 等内存文件系统&#xff0c;但是这些方式一般都比…

从今年的计算机视觉比赛看风向

记第一次参加CV比赛的经历-长三角&#xff08;芜湖&#xff09;人工智能视觉算法大赛-CSDN博客 去年参赛的记录里说了&#xff1a; 最近&#xff0c;同样的由芜湖举办的比赛又上线了&#xff0c;果然&#xff1a; 2023年是这些赛题&#xff0c;典型的CV&#xff1a; 今年变成…

如何高效记录并整理编程学习笔记?一个好的笔记软件往往可以达到事半功倍的学习效果 φ(* ̄0 ̄)

在编程学习的旅程中&#xff0c;良好的笔记习惯不仅是知识积累的基石&#xff0c;更是提升学习效率、巩固学习成果的关键。选择合适的笔记工具&#xff0c;并掌握其高效使用方法&#xff0c;对于每一位编程学习者而言都至关重要。本文将从笔记工具的选择角度出发&#xff0c;探…

Linux 中断机制(一)之中断和异常

目录 一、什么是中断1、概述2、中断的分类 二、中断和异常1、中断和异常2、中断的上下部3、异常4、APIC5、中断描述符表 三、软件实现 一、什么是中断 1、概述 中断&#xff08;interrupt&#xff09;是指在 CPU 正常运行期间&#xff0c; 由外部或内部事件引起的一种机制。 …

Miracast ——随时随地在Wi-Fi®设备上分享高清内容

Miracast 是一种无线显示技术&#xff0c;由 Wi-Fi 联盟开发&#xff0c;允许设备之间通过无线方式分享多媒体内容。 Wi-Fi CERTIFIED Miracast™支持在Miracast设备之间无缝显示多媒体内容。Miracast使用户能够通过无线连接在Wi-Fi设备之间分享多媒体内容&#xff0c;包括高分…

六西格玛绿带培训对企业有什么帮助?

六西格玛&#xff0c;这一源自摩托罗拉、风靡全球的管理哲学和方法论&#xff0c;以其严谨的数据分析、持续改进的流程优化理念&#xff0c;帮助无数企业实现了从“好”到“卓越”的跨越。而六西格玛绿带&#xff0c;作为这一体系中的中坚力量&#xff0c;是连接高层管理者与一…

Linux--C语言之分支结构

文章目录 一、分支结构&#xff08;一&#xff09;概念&#xff08;二&#xff09;条件构建1.关系表达式&#xff1a;2.逻辑表达式&#xff1a;3.常量/变量&#xff1a;值是否非0&#xff0c;取值&#xff08;0|1&#xff09; &#xff08;三&#xff09;选择结构的形式1.单分支…