当前位置: 首页 > news >正文

一招鲜吃遍天之Haproxy集群

四层:

  • LVS:Linux Virtual Server

  • Nginx:

  • HAProxy:High Availability Proxy

七层:

  • HAProxy

  • Nginx

硬件:

  • F5 F5 | 多云安全和应用交付

  • Netscaler NetScaler: Application Delivery at Scale

  • Array 北京华耀科技有限公司

  • 深信服 深信服 - 让每个用户的数字化更简单、更安全-深信服

  • 北京灵州 产品中心 > 链路负载均衡_北京灵州网络技术有限公司

一 HAProxy介绍

HAProxy是法国开发者威利塔罗(Willy Tarreau)在2000年使用C语言开发的一个开源软件,是一款具备高并发(一万以上)、高性能的TCP和HTTP负载均衡器,支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计,目前最新TLS版本为2.2。

HAProxy是可提供高可用性、负载均衡以及基于TcP和HTTP应用的代理,是免费、快速并且可靠的一种解决方案。HProxy非常适用于并发大(并发达1w以上) web站点,这些站点通常又需要会话保持或七层处理。HAProxy的运行模式使得它可以很简单安全的整合至当前的架构中,同时可以保护web服务器不被暴露到网络上。

支持功能

  • TCP 和 HTTP反向代理

  • SSL/TSL服务器

  • 可以针对HTTP请求添加cookie,进行路由后端服务器

  • 可平衡负载至后端服务器,并支持持久连接

  • 支持所有主服务器故障切换至备用服务器 keepalive

  • 支持专用端口实现监控服务

  • 支持停止接受新连接请求,而不影响现有连接

  • 可以在双向添加,修改或删除HTTP报文首部字段

  • 响应报文压缩

  • 支持基于pattern实现连接请求的访问控制

  • 通过特定的URI(url)为授权用户提供详细的状态信息

二 HAProxy的主要特性有:

  1. 可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美;

  2. 最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s;

  3. 支持多达8种负载均衡算法,同时也支持会话保持;

  4. 支持虚拟机主机功能,从而实现web负载均衡更加灵活;

  5. 支持连接拒绝、全透明代理等独特的功能;

  6. 拥有强大的ACL支持,用于访问控制; sendfile

  7. 其独特的弹性二x树数据结构,使数据结构的复杂性上升到了0(1),即数据的查寻速度不会随着数据条日的增加而速度有所下降;·支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源浪费,让多个请求在一个tcp连接中完成;

  8. 支持TCP加速,零复制功能,类似于mmap机制;

  9. 支持响应池(response buffering) ;

  10. 支持RDP协议;

  11. 基于源的粘性,类似nginx的ip hash功能,把来自同一客户端的请求在一定时间内始终调度到上游的同一服务器;·更好统计数据接口,其web接口显示后端集群中各个服务器的接收、发送、拒绝、错误等数据的统计信息;

  12. 详细的健康状态检测,web接口中有关于对上游服务器的健康检测状态,并提供了一定的管理功能;

  13. 基于流量的健康评估机制;

  14. 基于http认证;

  15. 基于命令行的管理接口;

  16. 日志分析器,可对日志进行分析

三 HAProxy负载均衡策略非常多,常见的有如下8种:

官方文档:HAProxy version 2.4.15 - Configuration Manual

静态调度算法:不管后端,按照调度器的算法进行 分配

动态调度算法:会考虑后端服务器的负载情况

(1) roundrobin,表示简单的轮询 rr

(2) static-rr,表示根据权重

(3) leastconn,表示最少连接者先处理

( 4) source,表示根据请求源IP

(5) uri,表示根据请求的URI,做cdn需使用;

(6) url param,表示根据请求的URl参数' balance url param’requires an URL parameter name

(7) hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;

