iperf 测 TCP 和 UDP 网络吞吐量
注:本文为 “iperf 测网络吞吐量” 相关文章合辑。
未整理去重。
使用 iperf3 监测网络吞吐量
Tom 王 2019-12-21 22:23:52
一 iperf3 介绍
(1.1) iperf3 是一个网络带宽测试工具,iperf3 可以擦拭 TCP 和 UDP 带宽质量。iperf3 可以测量最大 TCP 带宽,具有多种参数和 UDP 特性,iperf3 可以报告带宽、延迟抖动和数据包丢失。利用 iperf3 这一特性,可以用来测试一些网络设备如路由器,防火墙,交换机等的性能。
(1.2) 使用 iperf3,你可以调整与时序、缓冲区和协议(如 TCP、UDP、SCTP)相关的几个参数。它对网络性能调优操作很方便,为了获得最大或相当改善的网络性能,你需要增加吞吐量以及网络接收个发送功能的延迟。但是在进行实际调整之前,你需要执行一些测试以收集整体网络性能统计信息,以指导你的调优过程。其结果包括以秒为单位的时间间隔,数据传输,带宽(传输速率),丢失和其他有用的网络性能参数,它主要用于协助调整特定路径上的 TCP 连接。
二 iperf3 安装
(2.1) 我们使用的操作系统是 CentOS 7.4,然后我们使用 base 源安装,便可以将 iperf3-3.1.7-2.el7.x86_64 软件包安装好。
(2.2) 然后我们使用两台主机,其中 192.168.26.51 作为服务器端,将 192.168.26.131 作为客户端。在两台主机上安装好 iperf3 后,即可开始测试网络吞吐量。我们首先连接到我们的服务器端的远程机器使用 - s 标志的是服务器模式下的 iperf3,默情况下它将监听 5201 端口,我们也可以使用 - f 开关指定生成报告的数据格式类型(其中 k 表示 Kbits、m 表示 Mbits、g 表示 Gbits、K 表示 KBytes、M 表示 MBytes、G 表示 GBytes)。
# iperf3 -s -f K
(2.3) 如果服务器上的另一个程序正在使用端口 5201,则我们可以使用 - p 开关指定其他端口监听(例如指定 4000 端口)
# iperf3 -s -p 4000
(2.4) 我们也可以使用 - D 标志作为守护程序运行,并将服务器消息写入日志文件
# iperf3 -s -D > iperf3.log
三 iperf3 客户端操作
(3.1) 我们将 192.168.26.51 作为服务器,并且执行监听 5201 端口的命令(图 3-1),在客户端 192.168.26.131 的主机上,使用 - c 标志在客户端模式下运行 iperf3 并指定运行服务器的主机(使用 IP 地址或域主机名都可以)。执行大约 18 至 20 秒后,客户端终止并生成指示基准测试平均吞吐量的结果,显示信息如下(图 3-2)。
注意:从基准测试结果中,如下面的屏幕接入所示,服务器和客户端的值存在差异,但是,我们应该始终考虑在执行的每个测试中使用从 iperf3 客户端主机获得的结果。
\# iperf3 -s -f K— 在服务器端执行\# iperf3 -c 192.168.26.51 -f K— 在客户端执行
(3.2) 如果我们想在 Linux 中实现先进的网络测试吞吐量,确定网络中给定时间内数据量的一个重要因素是 TCP 窗口大小,它在调整 TCP 连接时很重要,我们可以使用 - w 标志设置窗口大小、套接字缓冲区大小,如图所示。
\# iperf3 -c 192.168.26.51 -f K -w 200K
(3.3) 如果要在服务器发送和客户端接收的反向模式下运行,可以添加 - R 开关。
\# iperf3 -c 192.168.26.51 -f K -w 200K -R
(3.4) 如果要运行双向测试,意味着我们要同时测量两个方向上的宽带,可以使用 - d 选项。
(3.5) 如果要在客户端输出中获取服务器结果,可以使用 “–get-server-output” 选项,此时我们便会在客户端 192.168.26.131 主机上获取两份数据。
(3.6) 也可以使用 - P 选项设置并行客户端流的数量,它们同时运行
——— 本文至此结束 ———
iperf 测 UDP 和 TCP 丢包率及带宽
嘟嘟嘟嘟于 2021-09-01 16:34:39 发布
iperf
iperf3 (安装包是:iperf-master)安装遇到 error while loading shared libraries:libiperf.so.0
解决方法:在正常编译以后运行 ldconfig
安装软件包的方法 (参考 REDMINE):在顶层目录下:
./configure
make
make install
yqq@ubuntu18:~/Tool/iperf-master$ iperf3 -s
iperf3: error while loading shared libraries: libiperf.so.0: cannot open shared object file: No such file or directory
yqq@ubuntu18:~/Tool/iperf-master$ sudo ldconfig
yqq@ubuntu18:~/Tool/iperf-master$ iperf3 -s
//tcp 和 udp 服务器端用 iperf3 的话都是这个命令,如果是 udp,在客户端加上 - u 即可
// 如果是 iperf,tcp 和 udp 在服务器端加 - u,tcp 和 udp 的客户端命令相同
Server listening on 5201 (test #1)
安装
方法 1:sudo apt-get install iperf
方法 2:下载 iperf 的源码包 ( 在板子上使用二进制文件时,可将源码直接拷贝到板子上 ./configure make)
测试
无论是 tcp 还是 udp 方式测试,都要一端运行服务器模式,另一端运行客户端模式,另外如果打开了 iptables, 要打开 tcp 5001 端口,当然也可以指定端口
tcp 方式
服务器端:iperf -s
客户端: iperf -c SERVERIP -t 60 -i 1 -P 5
udp 方式
服务器端:iperf -u -s //iperf3 服务端不支持 - u 选项
客户端: iperf -c SERVERIP -t 60 -i 1 -b 100M
共用的指令
-f -- 格式 [k|m|K|M] 分别表示 Kbits,Mbits,Kbits,KBytes,MBytes 显示报告,默认是 Mbits
-i -- 以秒为单位统计带宽值
-l -- 读写缓冲区的大小,默认是 8kb
-m -- 显示最大的 TCP 数据段大小 (MTU-TCP/IP header)
-o -- 将报告和错误信息输出到文件
-p -- 指定服务器和客户端连接的端口
-w -- 指定 TCP 窗口的大小,默认是 8KB
-B -- 绑定一个主机地址或接口(当主机有多个地址或接口时使用该参数)
-C -- 兼容旧版本(当 server 和 client 端版本不一样时使用)
-M -- 指定 TCP 数据包的最大 MTU 值
-N -- 设定 TCP 不延时
-V -- 传递 ipv6 数据包
适用于 server
-s -- 服务器
-U -- 单线程 UDP 模式下运行
-D -- 以守护进程模式运行
适用于 client
-b -- 指定客户端通过 udp 协议发送信息的带宽,默认为 1Mbit/s
-c -- 客户端
-d -- 同时进行双向传输测试
-n -- 指定传输的字节数
-r -- 单独进行双向传输测试
-t -- 指定 iperf 测试时间,默认 10 秒
-F -- 指定需要传输的文件
-I -- 从标准输入 (stdin) 中读取要传输的数据
-L -- 指定一个端口,服务器将利用这个端口与客户端相连
-P -- 客户端到服务器的连接数,默认为 1
-T --ttl 值
-u -- 使用 udp 协议# iperf -s -u // 此为 iperf,不是 iperf3,如果是 iperf3 则如果是测试 UDP,则在客户端加上 - u,服务器不需要 - u------------------------------------------------------------Server listening on UDP port 5001Receiving 1470 byte datagramsUDP buffer size: 208 KByte (default)------------------------------------------------------------[ 3] local 192.168.1.6 port 5001 connected with 192.168.1.6 port 52657
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 3] 0.0-16.4 sec 196 MBytes 101 Mbits/sec 0.003 ms 0/139968 (0%)
[ 3] 0.0-16.4 sec 1 datagrams received out-of-order
[ 4] local 192.168.1.6 port 5001 connected with 192.168.1.6 port 39426
[ 4] 0.0-41.1 sec 2.90 GBytes 606 Mbits/sec 0.004 ms 9271/2128456 (0.44%)
[ 4] 0.0-41.1 sec 1 datagrams received out-of-order
[ 3] local 127.0.0.1 port 5001 connected with 127.0.0.1 port 60678
[ 3] 0.0-22.1 sec 1.55 GBytes 602 Mbits/sec 0.032 ms 4317/1136481 (0.38%)
[ 3] 0.0-22.1 sec 1 datagrams received out-of-order
[ 3840.205662] ata1: exception Emask 0x10 SAct 0x0 SErr 0x10200 action 0xe frozen
[ 3840.213102] ata1: irq_stat 0x00400000, PHY RDY changed
[ 3840.218375] ata1: SError: { Persist PHYRdyChg }
12345678910111213141516171819
# iperf -c 192.168.1.6 -t 60 -i 1 -b 1GB
WARNING: option -b implies udp testing
------------------------------------------------------------
Client connecting to 192.168.1.6, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size: 208 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.1.6 port 39426 connected with 192.168.1.6 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0- 1.0 sec 76.0 MBytes 638 Mbits/sec
[ 3] 1.0- 2.0 sec 71.2 MBytes 597 Mbits/sec
[ 3] 2.0- 3.0 sec 65.2 MBytes 547 Mbits/sec
[ 3] 3.0- 4.0 sec 66.5 MBytes 557 Mbits/sec
[ 3] 4.0- 5.0 sec 72.5 MBytes 608 Mbits/sec
[ 3] 5.0- 6.0 sec 73.4 MBytes 616 Mbits/sec
[ 3] 6.0- 7.0 sec 76.8 MBytes 644 Mbits/sec
[ 3] 7.0- 8.0 sec 76.2 MBytes 639 Mbits/sec
[ 3] 8.0- 9.0 sec 75.1 MBytes 630 Mbits/sec
[ 3] 9.0-10.0 sec 76.6 MBytes 643 Mbits/sec
[ 3] 10.0-11.0 sec 76.3 MBytes 640 Mbits/sec
[ 3] 11.0-12.0 sec 76.7 MBytes 643 Mbits/sec
[ 3] 12.0-13.0 sec 76.1 MBytes 638 Mbits/sec
[ 3] 13.0-14.0 sec 76.4 MBytes 641 Mbits/sec
[ 3] 14.0-15.0 sec 76.8 MBytes 644 Mbits/sec
[ 3] 15.0-16.0 sec 76.7 MBytes 643 Mbits/sec
[ 3] 16.0-17.0 sec 72.8 MBytes 610 Mbits/sec
[ 3] 17.0-18.0 sec 69.5 MBytes 583 Mbits/sec
[ 3] 18.0-19.0 sec 69.6 MBytes 584 Mbits/sec
[ 3] 19.0-20.0 sec 75.8 MBytes 636 Mbits/sec
[ 3] 20.0-21.0 sec 62.1 MBytes 521 Mbits/sec
[ 3] 21.0-22.0 sec 76.1 MBytes 639 Mbits/sec
# iperf -c 127.0.0.1 -t 60 -i 1 -b 4g
WARNING: option -b implies udp testing
------------------------------------------------------------
Client connecting to 127.0.0.1, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size: 208 KByte (default)
------------------------------------------------------------
[ 3] local 127.0.0.1 port 60678 connected with 127.0.0.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0- 1.0 sec 78.8 MBytes 661 Mbits/sec
[ 3] 1.0- 2.0 sec 77.2 MBytes 648 Mbits/sec
[ 3] 2.0- 3.0 sec 70.1 MBytes 588 Mbits/sec
[ 3] 3.0- 4.0 sec 73.5 MBytes 617 Mbits/sec
[ 3] 4.0- 5.0 sec 73.1 MBytes 613 Mbits/sec
[ 3] 5.0- 6.0 sec 72.4 MBytes 608 Mbits/sec
[ 3] 6.0- 7.0 sec 74.5 MBytes 625 Mbits/sec
[ 3] 7.0- 8.0 sec 61.4 MBytes 515 Mbits/sec
[ 3] 8.0- 9.0 sec 71.0 MBytes 596 Mbits/sec
iPerf 3 测试 UDP 和 TCP 方法详解
诸葛悠闲已于 2024-12-11 10:50:41 修改
前言
工具安装、说明等详细信息可参考官方文档
- ipef user doc
https://iperf.fr/iperf-doc.php#3doc
一、What is iPerf /iPerf3 ?
Perf3 是一款用于主动测量 IP 网络最大带宽的工具。它支持调整与定时、缓冲区和协议(TCP、UDP、SCTP 与 IPv4 和 IPv6)相关的各种参数。每次测试都会报告带宽、损耗和其他参数。
二、功能
1. TCP and SCTP
-
测量带宽
-
报告 MSS/MTU 大小和观察到的读取大小
-
通过套接字缓冲区支持 TCP 窗口大小。
2. UDP
-
客户端可创建指定带宽的 UDP 数据流
-
测量数据包丢失
-
测量延迟抖动
-
支持组播
3. 其他
-
客户端和服务器可同时进行多个连接(-P 选项)。
-
服务器处理多个连接,而不是在一次测试后退出。
-
可在指定时间(-t 选项)内运行,而不是在设定的数据传输量(-n 或 -k 选项)内运行。
-
以指定时间间隔打印定期的中间带宽、抖动和损耗报告(-i 选项)。
-
将服务器作为守护进程运行(-D 选项)
-
使用代表性数据流测试链路层压缩对可实现带宽的影响(-F 选项)。
-
服务器同时接受单个客户端(iPerf3)或多个客户端(iPerf2)
-
新功能:忽略 TCP 慢启动(-O 选项)。
-
新功能:为 UDP 和(新)TCP 设置目标带宽(-b 选项)。
-
新功能:设置 IPv6 流量标签(-L 选项)
-
新功能:设置拥塞控制算法(-C 选项)
-
新功能: 使用 SCTP 而非 TCP(–sctp 选项)
-
新功能: 以 JSON 格式输出(-J 选项)。
-
新功能: 磁盘读取测试(服务器:iperf3 -s / 客户端:iperf3 -c testhost -i1 -F 文件名)
-
新功能: 磁盘写入测试(服务器:iperf3 -s -F 文件名 / 客户端:iperf3 -c testhost -i1)
三、 Iperf 的使用
1. Iperf 的工作模式
Iperf 可以运行在任何 IP 网络上,包括本地以太网、接入因特网、Wi-Fi 网络等。在工作模式上,iperf 运行于服务器、客户端模式下,其服务器端主要用于监听到达的测试请求,而客户端主要用于发起测试连接会话,因此要使用 iperf 至少需要两台服务器,一台运行在服务器模式下,另一台运行在客户端模式下。
2. 通用指令
3. 服务端特有选项
4. 客户端特有选项
5. -t -n 参数联系
-t 参数说明如下:
-n 参数说明如下:
-n 会重写 - t 参数,-n 参数会使 - t 参数失效。
-n 30M 意思表明,传输完 30M 便停止,-t 失效。
四、Iperf 使用实例
1. 调整 TCP 连接
1. 1 TCP 窗口大小调节
iPerf 的主要目标是帮助调整特定路径上的 TCP 连接。TCP 最基本的调整问题是 TCP 窗口大小,它控制着网络中任何一点的数据量。如果窗口大小太小,发送方有时就会处于空闲状态,从而导致性能低下。
窗口大小的理论值为:
瓶颈带宽 * 往返时间
若瓶颈链路是 45 Mbit/sec 链路,用 ping 测量的往返时间是 42 ms。带宽延迟乘积为:
45 Mbit/sec * 42 ms
= (45e6) * (42e-3)
= 1890000 bits
= 230 KByte
这是计算最佳窗口大小的一个起点;将其设置得更高或更低可能会产生更好的结果。
请注意,许多操作系统和主机都有 TCP 窗口大小的上限。iPerf 会尝试检测这些限制,并在实际窗口大小与请求的窗口大小不相等时发出警告。
另一个测试方法是运行并行 TCP 流。如果总带宽大于单个数据流的带宽,就说明出了问题。要么是 TCP 窗口大小太小,要么是操作系统的 TCP 实现有问题,要么是网络本身有缺陷。
测试示例:
- 启动服务端
- 启动客户端
- 单线程测试,TCP 窗口大小 1000 字节。(非常小,所以性能不能达到网卡瓶颈 1Gbit)
- 单线程测试,TCP 窗口大小 16K。速度有所提升
- 单线程测试,窗口调整为 420K 时,基本达到了 1Gbit 的极限。
- 最后测试一下多线程,使用 190k 的窗口,同样可以把网卡极限跑满:
所以如果我们使用单线程传输,tcp 窗口的大小很关键。
1. 2 最大传输单元 (MTU) 调整
为了达到最佳效果,两台主机都应支持路径 MTU 发现。不支持路径 MTU 发现的主机通常使用 536 作为 MSS,这会浪费带宽和处理时间。使用 -m 选项可显示正在使用的 MSS,并查看是否与预期相符。以太网的 MSS 通常在 1460 字节左右。
2. 调整 UDP 连接
iPerf 创建了一个恒定比特率的 UDP 数据流。没有其他功能。
需要将数据报大小 (-l) 调整为您的应用程序所使用的大小。
服务器通过数据报中的 ID 号来检测 UDP 数据段是否丢失。通常,一个 UDP 数据段会变成多个 IP 数据包。丢失一个 IP 数据包就会丢失整个数据段。要测量数据包丢失而不是数据段丢失,可使用 -l 选项使数据段小到足以容纳进一个数据包。默认的 1470 字节大小适用于以太网。还能检测出乱序数据包。由于 TCP 不会向用户报告数据包丢失情况,UDP 测试有助于查看路径上的数据包丢失情况。
根据 RFC 1889 中 RTP 的规定,抖动计算由服务器持续计算。客户端在数据包中记录 64 位秒 / 微秒时间戳。服务器计算的相对传输时间为(服务器接收时间 - 客户端发送时间)。客户端和服务器的时钟无需同步;抖动计算中会减去任何差异。抖动是连续传输时间差的平滑平均值。
测试示例:
- 服务端启动
- 启动客户端
请注意,在使用较大的 50 KB 数据报(每个数据报分成 23 个 1500 字节的数据包)时,数据报重组导致的抖动较高。这里看到的数据报丢包率较高,可能是由于流量的突发性,即 23 个背靠背的数据包,然后是长时间的停顿,而不是均匀分布的单个数据包。
3. 测试 TCP 吞吐量
- Server 端开启 iperf 的服务器模式:
- Client 端启动 iperf 的客户端模式
- Server 端监听结果
① Interval 表示时间间隔。
② Transfer 表示时间间隔里面转输的数据量。
③ Bandwidth 是时间间隔里的传输速率 。
4. 测试 UDP 吞吐量
带宽测试通常采用 UDP 模式,因为能测出极限带宽、时延抖动、丢包率。在进行测试时,首先以链路理论带宽作为数据发送速率进行测试,例如,从客户端到服务器之间的链路的理论带宽为 100Mbps,先用 - b 100M 进行测试,然后根据测试结果(包括实际带宽,时延抖动和丢包率),再以实际带宽作为数据发送速率进行测试,会发现时延抖动和丢包率比第一次好很多,重复测试几次,就能得出稳定的实际带宽。
- Server 端开启 iperf 的服务器模式
- Client 端启动 iperf 的客户端模式,连接服务端
- Server 端监听结果
① Jitter 为抖动,在连续传输中的平滑平均值差。
② Lost 为丢包数量。
③ Total Datagrams 为包数量。
via:
-
【讲清楚,说明白!】使用 iperf3 监测网络吞吐量_51CTO 博客_iperf3 测试吞吐量
https://blog.51cto.com/u_13613726/2460671 -
iperf 测 UDP 和 TCP 丢包率及带宽_iperf udp-CSDN 博客
https://blog.csdn.net/weixin_38717634/article/details/120042874 -
iPerf 3 测试 UDP 和 TCP 方法详解_iperf3 udp-CSDN 博客
https://blog.csdn.net/weixin_44399845/article/details/137950306 -
Udp 数据丢包测试 --iperf3_iperf3 udp 测试 - CSDN 博客
https://blog.csdn.net/weixin_44011068/article/details/107383079
相关文章:
iperf 测 TCP 和 UDP 网络吞吐量
注:本文为 “iperf 测网络吞吐量” 相关文章合辑。 未整理去重。 使用 iperf3 监测网络吞吐量 Tom 王 2019-12-21 22:23:52 一 iperf3 介绍 (1.1) iperf3 是一个网络带宽测试工具,iperf3 可以擦拭 TCP 和 UDP 带宽质量。iperf3 可以测量最大 TCP 带宽…...
(1)Linux高级命令简介
Linux高级命令简介 在安装好linux环境以后第一件事情就是去学习一些linux的基本指令,我在这里用的是CentOS7作演示。 首先在VirtualBox上装好Linux以后,启动我们的linux,输入账号密码以后学习第一个指令 简介 Linux高级命令简介ip addrtou…...
LeetCode:96.不同的二叉搜索树
跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:96.不同的二叉搜索树 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉…...
Linux学习笔记——用户管理
一、用户管理命令 useradd #用户增加命令 usermod #用户修改命令 passwd #密码修改命令 userdel #用户删除命令 su #用户提权命令 1、useradd命令(加用户): 创建并设置用户信息,使用us…...
Baklib揭示内容中台与人工智能技术的创新协同效应
内容概要 在当今信息爆炸的时代,内容的高效生产与分发已成为各行业竞争的关键。内容中台与人工智能技术的结合,为企业提供了一种新颖的解决方案,使得内容创造的流程更加智能化和高效化。 内容中台作为信息流动的核心,能够集中管…...
FreeRTOS从入门到精通 第十四章(队列集)
参考教程:【正点原子】手把手教你学FreeRTOS实时系统_哔哩哔哩_bilibili 一、队列集简介 1、队列集概述 (1)一个队列只允许任务间传递的消息为同一种数据类型,如果需要在任务间传递不同数据类型的消息时,那么就可以…...
Python实现U盘数据自动拷贝
功能:当电脑上有U盘插入时,自动复制U盘内的所有内容 主要特点: 1、使用PyQt5创建图形界面,但默认隐藏 2、通过CtrlAltU组合键可以显示/隐藏界面 3、自动添加到Windows启动项 4、监控USB设备插入 5、按修改时间排序复制文件 6、静…...
Vue.js 什么是 Composition API?
Vue.js 什么是 Composition API? 今天我们来聊聊 Vue 3 引入的一个重要特性:组合式 API(Composition API)。如果你曾在开发复杂的 Vue 组件时感到代码难以维护,那么组合式 API 可能正是你需要的工具。 什么是组合式 …...
关于产品和技术架构的思索
技术架构或者设计应该和产品设计分离,但是又不应该和产品架构独立。 听起来非常的绕并且难以理解。 下面我们用一个例子来解读这两者的关系 产品(族谱图) 如果把人类当作产品,那设计师应该是按照上面设计的(当然是正常的伦理道德)…...
Python设计模式 - 组合模式
定义 组合模式(Composite Pattern) 是一种结构型设计模式,主要意图是将对象组织成树形结构以表示"部分-整体"的层次结构。这种模式能够使客户端统一对待单个对象和组合对象,从而简化了客户端代码。 组合模式有透明组合…...
蓝桥杯模拟算法:蛇形方阵
P5731 【深基5.习6】蛇形方阵 - 洛谷 | 计算机科学教育新生态 我们只要定义两个方向向量数组,这种问题就可以迎刃而解了 比如我们是4的话,我们从左向右开始存,1,2,3,4 到5的时候y就大于4了就是越界了&…...
24_游戏启动逻辑梳理总结
首先这个项目从游戏根入口GameRoot.cs的初始化开始 分为 服务层初始化Svc.cs 与 业务系统层初始化Sys.cs 而服务层 分为 资源加载服务层ResSvc.cs 与 音乐播放服务层AudioSvc.cs 而在 资源加载服务层ResSvc.cs中 初始化了 名字的 配置文件 而音乐播放服务层AudioSvc.cs 暂时没…...
TikTok 推出了一款 IDE,用于快速构建 AI 应用
字节跳动(TikTok 的母公司)刚刚推出了一款名为 Trae 的新集成开发环境(IDE)。 Trae 基于 Visual Studio Code(VS Code)构建,继承了这个熟悉的平台,并加入了 AI 工具,帮助开发者更快、更轻松地构建应用——有时甚至无需编写任何代码。 如果你之前使用过 Cursor AI,T…...
如何运用python爬虫爬取百度贴吧动态加载的图片?
动态加载的图片通常是在页面加载后通过JavaScript异步请求获取的,而requests和BeautifulSoup只能获取页面的初始HTML内容,无法执行JavaScript代码。 要处理动态加载的图片,可以使用以下方法: 1. 使用Selenium Selenium是一个用…...
在Rust应用中访问.ini格式的配置文件
在Rust应用中访问.ini格式的配置文件,你可以使用第三方库,比如 ini 或 config. 下面是一个使用 ini 库的示例,该库允许你读取和解析.ini文件。 使用 ini 库 添加依赖 首先,你需要在你的 Cargo.toml 文件中添加 ini 库的依赖&am…...
Van-Nav:新年,将自己学习的项目地址统一整理搭建自己的私人导航站,供自己后续查阅使用,做技术的同学应该都有一个自己网站的梦想
嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 Van-Nav是一个基于Vue.js开发的导航组件库,它提供了多种预设的样式和灵活的配置选项,使得开发者可以轻松地定制出符合项目需求…...
【某大厂一面】Map和Set区别
在 Java 中,Map 和 Set 都是集合框架中的重要接口,它们具有不同的特性和用途。虽然它们都用于存储一组元素,但它们之间有一些重要的区别。下面将详细介绍它们之间的差异。 1. Set 和 Map 的基本定义 Set 是一个集合接口,它用于存…...
Vue.js组件开发-使用Vue3如何实现上传word作为打印模版
使用Vue 3实现Word模板上传、解析和打印功能的完整解决方案: 一、实现步骤 安装依赖创建文件上传组件实现.docx文件解析创建打印预览组件实现打印功能样式优化 二、完整代码实现 1. 安装依赖 npm install mammoth axios2. 创建文件上传组件(FileUploa…...
Consul持久化配置报错1067---consul_start
报错都是文件写的有问题或者格式问题,直接复制我的这个改改地址就行 先创建文本文件consul_start.txt--->再复制代码保存---->再把.txt改成.bat 持久化存储的地址在:mydata 注:D:\consul\consul_1.20.2_windows_386改成自己consul的…...
动态规划DP 最长上升子序列模型 总览
最长上升子序列模型 最长上升子序列 怪盗基德的滑翔伞...
如何解压7z文件?8种方法(Win/Mac/手机/网页端)
7z 文件是一种高效的压缩文件格式,由 7 - Zip 软件开发者所采用。它运用独特的压缩算法,能显著缩小文件体积,便于存储与传输各类数据,像软件安装包、大型资料集等。但要使用其中内容,就必须解压,因为处于压…...
2023年吉林省职业院校技能大赛网络系统管理样题-网络配置(华三代码)
目录 附录1:拓扑图 附录2:地址规划表 1.S1 2.S3 3.S4 4.S5 5.S7 6.S8 7.S9 8.R1 9.R2 10.R3 11.EG1 12.EG2 13.AC1 14.AC2 附录1:拓扑图 编号 型号...
Flutter使用Flavor实现切换环境和多渠道打包
在Android开发中通常我们使用flavor进行多渠道打包,flutter开发中同样有这种方式,不过需要在原生中配置 具体方案其实flutter官网个了相关示例(https://docs.flutter.dev/deployment/flavors),我这里记录一下自己的操作 Android …...
【linux三剑客】grep练习题
题目 进入/lianxi目录,复制/etc/passwd到当前目录下,然后对passwd进行操作查找出当前passwd文件中以ftp或者mail开头的行,在屏幕上输出。查找出当前passwd文件中有没有以r、m、f开头的行,在屏幕上输出。查找出当前passwd文件中以…...
冬天适合养什么鱼?
各位鱼友们,冬天来了,是不是还在为养什么鱼而烦恼?别担心,今天就来给大家好好推荐一些适合冬天养的鱼,让你的水族箱在寒冷的冬天也能生机勃勃! 一、金鱼:冬日里的“小暖男” 金鱼绝对是冬季养鱼…...
Effective C++ 规则43:学习处理模板化基类内的名称
1、背景 在 C 中,模板化基类为我们提供了强大的灵活性。然而,模板化基类的名称查找却经常会引发困惑,甚至导致编译错误。这是因为模板的名称查找规则与普通类不同。在普通类中,派生类可以直接访问基类的成员变量和成员函数&#…...
DeepSeek R1 linux云部署
云平台:AutoDL 模型加载工具:Ollama 参考:https://github.com/ollama/ollama/blob/main/docs/linux.md 下载Ollama 服务器上下载ollama比较慢,因此我使用浏览器先下载到本地电脑上。 https://ollama.com/download/ollama-linux…...
混合专家模型MoE的全面详解
什么是混合专家(MoE)? 混合专家(MoE)是一种利用多个不同的子模型(或称为“专家”)来提升LLM质量的技术。 MoE的两个主要组成部分是: 专家:每个前馈神经网络(…...
vue3相关知识点
title: vue_1 date: 2025-01-28 12:00:00 tags:- 前端 categories:- 前端vue3 Webpack ~ vite vue3是基于vite创建的 vite 更快一点 一些准备工作 准备后如图所示 插件 Main.ts // 引入createApp用于创建应用 import {createApp} from vue // 引入App根组件 import App f…...
【2025美赛D题】为更美好的城市绘制路线图建模|建模过程+完整代码论文全解全析
你是否在寻找数学建模比赛的突破点?数学建模进阶思路! 作为经验丰富的美赛O奖、国赛国一的数学建模团队,我们将为你带来本次数学建模竞赛的全面解析。这个解决方案包不仅包括完整的代码实现,还有详尽的建模过程和解析,…...
games101-(5/6)
光栅化 投影完成之后,视图区域被确定在从[-1,1]的单位矩阵中,下一步就是光栅化 长宽比:ratio 垂直的可视角度:fild-of-view 可以看到的y 轴的范围,角度越小 越接近正交投影 屏幕坐标系 、 将多边形转化成像素 显示…...
UE5.3 C++ CDO的初步理解
一.UObject UObject是所有对象的基类,往上还有UObjectBaseUtility。 注释:所有虚幻引擎对象的基类。对象的类型由基于 UClass 类来定义。 这为创建和使用UObject的对象提供了 函数,并且提供了应在子类中重写的虚函数。 /** * The base cla…...
前端——js高级25.1.27
复习:对象 问题一: 多个数据的封装提 一个对象对应现实中的一个事物 问题二: 统一管理多个数据 问题三: 属性:组成:属性名属性值 (属性名为字符串,属性值任意) 方…...
Python 魔术方法
1. 什么是魔术方法 在 Python 中,魔术方法(Magic Methods),又叫 特殊方法 或 双下方法,是以两个下划线(__)开头和结尾的方法。 这些方法为 Python 提供了对类和对象的特殊操作功能,…...
websocket webworker教程及应用
WebSocket 和 Web Workers 是两种不同的 Web 技术,分别用于实现实时通信和后台线程处理。以下是它们的简要教程: WebSocket 教程 1. 什么是 WebSocket? WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它允许服务器主动向客户端推…...
qwen2.5-vl:阿里开源超强多模态大模型(包含使用方法、微调方法介绍)
1.简介 在 Qwen2-VL 发布后的五个月里,众多开发者基于该视觉语言模型开发了新的模型,并向 Qwen 团队提供了极具价值的反馈。在此期间,Qwen 团队始终致力于打造更具实用性的视觉语言模型。今天,Qwen 家族的最新成员——Qwen2.5-VL…...
PaddleSeg 从配置文件和模型 URL 自动化运行预测任务
git clone https://github.com/PaddlePaddle/PaddleSeg.git# 在ipynb里面运行 cd PaddleSegimport sys sys.path.append(/home/aistudio/work/PaddleSeg)import os# 配置文件夹路径 folder_path "/home/aistudio/work/PaddleSeg/configs"# 遍历文件夹,寻…...
Java实战项目-基于 springboot 的校园选课小程序(附源码,部署,文档)
Java 基于 springboot 的校园选课小程序 博主介绍:✌程序员徐师兄、8年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战*✌ 🍅文末获取源码联系🍅 👇&…...
网络工程师 (7)进程管理
一、进程相关的概念 (一)定义 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,也是操作系统结构的基础。进程是程序的一次执行实例,具有动…...
大屏 UI 设计风格的未来趋势
在科技飞速革新的时代,大屏设备的应用领域不断拓展,从城市的智能交通指挥中心,到商场的互动广告大屏,再到家庭的超大尺寸智能电视,大屏已然成为信息展示与交互的关键载体。大屏 UI 设计风格也随之不断演变,…...
Kmesh v1.0 正式发布
2025 年 1 月 23 日,Kmesh 团队正式发布了 Kmesh v1.0235。Kmesh 作为一款开源的服务网格解决方案,v1.0 版本在网络流量管理领域引入了多项重磅特性2。具体如下134: IPsec 加密通信:引入 IPsec 加密协议,将节点间流量加…...
低代码系统-产品架构案例介绍、轻流(九)
轻流低代码产品定位为零代码产品,试图通过搭建来降低企业成本,提升业务上线效率。 依旧是从下至上,从左至右的顺序 名词概述运维层底层系统运维层,例如上线、部署等基础服务体系内置的系统能力,发消息、组织和权限是必…...
深入理解动态规划(dp)--(提前要对dfs有了解)
前言:对于动态规划:该算法思维是在dfs基础上演化发展来的,所以我不想讲的是看到一个题怎样直接用动态规划来解决,而是说先用dfs搜索,一步步优化,这个过程叫做动态规划。(该文章教你怎样一步步的…...
C++传送锚点的内存寻址:内存管理
文章目录 1.C/C内存分布回顾2.C内存管理2.1 内存申请2.2 operator new与operator delete函数2.3 定位new表达式 3.关于内存管理的常见知识点3.1 malloc/free和new/delete的区别3.2 内存泄漏 希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力! 继C语…...
webAPI -DOM 相关知识点总结(非常细)
title: WebAPI语法 date: 2025-01-28 12:00:00 tags:- 前端 categories:- 前端WEB API 了解DOM的结构并掌握其基本的操作,体验 DOM 在开发中的作用 API简介 就是使用js来操作html和浏览器 什么是DOM? 就是一个文档对象模型,是用来呈现预计于任意htm…...
Deepseek的RL算法GRPO解读
在本文中,我们将深入探讨Deepseek采用的策略优化方法GRPO,并顺带介绍一些强化学习(Reinforcement Learning, RL)的基础知识,包括PPO等关键概念。 策略函数(policy) 在强化学习中, a…...
设计模式的艺术-策略模式
行为型模式的名称、定义、学习难度和使用频率如下表所示: 1.如何理解策略模式 在策略模式中,可以定义一些独立的类来封装不同的算法,每个类封装一种具体的算法。在这里,每个封装算法的类都可以称之为一种策略(Strategy…...
MyBatis 写法
MyBatis 高效使用技巧 常见 MyBatis 使用技巧,这些技巧有助于简化数据库操作,提高开发效率,并增强系统的性能。 1. 动态 SQL 动态 SQL 让开发者能够依据参数灵活地构建 SQL 语句,避免了手动拼接字符串带来的复杂性和错误风险。…...
Git图形化工具【lazygit】
简要介绍一下偶然发现的Git图形化工具——「lazygit」 概述 Lazygit 是一个用 Go 语言编写的 Git 命令行界面(TUI)工具,它让 Git 操作变得更加直观和高效。 Github地址:https://github.com/jesseduffield/lazygit 主要特点 主要…...
K8s运维管理平台 - xkube体验:功能较多
目录 简介Lic安装1、需要手动安装MySQL,**建库**2、启动命令3、[ERROR] GetNodeMetric Fail:the server is currently unable to handle the request (get nodes.metrics.k8s.io qfusion-1) 使用总结优点优化 补充1:layui、layuimini和beego的详细介绍1.…...