《UNIX网络编程卷1:套接字联网API》第7章:套接字选项深度解析
《UNIX网络编程卷1:套接字联网API》第7章:套接字选项深度解析
一、套接字选项核心原理
1.1 选项层级体系
套接字选项按协议层级划分(图1):
- SOL_SOCKET:通用套接字层选项
- IPPROTO_IP:IPv4协议层选项
- IPPROTO_TCP:TCP传输层选项
- IPPROTO_IPV6:IPv6协议层选项
以下是以表格形式整理的套接字层(SOL_SOCKET)、IP层(IPPROTO_IP)、TCP层(IPPROTO_TCP)和IPv6层(IPPROTO_IPV6)的套接字选项汇总,包含关键参数和典型应用场景:
层级 | 选项名称 | 描述 | 类型 | 默认值 | 示例值/说明 |
---|---|---|---|---|---|
SOL_SOCKET | SO_BROADCAST | 允许发送广播数据报 | 布尔型 | 0 (关闭) | 1 (启用) |
SO_REUSEADDR | 允许重用本地地址(避免TIME_WAIT状态阻塞) | 布尔型 | 0 (关闭) | 1 (启用) | |
SO_REUSEPORT | 允许多个套接字绑定到同一端口 | 布尔型 | 0 (关闭) | 1 (启用) | |
SO_KEEPALIVE | 周期性测试连接存活状态 | 布尔型 | 0 (关闭) | 1 (启用),需配合系统参数调整探测间隔 | |
SO_LINGER | 控制关闭时未发送数据的处理策略 | 结构体 (linger ) | {l_onoff=0, l_linger=0} | {l_onoff=1, l_linger=60} 表示等待60秒 | |
SO_RCVBUF | 设置接收缓冲区大小 | 整型 (字节) | 系统默认值 (通常8192-65536) | setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &buf_size, sizeof(buf_size)) | |
SO_SNDBUF | 设置发送缓冲区大小 | 整型 (字节) | 系统默认值 (通常8192-65536) | 同上 | |
SO_RCVTIMEO | 设置接收超时时间 | 结构体 (timeval ) | 0 (无超时) | {tv_sec=5, tv_usec=0} 表示5秒超时 | |
SO_SNDTIMEO | 设置发送超时时间 | 结构体 (timeval ) | 0 (无超时) | 同上 | |
IPPROTO_IP | IP_HDRINCL | 自定义IP首部(用于原始套接字) | 布尔型 | 0 (关闭) | 1 (启用),需手动构造IP首部 |
IP_TOS | 设置IP服务类型字段(QoS优先级) | 整型 | 0 (普通服务) | IPTOS_LOWDELAY (0x10) 表示低延迟 | |
IP_TTL | 设置IP分组的存活时间 | 整型 | 系统默认值 (通常64-255) | setsockopt(fd, IPPROTO_IP, IP_TTL, &ttl_val, sizeof(ttl_val)) | |
IP_ADD_MEMBERSHIP | 加入多播组 | ip_mreq 结构体 | - | 设置多播组和接口 | |
IP_MULTICAST_IF | 设置多播接口 | 整型 | 系统默认接口 | 指定接口索引 | |
IP_MULTICAST_LOOP | 控制是否接收本地发送的多播副本 | 布尔型 | 1 (启用) | 0 (禁用) | |
IPPROTO_TCP | TCP_NODELAY | 禁用Nagle算法(减少小数据包发送延迟) | 布尔型 | 0 (关闭) | 1 (启用) |
TCP_MAXSEG | 设置TCP最大分节大小 | 整型 | 系统默认值 | setsockopt(fd, IPPROTO_TCP, TCP_MAXSEG, &max_seg, sizeof(max_seg)) | |
TCP_KEEPALIVE | 设置保持连接探测参数(需配合SO_KEEPALIVE) | 多个整型参数 | 系统默认值 | 通过不同子选项设置探测间隔、次数等 | |
IPPROTO_IPV6 | IPV6_DONTFRAG | 设置不分片标志 | 整型 | 0 (关闭) | 1 (启用) |
IPV6_UNICAST_HOPS | 设置单播跳数限制 | 整型 | 系统默认值 | setsockopt(fd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, &hops, sizeof(hops)) | |
IPV6_V6ONLY | 限制套接字仅用于IPv6通信 | 布尔型 | 0 (关闭) | 1 (启用) |
补充说明:
- 跨层级交互:部分选项(如
TCP_KEEPALIVE
)需配合套接字层选项(如SO_KEEPALIVE
)使用。 - 默认值差异:默认值可能因操作系统或内核版本不同而有所变化,建议通过
getsockopt()
动态获取。 - 安全性提示:启用
SO_BROADCAST
或IP_HDRINCL
时需谨慎,可能引发网络滥用或安全漏洞。 - 性能调优:缓冲区大小(
SO_RCVBUF/SO_SNDBUF
)和超时设置(SO_RCVTIMEO/SO_SNDTIMEO
)是网络应用性能优化的关键参数。 - IPv6扩展:IPv6层选项支持更丰富的扩展首部(如路由头、分片头等),需结合具体协议使用。
如需进一步了解特定选项的底层实现或跨平台行为差异,可参考《UNIX网络编程》或Linux内核文档。
1.2 选项操作函数
// 设置选项
int setsockopt(int sockfd, int level, int optname,const void *optval, socklen_t optlen);// 获取选项
int getsockopt(int sockfd, int level, int optname,void *optval, socklen_t *optlen);
参数解析:
level
:选项定义层级(如SOL_SOCKET)optname
:具体选项名称(如SO_REUSEADDR)optval
:选项值缓冲区(类型敏感)optlen
:缓冲区长度(需精确匹配)
二、关键套接字选项详解
2.1 通用选项(SOL_SOCKET层)
2.1.1 SO_REUSEADDR
功能:允许重用本地地址(解决TIME_WAIT状态绑定问题)
典型应用场景:
int on = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
2.1.2 SO_RCVBUF/SO_SNDBUF
作用:调整内核缓冲区大小(需注意系统上限)
代码示例:
int bufsize = 1024 * 1024; // 1MB
setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &bufsize, sizeof(bufsize));
2.2 TCP层选项(IPPROTO_TCP层)
2.2.1 TCP_NODELAY
功能:禁用Nagle算法(提升实时性)
使用注意:
int flag = 1;
setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &flag, sizeof(flag));
2.2.2 TCP_KEEPALIVE
保活机制配置(需设置三个参数):
int keepalive = 1; // 开启保活
int keepidle = 60; // 60秒无数据触发探测
int keepintvl = 5; // 探测间隔5秒
int keepcnt = 3; // 最大探测次数setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, &keepalive, sizeof(keepalive));
setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPIDLE, &keepidle, sizeof(keepidle));
setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPINTVL, &keepintvl, sizeof(keepintvl));
setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPCNT, &keepcnt, sizeof(keepcnt));
三、高级选项编程实战
3.1 SO_LINGER选项
结构体定义:
struct linger {int l_onoff; // 0=关闭,非0=开启int l_linger; // 超时时间(秒)
};
不同模式对比(表1):
模式 | l_onoff | l_linger | 关闭行为 |
---|---|---|---|
默认 | 0 | 忽略 | 立即返回,后台发送数据 |
优雅关闭 | 1 | >0 | 阻塞直到数据发送或超时 |
强制关闭 | 1 | 0 | 发送RST终止连接,丢弃数据 |
示例代码:
struct linger ling = {1, 30}; // 阻塞30秒等待数据发送
setsockopt(sockfd, SOL_SOCKET, SO_LINGER, &ling, sizeof(ling));
3.2 IP_TTL与多播控制
设置生存时间:
int ttl = 64; // 数据包最多经过64个路由
setsockopt(sockfd, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl));
加入多播组:
struct ip_mreq mreq;
mreq.imr_multiaddr.s_addr = inet_addr("239.255.0.1");
mreq.imr_interface.s_addr = htonl(INADDR_ANY);setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
四、跨平台选项差异处理
4.1 Windows特有选项
// 启用非阻塞模式(Windows)
u_long mode = 1;
ioctlsocket(sockfd, FIONBIO, &mode);// 禁用SIO_UDP_CONNRESET错误
DWORD bytesReturned = 0;
BOOL bNewBehavior = FALSE;
WSAIoctl(sockfd, SIO_UDP_CONNRESET, &bNewBehavior, sizeof(bNewBehavior),NULL, 0, &bytesReturned, NULL, NULL);
4.2 Linux特殊处理
// 获取未读数据量(Linux)
int count;
ioctl(sockfd, FIONREAD, &count);// 设置接收超时(兼容POSIX)
struct timeval tv = {5, 0}; // 5秒
setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));
五、实战:完整选项管理模块
5.1 选项配置封装函数
void set_socket_options(int sockfd) {// 通用选项int reuse = 1;setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse));// 调整缓冲区int buf_size = 1024 * 1024;setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &buf_size, sizeof(buf_size));setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &buf_size, sizeof(buf_size));// TCP优化int nodelay = 1;setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &nodelay, sizeof(nodelay));// 设置超时struct timeval tv = {3, 0}; setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));
}
5.2 选项查询工具实现
void dump_socket_options(int sockfd) {int optval;socklen_t optlen = sizeof(optval);getsockopt(sockfd, SOL_SOCKET, SO_TYPE, &optval, &optlen);printf("Socket type: %s\n", (optval == SOCK_STREAM) ? "STREAM" : "DGRAM");getsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &optval, &optlen);printf("Recv buffer: %d bytes\n", optval);getsockopt(sockfd, IPPROTO_TCP, TCP_MAXSEG, &optval, &optlen);printf("TCP MSS: %d bytes\n", optval);
}
六、调试与性能分析
6.1 使用tcpdump观察选项效果
示例命令:
# 观察Nagle算法效果
tcpdump -i eth0 'tcp port 8080' -XX -nn -vv# 查看保活探测包
tcpdump -i any 'tcp and (tcp[13] & 4 != 0)'
6.2 系统级监控工具
查看内核选项当前值:
# Linux查看所有TCP选项
sysctl -a | grep tcp# 查看具体socket选项
cat /proc/net/tcp | grep -i "01BB" # 查看端口443的连接状态
七、常见问题解决方案
7.1 选项设置失败原因排查表
错误现象 | 可能原因 | 解决方案 |
---|---|---|
Invalid argument | 选项层级不匹配 | 检查level和optname对应关系 |
Permission denied | 权限不足(如广播选项) | 使用root权限运行程序 |
File descriptor in bad state | 套接字已关闭 | 确保在活动套接字上设置 |
缓冲区设置未生效 | 超出系统限制 | 检查/proc/sys/net/core/rmem_max |
八、进阶:自定义套接字选项
8.1 私有选项扩展(Linux示例)
// 定义自定义选项
#define MY_CUSTOM_OPTION 0x5001struct custom_data {int version;char tag[32];
};// 设置自定义选项
struct custom_data data = {2, "HighPriority"};
setsockopt(sockfd, SOL_SOCKET, MY_CUSTOM_OPTION, &data, sizeof(data));// 内核处理(需开发内核模块)
static int my_setsockopt(struct socket *sock, int level, int optname,char __user *optval, unsigned int optlen) {if (level == SOL_SOCKET && optname == MY_CUSTOM_OPTION) {// 处理自定义选项逻辑}return 0;
}
本章总结:
通过对套接字选项的深度解析,我们掌握了网络编程中精细控制通信行为的关键技术。从基础选项到高级应用,从通用设置到协议专属优化,合理使用套接字选项能够显著提升程序的健壮性和性能。建议结合示例代码进行实践测试,并使用网络分析工具观察选项的实际效果。
相关文章:
《UNIX网络编程卷1:套接字联网API》第7章:套接字选项深度解析
《UNIX网络编程卷1:套接字联网API》第7章:套接字选项深度解析 一、套接字选项核心原理 1.1 选项层级体系 套接字选项按协议层级划分(图1): SOL_SOCKET:通用套接字层选项IPPROTO_IP:IPv4协议层…...
使用 pytest-xdist 进行高效并行自化测试
pytest-xdist 是 pytest 的一个扩展插件,主要用于实现测试用例的并行执行和分布式测试。通过利用多进程或者多机分布式的方式,pytest-xdist 能够显著缩短测试执行时间,提升持续集成(CI)流程的效率。 在自动化测试中&a…...
谈谈策略模式,策略模式的适用场景是什么?
一、什么是策略模式? 策略模式(Strategy Pattern)属于行为型设计模式。核心思路是将一组可替换的算法封装在独立的类中,使它们可以在运行时动态切换,同时使客户端代码与具体算法解耦。它包含三个…...
网络安全防御核心原则与实践指南
一、四大核心防御原则 A. 纵深防御原则(Defense in Depth) 定义:通过在多个层次(如网络、系统、应用、数据)设置互补的安全措施,形成多层次防护体系。 目的:防止单一漏洞导致整体安全失效&…...
动态规划2——斐波那契数列模型——三步问题
1.题目 三步问题。有个小孩正在上楼梯,楼梯有 n 阶台阶,小孩一次可以上 1 阶、2 阶或 3 阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模 1000000007。 示例 1: 输入:n 3 …...
周末总结(2024/04/05)
工作 人际关系核心实践: 要学会随时回应别人的善意,执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己,抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内,职场社交不要放在5min以外 职场的人际关系在面对利…...
常见的图像生成算法
综合技术原理、优化方向和应用场景,结合经典模型与前沿进展进行分述: 一、经典生成模型 1. 生成对抗网络(GAN) 原理:由生成器(Generator)和判别器(Discriminator)通过…...
PE结构(十五)系统调用与函数地址动态寻找
双机调试 当需要分析一个程序时,这个程序一定是可以调试的,操作系统也不例外。在调试过程中下断点是很重要的 当我们对一个应用程序下断点时,应用程序是挂起的。但当我们对操作系统的内核程序下断点时,被挂起的不是内核程序而是…...
verilog状态机思想编程流水灯
目录 一、状态机1. 状态机基本概念2. 状态机类型3. Verilog 状态机设计要点 二、状态机实现一个1s流水灯三、DE2-115实物演示 一、状态机 1. 状态机基本概念 状态机(Finite State Machine, FSM)是数字电路设计中用于描述系统状态转换的核心组件&#x…...
Java实现N皇后问题的双路径探索:递归回溯与迭代回溯算法详解
N皇后问题要求在NN的棋盘上放置N个皇后,使得她们无法互相攻击。本文提供递归和循环迭代两种解法,并通过图示解释核心逻辑。 一、算法核心思想 使用回溯法逐行放置皇后,通过冲突检测保证每行、每列、对角线上只有一个皇后。发现无效路径时回退…...
#SVA语法滴水穿石# (000)断言基本概念和背景
一、前言 随着数字电路规模越来越大、设计越来越复杂,使得对设计的功能验证越来越重要。首先,我们要明白为什么要对设计进行验证?验证有什么作用?例如,在用FPGA进行设计时,我们并不能确保设计出来的东西没有功能上的漏洞,因此在设计后我们都会对其进行验证仿真。换句话说…...
【Android Studio 下载 Gradle 失败】
路虽远行则将至,事虽难做则必成 一、事故现场 下载Gradle下载不下来,没有Gradle就无法把项目编译为Android应用。 二、问题分析 观察发现下载时长三分钟,进度条半天没动,说明这个是国外的东西,被墙住了,需…...
贪心算法之Huffman编码
1. 算法推理 Huffman 编码的目标是为给定字符构造一种前缀码,使得整体编码长度最短。基本思想是: 贪心选择:每次选择频率最小的两个节点合并。合并后的节点的权值为两个子节点权值之和,代表这部分子树出现的总频率。 局部最优导…...
Flask学习笔记 - 表单
表单处理 基本表单处理:使用 request.form 获取表单数据。使用 Flask-WTF:结合 WTForms 进行表单处理和验证,简化表单操作。表单验证:使用验证器确保表单数据的有效性。文件上传:处理文件上传和保存文件。CSRF 保护&a…...
指针的补充(用于学习笔记的记录)
1.指针基础知识 1.1 指针变量的定义和使用 指针也是一种数据类型,指针变量也是一种变量 指针变量指向谁,就把谁的地址赋值给指针变量 #include<stdio.h>int main() {int a 0;char b 100;printf("%p,%p \n", &a,&b); // …...
【mongodb】mongodb的字段类型
目录 1. 基本数据类型1.1 String1.2 Number1.3 Boolean1.4 Date1.5 Null1.6 ObjectId1.7 Array1.8 Binary Data1.9 Object 2. 特殊数据类型2.1 Regular Expression2.2 JavaScript2.3 Symbol2.4 Decimal1282.5 Timestamp2.6 MinKey/MaxKey2.7 DBPointer 3. 常用字段类型示例4. 注…...
计算机视觉图像处理基础系列:滤波、边缘检测与形态学操作
计算机视觉图像处理基础系列:滤波、边缘检测与形态学操作 一、前言二、滤波:图像的精细化处理2.1 滤波基础概念2.1.1 滤波的本质2.1.2 图像噪声来源与类型 2.2 线性滤波2.2.1 均值滤波2.2.2 高斯滤波 2.3 非线性滤波2.3.1 中值滤波 三…...
实用的alias别名命令——比2=1+1简单的基础命令
目录 alias命令的用处alias命令的写法让alias别名永久存在的办法下篇预告 alias命令的用处 别名,就是linux系统中的命令的别称,而alias命令,可以显示linux系统当前设定的全部别名,当然,也可以自己定义一个别名。 ali…...
JAVA单例模式
目录 一、什么是单例模式: 二、饿汉模式: 代码示例: 饿汉模式的特点: 三、懒汉模式: 正确代码示例(双重检查锁): 一、什么是单例模式: 一个类,在语法角度…...
k8s安装cri驱动创建storageclass动态类
部署nfs服务器 #所有k8s节点安装nfs客户端 yum install -y nfs-utils mkdir -p /nfs/share echo "/nfs/share *(rw,sync,no_root_squash)" >> /etc/exports systemctl enable --now nfs-serverhelm部署nfs的provisioner&sc 所有k8s节点安装客户端 yu…...
嵌入式Linux驱动—— 1 GPIO配置
目录 1.GPIO操作 1.1 IO命名 1.2 GPIO 时钟使能(CCM) 1.3 IO 复用(IOMUXC) 1.4 IO 配置 1.5 GPIO 配置 1.GPIO操作 GPIO操作主要是以下流程: 使能某组GPIO模块(GPIO1、2、...)&#…...
【C++11】lambda
lambda lambda表达式语法 lambda表达式本质是一个匿名函数对象,跟普通函数不同的是它可以定义在函数内部。lambda表达式语法使用层而言没有类型,所以一般是用auto或者模板参数定义的对象去接收lambda对象。 lambda表达式的格式:[capture-l…...
自旋锁(C++实现)
1 简介 自旋锁是一种典型的无锁算法,在任何时刻,它都最多只能有一个保持者。当有一个线程试图获得一个已经被占用的锁时,该线程就会一直进行循环等待,直到该锁被释放。自旋锁的优点是不会使线程状态发生切换,一直处于用…...
python基础-11-调试程序
文章目录 【README】【11】调试【11.1】抛出异常【11.1.1】抛出异常代码块 【11.2】获取回溯字符串【11.2.1】traceback获取异常回溯信息 【11.3】断言【11.3.1】断言代码示例 【11.4】日志(使用logging模块)【11.4.1】使用logging模块操作日志【11.4.3】…...
我的创作历程:从不情愿到主动分享的成长
🌅主页:猫咪-9527-CSDN博客 “欲穷千里目,更上一层楼。会当凌绝顶,一览众山小。” 目录 二、转变:从被动到主动的心路历程 三、挑战:时间的压力与写作的坚持 四、收获:分享与成长 五、展望…...
uniapp地图导航及后台百度地图回显(v2/v3版本)
百度地图申请地址:控制台 | 百度地图开放平台 效果: 1.后台 1.1申请百度地图APi 1.2 引入百度地图 <script type"text/javascript" src"//api.map.baidu.com/api?v3.0&ak自己百度生气apikey"></script> 1.3 v2组…...
多layout 布局适配
安卓多布局文件适配方案操作流程 以下为通过多套布局文件适配不同屏幕尺寸/密度的详细步骤,结合主流适配策略及最佳实践总结: 一、创建多套布局资源目录 按屏幕尺寸划分 在 res 目录下创建以下文件夹(根据设备特性自动匹配ÿ…...
马斯克 AI 超算
超算建设情况:马斯克旗下人工智能初创公司 xAI 正在田纳西州孟菲斯市建造世界上最大的超级计算机2。自 2024 年 6 月首次宣布这笔工程以来,xAI 已向当地规划和发展机构提交了 14 份施工许可申请,合计代表了 4.059 亿美元的预计项目成本2。该超…...
大模型学习四:DeepSeek Janus-Pro 多模态理解和生成模型 本地部署指南(折腾版)
一、说明简介 DeepSeek Janus-Pro是一款先进的多模态理解和生成模型,旨在实现高质量的文本-图像生成与多模态理解。它是由DeepSeek团队研发的,是之前Janus模型的升级版,能够同时处理文本和图像,即可以理解图片内容,…...
《AI大模型应知应会100篇》第3篇:大模型的能力边界:它能做什么,不能做什么
第3篇:大模型的能力边界:它能做什么,不能做什么 摘要 在人工智能飞速发展的今天,大语言模型(LLM)已经成为许多领域的核心技术。然而,尽管它们展现出了惊人的能力,但也有明显的局限性…...
MySQL 面试知识点详解(索引、存储引擎、事务与隔离级别、MVCC、锁机制、优化)
一、索引基础概念 1 索引是什么? 定义:索引是帮助MySQL高效获取数据的有序数据结构,类似书籍的目录。核心作用:减少磁盘I/O次数,提升查询速度(以空间换时间)。 2 索引的优缺点 优点缺点加速…...
JS API
const变量优先 即对象、数组等引用类型数据可以用const声明 API作用和分类 DOM (ducument object model) 操作网页内容即HTML标签的 树状模型 HTML中标签 JS中对象 最大对象 document 其次大 html 以此类推 获取DOM对象 CSS 中 使用选择器 JS 中 选多个 时代的眼泪 修…...
hackmyvm-Principle
近况: 很难受、 也很累。 但是庆幸靶机很好 正值清明时节 清明时节雨纷纷 🌧️,路上行人欲断魂 😢。 靶机地址 信息收集 主机发现 端口扫描 80端口仅仅是一个nginx 的欢迎界面而已 robots.txt的内容 hi.html的内容 hackme不存在 investigat…...
小刚说C语言刷题——第14讲 逻辑运算符
当我们需要将一个表达式取反,或者要判断两个表达式组成的大的表达式的结果时,要用到逻辑运算符。 1.逻辑运算符的分类 (1)逻辑非(!) !a,当a为真时,!a为假。当a为假时,!a为真。 例…...
池化技术的深度解析与实践指南【大模型总结】
池化技术的深度解析与实践指南 池化技术作为计算机系统中的核心优化手段,通过资源复用和预分配机制显著提升系统性能。本文将从原理、实现到最佳实践,全方位剖析池化技术的核心要点,并结合实际案例说明其应用场景与调优策略。 一、池化技术的…...
基于Java的区域化智慧养老系统(源码+lw+部署文档+讲解),源码可白嫖!
摘 要 时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,区域化智慧养老系统当然不能排除在外。区域化智慧养老系统是在实际应用和软件工程的开发原理之上,运用Java语言、JSP技术以及…...
2025年3月 Scratch 图形化(一级)真题解析 中国电子学会全国青少年软件编程等级考试
2025.03 Scratch图形化编程等级考试一级真题试卷 一、选择题 第 1 题 气球初始位置如下图所示,scratch运行下列程序,气球会朝哪个方向移动?( ) A.水平向右 B.垂直向下 C.水平向左 D.垂直向上 答案:…...
Docker 命令简写配置
alias dpsdocker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}" 配置好后,需要输入: source ~/.bashrc 后生效...
linux signal up/down/down_interruptiable\down_uninterruptiable使用
在Linux内核中,down, down_interruptible, down_killable, 和 up 是用于操作信号量(semap hores)的函数,它们用于进程同步和互斥。以下是对这些函数的简要说明。 1,down(&sem): 这个函数用于获取信号量。如果信号…...
【嵌入式-stm32电位器控制以及旋转编码器控制LED亮暗】
嵌入式-stm32电位器控制LED亮暗 任务1代码1Key.cKey.hTimer.cTimer.hPWM.cPWM.hmain.c 实验现象1任务2代码2Key.cKey.hmain.c 实验现象2问题与解决总结 源码框架取自江协科技,在此基础上做扩展开发。 任务1 本文主要介绍利用stm32f103C8T6实现电位器控制PWM的占空比…...
Mysql 中 ACID 背后的原理
在 MySQL 中,ACID 是事务处理的核心原则,用于保证数据库在执行事务时的可靠性、数据一致性和稳定性。ACID 是四个关键特性的首字母缩写,分别是:Atomicity(原子性)、Consistency(一致性ÿ…...
【算法】简单数论
模运算 a m o d b a − ⌊ a / b ⌋ b a\ mod \ b a - \lfloor a / b \rfloor \times b a mod ba−⌊a/b⌋b n m o d p n \ mod\ p n mod p得到的结果的正负至于被除数 n n n有关 模运算的性质: ( a b ) m o d m ( ( a m o d m ) ( b m o d m ) ) m o d m …...
mybatis慢sql无所遁形
痛点问题: 扫描项目的慢sql 并提出优化建议 开源项目地址:gitee:mybatis-sql-optimizer-spring-boot-starter: 这个starter可以帮助开发者在开发阶段发现SQL性能问题,并提供优化建议,从而提高应用程序的数据库访问效…...
MCP有哪些比较好的资源?
MCP(Model Context Protocol)是一种由Anthropic公司推出的开放协议,旨在为AI模型与开发环境之间提供统一的上下文交互接口。目前,围绕MCP协议的资源非常丰富,以下是一些比较好的MCP资源推荐: Smithery Smit…...
Nginx功能及应用全解:从负载均衡到反向代理的全面剖析
Nginx作为一款开源的高性能HTTP服务器和反向代理服务器,凭借其高效的资源利用率和灵活的配置方式,已成为互联网领域中最受欢迎的Web服务器之一。无论是作为HTTP服务器、负载均衡器,还是作为反向代理和缓存服务器,Nginx的多种功能广…...
FreeRTOS/任务创建和删除的API函数
任务的创建和删除本质就是调用FreeRTOS的API函数 API函数描述xTaskCreate()动态方式创建任务xTaskCreateStatic()静态方式创建任务vTaskDelete()删除任务 动态创建任务 任务的任务控制块以及任务的占空间所需的内存,均由FreeRTOS从FreeRTOS管理的堆中分配 静态创建…...
【jvm】GC评估指标
目录 1. 说明2. 吞吐量(Throughput)3. 暂停时间(Pause Time)4. 内存占用(Footprint)5. 频率(Frequency)6. 对象晋升率(Promotion Rate)7. 内存分配速率&#…...
数据集(Dataset)和数据加载器(DataLoader)-pytroch学习3
pytorch网站学习 处理数据样本的代码往往会变得很乱、难以维护;理想情况下,我们希望把数据部分的代码和模型训练部分分开写,这样更容易阅读、也更好维护。 简单说:数据和模型最好“分工明确”,不要写在一起。 PyTor…...
影响RTOS实时性的因素有哪些?
目录 1、任务调度延迟 2、中断处理延迟 3、系统负载 4、任务优先级反转 5、时钟精度 6、内存管理 影响RTOS实时性的因素主要包括任务调度延迟、中断处理延迟、系统负载、任务优先级反转、时钟精度、内存管理等。 1、任务调度延迟 任务调度器是RTOS的核心,当…...
二叉树 递归
本篇基于b站灵茶山艾府的课上例题与课后作业。 104. 二叉树的最大深度 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出&…...