(8) rdp-cookie (name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。

四 LVS、Nginx、HAproxy的区别:

  1. IVS基于Linux操作系统实现软负载均衡,而HAProxy和Nginx是基于第三方应用实现的软负载均衡;

  2. LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而HAProxy和Nginx都可以实现4层和7层技术,HAProxy可提供TCP和HTTP应用的负载均衡综合解决方案;

  3. LVs因为工作在TCP模型的第四层,其状态监测功能单一,而HAProxy在状态监测方面功能更丰富、强大,可支持端口、URI等多种状态检测方式;

  4. HAProxy功能强大,但整体性能低于4层模式的IVS负载均衡。

  5. Ngrinx主要用于web服务器或缓存服务器。Nginx的upstream模块虽然也支持群集功能,但是对群集节点健康检查功能不强,性能没有Haproxy好。

五 安装haproxy

另一方面

5.1 yum 安装

CentOS 7 的默认的base仓库中包含haproxy的安装包文件,但是版本比较旧,是1.5.18的版本,距离当前版本已经有较长时间没有更新,由于版本比较旧所以有很多功能不支持,如果对功能和性能没有要求可以使用此版本,否则推荐使用新版本。

5.2 第三方 rpm -ivh 安装包

官方没有提供rpm相关的包,可以通过第三方仓库的rpm包

从第三方网站下载rpm包:https://pkgs.org/download/haproxy

基于互联网第三方仓库在线安装

yum install centos-release-scl-rh 
yum install rh-haproxy18-haproxy

systemctl start rh-haproxy18-haproxy.service        开启

5.3 编译安装

1.5版 基础功能 稳定

2.0 新特性

编译安装HAProxy 2.0 LTS版本,更多源码包下载地址:http://www.haproxy.org/download/

5.3.1 解决lua环境

HAProxy 支持基于lua实现功能扩展,lua是一种小巧的脚本语言,于1993年由巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组开发,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

Lua 官网:www.lua.org

Lua 应用场景

  • 游戏开发

  • 独立应用脚本

  • Web 应用脚本

  • 扩展和数据库插件,如MySQL Proxy

  • 安全系统,如入侵检测系统

由于CentOS7 之前版本自带的lua版本比较低并不符合HAProxy要求的lua最低版本(5.3)的要求,因此需要编译安装较新版本的lua环境,然后才能编译安装HAProxy,过程如下:

#当前系统版本
[root@centos7 ~]#lua -v 
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Riohttps://www.lua.org/ftp/lua-5.4.6.tar.gz  官网curl -R -O http://www.lua.org/ftp/lua-5.4.6.tar.gz
tar zxf lua-5.4.6.tar.gz
cd lua-5.4.6
make all test
cd  src
./lua -v /usr/local/lua/src/ 

另一种方法
[root@mcb-11-7 opt]# 
[root@mcb-11-7 opt]# curl -L -R -O http://www.lua.org/ftp/lua-5.4.6.tar.gz% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed
100   169  100   169    0     0    180      0 --:--:-- --:--:-- --:--:--   180
100  354k  100  354k    0     0   5966      0  0:01:00  0:01:00 --:--:--  8532
[root@mcb-11-7 opt]# tar zxf lua-5.4.6.tar.gz
[root@mcb-11-7 opt]# cd lua-5.4.6
[root@mcb-11-7 lua-5.4.6]# make all 
make[1]: 进入目录“/opt/lua-5.4.6/src”
Guessing Linux
make[2]: 进入目录“/opt/lua-5.4.6/src”
make all SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl"
make[3]: 进入目录“/opt/lua-5.4.6/src”
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o lapi.o lapi.c
make[3]: gcc:命令未找到
make[3]: *** [lapi.o] 错误 127
make[3]: 离开目录“/opt/lua-5.4.6/src”
make[2]: *** [linux-noreadline] 错误 2
make[2]: 离开目录“/opt/lua-5.4.6/src”
make[1]: *** [guess] 错误 2
make[1]: 离开目录“/opt/lua-5.4.6/src”
make: *** [guess] 错误 2
[root@mcb-11-7 lua-5.4.6]# yum -y install gcc openssl-devel pcre-devel systemd-devel
已加载插件:fastestmirror, langpacks
base                                                                            | 3.6 kB  00:00:00     
extras                                                                          | 2.9 kB  00:00:00     
updates                                                                         | 2.9 kB  00:00:00     
Loading mirror speeds from cached hostfile* base: mirrors.nju.edu.cn* extras: mirrors.nju.edu.cn* updates: mirrors.bupt.edu.cn
5.3.2编译安装haproxy
yum -y install gcc openssl-devel pcre-devel systemd-devel
#安装依赖环境tar xf haproxy-2.4.25.tar.gz 
cd   haproxy-2.4.25.tar.gz #查看安装方法
[root@centos7 haproxy-2.1.3]#ll Makefile 
-rw-rw-r-- 1 root root 40812 Feb 12 23:18 Makefile
[root@centos7 haproxy-2.1.3]#cat README 
[root@centos7 haproxy-2.1.3]#cat INSTALL#做软连接
ln -s lua-5.4.4 luamake ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_LUA=1 LUA_INC=/data/lua/src/  LUA_LIB=/data/lua/src/#指定安装目录
make install PREFIX=/apps/haproxy#做软连接 
ln -s /apps/haproxy/sbin/haproxy /usr/sbin/#haproxy  -v  查看版本

指定安装目录

 

把haproxy交给systemd管理

tee /usr/lib/systemd/system/haproxy.service  <<eof[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target[Service]
ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg  -c -q
ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID
LimitNOFILE=100000[Install]
WantedBy=multi-user.targeteof

 

 

mkdir /etc/haproxy
vim /etc/haproxy/haproxy.cfg
global
maxconn 100000
chroot /apps/haproxy
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
uid 99
gid 99
daemon
#nbproc 4
#cpu-map 1 0
#cpu-map 2 1
#cpu-map 3 2
#cpu-map 4 3
pidfile /var/lib/haproxy/haproxy.pid
log 127.0.0.1 local3 infodefaults
option http-keep-alive
option  forwardfor
maxconn 100000
mode http
timeout connect 300000ms
timeout client  300000ms
timeout server  300000mslisten statsmode httpbind 0.0.0.0:9999stats enablelog globalstats uri     /haproxy-statusstats auth    haadmin:123456listen  web_portbind 0.0.0.0:8899mode httplog globalserver web1  127.0.0.1:8080  check inter 3000 fall 2 rise 5mkdir  /var/lib/haproxy              #pid 文件路径[root@centos7 ~]# useradd -r -s /sbin/nologin  haproxy   #设置用户和目录权限[root@centos7 ~]# systemctl enable --now haproxy

 

 

六 配置文件详解

官方地址配置文件官方帮助文档

http://cbonte.github.io/haproxy-dconv/http://cbonte.github.io/haproxy-dconv/2.4/configuration.htmlhttps://www.haproxy.org/download/2.5/doc/configuration.txt
chroot    #锁定运行目录
deamon    #以守护进程运行,后台运行
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin process 1   #socket文件
user, group, uid, gid  #运行haproxy的用户身份
nbproc    n     #开启的haproxy work 进程数,默认进程数是一个
#nbthread  1    #和多进程 nbproc配置互斥(版本有关,CentOS8的haproxy1.8无此问题),指定每个haproxy进程开启的线程数,默认为每个进程一个线程
#如果同时启用nbproc和nbthread 会出现以下日志的错误,无法启动服务Apr  714:46:23 haproxy haproxy: [ALERT] 097/144623 (1454) : config : cannot enable multiple processes if multiple threads are configured. Please use either nbproc or nbthread but not both.cpu-map 1  0     #绑定haproxy worker 进程至指定CPU,将第1个work进程绑定至0号CPU
cpu-map 2  1     #绑定haproxy worker 进程至指定CPU,将第2个work进程绑定至1  号CPU#ps axo  pid,cmd,psr  |grep haproxy
maxconn  n      #每个haproxy进程的最大并发连接数
maxsslconn  n   #每个haproxy进程ssl最大连接数,用于haproxy配置了证书的场景下
maxconnrate n   #每个进程每秒创建的最大连接数量
spread-checks n #后端server状态check随机提前或延迟百分比时间,建议2-5(20%-50%)之间,默认值0
pidfile         #指定pid文件路径
log 127.0.0.1  local2 info #定义全局的syslog服务器;日志服务器需要开启UDP协议,最多可以定义两个defaultslog     global    	#引入global定义的日志格式mode    http      	#模式为http(7层代理http,4层代理tcp)option  httplog	   	#日志类别为http日志格式		 	option  dontlognull	#不记录健康检查日志信息retries 3           #检查节点服务器失败次数,连续达到3次,则反馈不可用 redispatch			#当服务器负载很高时,自动结束当前队列处理比较久的连接maxconn 2000		#最大连接数,此处的数值不能大于全局里的数值contimeout      5000  #设置连接超时时间,默认单位是毫秒clitimeout      50000 #设置客户端超时时间,默认单位是毫秒srvtimeout      50000 #设置服务器超时时间,默认单位是毫秒#以下是新版本中的
timeout http-request 10s  	#默认http请求超时时间
timeout queue 1m 			#默认队列超时时间	
timeout connect 10s 		#默认连接超时时间,新版本中替代
timeout client 1m
timeout server 1m
timeout http-keep-alive
timeout check 10sdefaults [<name>] #默认配置项,针对以下的frontend、backend和listen生效,可以多个name也可以没有name
frontend <name>   #前端servername,类似于Nginx的一个虚拟主机 server和LVS服务集群。
backend <name>   #后端服务器组,等于nginx的upstream和LVS中的RS服务器
listen   <name>   #将frontend和backend合并在一起配置,相对于frontend和backend配置更简
洁,生产常用使用listen替换 frontend和backend的配置方式,可以简化设置,通常只用于TCP协议的应用
#官网业务访问入口
listen  webcluster 0.0.0.0:80option httpchk GET /test.htmlbalance roundrobinserver  inst1 192.168.91.102:80 check inter 2000 fall 3server  inst2 192.168.91.103:80 check inter 2000 fall 3

HAProxy 的配置文件haproxy.cfg由两大部分组成,分别是global和proxies部分

  • global:全局配置段

进程及安全配置相关的参数
性能调整相关参数
Debug参数

6.2proxies:代理配置段
defaults:为frontend, backend, listen提供默认配置frontend:前端,相当于nginx中的server {}backend:后端,相当于nginx中的upstream {}listen:同时拥有前端和后端配置,配置简单,生产推荐使用

6.1global配置

官方文档:http://cbonte.github.io/haproxy-dconv/2.4/configuration.html#3
chroot #锁定运行目录,类似于  ftp中的禁锢
deamon #以守护进程运行
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin process 1   #socket文件 进程件通信
user, group, uid, gid  #运行haproxy的用户身份nbproc   n #开启的haproxy worker 进程数,默认进程数是一个,保持与 淳朴个数相同
#nbthread 1 #和多进程 nbproc配置互斥(版本有关,CentOS8的haproxy1.8无此问题),指定每个haproxy进程开启的线程数,默认为每个进程一个线程
#如果同时启用nbproc和nbthread 会出现以下日志的错误,无法启动服务Apr  7 14:46:23 haproxy haproxy: [ALERT] 097/144623 (1454) : config : cannot 
enable multiple processes if multiple threads are configured. Please use either 
nbproc or nbthread but not both.cpu-map 1 0   		#绑定haproxy worker 进程至指定CPU,将第1个work进程绑定至0号CPU
cpu-map 2 1     	#绑定haproxy worker 进程至指定CPU,将第2个work进程绑定至1号CPU
maxconn n   		#每个haproxy进程的最大并发连接数
maxsslconn n   		#每个haproxy进程ssl最大连接数,用于haproxy配置了证书的场景下
maxconnrate n   	#每个进程每秒创建的最大连接数量
spread-checks n 	#后端server状态check随机提前或延迟百分比时间,建议2-5(20%-50%)之间,默认值0
pidfile 			#指定pid文件路径
log 127.0.0.1 local2 info #定义全局的syslog服务器;日志服务器需要开启UDP协议,最多可以定义两个
6.1.1状态页
listen statsmode httpbind 0.0.0.0:9999stats enablelog globalstats uri     /haproxy-statusstats auth    haadmin:123456http://192.168.91.100:9999/haproxy-status

浏览器访问一下

6.1.2 指定进程线程个数

进程与线程会有冲突

nbproc    n     #开启的haproxy work 进程数,默认进程数是一个#nbthread  1    #和多进程 nbproc配置互斥(版本有关,CentOS8的haproxy1.8无此问题),指定每个
haproxy进程开启的线程数,默认为每个进程一个线程
#如果同时启用nbproc和nbthread 会出现以下日志的错误,无法启动服务Apr  714:46:23 haproxy haproxy: [ALERT] 097/144623 (1454) : config : cannot enable multiple processes if multiple threads are configured. Please use either nbproc or nbthread but not both.

[root@mcb-11 haproxy-2.4.25]# vim /etc/haproxy/haproxy.cfg 

6.1.3 cpu亲缘性
nbproc  2cpu-map 1  0     #绑定haproxy worker 进程至指定CPU,将第1个work进程绑定至0号CPUcpu-map 2  1     #绑定haproxy worker 进程至指定CPU,将第2个work进程绑定至1  号CPUps axo  pid,cmd,psr  |grep haproxy

对比一下

6.1.4多进程和线程

范例:多进程和socket文件

 需要修改一下配置文件

 

检测 

6.1. 5 日志

HAproxy本身不记录客户端的访问日志.此外为减少服务器负载,一般生产中HAProxy不记录日志.也可以配置HAProxy利用rsyslog服务记录日志到指定日志文件中

例子: 传给远端服务器

①本机服务器配置

②7-5远端要开启

③浏览器刷新 检测

6.2Proxies配置

官方文档:HAProxy version 2.1.12 - Configuration Manual

defaults [<name>] #默认配置项,针对以下的frontend、backend和listen生效,可以多个name也可以没有name
frontend <name>   #前端servername,类似于Nginx的一个虚拟主机 server和LVS服务集群。
backend <name>   #后端服务器组,等于nginx的upstream和LVS中的RS服务器
listen  <name>   #将frontend和backend合并在一起配置,相对于frontend和backend配置更简洁,生产常用

注意:name字段只能使用大小写字母,数字,‘-’(dash),'_‘(underscore),'.' (dot)和 ':'(colon),并且严格区分大小写  

6.2.1 Proxies配置-defaults

defaults 配置参数:

5.2.2Proxies配置-listen 简化配置

使用listen替换 frontend和backend的配置方式,可以简化设置,通常只用于TCP协议的应用

5.2.3 Proxies配置-frontend

frontend 配置参数:

5.2.4Proxies配置-backend

定义一组后端服务器,backend服务器将被frontend进行调用。

注意: backend 的名称必须唯一,并且必须在listen或frontend中事先定义才可以使用,否则服务无法启动

server 配置

七  实际操作

环境准备

实验1:

11-11haproxy服务器

11-7客户机

11-5  11-4  后端服务器

7-11haproxy服务器

11-5后端服务器

7-4后端服务器

 

检测

 

实操模拟 :开启健康性检查

 

再去检测 

原理:通过抓包看到实际上是haproxy三次握手没有成功,来进行的健康检查

80端口是haproxy代为监听,如果有Web服务的请求将转到后端真实服务器,不然就会丢包

实验3:haproxy代理设置,用前后端的方法设置

开启之后

客户机7-7再去服务

 

相关文章:

一招鲜吃遍天之Haproxy集群

四层&#xff1a; LVS&#xff1a;Linux Virtual Server Nginx&#xff1a; HAProxy&#xff1a;High Availability Proxy 七层: HAProxy Nginx 硬件&#xff1a; F5 F5 | 多云安全和应用交付 Netscaler NetScaler: Application Delivery at Scale Array 北京华耀科技…...

数据库的筛选条件

【一】筛选过滤条件 【1】完整的查询语句 -- 查询当前表中的全部数据select * from 表名 where 筛选条件;​-- 查询当前表中的指定字段的数据select 字段名,字段名 from 表名 where 筛选条件;# 执行顺序from where select ​select 你选择的列1, 你选择的列2, ... from 查询的…...

MySQL学习笔记(一)数据库事务隔离级别与多版本并发控制(MVCC)

一、数据库事务隔离级别 数据库事务的隔离级别有4种&#xff0c;由低到高分别为Read uncommitted &#xff08;读未提交&#xff09;、Read committed&#xff08;读提交&#xff09; 、Repeatable read&#xff08;可重复读&#xff09; 、Serializable &#xff08;串行化&a…...

如何在Linux上为PyCharm创建和配置Desktop Entry

在Linux操作系统中&#xff0c;.desktop 文件是一种桌面条目文件&#xff0c;用于在图形用户界面中添加程序快捷方式。本文将指导您如何为PyCharm IDE创建和配置一个 .desktop 文件&#xff0c;从而能够通过应用程序菜单或桌面图标快速启动PyCharm。 步骤 1: 确定PyCharm安装路…...

Igraph入门指南 4

二、图的创建 图分有向图和无向图&#xff0c;所以图的创建有各自的实现方式。 1、手工创建图&#xff1a; 1-1 通过文本创建&#xff1a;graph_from_literal 通过每项提供两个顶点名&#xff08;或ID号&#xff09;作为一条边的格式&#xff0c;手动创建图&#xff0c;顶点…...

外包干了30天,技术明显退步。。

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 这次来聊一个大家可能也比较关心的问题&#xff0c;那就是就业城市选择的问题。而谈到这个问题&a…...

数据库 — 增删查改

一、操作数据库、表 显示 show databases;创建 create database xxx;使用 use xxx; 删除 drop database xxx;查看表&#xff1b; show tables; 查看表结构 desc 表名; 创建 create table 表名(字段1 类型1&#xff0c;字段2 类型2&#xff0c;.... ); 删除 drop table 表名; 二…...

eclipse搭建java web项目

准备条件 eclipsejdk1.8 &#xff08;配置jdk环境&#xff09;apache-tomcat-8.5.97&#xff08;记住安装位置&#xff09; 一 点击完成 开始创建javaweb项目 import java.io.IOException; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.s…...

gitlab-ci_cd语法CICD

工作原理 1、将代码托管在git 2、在项目根目录创建ci文件.gitlan-ci.yml 在文件中指定构建&#xff0c;测试和部署脚本 3、gitlab将检测到他并使用名为git Runner的工具运行脚本 4、脚本被分组为作业&#xff0c;他们共同组成了一个管道gitlab-ci的脚本执行&#xff0c;需要自…...

python 蓝桥杯之动态规划入门

文章目录 DFS滑行&#xff08;DFS 记忆搜索&#xff09; 思路&#xff1a; 要思考回溯怎么写&#xff08;入参与返回值、递归到哪里&#xff0c;递归的边界和入口&#xff09; DFS 滑行&#xff08;DFS 记忆搜索&#xff09; 代码分析&#xff1a; 学会将输入的数据用二维列表…...

[LeetCode][102]二叉树的层序遍历——遍历结果中每一层明显区分

题目 102. 二叉树的层序遍历 给定二叉树的根节点 root&#xff0c;返回节点值的层序遍历结果。即逐层地&#xff0c;从左到右访问所有节点。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]] 示例 2&#xff1a; 输入…...

GIS之深度学习10:运行Faster RCNN算法

&#xff08;未完成&#xff0c;待补充&#xff09; 获取Faster RCNN源码 &#xff08;开源的很多&#xff0c;论文里也有&#xff0c;在这里不多赘述&#xff09; 替换自己的数据集&#xff08;图片标签文件&#xff09; &#xff08;需要使用labeling生成标签文件&#xf…...

appium2的一些配置

appium-desktop不再维护之后&#xff0c;需要使用appium2。 1、安装appium2 命令行输入npm i -g appium。安装之后输入appium或者appium-server即可启动appium 2、安装安卓/ios的驱动 安卓&#xff1a;appium driver install uiautomator2 iOS&#xff1a;appium driver i…...

基于springboot+vue实现高校学生党员发展管理系统项目【项目源码+论文说明】

基于springboot实现高校学生党员发展管理系统演示 摘要 随着高校学生规模的不断扩大&#xff0c;高校内的党员统计及发展管理工作面临较大的压力&#xff0c;高校信息化建设的不断优化发展也进一步促进了系统平台的应用&#xff0c;借助系统平台可以实现更加高效便捷的党员信息…...

Java代码审计安全篇-常见Java SQL注入

前言&#xff1a; 堕落了三个月&#xff0c;现在因为被找实习而困扰&#xff0c;着实自己能力不足&#xff0c;从今天开始 每天沉淀一点点 &#xff0c;准备秋招 加油 注意&#xff1a; 本文章参考qax的网络安全java代码审计&#xff0c;记录自己的学习过程&#xff0c;还希望…...

C#实现快速排序算法

C#实现快速排序算法 以下是C#中的快速排序算法实现示例&#xff1a; using System;class QuickSort {// 快速排序入口函数public static void Sort(int[] array){QuickSortRecursive(array, 0, array.Length - 1);}// 递归函数实现快速排序private static void QuickSortRecu…...

upload-labs通关记录

文章目录 前言 1.pass-012.pass-023.pass-034.pass-045.pass-056.pass-067.pass-078.pass-089.pass-0910.pass-1011.pass-1112.pass-1213.pass-1314.pass-1415.pass-1516.pass-1617.pass-1718.pass-1819.pass-19 前言 本篇文章记录upload-labs中&#xff0c;所有的通过技巧和各…...

Nginx实现高并发

注&#xff1a;文章是4年前在自己网站上写的&#xff0c;迁移过来了。现在看我之前写的这篇文章&#xff0c;描述得不是特别详细&#xff0c;但描述了Nginx的整体架构思想。如果对Nginx玩得透得或者想了解深入的&#xff0c;可以在网上找找其他的文章。 ......................…...

华为荣耀终端机试真题

文章目录 一 、字符展开(200分)1.1 题目描述1.2 解题思路1.3 解题代码二、共轭转置处理(100分)2.1 题目描述2.3 源码内容一 、字符展开(200分) 1.1 题目描述 // 64 位输出请用 printf(“%lld”)给定一个字符串,字符串包含数字、大小写字母以及括号(包括大括号、中括号…...

C++ Qt开发:QNetworkInterface网络接口组件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍如何运用QNetworkInterface组件实现查询详细的…...

3分钟上手SVG路径编辑器:零代码玩转矢量图形编辑

3分钟上手SVG路径编辑器&#xff1a;零代码玩转矢量图形编辑 【免费下载链接】svg-path-editor Online editor to create and manipulate SVG paths 项目地址: https://gitcode.com/gh_mirrors/sv/svg-path-editor 还在为SVG路径代码头疼吗&#xff1f;SVG Path Editor是…...

5步完成AI模型部署:DeepStream-Yolo实战终极指南

5步完成AI模型部署&#xff1a;DeepStream-Yolo实战终极指南 【免费下载链接】DeepStream-Yolo NVIDIA DeepStream SDK 8.0 / 7.1 / 7.0 / 6.4 / 6.3 / 6.2 / 6.1.1 / 6.1 / 6.0.1 / 6.0 / 5.1 implementation for YOLO models 项目地址: https://gitcode.com/gh_mirrors/de/…...

从零实战:手把手教你编写USB键盘驱动

1. USB键盘驱动开发基础 要开发一个USB键盘驱动&#xff0c;首先需要理解USB HID&#xff08;Human Interface Device&#xff09;类设备的工作原理。USB键盘属于HID设备的一种&#xff0c;它通过中断传输方式与主机通信。当你在键盘上按下或释放按键时&#xff0c;键盘会通过U…...

蓝桥杯CT117E-M4平台实战:用STM32G431的ADC测电压,从CubeMX配置到LCD显示一条龙

蓝桥杯CT117E-M4平台实战&#xff1a;STM32G431的ADC电压测量与LCD显示全流程解析 在嵌入式系统开发中&#xff0c;模拟信号采集是基础而关键的一环。对于参加蓝桥杯嵌入式赛事的选手而言&#xff0c;掌握STM32G4系列微控制器的ADC&#xff08;模数转换器&#xff09;应用不仅能…...

51单片机按键控制LED的两种编程思路对比:数组映射 vs Switch语句,哪种更适合你?

51单片机按键控制LED的两种编程范式深度解析&#xff1a;数组映射与Switch语句的工程实践 当你在深夜调试一块布满LED的51单片机开发板时&#xff0c;是否曾为按键控制逻辑的代码结构纠结过&#xff1f;作为经历过数十个嵌入式项目的开发者&#xff0c;我发现数组映射和switch-…...

别再只盯着lt;scriptgt;了:DVWA High级别XSS实战,用SVG和HTML5新标签绕过过滤(附完整Payload)

突破传统防御&#xff1a;DVWA High级别XSS的现代绕过艺术 在Web安全领域&#xff0c;跨站脚本攻击(XSS)始终是威胁排行榜上的常客。当开发者以为通过strip_tags、htmlspecialchars和严格正则过滤就能高枕无忧时&#xff0c;现代浏览器特性和HTML5标准却为攻击者打开了新的突破…...

别再手动测Wi-Fi信号了!用IQview综测仪搞定802.11 a/b/g/n射频性能测试(附详细配置截图)

告别低效测试&#xff1a;用IQview综测仪实现Wi-Fi射频性能的精准自动化 每次看到测试工程师们拿着频谱分析仪在实验室里来回走动&#xff0c;手动记录信号强度时&#xff0c;我总忍不住想——这都2023年了&#xff0c;为什么还有人用这种石器时代的方法&#xff1f;在无线产品…...

5个步骤从零开始:用OBS StreamFX打造电影级直播画面

5个步骤从零开始&#xff1a;用OBS StreamFX打造电影级直播画面 【免费下载链接】obs-StreamFX StreamFX is a plugin for OBS Studio which adds many new effects, filters, sources, transitions and encoders! Be it 3D Transform, Blur, complex Masking, or even custom …...

数据库连接池 HikariCP 怎么调优?一次讲清最大连接数、超时参数与线上排查思路

数据库连接池 HikariCP 怎么调优&#xff1f;一次讲清最大连接数、超时参数与线上排查思路 大家好&#xff0c;我是一名有 4 年工作经验的 Java 后端开发。 很多项目的数据库连接池配置&#xff0c;基本都是抄一份就上了。 但真正到了线上&#xff0c;高峰期数据库问题往往不只…...

Legacy iOS Kit终极指南:如何让旧iPhone重获新生并提升性能

Legacy iOS Kit终极指南&#xff1a;如何让旧iPhone重获新生并提升性能 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit …...