46、lvs集群- 博客

news2024/10/1 15:13:31

1、lvs集群:

  • lvs:linux virtual server----章文嵩发起的开源项目,阿里。linux的内核层面实现负载均衡的软件。

  • 主要作用:将多个后端服务器组成一个高可用,高性能的服务器集群,通过负载均衡的算法将客户端的请求分发到后端的服务器上,来实现高可用和负载均衡。

  • 阿里的SLB:server load balance----lvm+keepalive实现的。

2、集群和分布式:

2.1、系统的拓展方式:

  • 垂直扩展:向上扩展,增强,性能更强的计算机。瓶颈,计算机本身设备的限制,硬件本身的性能瓶颈。

  • 水平扩展向外扩展,增加设备。并行的运行多个服务,依靠网络解决内部通信问题,cluster 集群。

  • 集群:为了解决某个特定的问题将计算机组合起来形成的单个系统。

2.2、集群的类型,三种类型:

1、LB:load balance负载均衡,多个主机组成,每个主机只承担一部分的访问请求。

2、HA:high availiablity高可用,在设计系统时,采取一定的措施,确保系统当中某一组件或者部分出现故障,整个系统依然能够正常运行。为了维护系统的可用性,可靠性,容错性。

3、HPC:high-performance computing 高性能 对响应时间,处理能力要求更高。

2.3、系统可靠性指标:

MTBF:Mean time Between Failure 平均无故障时间

MTTR:Mean time Resotration repair 平均故障恢复时间

A=MTBF/(MTBF+MTTR)

0-1

A指标0-1之间,A指标就是系统可用性的度量,0表示系统越不可用,1表示系统越可以用。

A指标要无线接近于1.

99.99%

都是以小时为单位

1年365天=8760小时
90(1-90%)*365=36.5天99 8760**1%=87.6小时
99.9999=31秒
99.99%=======52.6分钟

停机时间:计划内时间,计划内的时间开以忽略不计。但是现在也算在内。

计划外时间,故障时间,从故障发生到故障解决的总时间,尤其是运维,计划外时间是我们必须关注的一个指标。

某某-----当天事必须当天解决----没有解决之间,人是不可用离开的-------解决完之后必须生成报告,备案。

日报,周报,月报,年报。

运维精神:7*24小时待命(及时响应,及时处理,及时总结。)

2.4、lvs适用场景:

  • 小集群不需要使用lvs,大集群使用lvs。

  • lvs集群中的术语

  • VS: virtual server:lvs服务的逻辑名称,也就是我们外部访问lvs集群时使用的ip地址和端口。

  • DS: Director Server :lvs集群中的主服务器,也就是调度器(nginx的代理服务器)是集群的核心

  • 调度服务器就是用来接收客户端的请求转发到后端的服务器。

  • RS: Real Server:lvs集群中的真实服务器,后端服务器,用来接收DS转发来的请求,并响应结果。

  • CIP:Client ip :客户端的地址,发起请求的客户端地址。

  • VIP:virtual Ip :lvs集群使用的ip地址,对外提供集群访问的虚拟ip地址。

  • DIP:Director ip :调度器在集群中的地址,用于和RS通信。

  • RIP:Real ip :后端服务器在集群当中的ip地址。

在这里插入图片描述

2.5、lvs的工作模式:

  • NAT模式:由调度器响应给客户端

  • DR模式:直接路由模式,真实服务器直接响应给客户端

  • TUN:隧道模式----电信公司DNS提供

  • 常用的模式:NATDR模式

2.5.1、NAT模式

nat模式是常用的lvs的模式之一。

在nat模式下,lvs会将来自客户端的请求报文中的目标ip地址和端口,修改为lvs内部的ip地址和端口,然后把请求转发到后端服务器。

在这里插入图片描述

响应结果返回客户端的过程中,响应报文经过lvs的处理,把目标ip和端口修改成客户端的ip地址和端口。

好处:在于,对于客户端来说,请求的目标地址始终不变,客户端的配置不需要做特殊的修改,只需调度器再对ip和端口进行转换,后端的服务端也不需要更改任何配置。

缺点:性能损失,请求和响应都需要调度器做地址转换,影响性能,nat模式只要有一个调度器,调度器故障,整个集群就不能正常工作。

地址转换:

内网----外网 转换的源ip地址 snat

外网----内网 转换的目的ip地址 nat

1、客户端发起请求,访问vip地址,到达调度器

2、调度器接收到请求之后,根据负载均衡算法选一个后端服务器。

3、请求的地址,转成可以直接和内部RS通信的IP地址。

4、后端服务器处理请求。

5、目的的地址转换,转换vip地址

6、调度器的vip地址响应给客户端

在这里插入图片描述

外网到内网–12.0.0.10-----12.0.0.1------192.168.168.10

内网到外网–192.168.168.0/24-----12.0.0.1-----12.0.0.10----需要地址转换

iptables -t nat -A POSTROUTING -s 192.168.168.0/24 -o ens36 -j SNAT --to 12.0.0.1

2.6、lvs的工具

2.6.1、ipvsadm 工具,用来配置和管理lvs集群的工具。

  • -A 添加虚拟服务器 vip

  • -D 删除虚拟服务器地址

  • -s指定负载均衡的调度算法

  • -a 添加真实服务器

  • -d 删除真实服务器

  • -t 指定vip的地址和端口

  • -r 指定rip的地址和端口

  • -m使用nat模式

  • -g 使用DR模式

  • -i 使用隧道模式

  • -w 设置权重

  • -p 60:连接保持60设置保持时间

  • -l:列表查看

  • -n:数字化展示

  • -m指定模式为nat模式

2.6.2、算法

  • rr默认,轮询

  • 加权轮询:wrr

  • 最小连接:lr

  • 加权最小连接:wlc

2.6.3、操作

ipvsadm -C—#清空原有的策略

ipvsadm -A -t 12.0.0.1:80 -s rr------#指定好的vip的地址和端口

ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.10:80 -m—#先添加vip,虚拟服务器的ip和端口,然后再添加真实服务器

ipvsadm -D -t 192.168.168.50:80----#删除策略

ipvsadm -D -t 192.168.168.50:80
[root@test5 opt]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

ipvsadm -d -r 192.168.168.20:80 -t 12.0.0.1:80----###删除节点服务器

ipvsadm -d -r 192.168.168.20:80 -t 12.0.0.1:80
[root@test5 opt]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  12.0.0.1:80 rr
  -> 192.168.168.10:80            Masq    1      0          0     

开启路由转发:

vim /etc/sysctl.conf 

net.ipv4.ip_forward=1

[root@test5 opt]# sysctl -p
net.ipv4.ip_forward = 1

3、NAT集群实验

3.1、rr配置

在这里插入图片描述

nginx1 :192.168.168.10

nginx2:192.168.168.20

test5:调度器 ens33:192.168.168.50 ens36 :12.0.0.1

test6 客户端12.0.0.10

test5:

安装ipvsadm工具

yum -y install ipvsadm* -y

添加网卡

[root@test5 network-scripts]# cp ifcfg-ens33 ifcfg-ens36

vim ifcfg-ens33

TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.168.50
NETMASK=255.255.255.0 
#GATEWAY=192.168.168.2
#DNS1=218.2.135.1
#DNS2=221.131.143.69
vim ifcfg-ens36

TYPE=Ethernet
DEVICE=ens36
ONBOOT=yes
BOOTPROTO=static
IPADDR=12.0.0.1
NETMASK=255.255.255.0
#GATEWAY=192.168.168.2
#DNS1=218.2.135.1
#DNS2=221.131.143.69

systemctl restart network

在这里插入图片描述

nginx1修改网卡中的网关指向调度器的ip(即网关)

TYPE=Ethernet 
DEVICE=ens33 
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.168.10
NETMASK=255.255.255.0
GATEWAY=192.168.168.50
DNS1=218.2.135.1
DNS2=221.131.143.69
vim /usr/local/nginx/html/index.html

this is nginx1

nginx2修改网卡中的网关指向调度器的ip(即网关)

TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.168.20
NETMASK=255.255.255.0 
GATEWAY=192.168.168.50
DNS1=218.2.135.1
DNS2=221.131.143.69
vim /usr/local/nginx/html/index.html

this is nginx2

test5配置:

内网到外网—出去做地址转换

iptables -t nat -A POSTROUTING -s 192.168.168.0/24 -o ens36 -j SNAT --to 12.0.0.1

ipvsadm -C—#清空原有的策略

ipvsadm -A -t 12.0.0.1:80 -s rr-----指定好的vip的地址和端口

先添加vip,虚拟服务器的ip和端口,然后再添加真实服务器:

ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.10:80 -m

-a 添加真实服务器

-t 指定vip地址

-r 指定真实服务器的地址和端口

-m指定模式为nat模式

ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.20:80 -m

