Linux高级--2.6 网络面试问题
tcp 与 udp的区别
1.tcp 是基于连接的 UDP是基于数据包
2.处理并发的方式不通
a.tcp用epoll进行监听的
b. udp是模拟tcp的连接过程,服务端开放一个IP端口,收到连接后,服务端用另一个IP和端口发包给客户端。
3.tcp根据协议MTU黏包及分片 或 默认30ms的延迟发送黏包及分片, 接收端则需要分包,分包有两种分包方案。
tcp分包方案1:可以给包头(用户数据的头)前几个字节(自己定)存放包长,接收端先解析长度,一次性接收整包长度后再接收下一包。
tcp分包方案2:包的末尾可以加分割符 ,比如\r\n\r\n, 检索分隔符以确认分包的位置。
tcp 的两种方案都是基于tcp的有序接收来处理的。
udp是无序的,发送端没有黏包。每包的最大长度就是MTU的值。如果接收端需要有序接收则需要发送端给每个包编上号码,接收端则重新排序。
4.使用场景不同 tcp因为有延迟确认,注定了tcp无法应用到快速响应场景中,游戏,直播。UDP则可以
5.tcp适合长连接,因为有握手和挥手。udp适合短连接,一次发送 一次响应的那种,比如DNS请求
DNS 请求报文通常使用 UDP 协议,并且使用端口号 53。UDP 协议适用于 DNS 因为它简单且开销低,适合快速的请求和响应场景。
但在某些情况下,DNS 也会使用 TCP 协议:
- 响应数据大于 512 字节:如果 DNS 响应的内容较多(如包含许多记录或 DNSSEC 数据),UDP 数据包无法容纳,客户端会通过 TCP 重新请求。
- 区域传送 (Zone Transfer):区域传送(如在主从 DNS 服务器之间同步区域数据)使用 TCP 协议。
- EDNS(扩展 DNS):启用 EDNS 后,UDP 包的大小上限可以增加,但如果数据依然超出,仍然会切换到 TCP。
总结来说,常规 DNS 查询使用 UDP,大数据或特殊情况切换到 TCP。
MTU的讨论
----------------------------------------------------------------------------------------------
MTU(Maximum Transmission Unit,最大传输单元)限制的是网络数据帧中 有效负载(payload) 的最大字节长度,即 IP 数据包中的数据部分的最大大小。
通常,MTU 的限制包括以下内容:
- IP 层数据:对于 IPv4 网络,标准的以太网 MTU 为 1500 字节,这表示 IP 数据包的最大大小(包括 IP 头部和数据部分)不能超过 1500 字节。
- 链路层帧:以太网帧的总大小会包含以太网头部(通常为 14 字节)和 CRC 校验部分(通常为 4 字节),因此,最终传输的以太网帧总长度为 1500 + 14 + 4 = 1518 字节(如果启用了 VLAN,额外增加 4 字节)。
MTU 限制的关键点
- 应用层数据:在传输时会被拆分成更小的 IP 数据包片段,以适应 MTU 限制。
- IP 分片:如果数据包大于 MTU,会在传输时分片。
-------------------------------------------------------------------------------------------
在已知 MTU 的情况下,TCP 和 UDP 的 IP 头部长度、TCP/UDP 头部长度都是固定的,因此可以计算出用户负载(payload)的数据长度。
具体计算方法
假设标准的以太网 MTU 为 1500 字节,并且我们在 IPv4 环境下:
1. IP 头部
- IPv4 头部长度:通常为 20 字节(无选项字段时)。
- IPv6 头部长度:固定为 40 字节(无选项字段时)。
2. TCP 和 UDP 头部
- TCP 头部长度:通常为 20 字节(无选项字段时)。
- UDP 头部长度:固定为 8 字节。
计算用户负载长度
1. TCP 数据包的有效负载(以 IPv4 为例)
- 总 MTU 为 1500 字节。
- 减去 IP 头部(20 字节)和 TCP 头部(20 字节): 1500−20−20=1460 字节1500 - 20 - 20 = 1460 \text{ 字节}1500−20−20=1460 字节
- 因此,对于标准的 IPv4 TCP 包,用户数据的最大长度是 1460 字节。
2. UDP 数据包的有效负载(以 IPv4 为例)
- 总 MTU 为 1500 字节。
- 减去 IP 头部(20 字节)和 UDP 头部(8 字节): 1500−20−8=1472 字节1500 - 20 - 8 = 1472 \text{ 字节}1500−20−8=1472 字节
- 因此,对于标准的 IPv4 UDP 包,用户数据的最大长度是 1472 字节。
结果总结
在 IPv4 环境下:
- TCP:用户数据最大为 1460 字节。
- UDP:用户数据最大为 1472 字节。
这种计算方式依赖于默认的头部大小,如果有其他选项字段(如 IP 选项、TCP 选项),则用户数据的最大长度会相应减少。
IP头和TCP的选项字段一般都有可能是什么
在 IP 和 TCP 协议中,选项字段是可选的附加字段,通常用于扩展功能或优化网络性能。以下是 IP 和 TCP 中常见的选项字段:
1. IP 头部选项字段
IP 头部选项字段通常在 IPv4 中使用较多,IPv6 则使用扩展头来处理类似功能。IPv4 的 IP 头部选项字段的最大长度是 40 字节,一般包括以下内容:
- 记录路由 (Record Route, RR):记录数据包在经过的路由器的 IP 地址,以帮助网络诊断和追踪路径。通常限制最多记录 9 个路由器地址。
- 时间戳 (Timestamp):记录数据包经过的每个路由器的时间戳,用于网络时延测量。
- 松散源路由 (Loose Source Routing, LSR):允许发送方指定数据包经过的部分路由节点,其他节点则由路由器自动选择。该选项有助于绕过拥塞路由,但较少使用。
- 严格源路由 (Strict Source Routing, SSR):要求数据包必须严格按照指定的路由节点传输,不允许自动选择其他路径。
- 安全 (Security):用于标记数据包的安全级别,适用于军事或其他高安全要求的环境,但在实际网络中应用较少。
2. TCP 头部选项字段
TCP 头部选项字段主要用于优化传输性能,通常 TCP 头部选项的最大长度是 40 字节。以下是常见的 TCP 选项:
- 最大段大小 (Maximum Segment Size, MSS):由客户端和服务器在建立连接时交换,表示每个 TCP 段的最大数据负载大小,常用于避免 IP 分片。
- 窗口缩放 (Window Scale):允许 TCP 窗口大小扩大,以支持更大的窗口,优化高带宽、高延迟的网络传输。
- 选择性确认 (Selective Acknowledgment, SACK):允许接收方确认非连续接收到的数据段,优化丢包恢复,减少重传的数据量。
- 时间戳 (Timestamp):用于 RTT(Round Trip Time)计算,帮助更精准地管理数据传输时间,并有助于防止旧数据包重传引起的干扰(防止重播攻击)。
- NOP(No Operation):填充选项,不执行操作,通常用于对齐字段,确保其他选项按 4 字节对齐。
- 快速打开 (TCP Fast Open, TFO):通过保存加密的 Cookie 进行快速的 TCP 连接重用,减少三次握手延迟,提升传输效率。
总结
- IP 头选项字段:主要用于网络路径跟踪、路由控制和安全标记,虽然具备强大功能,但实际应用较少。
- TCP 头选项字段:广泛用于优化传输,特别是在现代网络中,MSS、窗口缩放和 SACK 是最常见的选项。
MTU的值在哪修改
在操作系统中,可以通过命令来修改网络接口的 MTU 值。不同系统的修改方式略有差异,以下是常见方法:
### 1. **Linux**
在 Linux 上,可以使用 `ip` 或 `ifconfig` 命令来修改 MTU 值。
- 使用 `ip` 命令:
```bash
sudo ip link set dev <interface> mtu <value>
例如,设置 `eth0` 接口的 MTU 为 1400 字节:
```bash
sudo ip link set dev eth0 mtu 1400
- 使用 `ifconfig` 命令:
```bash
sudo ifconfig <interface> mtu <value> up
```
例如:
```bash
sudo ifconfig eth0 mtu 1400 up
```
### 2. **Windows**
在 Windows 上,可以通过 `netsh` 命令修改 MTU 值:
- 打开命令提示符或 PowerShell(以管理员身份运行),然后输入以下命令:
```powershell
netsh interface ipv4 set subinterface "<interface_name>" mtu=<value> store=persistent
```
例如,将接口名为 `Ethernet` 的 MTU 设置为 1400:
```powershell
netsh interface ipv4 set subinterface "Ethernet" mtu=1400 store=persistent
```
### 3. **macOS**
在 macOS 上,可以使用 `ifconfig` 命令:
```bash
sudo ifconfig <interface> mtu <value>
```
例如,设置 `en0` 接口的 MTU 为 1400:
```bash
sudo ifconfig en0 mtu 1400
```
### 4. **路由器**
在路由器上,MTU 设置通常在 **管理界面**的网络接口或 WAN 设置中。不同的路由器管理界面略有不同,通常在**高级设置**或**网络设置**中找到 MTU 配置选项。
### 注意事项
- 修改 MTU 值可能会影响网络性能,应根据具体网络环境和需求进行调整。
- 调整 MTU 值后,通常无需重启网络接口,但某些网络配置可能需要重启。
MSS、窗口缩放和 SACK 这几个功能的具体讲解
1. MSS(Maximum Segment Size,最大段大小)
MSS 是 TCP 连接在三次握手过程中由客户端和服务器协商决定的一个参数,它定义了每个 TCP 数据段中用户数据部分(不含 TCP/IP 头部)的最大大小。
- 工作原理:
- MSS 的值是基于 MTU(最大传输单元)计算得出,通常为 MTU - IP头长度 - TCP头长度。在以太网上,典型 MTU 是 1500 字节,去掉 IP(20 字节)和 TCP 头部(20 字节)后,MSS 通常是 1460 字节。
- 通过协商 MSS 值,发送方和接收方知道每个数据段最大可以发送多少字节的有效数据,避免了过大的数据段导致 IP 分片,提高了传输效率。
- 优点:
- 避免了 IP 分片:确保数据段大小不超过路径上的 MTU。
- 提高传输效率:减少分片的可能性,降低重传的开销。
2. 窗口缩放(Window Scale)
TCP 的窗口缩放是一个选项,用于支持更大的 TCP 窗口大小。它解决了默认 TCP 窗口大小的限制,允许在高带宽、长延迟(高 BDP)网络中更高效地传输数据。
- 背景:
- TCP 的窗口大小字段默认只能容纳 16 位数值,最大窗口大小为 65535 字节(64 KB)。
- 在高带宽、长延迟的网络中(如卫星网络或光纤链路),64 KB 的窗口不足以发挥带宽优势。
- 工作原理:
- 窗口缩放选项在三次握手期间协商,它是一个 8 位值,表示对窗口大小进行的左移位数,最大值为 14。
- 通过窗口缩放,可以将窗口大小扩大到 65535 * 2^14 = 1 GB,以支持大带宽延迟积 (BDP) 网络。
- 优点:
- 允许更大的窗口大小,提高了数据流传输的效率。
- 有助于在高带宽、高延迟的网络中充分利用链路。
3. SACK(Selective Acknowledgment,选择性确认)
SACK 是一种数据丢失恢复机制,允许接收方只确认丢失的特定数据段,而非重新传输已成功接收的所有数据段。TCP 默认的确认机制是累计确认(Cumulative Acknowledgment),只能确认所有连续收到的数据。这种方式在数据丢包时会导致大量数据重传,而 SACK 则可以减少这种冗余。
- 工作原理:
- SACK 在 TCP 头中增加一个选项字段,接收方可以通过该选项告诉发送方哪些数据段已成功接收,哪些数据段丢失。
- 当发送方收到 SACK 信息后,只重传丢失的数据段,避免重传已成功接收的数据。
- 优点:
- 减少重传数据量,降低网络负担,尤其在高丢包环境中更为有效。
- 提高了网络传输的效率和可靠性,加快了丢包恢复速度。
总结
- MSS:限制每个 TCP 数据段的最大数据大小,避免 IP 分片。
- 窗口缩放:允许更大窗口大小,以支持高带宽、高延迟网络,充分利用网络资源。
- SACK:提供精确的丢包信息,减少不必要的重传,提高丢包恢复效率。
这些选项广泛应用于现代 TCP 连接中,尤其在高带宽和高延迟的网络环境中,有效提升了网络的整体传输性能。
窗口缩放的选项段是否会被攻击,假如被人设置为3,则会反复重传?
窗口缩放选项确实存在被攻击的可能性,称为 窗口缩放攻击。在这种攻击中,恶意方可以在 TCP 连接建立过程中篡改或伪造窗口缩放因子,将其设置为较小的值,比如 1 或 3。这样会导致 TCP 发送方的窗口大小严重受限,传输效率大幅降低,甚至可能导致大量的 重传 或 带宽浪费。
窗口缩放攻击的具体原理
窗口缩放因子是在 TCP 三次握手期间协商的,因此恶意方可以在这一过程中进行中间人攻击(MITM),将窗口缩放因子修改为非常小的值。这样会导致以下问题:
- 窗口大小受限:TCP 窗口大小由 窗口大小 = 初始窗口大小 × 2^缩放因子 计算得到。若缩放因子被恶意设置为 1 或 3,那么窗口大小可能会被限制在很小的范围(例如几 KB),导致数据传输受到严重限制。
- 频繁等待和超时:由于窗口大小限制,发送方每次只能发送少量数据,并在接收方确认后才能继续发送。这会导致频繁等待,降低吞吐量,增加 RTT。
- 频繁重传:在窗口缩放因子非常小时,发送方在高延迟网络环境中可能会频繁触发超时重传,进一步加剧网络拥塞,影响传输稳定性。
如何防范窗口缩放攻击
- 验证三次握手数据:在 TCP 连接建立时,可以通过防火墙或安全网关对三次握手包进行完整性检查,确保窗口缩放因子未被篡改。
- 限制最小窗口缩放因子:可以通过网络配置或安全策略,设置一个合理的窗口缩放因子的最小值。例如,设定最小值为 6(窗口扩大到至少 64 KB),避免过小的因子影响性能。
- 使用加密协议:通过加密手段(如 TLS)建立安全通道,确保 TCP 三次握手过程中交换的选项字段不易被篡改。
- 监测网络性能异常:网络设备可以设置监控和告警机制,当发现窗口大小异常小或出现频繁超时重传时,自动触发告警并进一步检查原因。
总结
窗口缩放确实可能被恶意攻击者利用来影响连接性能,但通过加密、网络监控和合理配置,可以有效降低此类攻击的风险。
如何在用户层获取 MSS
对于TCP而言 协议中没有MTU的值的确认,MSS其实就是MTU算出的一个值,一般由内核自己管理。
通过 getsockopt 函数,可以在用户层获得当前 TCP 连接的 MSS 值。这是通过查询套接字的 TCP_MAXSEG 选项来实现的,例如:
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/tcp.h> // TCP_MAXSEG
#include <arpa/inet.h>
int main() {
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
perror("Socket creation failed");
return -1;
}
// 设置服务器地址
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(80); // 使用 HTTP 端口
inet_pton(AF_INET, "192.168.1.1", &server_addr.sin_addr); // 目标IP
// 连接服务器
if (connect(sock, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
perror("Connect failed");
return -1;
}
// 获取 MSS 值
int mss;
socklen_t len = sizeof(mss);
if (getsockopt(sock, IPPROTO_TCP, TCP_MAXSEG, &mss, &len) == 0) {
printf("MSS value: %d\n", mss);
} else {
perror("Failed to get MSS");
}
close(sock);
return 0;
}
为什么 MSS 设置由系统控制
- MSS 受路径 MTU 决定:MSS 通常是通过路径上的 MTU 减去 IP 和 TCP 头部长度来自动确定的,防止了路径上数据包被分片,确保传输效率。
- 自动调整传输大小:操作系统内核会依据 MSS 值调整 TCP 发送缓冲区的分片大小,确保不会发送超过 MSS 的数据包,从而避免 IP 层的分片处理,提升网络性能。
- 用户层应用程序不必担心分片:通过 send 或 write 的数据长度可以任意,但 TCP 会在内核中自动分段,因此用户层应用程序无需直接控制分片过程。
因此,通过 getsockopt 获取 MSS 后,用户层应用程序可以大致控制发送数据的长度,防止接近或超过 MSS,以最大化数据传输效率。
0voice · GitHub
相关文章:
Linux高级--2.6 网络面试问题
tcp 与 udp的区别 1.tcp 是基于连接的 UDP是基于数据包 2.处理并发的方式不通 a.tcp用epoll进行监听的 b. udp是模拟tcp的连接过程,服务端开放一个IP端口,收到连接后,服务端用另一个IP和端口发包给客户端。 3.tcp根据协议MTU黏包及…...
HTML 画布:创意与技术的融合
HTML 画布:创意与技术的融合 HTML 画布(<canvas>)元素是现代网页设计中的一个强大工具,它为开发者提供了一个空白画布,可以在上面通过JavaScript绘制图形、图像和动画。这种技术不仅为网页增添了视觉吸引力,还极大地丰富了用户的交互体验。本文将深入探讨HTML画布…...
python EEGPT报错:Cannot cast ufunc ‘clip‘ output from dtype(‘float64‘)
今天在运行EEGPT的时候遇见了下面的问题,首先是nme报错,然后引起了numpy的报错: numpy.core._exceptions._UFuncOutputCastingError: Cannot cast ufunc clip output from dtype(float64)在网上找了好久的教程,但是没有找到。猜测…...
揭秘区块链隐私黑科技:零知识证明如何改变未来
文章目录 1. 引言:什么是零知识证明?2. 零知识证明的核心概念与三大属性2.1 完备性(Completeness)2.2 可靠性(Soundness)2.3 零知识性(Zero-Knowledge) 3. 零知识证明的工作原理4. 零…...
mysql之MHA
MHA 1.概述 MHA(Master High Availability)是一种用于MySQL数据库的高可用性解决方案,旨在实现自动故障切换和最小化数据丢失。它由MHA Manager和MHA Node组成,适用于一主多从的架构。 是建立在主从复制基础之上的故障切换的软件…...
《XML》教案 第2章 使第4章 呈现XML文档
《XML》教案 第2章 使第4章 呈现XML文档 主讲人: 回顾上一章: [10分钟] 2 课程知识点讲解: 2 通过级联样式表转换XML文档:[15分钟] 3 通过可扩展样式表语言转换XML文档 :[5分钟] 4 嵌套 for 循环 :[20分钟] 5 本章总结…...
Centos7离线安装Docker脚本
1、文件结构 docker_install/ ├── docker-27.4.1.tgz ├── docker-compose-linux-x86_64 └── docker_install.sh 2、下载docker安装包 wget https://download.docker.com/linux/static/stable/x86_64/docker-27.4.1.tgz 3、下载docker-compose wget https://githu…...
Linux -- 互斥的底层实现
lock 和 unlock 的汇编伪代码如下: lock:movb $0,%alxchgb %al,mutexif(al 寄存器的内容>0)return 0;else挂起等待;goto lock;unlock:movb $1,mutex唤醒等待 mutex 的线程;return 0; 我们来理解以下上面的代码。 首先线程 1 申请锁&…...
hhdb客户端介绍(57)
技术选型 选择 MySQL 数据库的原因 开源免费: MySQL 作为一款开源数据库,不仅免费提供给用户,还具备强大的功能和灵活性,有效降低了企业的软件许可成本。 卓越的性能: 在处理大规模数据集和高并发访问时,…...
elasticsearch 杂记
8.17快速安装与使用 系统:ubuntu 24 下载地址: https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.17.0-linux-x86_64.tar.gz 解压后进入目录:cd ./elasticsearch-8.17.0 运行:./bin/elasticsearch 创…...
大功率LED基础学习笔记
大功率 LED 基础学习笔记 一、 LED发光原理 (1)传统白炽灯发光原理 大家从小听说爱迪生发明(改良)电灯,其白炽灯工作原理为:灯丝通电加热到白炽状态,利用热辐射发出可见光的电光源。由于发光…...
EdgeX Core Service 核心服务之 Core Command 命令
EdgeX Core Service 核心服务之 Core Command 命令 一、概述 Core-command(通常称为命令和控制微服务)可以代表以下角色向设备和传感器发出命令或动作: EdgeX Foundry中的其他微服务(例如,本地边缘分析或规则引擎微服务)EdgeX Foundry与同一系统上可能存在的其他应用程序…...
Debian12使用RKE2离线部署3master2node三主两从的k8s集群详细教程
一、前提步骤 1、在各个节点执行(所有 Server 和 Agent 节点) apt install apparmor -y apt install curl -y2、设置各节点Host文件(所有 Server 和 Agent 节点) 192.168.144.175 master01 192.168.144.167 master02 192.168.1…...
【Redis】配置序列化器
1. 配置FastJSON2 FastJSON2相比与FastJSON更安全,更推荐使用。 import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONReader; import com.alibaba.fastjson2.JSONWriter; import com.alibaba.fastjson2.filter.Filter;import org.springframew…...
数字IC后端设计实现十大精华主题分享
今天小编给大家分享下吾爱IC社区星球上周十大后端精华主题。 Q1:星主,请教个问题,长tree的时候发现这个scan的tree 的skew差不多400p,我高亮了整个tree的schematic,我在想是不是我在这一系列mux前边打断,设置ignore p…...
【Docker】部署MySQL容器
关于docker,Windows上使用Powershell/CMD执行指令,Linux系统直接使用终端执行指令。 拉取MySQL 也可以跳过拉取步骤,直接run,这样本地容器不存在的话,会自动拉取最新/指定的版本。 # 默认拉取最新版本 docker pull …...
go语言中的字符串详解
目录 字符串的基本特点 1.字符串的不可变性 2.其他基本特点 字符串基本操作 1. 创建字符串 2. 获取字符串长度 3. 字符串拼接 4. 遍历字符串 5. 字符串比较 字符串常用函数 1. 判断子串 2. 查找与索引 3. 字符串替换 4. 分割与连接 5. 修剪字符串 6. 大小写转换…...
数据中台从centos升级为国产操作系统后,资源增加字段时,提交报500错误
文章目录 背景一、步骤1.分析阶段2.查看nginx3.修改用户(也可以修改所有者权限) 背景 故障报错: nginx报错信息: 2024/12/19 15:25:31 [crit, 500299#0: *249 onen0 " /var/lib/nginx/tmp/cient body/0000000001" f…...
centos-stream9系统安装docker
如果之前安装过docker需要删除之前的。 for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo yum -y remove $pkg; done 安装yum-utils工具: dnf -y install yum-utils dnf-plugins-core 设置存储库&…...
计算机网络基础20道选择题,你能答对几题?
大家好,我是阿祥。今天给大家准备了一场关于计算机网络基础知识的小测验,包含20道精选的选择题。这不仅是对大家网络知识的一次检验,也是一次有趣的学习机会。 IPv4地址的长度是多少位?A. 16位 B. 32位 C. 64位 D. 128位答案&…...
分布式协同 - 分布式事务_2PC 3PC解决方案
文章目录 导图Pre2PC(Two-Phase Commit)协议准备阶段提交阶段情况 1:只要有一个事务参与者反馈未就绪(no ready),事务协调者就会回滚事务情况 2:当所有事务参与者均反馈就绪(ready&a…...
虚幻引擎结构之UWorld
Uworld -> Ulevel ->Actors -> AActor 在虚幻引擎中,UWorld 类扮演着至关重要的角色,它就像是游戏世界的总指挥。作为游戏世界的核心容器,UWorld 包含了构成游戏体验的众多元素,从游戏实体到关卡设计,再到物…...
牛客网刷题 ——C语言初阶——BC114 小乐乐排电梯
1.牛客网 :BC114 小乐乐排电梯 题目描述: 小乐乐学校教学楼的电梯前排了很多人,他的前面有n个人在等电梯。电梯每次可以乘坐12人,每次上下需要的时间为4分钟(上需要2分钟,下需要2分钟)。请帮助…...
43. Three.js案例-绘制100个立方体
43. Three.js案例-绘制100个立方体 实现效果 知识点 WebGLRenderer(WebGL渲染器) WebGLRenderer是Three.js中最常用的渲染器之一,用于将3D场景渲染到网页上。 构造器 WebGLRenderer(parameters : Object) 参数类型描述parametersObject…...
验证 Dijkstra 算法程序输出的奥秘
一、引言 Dijkstra 算法作为解决图中单源最短路径问题的经典算法,在网络路由、交通规划、资源分配等众多领域有着广泛应用。其通过不断选择距离源节点最近的未访问节点,逐步更新邻居节点的最短路径信息,以求得从源节点到其他所有节点的最短路径。在实际应用中,确保 Dijkst…...
springboot 3 websocket react 系统提示,选手实时数据更新监控
构建一个基于 Spring Boot 3 和 WebSocket 的实时数据监控系统,并在前端使用 React,可以实现选手实时数据的更新和展示功能。以下是该系统的核心设计和实现思路: 1. 系统架构 后端 (Spring Boot 3): 提供 WebSocket 服务端,处理…...
SpringBoot使用Validation校验参数
准备工作 引入相关依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency> 约束性注解(简单)说明 AssertFalse可以为null,如果不为null的话必…...
AAAI-2024 | 大语言模型赋能导航决策!NavGPT:基于大模型显式推理的视觉语言导航
作者:Gengze Zhou, Yicong Hong, Qi Wu 单位:阿德莱德大学,澳大利亚国立大学 论文链接: NavGPT: Explicit Reasoning in Vision-and-Language Navigation with Large Language Models (https://ojs.aaai.org/index.p…...
Scala迭代更新
在Scala中,迭代器(Iterator)是一种用于遍历集合(如数组、列表、集合等)的元素而不暴露其底层表示的对象。迭代器提供了一种统一的方法来访问集合中的元素,而无需关心集合的具体实现。 在Scala中,…...
算法练习——位运算
前言:位运算的方法大多比较抽象,很难想到。 一:判断字符是否唯一 题目要求: 解题思路: 法一:使用hash的思想,统计每一个字母出现的次数,再通过一次循环遍历查询是否有超过1的字母&…...
“文件夹管理”与“标签管理”如何合理使用
在现代信息化的工作与生活环境中,文件夹管理与标签管理是两种常见的信息组织方法。合理使用文件夹与标签管理、提高信息检索效率、优化工作流程是实现高效信息管理的关键。其中,提高信息检索效率尤为重要,因为在海量的数据和文件中࿰…...
【学习总结|DAY023】Java高级技术
大家好,今天我们来聊聊 Java 中的几个高级技术:单元测试、反射、注解和动态代理。这些技术在源码、框架和架构师层面发挥着重要作用,掌握它们能让我们更深入地理解 Java 的底层原理,并提升代码质量和开发效率。 单元测试…...
java 对mongodb操作封装工具类
在 Java 中,封装 MongoDB 操作的工具类是非常常见的做法。使用 MongoDB 官方的 Java 驱动程序,结合常用的工具类封装,可以使得与 MongoDB 的交互更加方便和清晰。下面是一个简单的 MongoDB 操作封装工具类的示例代码。 前提 首先࿰…...
Spark-Streaming集成Kafka
Spark Streaming集成Kafka是生产上最多的方式,其中集成Kafka 0.10是较为简单的,即:Kafka分区和Spark分区之间是1:1的对应关系,以及对偏移量和元数据的访问。与高版本的Kafka Consumer API 集成时做了一些调整,下面我们…...
最大似然检测在通信解调中的应用
最大似然检测(Maximum Likelihood Detection,MLD),也称为最大似然序列估计(Maximum Likelihood Sequence Estimation,MLSE),是一种在通信系统中广泛应用的解调方法。其核心思想是在给…...
Bert各种变体——RoBERTA/ALBERT/DistillBert
RoBERTa 会重复一个语句10次,然后每次都mask不同的15%token。丢弃了NSP任务,论文指出NSP任务有时甚至会损害性能。使用了BPE ALBERT 1. 跨层参数共享 可以共享多头注意力层的参数,或者前馈网络层的参数,或者全部共享。 实验结果…...
力扣周赛T2-执行操作后不同元素的最大数量
给你一个整数数组 nums 和一个整数 k。 你可以对数组中的每个元素 最多 执行 一次 以下操作: 将一个在范围 [-k, k] 内的整数加到该元素上。 返回执行这些操作后,nums 中可能拥有的不同元素的 最大 数量。 示例 1: 输入: nums [1…...
uniapp 3分钟集成轮播广告图
先上效果图 顶部广告栏为 移动app常见需求,今天主要演示如何快速实现.这里还是基于 《星云erp-移动版》演示版 (自行下载 导入 Hbuilder, 后端接口可以直接使用我演示接口,不需要修改) 第一步: 组件选择 我们直接使用uni-swipe…...
图像修复和编辑大一统 | 腾讯北大等联合提出BrushEdit:BrushNet进阶版来了
文章链接:https://arxiv.org/pdf/2412.10316 项目链接:https://liyaowei-stu.github.io/project/BrushEdit 亮点直击 提出了BrushEdit,这是先前BrushNet模型的高级迭代版本。BrushEdit通过开创基于修复(inpainting)的图…...
极狐GitLab 17.7正式发布,可从 GitLab 丝滑迁移至极狐GitLab【二】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...
Python基础知识回顾
数据类型 Python可以区分整数(integers、下文简写为int)、浮点数(float)、字符串(string)和布尔值(Boolean)等数据类型。 1)int是可正可负的整数 2)float包…...
SpringCloud2023集成Nacos2.4.3
基本都是最新版,踩了两天的坑终于集成上了,实现了多环境配置。 使用版本 关键应用版本备注Java21Oracle OpenJDK 21.0.5Spring Boot3.2.4Spring Cloud2023.0.1Spring Cloud Alibaba2023.0.1.3Nacos2.4.3单机模式 nacos安装 我学习过程使用的是windows…...
数势科技指标平台, 让数据产生最大价值
近来,指标体系和指标平台的重要性正被越来越多的业界同仁所认可。作为行业领先的数据智能产品提供商,数势科技最早推出了统一指标开发管理平台这一突破性产品(2021年获得软著),并首家完成了中国信通院数据指标管理平台…...
【玩转MacBook】Maven安装
下载Maven 官网: https://maven.apache.org/download.cgi 下载 Zip 类型的压缩包: 配置环境变量 以管理员身份编辑配置文件。注意,由于 MacBook 上使用了 zsh 命令行,所以需要编辑~/.zshrc文件而不是~/.bash_profile文件&am…...
OpenGL笔记(1)
GLFW的函数说明 GLFW: Window guide 窗口创建提示 在创建窗口和上下文之前,可以设置多个提示。有些提示影响窗口本身,另一些则影响帧缓冲区或上下文。这些提示每次通过 glfwInit 初始化库时都会被重置为默认值。 整数值的提示可以通过 glfwWindowHint …...
前端Python应用指南(二)深入Flask:理解Flask的应用结构与模块化设计
《写给前端的python应用指南》系列: (一)快速构建 Web 服务器 - Flask vs Node.js 对比 书接上文,这一篇将会深入了解下Flask,这个轻量级的Web框架,非常适合用来构建小型应用和快速原型开发。但是&#x…...
前端Python应用指南(三)Django vs Flask:哪种框架适合构建你的下一个Web应用?
《写给前端的python应用指南》系列: (一)快速构建 Web 服务器 - Flask vs Node.js 对比(二)深入Flask:理解Flask的应用结构与模块化设计 在上一篇博文中,我们深入探讨了Flask框架,…...
Unity3D Huatuo技术原理剖析详解
前言 在游戏开发领域,Unity3D凭借其强大的跨平台能力和丰富的功能,成为了众多开发者的首选工具。而在Unity3D的生态系统中,Huatuo作为一款重要的插件,为游戏开发带来了极大的便利。本文将深入剖析Huatuo的技术原理,并…...
复习打卡大数据篇——Hadoop HDFS 03
目录 1. HDFS元数据存储 2. HDFS HA 高可用 1. HDFS元数据存储 HDFS中的元数据按类型可以分为: 文件系统的元数据:包括文件名、目录名、修改信息、block的信息、副本信息等。datanodes的状态信息:比如节点状态、使用率等。 HDFS中的元数…...
宠物行业的出路:在爱与陪伴中寻找增长新机遇
在当下的消费市场中,如果说有什么领域能够逆势而上,宠物行业无疑是一个亮点。当人们越来越注重生活品质和精神寄托时,宠物成为了许多人的重要伴侣。它们不仅仅是家庭的一员,更是情感的寄托和生活的调剂。然而,随着行业…...