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

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 协议

  1. 响应数据大于 512 字节:如果 DNS 响应的内容较多(如包含许多记录或 DNSSEC 数据),UDP 数据包无法容纳,客户端会通过 TCP 重新请求。
  2. 区域传送 (Zone Transfer):区域传送(如在主从 DNS 服务器之间同步区域数据)使用 TCP 协议。
  3. 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),将窗口缩放因子修改为非常小的值。这样会导致以下问题:

  1. 窗口大小受限:TCP 窗口大小由 窗口大小 = 初始窗口大小 × 2^缩放因子 计算得到。若缩放因子被恶意设置为 1 或 3,那么窗口大小可能会被限制在很小的范围(例如几 KB),导致数据传输受到严重限制。
  2. 频繁等待和超时:由于窗口大小限制,发送方每次只能发送少量数据,并在接收方确认后才能继续发送。这会导致频繁等待,降低吞吐量,增加 RTT。
  3. 频繁重传:在窗口缩放因子非常小时,发送方在高延迟网络环境中可能会频繁触发超时重传,进一步加剧网络拥塞,影响传输稳定性。

如何防范窗口缩放攻击

  1. 验证三次握手数据:在 TCP 连接建立时,可以通过防火墙或安全网关对三次握手包进行完整性检查,确保窗口缩放因子未被篡改。
  2. 限制最小窗口缩放因子:可以通过网络配置或安全策略,设置一个合理的窗口缩放因子的最小值。例如,设定最小值为 6(窗口扩大到至少 64 KB),避免过小的因子影响性能。
  3. 使用加密协议:通过加密手段(如 TLS)建立安全通道,确保 TCP 三次握手过程中交换的选项字段不易被篡改。
  4. 监测网络性能异常:网络设备可以设置监控和告警机制,当发现窗口大小异常小或出现频繁超时重传时,自动触发告警并进一步检查原因。

总结

窗口缩放确实可能被恶意攻击者利用来影响连接性能,但通过加密、网络监控和合理配置,可以有效降低此类攻击的风险。

如何在用户层获取 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 设置由系统控制

  1. MSS 受路径 MTU 决定:MSS 通常是通过路径上的 MTU 减去 IP 和 TCP 头部长度来自动确定的,防止了路径上数据包被分片,确保传输效率。
  2. 自动调整传输大小:操作系统内核会依据 MSS 值调整 TCP 发送缓冲区的分片大小,确保不会发送超过 MSS 的数据包,从而避免 IP 层的分片处理,提升网络性能。
  3. 用户层应用程序不必担心分片:通过 send 或 write 的数据长度可以任意,但 TCP 会在内核中自动分段,因此用户层应用程序无需直接控制分片过程。

因此,通过 getsockopt 获取 MSS 后,用户层应用程序可以大致控制发送数据的长度,防止接近或超过 MSS,以最大化数据传输效率。


Sign in · GitLab

相关文章:

2.6 网络面试问题

tcp 与 udp的区别 1.tcp 是基于连接的 UDP是基于数据包 2.处理并发的方式不通 a.tcp用epoll进行监听的 b. udp是模拟tcp的连接过程&#xff0c;服务端开放一个IP端口&#xff0c;收到连接后&#xff0c;服务端用另一个IP和端口发包给客户端。 3.tcp根据协议MTU黏包及…...

02-10.python入门基础一Python模块与包(二)

五、Python 包的概念 &#xff08;一&#xff09;包的定义与结构 在 Python 中&#xff0c;“包”&#xff08;Package&#xff09;是一种按照目录来组织模块的方式&#xff0c;它允许开发者将相关的模块集合在一起&#xff0c;形成一个更具逻辑性和结构性的代码单元。 从物…...

[WiFi] WiFi 802.1x介绍及EAP认证流程整理

802.1X Wi-Fi 802.1X 是一种网络访问控制协议&#xff0c;常用于保护无线网络。它提供了一种基于端口的网络访问控制机制&#xff0c;主要用于在用户和网络之间建立安全的连接。以下是 802.1X 的一些关键特点&#xff1a; 认证框架 802.1X 使用 EAP&#xff08;可扩展认证协议…...

前端通过new Blob下载文档流(下载zip或excel)

当后端返回这样的预览&#xff1a; 前端该如何下载呢&#xff1f;首先在axios请求里&#xff0c;加入第三个参数{ responseType: ‘blob’ }。 proxy.$post(url, params, { responseType: blob }).then((res)>{downloadFormat(res) });然后在一个函数里处理返回&#xff0c…...

R 常用的内置软件包及功能介绍

R 中有许多内置包&#xff0c;提供了丰富的功能来帮助用户进行数据分析、统计建模、图形可视化等任务。以下是一些常用的内置包及其功能简介&#xff1a; 1. stats 包 stats 是 R 的一个核心包&#xff0c;几乎每个 R 用户都会使用它。它包含了许多统计分析的函数&#xff0c…...

基于 HC_SR04的超声波测距数码管显示(智能小车超声波避障部分)

超声波测距模块HC-SR04 1、产品特色 ①典型工作用电压&#xff1a;5V ②超小静态工作电流&#xff1a;小于 5mA ③感应角度(R3 电阻越大,增益越高,探测角度越大)&#xff1a; R3 电阻为 392,不大于 15 度 R3 电阻为 472, 不大于 30 度 ④探测距离(R3 电阻可调节增益,即调节探测…...

12月第十九讲:Redis应用Redis相关解决方案

1.数据库与缓存一致性方案 2.热key探测系统处理热key问题 3.缓存大value监控和切分处理方案 4.Redis内存不足强制回收监控告警方案 5.Redis集群缓存雪崩自动探测 限流降级方案 6.缓存击穿的解决方法 线上Redis比较严重的问题排序是&#xff1a;数据库和缓存一致性、热key…...

solon 集成 activemq-client (sdk)

原始状态的 activemq-client sdk 集成非常方便&#xff0c;也更适合定制。就是有些同学&#xff0c;可能对原始接口会比较陌生&#xff0c;会希望有个具体的示例。 <dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-client&l…...

STM32-笔记7-继电器定时开闭

1、复制02项目&#xff0c;重命名08-继电器定时开闭 打开项目工程 在\Drivers\BSP\该路径下&#xff0c;新建alarm文件夹&#xff0c;该文件夹下里面包含alarm.c和alarm.h文件 加载进该项目中 为什么这里使用的是 这个单词&#xff0c;而不是继电器&#xff08;relay&#…...

B4X编程语言:B4X的映射(数据地图Map)详解

B4X的映射(Map)是由多个键值对组成的数据集合&#xff0c;也称为数据地图。它和列表一样也是一个非可视化的数据容器&#xff0c;在B4X中作为变量使用&#xff0c;用于在单个变量下存储多个键值对。 映射中的键是唯一的。 这意味着&#xff0c;如果您添加了一个键/值对…...

windows C++ 判断文件大小,清空文件,写日志

windows C 判断文件大小&#xff0c;清空文件&#xff0c;写日志等几个常见的接口&#xff0c;记录一下备忘 #include <iostream> #include <vector> #include<Windows.h> #include<string> #include <iostream> #include <sys/types.h> …...

用Python设置Excel工作表的页眉和页脚

在处理和分析数据时&#xff0c;Excel作为一款功能强大的工具&#xff0c;被广泛应用于各个领域。当涉及到打印或分享工作表时&#xff0c;为文档添加专业的页眉和页脚不仅能提升文件的视觉效果&#xff0c;还能提供必要的信息&#xff0c;例如公司标识、日期、文件名或是页码等…...

electron-vite【实战】自定义标题栏【组件封装】(含异形标题栏,指定区域拖拽,窗口置顶,窗口最小化,窗口最大化,取消最大化,隐藏窗口到托盘等)

效果预览 技术要点 透明背景 src/main/index.ts 的 new BrowserWindow 中添加 transparent: true, // 设置窗口背景透明frame: false, // 隐藏窗口边框仅图标和标题部分可拖拽 仅图标和标题部分添加样式 drag .drag {-webkit-app-region: drag; }图标与标题栏的融合 标题栏的…...

MySQL复制问题和解决

目录 环境介绍 一&#xff0c;主库执行delete&#xff0c;从库没有该数据 模拟故障 修复故障 二&#xff0c;主库执行insert&#xff0c;从库已存在该数据 模拟故障 故障恢复 三&#xff0c;主库执行update&#xff0c;从库没有该数据 模拟故障 故障恢复 四&#xf…...

Spark和Hive的区别

1 、 Hive Hive 是基于 Hadoop 的数据仓库工具&#xff0c;同时又是查询引擎&#xff0c; Spark SQL 只是取代的 Hive 的查询引擎这一部分&#xff0c;企业可以使用HiveSpark SQL 进行开发。 Hive 的主要工作如下&#xff1a; 把HQL 翻译长 map-reduce 的代码&#xff0c;并…...

Type-C 接口电热毯:开启温暖智能新时代

在当今科技迅猛发展的时代&#xff0c;智能家居产品如同璀璨繁星般点缀着我们的生活&#xff0c;从智能灯光的温馨到温控系统的精准&#xff0c;处处都彰显着科技赋予生活的便捷与舒适。而在这股追求高效与智能化的洪流之中&#xff0c;一款极具创新的电热毯——Type-C 接口电热…...

React 19新特性探索:提升性能与开发者体验

React作为最受欢迎的JavaScript库之一&#xff0c;不断推出新版本以应对日益复杂的应用需求。React 19作为最新的版本&#xff0c;引入了一系列令人兴奋的新特性和改进&#xff0c;旨在进一步提升应用的性能、开发效率和用户体验。 本文将深入探讨React 19的新特性&#xff0c;…...

【数据库】SQL语句基础

【数据库】SQL语句基础 文章目录 【数据库】SQL语句基础一、SQL与数据库二、 SQL语句类型2.1 数据定义语言&#xff08;DDL&#xff09;1. 创建数据库&#xff1a;CREATE DATABASE2. 创建表&#xff1a;CREATE TABLE3. 删除表&#xff1a;DROP TABLE4. 修改表结构&#xff1a;A…...

性能】JDK和Jmeter的安装与配置

一、JDK环境配置 1. 下载JDK 官网下载地址&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html 选择对应系统的安装包&#xff0c;下载后安装&#xff0c;安装中记录JDK安装的地址&#xff0c;之后一直点击下一…...

Hadoop、Hbase使用Snappy压缩

1. 前期准备 系统环境&#xff1a;centos7.9 配置信息&#xff1a;8C8G100G hadoop和hbase为单节点部署模式 jdk版本jdk1.8.0_361 1.1. 修改系统时间 timedatectl set-timezone <TimeZone> 1.2. 修改主机名以及主机名和IP的映射 vim /etc/hosts #将自己的主机名以及…...

初试Docker

1. 查看版本 docker --version2. 拉取镜像并查看当前存在的镜像 docker pull hello-world查看是否成功拉取到docker docker images在Docker Desktop 可视化查看 3. 删除镜像 docker rmi xxx4. 启动容器 以下命令使用 mysql镜像启动一个容器&#xff0c;参数为以命令行模…...

【Rust自学】4.5. 切片(Slice)

4.5.0. 写在正文之前 这是第四章的最后一篇文章了&#xff0c;在这里也顺便对这章做一个总结&#xff1a; 所有权、借用和切片的概念确保 Rust 程序在编译时的内存安全。 Rust语言让程序员能够以与其他系统编程语言相同的方式控制内存使用情况&#xff0c;但是当数据所有者超…...

番外:ubuntu 下的sqlite3

What Is SQLite? SQLite is a C-language library that implements a small, fast, self-contained, high-reliability, full-featured, SQL database engine. SQLite is the most used database engine in the world ps:SQLite Home Page sqlite3 的安装&#xff1a; user…...

全脐点曲面当且仅当平面或者球面的一部分

S 是全脐点曲面当且仅当 S 是平面或者球面的一部分。 S_\text{ 是全脐点曲面当且仅当 }{S_\text{ 是平面或者球面的一部分。}} S 是全脐点曲面当且仅当 ​S 是平面或者球面的一部分。​ 证&#xff1a; 充分性显然&#xff0c;下证必要性。 若 r ( u , v ) r(u,v) r(u,v)是…...

Vue之版本演进

一、引言 Vue.js&#xff0c;发音为 /vjuː/&#xff0c;是一款轻量级的用于构建用户界面的渐进式JavaScript框架。自2014年由前Google工程师尤雨溪&#xff08;Evan You&#xff09;发布以来&#xff0c;Vue.js凭借其简洁的API、灵活的组件系统以及高效的性能&#xff0c;迅速…...

四川托普信息技术职业学院教案1

四川托普信息技术职业学院教案 【计科系】 周次 第 1周&#xff0c;第1次课 备 注 章节名称 第1章 XML语言简介 引言 1.1 HTML与标记语言 1.2 XML的来源 1.3 XML的制定目标 1.4 XML概述 1.5 有了HTML了&#xff0c;为什么还要发展XML 1.5.1 HTML的缺点 1.5.2 XML的特点 1.6 X…...

《Java核心技术I》Swing中的边框

边框 BorderFactory静态方法创建边框&#xff0c;凹斜面&#xff0c;凸斜面&#xff0c;蚀刻&#xff0c;直线&#xff0c;蒙版&#xff0c;空白。 边框添加标题&#xff0c;BorderFactory.createTitledBorder 组合边框&#xff0c;BorderFactory.createCompoundBorder JCo…...