[root@test5 opt]# ipvsadm -A -t 12.0.0.1:80 -s rr
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.10:80 -m
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.20:80 -m
[root@test5 opt]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  12.0.0.1:80 rr
  -> 192.168.168.10:80            Masq    1      0          0         
  -> 192.168.168.20:80            Masq    1      0          0  
  [root@test5 opt]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@test5 opt]# systemctl restart ipvsadm
[root@test5 opt]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.168.50:80 rr
  -> 192.168.168.10:80            Masq    1      0          0         
  -> 192.168.168.20:80            Masq    1      0          0    

在这里插入图片描述

删除策略

ipvsadm -D -t 192.168.168.50:80
[root@test5 opt]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

重新保存

[root@test5 opt]# ipvsadm -A -t 12.0.0.1:80 -s rr
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.10:80 -m
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.20:80 -m
[root@test5 opt]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  12.0.0.1:80 rr
  -> 192.168.168.10:80            Masq    1      0          0         
  -> 192.168.168.20:80            Masq    1      0          0         
[root@test5 opt]# systemctl restart ipvsadm
[root@test5 opt]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@test5 opt]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  12.0.0.1:80 rr
  -> 192.168.168.10:80            Masq    1      0          0         
  -> 192.168.168.20:80            Masq    1      0          0 

删除节点服务器

ipvsadm -d -r 192.168.168.20:80 -t 12.0.0.1:80
[root@test5 opt]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  12.0.0.1:80 rr
  -> 192.168.168.10:80            Masq    1      0          0     

开启路由转发:

vim /etc/sysctl.conf 

net.ipv4.ip_forward=1

[root@test5 opt]# sysctl -p
net.ipv4.ip_forward = 1

简单的全部完成。

test6:

在这里插入图片描述

需要改网关和ip地址

vim /etc/sysconfig/network-scripts/ifcfg-ens33     ##更改网关指向路由

TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=12.0.0.10
NETMASK=255.255.255.0
GATEWAY=12.0.0.1
DNS1=218.2.135.1
DNS2=221.131.143.69 

在这里插入图片描述

外网到内网–12.0.0.10-----12.0.0.1------192.168.168.10

net.ipv4.ip_forward=1,可以进行转发

内网到外网192.168.168.10-----12.0.0.1-------12.0.0.10

做地址转换进行访问

3.2、wrr加权算法

第二个,删除rr算法,

ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  12.0.0.1:80 rr
  -> 192.168.168.10:80            Masq    1      0          0         
  -> 192.168.168.20:80            Masq    1      0          0         
[root@test5 opt]# ipvsadm -D -t 12.0.0.1:80
[root@test5 opt]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

添加wrr权重算法

[root@test5 opt]# ipvsadm -A -t 12.0.0.1:80 -s wrr
[root@test5 opt]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  12.0.0.1:80 wrr
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.10:80 -m -w 2
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.20:80 -m -w 2
[root@test5 opt]# ipvsadm -d -r 192.168.168.20:80 -t 12.0.0.1:80 
[root@test5 opt]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  12.0.0.1:80 wrr
  -> 192.168.168.10:80            Masq    2      0          0         
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.20:80 -m -w 1
[root@test5 opt]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  12.0.0.1:80 wrr
  -> 192.168.168.10:80            Masq    2      0          0         
  -> 192.168.168.20:80            Masq    1      0          0    

测试结果
在这里插入图片描述

3.3、设置wlc最小连接数加权算法

[root@test5 opt]# ipvsadm -D -t 12.0.0.1:80
[root@test5 opt]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@test5 opt]# ipvsadm -A -t 12.0.0.1:80 -s wlc
[root@test5 opt]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  12.0.0.1:80 wlc
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.10:80 -m -w 2
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.20:80 -m -w 1
[root@test5 opt]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  12.0.0.1:80 wlc
  -> 192.168.168.10:80            Masq    2      0          0         
  -> 192.168.168.20:80            Masq    1      0          0  

创建vip地址的时候才能指定负载均衡算法,不是在真实服务器上添加算法。

test5做地址转换:

iptables -t nat -vnL ----查看nat地址转换策略表

iptables -t nat -A POSTROUTING -s 192.168.168.0/24 -o ens36 -j SNAT --to 12.0.0.1

ipvsadm -a-t 12.0.0.1:80-r192.168.233.61:80 -m

-a 添加真实服务器

-t 指定vip地址

3.4、增加理解

在探讨外网访问内网与内网访问外网时,是否需要开启转发功能或地址转换,我们首先要明确几个基本概念和它们在网络通信中的作用。

