当前位置: 首页 > 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组件实现查询详细的…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...