xlua中自定义lua文件加载的一种方式

此种方法来自LoxodonFramework&#xff0c;这里只做记录 定义一个LoaderBase类&#xff0c;做一个到CustomLoader的隐式类型转换 public abstract class LoaderBase {protected abstract byte[] Load(ref string fileName);/// <summary>/// 隐式类型转换&#xff0c;将…...

Suno Api V4模型无水印开发「高清音频WAV下载」 —— 「Suno Api系列」第6篇

历史文章 Suno AI API接入 - 将AI音乐接入到自己的产品中&#xff0c;支持120并发任务 Suno Api V4模型无水印开发「灵感模式」 —— 「Suno Api系列」第1篇 Suno Api V4模型无水印开发「自定义模式」 —— 「Suno Api系列」第2篇 Suno Api V4模型无水印开发「AI生成歌词」…...

EE308FZ_Sixth Assignment_Beta Sprint_Sprint Essay1

AssignmentBeta SprintCourseEE308FZ[A] — Software EngineeringClass Link2401_MU_SE_FZURequirementsSixth Assignment——Beta SprintTeam NameFZUGOObjectiveSprint Essay 1_Day1-Day2 (12.11-12.12)Other Reference1. WeChat Mini Program Design Guide 2. Javascript St…...

github如何给本机绑定 ssh密钥(MACOS)

生成 SSH 密钥 如果没有现成的密钥&#xff0c;执行以下命令来生成一个新的 SSH 密钥&#xff1a; ssh-keygen -t rsa -b 4096 -C "替换为你的邮箱" 添加 SSH 密钥到 SSH 代理 在终端中运行以下命令&#xff0c;启动 SSH 代理&#xff1a; eval "$(ssh-agen…...

使用Python实现基于AR的教育应用:打破课堂的墙壁

友友们好! 我的新专栏《Python进阶》正式启动啦!这是一个专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会找到: ● 深入解析:每一篇文章都将…...

【数据分析】层次贝叶斯

文章目录 一、 贝叶斯推理二、 层次贝叶斯模型三、 层次贝叶斯的特点四、 数学表述五、推断方法六、应用领域 层次贝叶斯&#xff08;Hierarchical Bayesian&#xff09;方法是一种基于贝叶斯推理的统计模型&#xff0c;用于处理具有多个层次结构的数据模型。 它允许我们在同一…...

linux top命令刷新速度的原理

top命令刷新速度的原理 top命令默认会按照一定的时间间隔&#xff08;通常是3秒&#xff09;更新系统资源使用情况的显示内容。它通过读取系统的/proc文件系统中的相关文件&#xff08;如/proc/stat用于CPU信息、/proc/meminfo用于内存信息等&#xff09;来获取最新的进程和资源…...

bestphp‘s revenge

bestphp’s revenge 知识点 php session反序列化 解题 <?php highlight_file(__FILE__); $b implode; call_user_func($_GET[f], $_POST); //参数二的位置固定为 $_POST 数组&#xff0c;我们很容易便想到利用 extract 函数进行变量覆盖&#xff0c;以便配合后续利用…...

中化信息与枫清科技深化合作:共探“AI+”产业新生态

随着数字化转型的浪潮席卷全球&#xff0c;数据已成为推动创新和经济增长的关键力量。为持续深化数据要素价值挖掘与应用实践&#xff0c;推动打造行业交流平台&#xff0c;驱动产业创新共荣&#xff0c;2024 年 12 月 18 日 -19 日&#xff0c;由中国通信标准化协会主办的“20…...

Java性能测试Benchmark使用总结

如何测量Java代码的性能 在 Java 中&#xff0c;可以使用多种方法来测量一段代码的执行性能。使用 System.currentTimeMillis()是最常见的方法 long startTime System.currentTimeMillis();// 需要测量的代码块 for (int i 0; i < 1000000; i) {// 示例代码 }long endTi…...

完整微服务设计 功能实现

我们将以一个简单的电商系统为例&#xff0c;实现微服务架构&#xff0c;逐步用Java代码详细实现每个模块&#xff0c;并配合注释帮助小白理解。在这个实现中&#xff0c;我们使用以下工具和框架&#xff1a; Spring Boot&#xff1a;用于构建微服务。Spring Cloud&#xff1a…...

【Java基础面试题025】什么是Java的Integer缓存池?

回答重点 Java的Integer缓存池&#xff08;Integer Cache&#xff09;是为了提升性能和节省内存。根据实践发现大部分的数据操作都集中在值比较小的范围&#xff0c;因此缓存这些对象可以减少内存分配和垃圾回收的负担&#xff0c;提升性能 在 -128到127范围内的Integer对象会…...