### 外网访问内网,开启转发功能,不需要地址转换

当外网需要访问内网时,通常涉及到的是网络访问控制和路由策略。在某些情况下,如使用VPN(虚拟私人网络)或端口转发等技术,可以实现外网直接访问内网资源,而无需进行地址转换。这是因为VPN等技术可以在不暴露内网实际IP地址的情况下,为外网用户提供一条安全的通道来访问内网资源。同样,端口转发可以将外网对特定端口的访问请求转发到内网中的特定设备或服务上,而无需改变IP地址。

### 内网访问外网,为什么需要地址转换

1. 内网与公网的隔离:
   - 内网通常是指被NAT(网络地址转换)隔离起来的私有地址空间,这些地址在Internet上是不可见的,也无法被直接路由。
   - 公网则是指全球互联网上分配的全局IP地址空间,任何设备只要具有公网IP地址,就可以被Internet上的其他设备访问。
2. IP地址的稀缺性:
   - 由于IPv4地址的稀缺性,不可能为每个内网设备分配一个独立的公网IP地址。因此,需要通过NAT技术将内网设备的私有IP地址转换为公网IP地址,以实现与外部网络的通信。
3. 安全性和隐私性:
   - NAT技术还可以在一定程度上提供安全性和隐私保护。通过隐藏内网设备的真实IP地址,可以防止外部网络对内网设备的直接攻击和扫描。
4. 通信的必要性:
   - 内网中的设备,如企业内部的服务器或终端用户,有时需要访问外部网络或互联网上的资源。为了实现这种访问,必须进行地址转换,以便将内网设备的私有IP地址转换为公网IP地址,从而通过Internet进行通信。

综上所述,内网访问外网需要地址转换的原因主要是由于内网与公网的隔离、IP地址的稀缺性、安全性需求以及通信的必要性。NAT技术通过在内网出口设备上部署,实现了内网设备私有IP地址到公网IP地址的转换,从而解决了内网设备访问外部网络的问题。

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

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

相关文章

前端javascript中的排序算法之插入排序

插入排序(Selection Sort)基本思想: 插入排序每次排一个数组项,以此方式构建最后的排序数组。假定第一项已经排序了,接着, 它和第二项进行比较,第二项是应该待在原位还是插到第一项之前呢&#…

查看oracle ojdbc所支持的JDBC驱动版本

oracle jcbc驱动的下载地址参考:JDBC and UCP Downloads page 其实上文中对ojdbc所支持的JDBC驱动版本已经有说明了,不过,因为oracle的驱动包很多时间,都是在公司内部私服里上传维护的,上传的时候,可能又没…

第4章 课程发布:模块需求分析,课程预览(模板引擎 静态页面),课程审核,课程发布(分布式事务,页面静态化:熔断降级),课程搜索(es索引)

1 模块需求分析 1.1 模块介绍 课程信息编辑完毕即可发布课程,发布课程相当于一个确认操作,课程发布后学习者在网站可以搜索到课程,然后查看课程的详细信息,进一步选课、支付、在线学习。 下边是课程编辑与发布的整体流程&#…

Java中的 this 关键字是什么意思? this() 又是什么?

目录 问题问题一:什么是this关键字?问题二:什么是this()? 问题 问题一:什么是this关键字? 定义:this 代表当前对象。这个定义比较抽象,举例来回答。 思考一个问题:如果没有 this 会怎样&…

uniapp+vue3嵌入Markdown格式

使用的库是towxml 第一步:下载源文件,那么可以git clone,也可以直接下载压缩包 git clone https://github.com/sbfkcel/towxml.git 第二步:设置文件夹内的config.js,可以选择自己需要的格式 第三步:安装…

【国潮】软件本土化探索

文章目录 一、国产-操作系统银河麒麟(Kylin)操作系统华为鸿蒙系统(HarmonyOS)统信UOS深度Deepin 二、国产-服务器华为鲲鹏:飞腾:海光:兆芯:龙芯:申威: 三、国…

2024-07抖音/快手/小红书/视频号/美团无人直播技术:最新不封号无人直播的操作方法详细介绍

2024年最新研究出来的无人直播技术,目前不封号,用途大大的,可带货,可引流,可获客。 手机自动直播源码通常涉及到实时流媒体技术和应用开发,它涉及以下几个关键部分: 摄像头接入:使用…

neo4j 图数据库:Cypher 查询语言、医学知识图谱

