Linux——网络(tcp)
文章目录
目录
文章目录
前言
一、TCP逻辑
1. 面向连接
三次握手(建立连接)
四次挥手(关闭连接)
2. 可靠性
3. 流量控制
4. 拥塞控制
5. 基于字节流
6. 全双工通信
7. 状态机
8. TCP头部结构
9. TCP的应用场景
二、编写tcp代码函数
1. Socket 创建与配置
socket()
setsockopt()
2. 绑定与监听
bind()
listen()
3. 连接与接受连接
connect()
accept()
4. 数据发送与接收
send()
recv()
5. 关闭连接
close()
shutdown()
6. 地址转换与解析
inet_pton()
inet_ntop()
7. 错误处理
perror()
strerror()
三、基本客服端和服务端
1、服务端
2、客户端
总结
前言
Linux——网络基础(1)-CSDN博客
Linux——网络(udp)-CSDN博客
-
TCP协议概述:简要介绍TCP协议的基本特性,包括连接建立、数据传输、流量控制、拥塞控制等。
-
Linux网络编程基础:介绍Linux下的Socket编程接口,以及如何使用这些接口进行TCP通信。
-
TCP服务器与客户端的实现:通过实际的代码示例,展示如何编写一个简单的TCP服务器和客户端程序。
-
TCP协议的性能优化:探讨如何通过调整TCP参数、使用非阻塞I/O、多线程/多进程等技术来提升TCP应用的性能。
-
常见问题与调试技巧:分享一些在实际开发中可能遇到的TCP相关问题,以及如何使用工具进行网络调试和故障排查。
一、TCP逻辑
1. 面向连接
TCP是一种面向连接的协议,这意味着在数据传输之前,通信双方需要先建立一个连接。连接的建立和关闭是通过三次握手和四次挥手来完成的。
三次握手(建立连接)
-
SYN:客户端向服务器发送一个SYN(同步)报文,表示请求建立连接。
-
SYN-ACK:服务器收到SYN后,回复一个SYN-ACK(同步-确认)报文,表示同意建立连接。
-
ACK:客户端收到SYN-ACK后,发送一个ACK(确认)报文,连接正式建立。
四次挥手(关闭连接)
-
FIN:主动关闭方(客户端或服务器)发送一个FIN(结束)报文,表示希望关闭连接。
-
ACK:被动关闭方收到FIN后,回复一个ACK报文,表示确认收到关闭请求。
-
FIN:被动关闭方完成数据发送后,发送一个FIN报文,表示自己也准备关闭连接。
-
ACK:主动关闭方收到FIN后,回复一个ACK报文,连接正式关闭。
2. 可靠性
TCP通过以下机制确保数据的可靠传输:
-
序列号与确认机制:每个TCP报文都包含一个序列号(Sequence Number),接收方通过发送确认号(Acknowledgment Number)来确认已收到的数据。如果发送方未收到确认,则会重传数据。
-
超时重传:如果发送方在一定时间内未收到确认,则会重新发送数据。
-
数据校验:TCP使用校验和(Checksum)来检测数据在传输过程中是否损坏。
3. 流量控制
TCP通过滑动窗口机制实现流量控制,防止发送方发送数据过快导致接收方缓冲区溢出。
-
接收窗口:接收方通过TCP头部中的窗口字段告知发送方自己当前可接收的数据量。
-
动态调整:接收方可以根据自身缓冲区的可用空间动态调整窗口大小。
4. 拥塞控制
TCP通过拥塞控制算法避免网络拥塞,常见的算法包括:
-
慢启动(Slow Start):初始时发送方以较小的窗口发送数据,随后指数增长。
-
拥塞避免(Congestion Avoidance):当窗口达到阈值后,发送方以线性方式增加窗口大小。
-
快速重传(Fast Retransmit):当发送方收到三个重复的ACK时,立即重传丢失的报文。
-
快速恢复(Fast Recovery):在快速重传后,发送方进入快速恢复阶段,避免窗口大幅减小。
5. 基于字节流
TCP是一种基于字节流的协议,这意味着:
-
无消息边界:TCP将数据视为连续的字节流,不保留发送方写入的数据边界。例如,发送方发送两次数据(“Hello”和“World”),接收方可能一次性收到“HelloWorld”。
-
粘包与拆包:由于TCP的字节流特性,接收方需要自己处理数据的边界问题(如通过长度字段或特殊分隔符)。
6. 全双工通信
TCP支持全双工通信,即通信双方可以同时发送和接收数据。每个TCP连接由两个独立的流组成:
-
一个流用于从客户端到服务器的数据传输。
-
另一个流用于从服务器到客户端的数据传输。
7. 状态机
TCP连接的生命周期由一个状态机管理,常见的状态包括:
-
LISTEN:服务器等待客户端连接。
-
SYN_SENT:客户端已发送SYN,等待服务器响应。
-
SYN_RECEIVED:服务器已收到SYN并发送SYN-ACK,等待客户端确认。
-
ESTABLISHED:连接已建立,可以传输数据。
-
FIN_WAIT_1 / FIN_WAIT_2:主动关闭方等待对方的FIN或ACK。
-
CLOSE_WAIT:被动关闭方等待应用程序关闭连接。
-
TIME_WAIT:连接关闭后,等待可能出现的延迟报文。
8. TCP头部结构
TCP头部包含以下关键字段:
-
源端口和目的端口:标识通信的应用程序。
-
序列号和确认号:用于数据排序和确认。
-
标志位:如SYN、ACK、FIN等,用于控制连接状态。
-
窗口大小:用于流量控制。
-
校验和:用于数据完整性校验。
9. TCP的应用场景
TCP适用于需要可靠传输的场景,例如:
-
Web浏览(HTTP/HTTPS)
-
文件传输(FTP)
-
电子邮件(SMTP/POP3/IMAP)
-
远程登录(SSH/Telnet)
二、编写tcp代码函数
1. Socket 创建与配置
socket()
-
功能:创建一个新的套接字(socket),用于网络通信。
-
原型:
int socket(int domain, int type, int protocol);
-
参数:
-
domain
:协议族,如AF_INET
(IPv4)或AF_INET6
(IPv6)。 -
type
:套接字类型,如SOCK_STREAM
(TCP)或SOCK_DGRAM
(UDP)。 -
protocol
:通常为0
,表示默认协议。
-
-
返回值:成功返回套接字文件描述符,失败返回
-1
。
setsockopt()
-
功能:设置套接字选项,如重用地址、调整缓冲区大小等。
-
原型:
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);
-
常用选项:
-
SO_REUSEADDR
:允许重用本地地址。 -
SO_RCVBUF
/SO_SNDBUF
:调整接收/发送缓冲区大小。
-
2. 绑定与监听
bind()
-
功能:将套接字绑定到本地地址和端口。
-
原型:
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
-
参数:
-
sockfd
:套接字文件描述符。 -
addr
:指向struct sockaddr
的指针,包含地址和端口信息。 -
addrlen
:地址结构体的长度。
-
listen()
-
功能:将套接字设置为监听模式,等待客户端连接。
-
原型:
int listen(int sockfd, int backlog);
-
参数:
-
sockfd
:套接字文件描述符。 -
backlog
:等待连接队列的最大长度。
-
3. 连接与接受连接
connect()
-
功能:客户端使用该函数连接到服务器。
-
原型:
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
-
参数:
-
sockfd
:套接字文件描述符。 -
addr
:指向服务器地址结构体的指针。 -
addrlen
:地址结构体的长度。
-
accept()
-
功能:服务器接受客户端的连接请求,返回一个新的套接字用于通信。
-
原型:
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
-
参数:
-
sockfd
:监听套接字文件描述符。 -
addr
:用于存储客户端地址信息。 -
addrlen
:地址结构体的长度。
-
4. 数据发送与接收
send()
-
功能:通过已连接的套接字发送数据。
-
原型:
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
-
参数:
-
sockfd
:套接字文件描述符。 -
buf
:指向要发送数据的缓冲区。 -
len
:数据长度。 -
flags
:标志位,通常为0
。
-
recv()
-
功能:通过已连接的套接字接收数据。
-
原型:
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
-
参数:
-
sockfd
:套接字文件描述符。 -
buf
:指向接收数据的缓冲区。 -
len
:缓冲区长度。 -
flags
:标志位,通常为0
。
-
5. 关闭连接
close()
-
功能:关闭套接字,释放资源。
-
原型:
int close(int sockfd);
-
参数:
-
sockfd
:套接字文件描述符。
-
shutdown()
-
功能:优雅地关闭连接,可以选择关闭读、写或读写通道。
-
原型:
int shutdown(int sockfd, int how);
-
参数:
-
sockfd
:套接字文件描述符。 -
how
:关闭方式,如SHUT_RD
(关闭读)、SHUT_WR
(关闭写)、SHUT_RDWR
(关闭读写)。
-
6. 地址转换与解析
inet_pton()
-
功能:将点分十进制的IP地址转换为二进制格式。
-
原型:
int inet_pton(int af, const char *src, void *dst);
-
参数:
-
af
:地址族,如AF_INET
或AF_INET6
。 -
src
:点分十进制字符串。 -
dst
:存储二进制结果的缓冲区。
-
inet_ntop()
-
功能:将二进制格式的IP地址转换为点分十进制字符串。
-
原型:
const char *inet_ntop(int af, const void *src, char *dst, socklen_t size); getaddrinfo()
-
功能:解析主机名和服务名,返回地址信息。
-
原型:
int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res);
7. 错误处理
perror()
-
功能:打印与
errno
相关的错误信息。 -
原型:
void perror(const char *s);
strerror()
-
功能:将错误码转换为可读的字符串。
-
原型:
char *strerror(int errnum);
三、基本客服端和服务端
1、服务端
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>#define PORT 8080
#define BUFFER_SIZE 1024int main() {int server_fd, new_socket;struct sockaddr_in address;int addrlen = sizeof(address);char buffer[BUFFER_SIZE] = {0};char *response = "Hello from server";// 1. 创建套接字if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {perror("Socket failed");exit(EXIT_FAILURE);}// 2. 绑定地址和端口address.sin_family = AF_INET;address.sin_addr.s_addr = INADDR_ANY; // 监听所有网络接口address.sin_port = htons(PORT);if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {perror("Bind failed");close(server_fd);exit(EXIT_FAILURE);}// 3. 监听连接if (listen(server_fd, 3) < 0) {perror("Listen failed");close(server_fd);exit(EXIT_FAILURE);}printf("Server listening on port %d...\n", PORT);// 4. 接受客户端连接if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) {perror("Accept failed");close(server_fd);exit(EXIT_FAILURE);}// 5. 读取客户端数据int valread = read(new_socket, buffer, BUFFER_SIZE);printf("Client says: %s\n", buffer);// 6. 发送响应给客户端send(new_socket, response, strlen(response), 0);printf("Response sent to client\n");// 7. 关闭连接close(new_socket);close(server_fd);return 0;
}
2、客户端
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>#define PORT 8080
#define BUFFER_SIZE 1024int main() {int sock = 0;struct sockaddr_in serv_addr;char buffer[BUFFER_SIZE] = {0};char *message = "Hello from client";// 1. 创建套接字if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {perror("Socket creation failed");exit(EXIT_FAILURE);}serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons(PORT);// 2. 将IP地址从字符串转换为二进制格式if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) {perror("Invalid address/ Address not supported");close(sock);exit(EXIT_FAILURE);}// 3. 连接到服务器if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {perror("Connection failed");close(sock);exit(EXIT_FAILURE);}// 4. 发送数据到服务器send(sock, message, strlen(message), 0);printf("Message sent to server\n");// 5. 接收服务器的响应int valread = read(sock, buffer, BUFFER_SIZE);printf("Server says: %s\n", buffer);// 6. 关闭连接close(sock);return 0;
}
总结
TCP网络编程是构建高性能、高可靠性网络应用的基础。通过理解TCP协议的工作原理、掌握Linux Socket API的使用方法,并实践编写客户端和服务器程序,我们可以逐步掌握网络编程的核心技能。希望本篇博客能为你的学习之旅提供帮助,期待你在网络编程的世界中探索更多可能性!
相关文章:
Linux——网络(tcp)
文章目录 目录 文章目录 前言 一、TCP逻辑 1. 面向连接 三次握手(建立连接) 四次挥手(关闭连接) 2. 可靠性 3. 流量控制 4. 拥塞控制 5. 基于字节流 6. 全双工通信 7. 状态机 8. TCP头部结构 9. TCP的应用场景 二、编写tcp代码函数…...
Ubuntu Server 安装 XFCE4桌面
Ubuntu Server没有桌面环境,一些软件有桌面环境使用起来才更加方便,所以我尝试安装桌面环境。常用的桌面环境有:GNOME、KDE Plasma、XFCE4等。这里我选择安装XFCE4桌面环境,主要因为它是一个极轻量级的桌面环境,适合内…...
分享|通过Self-Instruct框架将语言模型与自生成指令对齐
结论 在大型 “指令调整” 语言模型依赖的人类编写指令数据存在数量、多样性和创造性局限, 从而阻碍模型通用性的背景下, Self - Instruct 框架, 通过 自动生成 并 筛选指令数据 微调预训练语言模型, 有效提升了其指令遵循能…...
指针空值——nullptr(C++11)——提升指针安全性的利器
C11引入的nullptr是对指针空值的正式支持,它提供了比传统NULL指针更加安全和明确的指针空值表示方式。在C语言中,指针操作是非常基础且常见的,而如何安全地处理指针空值,一直是开发者关注的重要问题。本文将详细讲解nullptr的引入…...
C++游戏开发
C 是游戏开发中广泛使用的编程语言,因其高性能、灵活性和对硬件的直接控制能力而备受青睐。以下是 C 游戏开发的一些关键点: 1. 游戏引擎 Unreal Engine:使用 C 作为主要编程语言,适合开发高质量 3D 游戏。Unity:虽然…...
【Docker】ubuntu中 Docker的使用
之前记录了 docker的安装 【环境配置】ubuntu中 Docker的安装; 本篇博客记录Dockerfile的示例,docker 的使用,包括镜像的构建、容器的启动、docker compose的使用等。 当安装好后,可查看docker的基本信息 docker info ## 查…...
Linux C openssl aes-128-cbc demo
openssl 各版本下载 https://openssl-library.org/source/old/index.html#include <stdio.h> #include <string.h> #include <openssl/aes.h> #include <openssl/rand.h> #include <openssl/evp.h>#define AES_KEY_BITS 128 #define GCM_IV_SIZ…...
【卫星通信】链路预算方法
本文介绍卫星通信中的链路预算方法,应该也适用于地面通信场景。 更多内容请关注gzh【通信Online】 文章目录 下行链路预算卫星侧参数信道参数用户侧参数 上行链路预算链路预算计算示例 下行链路预算 卫星侧参数 令卫星侧天线数为 M t M_t Mt,每根天线…...
【Elasticsearch】 索引模板 ignore_missing_component_templates
解释 ignore_missing_component_templates 配置 在Elasticsearch中,ignore_missing_component_templates 是一个配置选项,用于处理索引模板中引用的组件模板可能不存在的情况。当您创建一个索引模板时,可以指定一个或多个组件模板࿰…...
Github 2025-01-30 Go开源项目日报 Top10
根据Github Trendings的统计,今日(2025-01-30统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10Ollama: 本地大型语言模型设置与运行 创建周期:248 天开发语言:Go协议类型:MIT LicenseStar数量:42421 个Fork数量:2724 次关注人…...
Linux 下注册分析(4)
系列文章目录 Linux 设备树 Linux 下注册分析(1) Linux 下注册分析(2) Linux 下注册分析(3) Linux 下注册分析(4) 文章目录 系列文章目录1、device_create简介device_createdevice_c…...
PhotoShop中JSX编辑器安装
1.使用ExtendScript Tookit CC编辑 1.安装 打开CEP Resource链接: CEP-Resources/ExtendScript-Toolkit at master Adobe-CEP/CEP-Resources (github.com) 将文件clone到本地或者下载到本地 点击AdobeExtendScriptToolKit_4_Ls22.exe安装,根据弹出的…...
目前市场主流的AI PC对于大模型本地部署的支持情况分析-Deepseek
以下是目前市场主流AI PC对**大模型本地部署支持情况**的综合分析,结合硬件能力、软件生态及厂商动态进行总结: --- ### **一、硬件配置与算力支持** 1. **核心处理器架构** - **异构计算方案(CPUGPUNPU)**:主流…...
51单片机开发:独立键盘实验
实验目的:按下键盘1时,点亮LED灯1。 键盘原理图如下图所示,可见,由于接GND,当键盘按下时,P3相应的端口为低电平。 键盘按下时会出现抖动,时间通常为5-10ms,代码中通过延时函数delay…...
微服务网关鉴权之sa-token
目录 前言 项目描述 使用技术 项目结构 要点 实现 前期准备 依赖准备 统一依赖版本 模块依赖 配置文件准备 登录准备 网关配置token解析拦截器 网关集成sa-token 配置sa-token接口鉴权 配置satoken权限、角色获取 通用模块配置用户拦截器 api模块配置feign…...
STM32 TIM输入捕获 测量频率
输入捕获简介: IC(Input Capture)输入捕获 输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数 每个高级定时器…...
python | OpenCV小记(一):cv2.imread(f) 读取图像操作(待更新)
python | OpenCV小记(一):cv2.imread(f)读取图像操作 1. 为什么 [:, :, 0] 提取的是第一个通道(B 通道)?OpenCV 的通道存储格式索引操作 [:, :, 0] 的解释常见误解 1. 为什么 [:, :,…...
解析静态链接
文章目录 静态链接空间与地址分配相似段合并虚拟地址分配符号地址确定符号解析与重定位链接器优化重复代码消除函数链接级别静态库静态链接优缺点静态链接 一组目标文件经过链接器链接后形成的文件即可执行文件,如果没有动态库的加入,那么这个可执行文件被加载后无需再进行重…...
Ollama 运行从 ModelScope 下载的 GGUF 格式的模型
本文系统环境 Windows 10 Ollama 0.5.7 Ollama 是什么? Ollama 可以让你快速集成和部署本地 AI 模型。它支持各种不同的 AI 模型,并允许用户通过简单的 API 进行调用 Ollama 的安装 Ollama 官网 有其下载及安装方法,非常简便 但如果希…...
【2025年最新版】Java JDK安装、环境配置教程 (图文非常详细)
文章目录 【2025年最新版】Java JDK安装、环境配置教程 (图文非常详细)1. JDK介绍2. 下载 JDK3. 安装 JDK4. 配置环境变量5. 验证安装6. 创建并测试简单的 Java 程序6.1 创建 Java 程序:6.2 编译和运行程序:6.3 在显示或更改文件的…...
探索性测试与自动化测试的结合
随着软件开发周期的不断缩短和质量要求的不断提高,测试行业正在经历一场深刻的变革。自动化测试因其高效性和可重复性成为测试团队必不可少的工具,而探索性测试(Exploratory Testing, ET)则因其灵活性和创意性在面对复杂、动态变化…...
我是如何写作的?
以前是如何写作的 从小学三年级开始学写作文,看的作文书,老师布置作文题目,内容我都是自己写的。那时会积累一些好词,听到什么好词就记住了。并没有去观察什么,也没有好好花心思在写作上。总觉得我写的作文与真正好的…...
智慧园区管理系统为企业提供高效运作与风险控制的智能化解决方案
内容概要 快鲸智慧园区管理系统,作为一款备受欢迎的智能化管理解决方案,致力于为企业提供高效的运作效率与风险控制优化。具体来说,这套系统非常适用于工业园、产业园、物流园、写字楼及公寓等多种园区和商办场所。它通过数字化与智能化的手…...
INCOSE需求编写指南-附录 B: 首字母缩略词和缩写
附录 Appendix B: 首字母缩略词和缩写ACRONYMS AND ABBREVIATIONS AD 难易程度的进阶 Advancement Degree of Difficulty AI 人工智能 Artificial Intelligence CM 配置管理 Configuration Management ConOps 运作理念 Concept of Operations COTS 商业现货 Comme…...
VS2008 - debug版 - 由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。
文章目录 VS2008 - debug版 - 由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。概述笔记VS2008安装环境VS2008测试程序设置默认报错的情况措施1措施2备注 - exe清单文件的问题是否使用静态库?_BIND_TO_CURRENT_VCLIBS_VERSION的出处…...
Docker容器数据恢复
Docker容器数据恢复 1 创建mongo数据库时未挂载数据到宿主机2 查找数据卷位置3 将容器在宿主机上的数据复制到指定目录下4 修改docker-compose并挂载数据(注意端口)5 重新运行新容器 以mongodb8.0.3为例。 1 创建mongo数据库时未挂载数据到宿主机 versi…...
翼星求生服务器搭建【Icarus Dedicated Server For Linux】
一、前言 本次搭建的服务器为Steam平台一款名为Icarus的沙盒、生存、建造游戏,由于官方只提供了Windows版本服务器导致很多热爱Linux的小伙伴无法释怀,众所周知Linux才是专业服务器的唯一准则。虽然Github上已经有大佬制作了容器版本但是容终究不够完美,毕竟容器无法与原生L…...
如何在data.table中处理缺失值
📊💻【R语言进阶】轻松搞定缺失值,让数据清洗更高效! 👋 大家好呀!今天我要和大家分享一个超实用的R语言技巧——如何在data.table中处理缺失值,并且提供了一个自定义函数calculate_missing_va…...
react中如何获取dom元素
实现代码 const inputRef useRef(null) inputRef.current.focus()...
引入@Inject的依赖包
maven引入Inject的依赖包 在 Maven 项目中引入 Inject 注解所需的依赖包同样取决于你打算使用的依赖注入框架。以下是一些常见框架及其 Maven 依赖配置的示例: 1. Google Guice 如果你打算使用 Google Guice,你需要在 pom.xml 文件中添加 Guice 的依赖…...
Deep Seek R1本地化部署
目录 说明 一、下载ollama 二、在ollama官网下载模型 三、使用 后记 说明 操作系统:win10 使用工具:ollama 一、下载ollama 从官网下载ollama: ollama默认安装在C盘,具体位置为C:\Users\用户名\AppData\Local\Programs\O…...
RDMA 工作原理 | 支持 RDMA 的网络协议
注:本文为 “RDMA” 相关文章合辑。 英文引文机翻未校。 图片清晰度受引文所限。 Introduction to Remote Direct Memory Access (RDMA) Written by: Dotan Barak on March 31, 2014.on February 13, 2015. What is RDMA? 什么是 RDMA? Direct me…...
再见了流氓软件~~
聊一聊 最近一直在测试软件,需要装各种软件和工具配合测试,导致现在电脑都快装满了,需要把不用的软件卸载。电脑自带的卸载只能一个一个卸载,不但麻烦还卸载不干净。 相信很多人也有这方面的需要,电脑装了很多软件&a…...
165. 比较版本号
两个注意的点: 分割字符串的时候,要用split("\\.")而不能用split("."),因为前者表示“对.使用斜杠转义,\\表示一个斜杠”,而后者表示匹配任意单个字符,例如version2 "1.2.3&quo…...
一文大白话讲清楚webpack进阶——9——ModuleFederation实战
文章目录 一文大白话讲清楚webpack进阶——9——ModuleFederation实战1. 啥是ModuleFederation2. 创建容器应用3. 创建远程应用4. 启动远程应用5. 使用远程应用的组件 一文大白话讲清楚webpack进阶——9——ModuleFederation实战 1. 啥是ModuleFederation 先看这篇文章&#…...
【llm对话系统】LLM 大模型Prompt 怎么写?
如果说 LLM 是一个强大的工具,那么 Prompt 就是使用这个工具的“说明书”。一份好的 Prompt 可以引导 LLM 生成更准确、更相关、更符合你期望的输出。 今天,我们就来聊聊 LLM Prompt 的编写技巧,掌握这把解锁 LLM 潜能的钥匙! 一…...
INCOSE需求编写指南-附录 C: 需求模式
附录 Appendix C: 需求模式 Requirement Patterns C.1 需求模式简介 Introduction to Requirement Patterns 需求模式(样板或模板)的概念最初于 1998 年在英国的未来水面战斗人员 (FSC) 国防项目中应用(Dick 和 Llorens,2012 年…...
WGCLOUD使用介绍 - 如何监控ActiveMQ和RabbitMQ
根据WGCLOUD官网的信息,目前没有针对ActiveMQ和RabbitMQ这两个组件专门做适配 不过可以使用WGCLOUD已经具备的通用监测模块:进程监测、端口监测或者日志监测、接口监测 来对这两个组件进行监控...
【VASP】AIMD计算总结
【VASP】AIMD计算总结 vasp 计算文件INCAR 参数介绍后处理 二维材料与异质结的构造除了筛选优势还应该判断是否稳定,所以我在这分享一篇基于vasp6.2计算的AIMD 示例: https://www.vasp.at/wiki/index.php/Liquid_Si_-_Standard_MD vasp 计算文件 POSCA…...
春节旅游高峰,人力资源如何巧妙应对?
春节旅游高峰,人力资源如何巧妙应对? 春节等假期一到,各大旅游景区便人潮汹涌,游客如织。面对这种旅游高峰,工作人员往往要连续超负荷运转,身心俱疲。特别是在那些热门景区和网红打卡地,人…...
zsh安装插件
0 zsh不仅在外观上比较美观,而且其具有强大的插件,如果不使用那就亏大了。 官方插件库 https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins 官方插件库并不一定有所有的插件,比如zsh-autosuggestions插件就不再列表里,下面演示zs…...
continuous batching、chunked-prefill相关概念
batching VS. continuous batching batching是所有requests的output都生成完毕之后,才能开始处理下一个batch。一般要做input padding,要等待凑够batch才运行(也有超时bar)。 continuous batching是每完成1个request,就…...
python算法和数据结构刷题[2]:链表、队列、栈
链表 链表的节点定义: class Node():def __init__(self,item,nextNone):self.itemitemself.nextNone 删除节点: 删除节点前的节点的next指针指向删除节点的后一个节点 添加节点: 单链表 class Node():"""单链表的结点&quo…...
认知神经科学0-----关于心智的生物学(2011年第三版)
译者序 人类的科学事业所面临的挑战之一-就是认识意识与物质或心灵(智慧)与大脑的关系。从古希腊哲学先贤或更早的时代开始,人类对这一-古 老问题就有了大量的探讨或臆测;但仅仅是在近代和现代,人们才真正在科学的意义上探索心智与大脑的关系。脑…...
想品客老师的第九天:原型和继承
原型与继承前置看这里 原型 原型都了解了,但是不是所有对象都有对象原型 let obj1 {}console.log(obj1)let obj2 Object.create(null, {name: {value: 荷叶饭}})console.log(obj2) obj2为什么没有对象原型?obj2是完全的数据字典对象,没有…...
指针(C语言)从0到1掌握指针,为后续学习c++打下基础
目录 一,指针 二,内存地址和指针 1,什么是内存地址 2,指针在不同系统下所占内存 三,指针的声明和初始化以及类型 1,指针的声明 2,指针 的初始化 1, 初始化方式优点及适用场景 4,指针的声明初始化类型…...
php接口连接数据库
框架:https://www.thinkphp.cn/doc 创建网站 域名自己写 创建文件夹,“test”拉取框架,地址栏输入 composer create-project topthink/think5.1.* tp5 会自动创建一个tp5文件夹 根目录选择刚刚创建拉框架的文件夹 以test为示例 “D:\test\…...
Qt中json的使用
目录 一、json相关类和接口 1.QJsonDocument 2.QJsonObject 3.QJsonArray 4.QJsonValue 二、json写文件 1.写文件基本流程 2.代码示例 三、json读文件 1.读文件基本流程 2.代码示例 json是一种轻量级的数据交换格式,在Qt中使用json数据可以通过Qt提供的Q…...
OpenAI-Edge-TTS:本地化 OpenAI 兼容的文本转语音 API,免费高效!
文本转语音(TTS)技术已经成为人工智能领域的重要一环,无论是语音助手、教育内容生成,还是音频文章创作,TTS 工具都能显著提高效率。今天要为大家介绍的是 OpenAI-Edge-TTS,一款基于 Microsoft Edge 在线文本…...
物业系统改革引领行业智能化管理与提升服务质量的新征程
内容概要 在当今迅速变化的社会中,物业系统改革正在悄然推动行业的智能化管理进程。物业管理作为一个古老而传统的领域,面临着诸多挑战,包括效率低下、业主需求难以满足等。数字化转型为这一现象注入了新活力,帮助物业公司通过先…...