道可云人工智能元宇宙每日资讯|浙江工商大学发布“人工智能时代创新型人才培养行动计划”

道可云元宇宙每日简报&#xff08;2024年12月20日&#xff09;讯&#xff0c;今日元宇宙新鲜事有&#xff1a; 浙江工商大学发布“人工智能时代创新型人才培养行动计划” 12月18日&#xff0c;浙江工商大学发布了《人工智能时代创新型人才培养行动计划》&#xff0c;提出人工…...

树莓派4B 搭建openwrt内置超多插件docker,nas等等使用教程

刷入固件 (想要固件的加我vx wyy7293) bleachwrt-plus-20241112-bcm27xx-bcm2711-rpi-4-squashfs-factory.img上电,并且把网线两头分别插在pi网口上和电脑的网口上(电脑必须断网) 等待网口灯亮,进入192.168.1.1 默认账密 root password 进入系统后更改openwrt的网关地址相关…...

excel 列名是数据表 的字段名 ,单元格的值 是数据表对应字段的值,生成sql插入语句

在 Excel 中&#xff0c;按 Alt F11 打开 VBA 编辑器。在菜单栏选择 插入 -> 模块&#xff0c;在新模块中粘贴以下代码。 VBA 代码 Sub GenerateSQLInsertStatementsToFile()Dim ws As WorksheetDim lastRow As Long, lastCol As Long, i As Long, j As LongDim sql As S…...

【Rust自学】4.3. 所有权与函数

4.3.0 写在正文之前 在学习了Rust的通用编程概念后&#xff0c;就来到了整个Rust的重中之重——所有权&#xff0c;它跟其他语言都不太一样&#xff0c;很多初学者觉得学起来很难。这个章节就旨在让初学者能够完全掌握这个特性。 本章有三小节&#xff1a; 所有权&#xff1…...

OpenShift 4 - 多云管理(2) - 配置多集群观察功能

《OpenShift / RHEL / DevSecOps 汇总目录》 本文在 OpenShift 4.17 RHACM 2.12 环境中进行验证。 文章目录 多集群观察技术架构安装多集群观察功能监控多集群的运行状态监控多集群的应用运行在被管集群监控应用运行在管理集群监控被管集群的应用运行 参考 多集群观察技术架构…...

【机器学习】机器学习的基本分类-强化学习(Reinforcement Learning, RL)

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是一种基于试错的方法&#xff0c;旨在通过智能体与环境的交互&#xff0c;学习能够最大化累积奖励的策略。以下是强化学习的详细介绍。 强化学习的核心概念 智能体&#xff08;Agent&#xff09; 执行动作并与环境…...

Docker 设置代理的三种方法(2024年12月19日亲自测试)

Docker 设置代理的三种方法 在 Docker 中设置代理是非常常见的需求&#xff0c;尤其是在某些需要通过代理访问外部资源的网络环境下。本文将介绍三种配置 Docker 使用代理的常见方法&#xff1a;通过 daemon.json 配置镜像加速器、通过 daemon.json 配置 HTTP/HTTPS 代理、以及…...

Pycharm配置Python开发环境

Pycharm配置Python开发环境 在之前的文章中,安装好了Pyhton和Pycharm。 打开Pycharm,如下图 配置完成之后,如下图所示:...

【信息系统项目管理师】高分论文:论信息系统项目的进度管理(一体化智能公共数据平台)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文1、规划进度管理2、定义活动3、排列活动顺序5、制定进度计划6、控制进度论文 2022年9月,我作为项目经理参加了XX市的一体化智能公共数据平台项目的建设工作,2022年是XX市政府数字化改革的元年,全市上下…...

Chromium CDP 开发(十):Chromium 中增加自己的Domain

1. 引言 在深入了解了 Chromium CDP&#xff08;Chrome DevTools Protocol&#xff09;的开发过程之后&#xff0c;接下来我们将探讨如何创建一个自定义的 CDP Domain。通过为特定功能创建自己的 CDP Domain&#xff0c;可以避免对已有的 CDP 进行侵入式修改&#xff0c;从而更…...

《基于 Python 的网页爬虫详细教程》

一、引言 在当今信息时代&#xff0c;从互联网上获取大量有价值的数据对于许多领域的研究和分析至关重要。网页爬虫是一种自动化程序&#xff0c;可以从网页上抓取所需的数据。Python 作为一种强大的编程语言&#xff0c;拥有丰富的库和工具&#xff0c;使得网页爬虫的开发变得…...