neo4j 图数据库:Cypher 查询语言、医学知识图谱 Cypher 查询语言创建数据查询数据查询并返回所有节点查询并返回所有带有特定标签的节点查询特定属性的节点及其所有关系和关系的另一端节点查询从名为“小明”的节点到名为“小红”的节点的路径 更新数据更新一个节点…

基于jeecgboot-vue3的Flowable流程-集成仿钉钉流程(四)支持json和xml的显示

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、相应的界面前端代码 <template><div class"formDesign"><FlowDesign :process"process" :fields"fields" :readOnly"readOnly&quo…

微信小程序毕业设计-教育培训系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

【机器学习】使用决策树分类器预测汽车安全性的研究与分析

文章目录 一、决策树算法简介决策树的结构分类和回归树 (CART)决策树算法术语决策树算法直觉 二、属性选择度量信息增益熵 基尼指数计算分割基尼指数的步骤 三、决策树算法中的过度拟合避免过度拟合的方法 四、导入库和数据可视化探索性数据分析重命名列名查看数据集的总结信息…

double和float的区别与使用

double和float类型的区别与使用 在Java中&#xff0c;double和float都是基本数据类型&#xff0c;用于表示浮点数&#xff08;即带有小数点的数&#xff09;。 它们在精度和范围上有所不同&#xff1a; double类型提供了更高的精度和更大的范围&#xff0c;而float类型则精度更…

类似评论、省市区这种具有层次结构的数据表怎么设计?

业务功能模块 评论、回复模块省市区表 设置一个给每个数据设置一个parent_id 例如&#xff1a; 某个视频下a写了条评论&#xff0c;那a的parent_id就是0;b回复了a&#xff0c;那b的parent_id就是a的id;c回复了b&#xff0c;那c的parent_id就是b的id; 这样&#xff0c;所有评论…

MATLAB备赛资源库(1)建模指令

一、介绍 MATLAB&#xff08;Matrix Laboratory&#xff09;是一种强大的数值计算环境和编程语言&#xff0c;特别设计用于科学计算、数据分析和工程应用。 二、使用 数学建模使用MATLAB通常涉及以下几个方面&#xff1a; 1. **数据处理与预处理**&#xff1a; - 导入和处理…

LeetCode加油站(贪心算法/暴力,分析其时间和空间复杂度)

题目描述 一.原本暴力算法 最初的想法是&#xff1a;先比较gas数组和cost数组的大小&#xff0c;找到可以作为起始点的站点(因为如果你起始点的油还不能到达下一个站点&#xff0c;就不能作为起始点)。当找到过后&#xff0c;再去依次顺序跑一圈&#xff0c;如果剩余的油为负数…

java使用poi-tl模版引擎导出word之if判断条件的使用

文章目录 模版中if语句条件的使用1.数据为False或空集合2.非False或非空集合 模版中if语句条件的使用 如果区块对的值是 null 、false 或者空的集合&#xff0c;位于区块中的所有文档元素将不会显示&#xff0c;这就等同于if语句的条件为 false。语法示例&#xff1a;{{?stat…

FUSE(用户空间文件系统)命令参数

GPT-4 (OpenAI) FUSE (Filesystem in Userspace)是一个允许创建用户空间文件系统的接口。它提供了一个API&#xff0c;让开发者在未修改内核代码的情况下&#xff0c;通过自己的程序实现文件系统。FUSE 文件系统通常通过 mount 命令来挂载&#xff0c;而且这个命令可以接受各…

【福利】代码公开!咸鱼之王自动答题脚本

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 微信或QQ打开咸鱼之王小程序&#xff0c;进入答题界面&#xff0c;运行main.py。期间不要动鼠标。 可自行更改代码来适配自己的需求~ 可以按照示例图片…

用QFramework重构飞机大战(Siki Andy的)(上)(00-05 到游戏界面之前的所有面板)

GitHub // 官网的 全民飞机大战&#xff08;第一季&#xff09;-----框架设计篇&#xff08;Unity 2017.3&#xff09; 全民飞机大战&#xff08;第二季&#xff09;-----游戏逻辑篇&#xff08;Unity 2017.3&#xff09; 全民飞机大战&#xff08;第三季&#xff09;-----完善…

基于Java的学生选课系统

第1章 系统概述 1.1概述 背景&#xff1a;随着计算机网络技术的发展&#xff0c;Web 数据库技术已成为应用最为广泛的网站架构基础技术。学生选课系统作为教育单位不可缺少的部分&#xff0c;其内容对于学校的决策者和管理者至关重要。传统的人工管理方式存在效率低、保密性差等…