车载以太网网络测试 -25【SOME/IP-报文格式-1】
1 摘要
本专题接着上一专题对SOME/IP进行介绍,主要对SOME/IP报文格式以及定义的字段进行详细介绍,有助于在实际项目过程中对SOME/IP报文的理解。
上文回顾:
车载以太网网络测试 -24【SOME/IP概述】
2 SOME/IP-报文格式
通过上个专题介绍,SOME/IP是一个通信中间件,位于传输层之上,因此SOME/IP的数据封装在传输层头部的后面。如下图所示,SOME/IP也有帧头部分。
SOME/IP报头的总长度为16个字节,共有9个字段。
各字段说明:
2.1 Service ID / 16 bits
服务标识,Service ID 是一个核心标识符,用于唯一标识车载网络或分布式系统中的服务(Service)。
唯一标识服务
Service ID 是一个16位的无符号整数(0x0000~0xFFFF),用于在系统中唯一区分不同的服务。例如:
- 0x1234 可能代表“车速服务”,
- 0x5678 可能代表“电池管理服务”。
通过Service ID,客户端和服务端可以明确识别通信的目标服务,避免混淆。
2.2 Method ID / Event ID / 16 bits
Method ID 和 Event ID 是用于标识服务通信中不同操作和事件的关键标识符。
- Method ID(方法标识符)
作用:唯一标识服务接口中的可调用方法(远程过程调用,RPC)。
功能:- 客户端通过发送包含
Method ID
的请求报文,调用服务端的特定方法。 - 服务端根据
Method ID
确定需要执行的方法,并返回响应(如方法返回值或状态)。
示例场景: - 车辆ECU提供“获取车速”服务,客户端通过
Method ID = 0x1234
调用该方法,服务端返回当前车速值。
- 客户端通过发送包含
- Event ID(事件标识符)
作用:唯一标识服务接口中的事件(由服务端主动通知客户端的数据)。
功能:- 服务端通过
Event ID
标记特定事件(如传感器数据变化、状态更新)。 - 客户端订阅(Subscribe)指定
Event ID
后,服务端会在事件触发时推送通知(Notification)。
示例场景: - 车载温度传感器服务通过
Event ID = 0x5678
定期发布温度数据,客户端订阅后即可接收实时更新。
- 服务端通过
说明:
这个字段的第一个bit是标志位,如果标志位为0,表示后面15位为Method ID(Method、Field.Getter及Field.Setter);如果标志位为1,表示后面15位为Event ID(包括Event和Field.Notify)
Method/Event ID部分:
若最高位=0(ID < 0x8000)→ Method ID
若最高位=1(ID ≥ 0x8000)→ Event ID
因此,Method和Event可以从该字段的值来区分:
- Method ID的范围为0x0000 ~ 0x7FFF
- Event ID的范围为0x8000 ~ 0xFFFF。
Method和Event为SOME/IP的两种通信方式,后面专题介绍。
Service ID和Method ID/Event ID两个字段可以组成Message ID,每个Message ID在车内网络都是唯一的,可以用来标识某个服务的某个接口。
2.3 Length / 32 bits
-
位置:位于SOME/IP Header的第5-8字节(即从第4字节开始,前4字节为Message ID和Length字段本身)。
-
数据类型:32位无符号整数(大端序,Big-endian)。
-
单位:字节(Byte)。
-
计算范围:从
Client ID
字段开始到整个报文结束(包括Payload)的总字节数。
服务 ID(Service ID) 和 方法/事件 ID(Method/Event ID) 属于 SOME/IP 报文头 的一部分,位于 Length 字段之前,因此不被计入 Length。 -
作用:
- 报文边界识别:接收方通过Length字段确定报文的结束位置,尤其在TCP等流式传输中区分多个连续的SOME/IP报文。
- 完整性校验:验证接收到的数据是否完整(实际接收的字节数是否与Length字段匹配)。
- 协议解析:帮助解析器正确分离Header和Payload部分
2.4 Client ID / 16 bits
Client ID是一个用于标识客户端实例的唯一标识符,服务器可通过该字段区分不同的客户端,在多个客户端同时请求或使用同一个服务器中的同一个服务时可使用。Client ID也可以设置为车内网络唯一的,这样可以直接用于标识出具体的节点。它是一个16位的字段。
-
Client ID的作用
Client ID在SOME/IP通信中扮演着重要角色:- 服务实例识别:帮助服务端识别和区分不同的客户端实例
- 会话管理:在请求-响应交互中维护客户端与服务端之间的会话状态
- 消息路由:确保响应能够正确返回到发起请求的客户端
- 负载均衡:在多个服务实例场景下,帮助实现请求的合理分配
- 状态跟踪:服务端可以跟踪不同客户端的状态和生命周期
-
分配方式:
- 可以由客户端自行生成(需确保唯一性)
- 可以由中间件或服务端分配
- 通常采用递增或随机方式生成
-
应用场景:
- 服务发现:在服务发现过程中,客户端使用Client ID标识自己
- 方法调用:在RPC调用中标识调用方
- 事件订阅:标识事件订阅的客户端
- 错误处理:帮助定位问题发生的客户端
Client ID是SOME/IP实现多客户端并发访问同一服务的基础机制之一,确保了服务端能够正确处理来自不同客户端的并行请求。
2.5 Session ID / 16 bits
会话标识,可以用来区分来自同一发送者的多条请求,表示请求或消息的顺序。如果使用,应在每次调用后递增,其范围为0x0001到0xFFFF,当达到0xFFFF后,则循环至0x0001重新开始计数。对于请求/响应的method,客户端可通过Session ID来识别正确的响应,如果响应的Session ID与其发送的请求中不一致,应忽略。对于Event,有多种不同场景下的应用,如果不使用该字段,可置为0x0000,接收端直接忽略即可。
-
Session ID的作用
- 会话标识:唯一标识客户端与服务端之间的特定交互会话
- 请求-响应匹配:帮助客户端将响应与正确的请求关联起来
- 多路复用支持:允许多个并发会话通过同一连接进行
- 状态跟踪:协助跟踪长时间运行的交互状态
-
对于不同的通信模式有不同的使用方式:
- 请求/响应模式:用于匹配请求和响应
- 事件/通知模式:可能用于标识订阅会话
- 字段通信:可能用于跟踪字段更新会话
在SOME/IP-SD(服务发现)中,Session ID可能有特殊用途,用于标识服务实例
- 实际应用
在汽车电子系统中,Session ID帮助管理复杂的服务交互,特别是在以下场景:- 多个ECU之间的并发服务调用
- 长时间运行的操作(如固件更新)
- 需要保持状态的交互序列
2.6 Protocol Version / 8 bits
协议版本,表示SOME/IP协议的版本,即SOME/IP的头部格式版本。发送端和接收端所支持的协议版本应一致,如果不一致则无法处理,主要用于版本控制和兼容性管理。以下是其详细定义与作用:
长度:1字节(8位)。
取值:通常为 0x01
(表示SOME/IP协议版本1),这是当前广泛实现的版本。
标准参考:根据AUTOSAR规范,SOME/IP协议版本需严格定义以确保互通性。
- 作用
(1) 协议版本标识 - 标识数据包遵循的SOME/IP协议版本,确保通信双方使用相同的协议规则(如消息格式、序列化方式等)。
- 例如:
0x01
表示版本1,可能支持基础RPC和事件通知;未来版本可能扩展新功能(如增强的QoS机制)。
(2) 兼容性控制 - 接收方检查:若接收方不支持该版本,可拒绝处理或触发错误响应(如返回
NOT_OK
状态)。 - 多版本共存:网关或中间件可能根据此字段对消息进行转换或路由(如版本1与版本2互通时)。
(3) 未来扩展性 - 保留字段为未来协议升级提供可能(例如:
0x02
可能引入新的头部字段或优化序列化效率)。
实际应用示例:
- 场景:ECU A(版本1)向ECU B(版本2)发送请求。
- 处理流程:
- ECU B检测到
Protocol Version=0x01
,判断自身是否支持向后兼容。 - 若不支持,通过SOME/IP错误响应通知ECU A;若支持,则按版本1规则处理消息。
- ECU B检测到
2.7 Interface Version / 8 bits
接口版本,用于标识服务接口的版本号,在AUTOSAR等车载系统中,Interface Version通常与服务接口描述文件(ARXML)中定义的版本一致,确保通信双方对接口定义的理解一致。
- 作用
-
版本控制:标识服务接口的版本,允许服务接口在不破坏向后兼容性的情况下进行演进。
-
兼容性管理:客户端和服务端可以通过版本号判断是否兼容,避免因版本不匹配导致的通信问题。
-
多版本支持:系统可以同时部署同一服务的多个版本,通过版本号区分。
- 使用场景
-
当服务接口有重大变更时(如新增方法、事件或字段),递增主版本号。
-
当服务接口有向后兼容的修改时(如bug修复或性能优化),递增次版本号。
-
客户端在请求时可以指定它能处理的最高版本,服务端可以选择使用兼容的版本进行响应。
-
注意事项
-
版本号递增策略应由服务接口设计者明确定义
-
版本号比较通常采用简单的数值比较
-
版本不匹配时应定义明确的错误处理机制
2.8 Message Type / 8 bits
报文类型,用于表示SOME/IP报文的类型。它在SOME/IP协议头中占据重要位置,直接影响通信双方对消息的处理逻辑,通过该字段可以识别该报文是请求、响应、通知或者错误等。其中第三位为分段标志位(TP-Flag),用于表示该条报文是否被分段。
说明:
TP指SOME/IP-TP(Transport Protocol),是SOME/IP的传输协议,可以简单的理解为是分段传输机制,在后续专题中会详细介绍。
以下是完整的Message Type取值及其含义(十六进制表示):
Type Value | 名称 | 描述 |
---|---|---|
0x00 | REQUEST | 客户端到服务的请求(请求并期望响应)。 |
0x01 | REQUEST_NO_RETURN | 客户端到服务的请求(不期望响应)。 |
0x02 | NOTIFICATION | 事件通知(无响应)。 |
0x40 | REQUEST_ACK | REQUEST的ACK确认。 |
0x41 | REQUEST_NO_RETURN_ACK | REQUEST_NO_RETURN的ACK确认。 |
0x42 | NOTIFICATION_ACK | NOTIFICATION的ACK确认。 |
0x80 | RESPONSE | 服务端对REQUEST的响应(Bit 7=1表示响应)。 |
0x81 | ERROR | 响应中包含错误。 |
0xC0 | RESPONSE_ACK | RESPONSE的ACK确认。 |
0xC1 | ERROR _ACK | ERROR的ACK确认。 |
0x20 | TP_REQUEST | 分块传输(TP)的请求报文(期待响应)。 |
0x21 | TP_REQUEST_NO_RETURN | 分块传输(TP)的请求报文(无响应)。 |
0x22 | TP_NOTIFICATION | 一个TP通知/事件回调的请求,不期待有响应。 |
0xA0 | TP_RESPONSE | TP请求的响应报文。 |
0xA1 | TP_ERROR | TP请求的错误响应。 |
关键说明:
- Bit 7 (最高位):
0
: 表示请求或通知(客户端→服务端)。1
: 表示响应或错误(服务端→客户端)。
- Bit 6:
1
时表示响应(如RESPONSE
或ERROR
)。
- TP前缀:
- 标识报文使用分块传输(Transport Protocol),用于超过SOME/IP默认MTU的数据。
2.9 Return Code / 8 bits
Return Code字段是一个8位(1字节)的无符号整数,用于表示远程方法调用(RPC)或事件通知的处理结果状态。它的定义和作用类似于HTTP状态码,用于指示请求是否成功、失败或需要进一步处理。所以只会在响应或者错误类型的报文中才有意义。对于请求和通知类报文(REQUEST, REQUEST_NO_RETURN, NOTIFICATION) 该字段不使用,应置0x00。
SOME/IP协议规范(如AUTOSAR标准)定义了以下常见的Return Code值:
值(十进制) | 名称 | 描述 |
---|---|---|
0x00 (0) | E_OK | 请求成功完成。 |
0x01 (1) | E_NOT_OK | 通用错误(未明确指定的失败)。 |
0x02 (2) | E_UNKNOWN_SERVICE | 请求的服务ID不存在。 |
0x03 (3) | E_UNKNOWN_METHOD | 请求的方法ID在服务中不存在。 |
0x04 (4) | E_NOT_READY | 服务/方法尚未准备好(例如初始化未完成)。 |
0x05 (5) | E_NOT_REACHABLE | 服务端不可达(网络或通信问题)。 |
0x06 (6) | E_TIMEOUT | 请求超时(未在指定时间内收到响应)。 |
0x07 (7) | E_WRONG_PROTOCOL_VERSION | 协议版本不匹配。 |
0x08 (8) | E_WRONG_INTERFACE_VERSION | 接口版本不匹配。 |
0x09 (9) | E_MALFORMED_MESSAGE | 消息格式错误(如字段长度或类型不符)。 |
0x0A (10) | E_WRONG_MESSAGE_TYPE | 消息类型不匹配(如期望请求但收到响应)。 |
0x0B–0x7F | 保留 | 协议规范保留的代码,未来可能扩展。 |
0x80–0xFF | 供应商特定 | 供厂商自定义使用(如特定ECU或中间件的扩展错误码)。 |
Return Code的作用:
-
反馈调用状态
客户端通过Return Code快速判断请求是否成功,或定位失败原因(如服务不可用、参数错误等)。 -
错误处理与恢复
客户端可根据不同Return Code采取不同策略(如重试、回退、日志记录等)。例如:- 遇到
E_NOT_READY
可延迟重试。 - 遇到
E_UNKNOWN_METHOD
需检查方法ID配置。
- 遇到
-
协议兼容性
- 版本不匹配(如
E_WRONG_PROTOCOL_VERSION
)提示双方升级协议。 - 供应商特定代码(0x80以上)支持私有扩展。
- 版本不匹配(如
-
调试与诊断
在开发和测试阶段,Return Code帮助快速定位通信或逻辑问题。
示例场景:
-
成功请求
客户端调用方法0x1234
,服务端返回Return Code = 0x00 (E_OK)
,表示执行成功。 -
服务不存在
客户端请求一个未注册的服务(如ID0x9999
),服务端返回0x02 (E_UNKNOWN_SERVICE)
。 -
超时处理
客户端未在设定时间内收到响应,本地SOME/IP栈生成0x06 (E_TIMEOUT)
。
注意事项:
- AUTOSAR兼容性:不同AUTOSAR版本可能扩展Return Code,需参考对应标准文档(如AUTOSAR_SWS_SOMEIPProtocol)。
- 自定义代码:供应商特定代码需确保收发双方约定一致,避免冲突。
- 与Response Code区别:Return Code是协议层状态,而Response Code可能用于应用层错误(如参数校验失败)。
2.10 通信过程示例
以下是一个详细的SOME/IP报文通信过程示例,包含报头结构解析和交互流程:
1. SOME/IP报文头结构(12字节)
字段 | 长度(字节) | 示例值 | 说明 |
---|---|---|---|
Message ID | 4 | 0x12345678 | 高16位:Service ID (0x1234) |
低16位:Method ID (0x5678) | |||
Length | 4 | 0x00000010 | 从Request ID开始的剩余长度 |
Request ID | 4 | 0xDEADBEEF | 高32位:Client ID (0xDEAD) |
低32位:Session ID (0xBEEF) | |||
Protocol Version | 1 | 0x01 | SOME/IP版本(通常为1) |
Interface Version | 1 | 0x02 | 服务接口版本 |
Message Type | 1 | 0x00 (REQUEST) | 0x80=REQUEST, 0x40=RESPONSE |
Return Code | 1 | 0x00 (E_OK) | 0x00=成功,其他为错误码 |
2. 通信流程示例(客户端调用服务端方法)
步骤1:客户端发送REQUEST
SOME/IP Header:Message ID: 0x12345678 (Service ID=0x1234, Method ID=0x5678)Length: 0x00000010 (16字节,含Request ID后的数据)Request ID: 0xDEADBEEF (Client ID=0xDEAD, Session ID=0xBEEF)Protocol Ver: 0x01Interface Ver: 0x02Message Type: 0x80 (REQUEST)Return Code: 0x00Payload:0x11223344 (示例数据:输入参数)
步骤2:服务端回复RESPONSE
SOME/IP Header:Message ID: 0x12345678 (与请求匹配)Length: 0x0000000C (12字节,仅含返回值)Request ID: 0xDEADBEEF (与请求匹配)Protocol Ver: 0x01Interface Ver: 0x02Message Type: 0x40 (RESPONSE)Return Code: 0x00 (E_OK)Payload:0xAABBCCDD (示例数据:计算结果)
3. 异常场景示例
场景:方法调用失败(服务不可用)
SOME/IP Header:Message Type: 0x40 (RESPONSE)Return Code: 0x07 (E_NOT_READY)# 其他字段与请求匹配
Payload: 无
4. 关键字段说明
- Message ID:唯一标识服务和方法(如
0x1234:0x5678
表示服务A的Method X)。 - Request ID:匹配请求与响应(同一Client ID + 自增Session ID)。
- Message Type:
0x80
= REQUEST(需要响应)0x40
= RESPONSE0x20
= ERROR
- Return Code:常见值:
0x00
(E_OK):成功0x01
(E_NOT_OK):通用错误0x07
(E_NOT_READY):服务未初始化
5. 通信流程图示
Client Server| --- REQUEST (0x80) ---> || <-- RESPONSE (0x40) --- || (ReturnCode=0x00) |
通过上述示例,可以清晰理解SOME/IP协议中报头如何标识服务、匹配请求/响应及处理异常。实际应用中需结合服务发现(SOME/IP-SD)实现动态服务订阅。
3 总结
以上是对SOME/IP报文的格式以及各字段的定义进行了介绍,并且通过列举实例来帮助大家对SOME/IP通信过程的理解,希望能有所帮助!
相关文章:
车载以太网网络测试 -25【SOME/IP-报文格式-1】
1 摘要 本专题接着上一专题对SOME/IP进行介绍,主要对SOME/IP报文格式以及定义的字段进行详细介绍,有助于在实际项目过程中对SOME/IP报文的理解。 上文回顾: 车载以太网网络测试 -24【SOME/IP概述】 2 SOME/IP-报文格式 通过上个专题介绍&a…...
Kubernetes》》k8s》》Replication Controller
RC(Replication Controller) 应用托管在kubernetes之后,kubernetes需要保证应用能够持续运行,这是RC的工作内容,它会确保任何时间kubernetes中都有指定数量的Pod在运行。在此基础上,RC还提供了一些更高级的特性,比如滚…...
力扣HOT100之矩阵:73. 矩阵置零
这道题我没有想到什么好的办法,直接暴力AC了,直接遍历两次矩阵,第一次遍历用两个向量分别记录出现0的行数和列数,第二次遍历就判断当前的元素的行数或者列数是否出现在之前的两个向量中,若出现了就直接置零,…...
天锐蓝盾终端安全防护——企业终端设备安全管控
从办公室的台式电脑到员工手中的移动终端,这些设备不仅是工作的得力助手,更是企业数据的重要载体。然而,随着终端设备的广泛使用,安全风险也如影随形。硬件设备使用不当、数据随意传输等问题频发,使得企业数据面临着泄…...
【博客】使用GithubAction自动同步obisidian和hexo仓库
使用Github Action自动同步obisidian和hexo仓库,避免手动操作。 本文首发于❄慕雪的寒舍 1. 烦恼 先来说说慕雪现在的笔记和博客是怎么管理的吧,我正在使用两套笔记软件 思源笔记:私密性高一些,不是博客的笔记都在这里面。由于思…...
UE5学习笔记 FPS游戏制作23 区分敌我,寻找敌对角色
文章目录 方法1 tag方法2 变量添加变量和函数防止队友伤害 修改Task使用球形检测查找敌人场景面板直接编辑属性 方法1 tag 角色蓝图身上有一个tag标签,可以通过标签内容区分队伍 通过ActorHasTag判断一个Actor是否有对应的标签 方法2 变量 添加变量和函数 在s…...
ECharts各类炫酷图表/3D柱形图
一、前言 最近鸡米花实现了各类的炫酷的图表,有3D柱形图、双边柱形图以及异形柱形图,好了,直接上图: 二、效果图 一个个来吧,下面就是代码啦,注意,一下图表展示的宽高均为800px*300px 三、异形横…...
AI基础03-视频数据采集
上篇文章我们学习了图片的数据采集,今天主要了解一下视频数据采集的方法。视频是由一系列图像构成的,其中每一张图片就是一帧。视频数据采集方法通常有自动图像采集和基于处理器的图像采集两种。我们学习一下如何利用python 工具和笔记本计算机摄像头进行…...
docker-compose部署prometheus+grafana+node_exporter+alertmanager规则+邮件告警
目录 一.docker-compose文件 二.配置文件 三.文件层级关系,docker-compose和配置文件位于同级目录 四.node_exporter页面json文件 五.效果展示 prometheusalertmanager邮件告警 grafana面板效果 六.涉及离线包 一.docker-compose文件 [rootsulibao prometh…...
CPM:大规模生成式中文预训练语言模型
摘要 预训练语言模型(PLMs)已被证明对各种下游自然语言处理(NLP)任务有益。最近,GPT-3 以 1750 亿参数和 570GB 训练数据引起了广泛关注,因为它具备少样本(甚至零样本)学习的能力。…...
k8s scheduler几种扩展方式的关系及区别
网上关于scheduler扩展介绍的文章很多,但都是东说一句西说一嘴,完全没有逻辑性,对于逻辑建构者看着很痛苦,这篇文章不会深入教你怎么扩展,而是教你几种扩展方式的关系和逻辑结构: 目前Kubernetes支持五种方…...
Spring Boot 3.4.3 基于 SpringDoc 2 和 Swagger 3 实现项目接口文档管理
在现代企业级应用开发中,前后端分离已成为主流模式,前端负责界面呈现,后端专注提供 RESTful API 接口。然而,接口文档的编写和维护往往是开发过程中的痛点。Spring Boot 3.4.3 结合 SpringDoc 2 和 Swagger 3,为开发者…...
前端D3.js面试题及参考答案
目录 解释 D3.js 中 enter ()、update ()、exit () 的作用及典型应用场景 描述数据连接(Data Join)的原理,如何通过 data () 方法实现数据集与 DOM 元素的动态绑定? 如何利用 datum () 实现单个元素的数据绑定?与 data () 有何区别? 在动态数据更新时,如何通过 merge…...
Docker实现MySQL主从复制配置【简易版】
Docker实现MySQL主从复制配置 环境准备 安装docker 拉取MySQL 8.0镜像 docker pull mysql:8.0#检查 docker images | grep mysql代码流程 由于Mysql8.0的ssl验证十分繁琐,在创建容器的时候一定要禁掉 创建自定义网络 docker network create mysql-replication-ne…...
IDEA中打开项目Vue+Vue基本语法
一、IDEA中打开项目 1.IDEA中安装Vue基本插件 2.项目结构 项目根目录 node_modules : npm 加载的项目依赖模块 public : 存放静态资源,如图片、视频等。 src : 项目源码目录,包含主要的开发文件。 index.html : 首页入口文件,可以添…...
【深度学习新浪潮】图像修复(Image Inpainting)技术综述:定义、进展与应用展望
本文为精简版,完整技术细节与参考文献可与作者讨论。 1. 图像修复的定义与核心目标 图像修复(Image Inpainting)是一种通过算法手段填补图像中缺失区域或移除不需要对象的技术,其核心目标是利用图像上下文信息生成与周围像素一致且视觉自然的内容。该技术通过计算机视觉和…...
【实战】解决图片 Hover 抖动问题的完整指南
在开发网站时,很多人都会遇到一个常见问题:鼠标移动到图片上,图片放大,结果发生抖动或闪烁。这个问题往往伴随着后端接口请求、JS 动态追加 DOM 等复杂行为。 本文将深入剖析这个问题的成因,并提供一套彻底的解决方案…...
java容器
一、List 接口实现类 1. ArrayList 特性:基于动态数组实现,支持快速随机访问(时间复杂度 O(1)),但插入/删除元素时需移动后续元素(时间复杂度 O(n)) 一、核心方法分类 添加元素 add(E e):尾部追加元素,均摊时间复杂度O(1)add(int index, E element):指定位置插入…...
arthas之jvm相关命令
文章目录 1. dashboard2. thread线程相关3. jvmTHREAD相关文件描述符相关 4. sysprop5. 小结6. sysenv7. vmoption8. getstatic9. ognl10. 小结 1. dashboard 作用:显示当前系统的实时数据面板,按q或ctrlc退出 数据说明 ID: Java级别的线程IDÿ…...
UDP视频传输中的丢包和播放花屏处理方法
在处理UDP视频传输中的丢包和花屏问题时,需要结合编码优化、网络传输策略和接收端纠错技术。以下是分步骤的解决方案: 1. 前向纠错(FEC,Forward Error Correction) 原理:在发送数据时附加冗余包,接收方通过冗余信息恢复丢失的数据包。 实现方法: 使用Reed-Solomon、XO…...
蓝桥杯 班级活动
问题描述 小明的老师准备组织一次班级活动。班上一共有 n 名同学(n 为偶数),老师想把所有同学进行分组,每两名同学一组。 为了公平,老师给每名同学随机分配了一个 n 以内的正整数作为 id,第 i 名同学的 i…...
Open webui的使用
问题 之前本地量化模型管理器ollama的文章,我们知道可以通过ollama来管理本地量化模型,也能够在命令行中与相关模型进行对话。现在我们想要在有个web页面通过浏览器来与本地模型对话。这里我们就使用Open webui作为界面来与本地模型对话。 安装启动 这…...
页面重构过程中如何保证良好的跨浏览器一致性?
在页面重构的过程中,为了确保网页能够在不同的浏览器中呈现一致的效果,我们需要采取一系列措施来提高跨浏览器的一致性。以下是几个关键步骤和技术要点: 使用标准化的HTML和CSS:始终遵循最新的Web标准编写代码,例如采用…...
Python库与Excel
目录 一、库 1、Python自带的库 2、第三方库 3、第三方库的安装 二、import的用法 三、datetime库 1、处理日期 2、处理时刻 3、局限性 四、random库 1、函数 2、随机种子 3、发牌模拟器 五、jieba库 六、openpyxl库 1、表格读取 2、表格元素遍历 3、工作表的…...
记录一下最近参与实习 外包 社招流程里的一些感悟
记录一下最近参与实习 外包 社招流程里的一些感悟 1.简历门面要重视 1.简历非常重要,它是你的门面 初步了解到你的一个实习/工作经历,然后掌握的技术栈,是否与当前项目匹配,哪些模块上的设计是我们想要重点关注的,可…...
流动的梦境:GPT-4o 的自回归图像生成深度解析
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
HarmonyOS NEXT开发进阶(十四):HarmonyOS应用开发者基础认证试题集汇总及答案解析
文章目录 一、前言二、判断题(134道)三、单选题(210道)四、多选题(123道)五、拓展阅读 一、前言 鸿蒙原生技能学习阶段,通过官方认证的资格十分有必要,在项目实战前掌握基础开发理论…...
Visual Studio Code(简称 VS Code)下载与使用教程1(新建文件,语法高亮,快捷键,主题,快捷指令)
简介 由 微软(Microsoft) 开发的 免费、开源、跨平台 的 代码编辑器,广泛用于编程开发、文本编辑和调试。 主要功能 代码编辑:支持几乎所有编程语言(Python、JavaScript、Java、C、Go 等),提供…...
3.28前端模拟面试
针对你 1.5 年的前端经验,结合 Vue 3、TypeScript、微前端(qiankun)等背景,我准备了一套模拟面试题,偏向场景化问题,考察你的实战经验和思维能力。 一、工程化 & 架构 你们的前端项目使用 qiankun 做微…...
pip 安装某个包之后,Jupyter Lab仍旧显示包冲突;例如:Numba needs NumPy 2.1 or less. Got NumPy 2.2.
异常提示 Numba needs NumPy 2.1 or less. Got NumPy 2.2. --------------------------------------------------------------------------- ImportError Traceback (most recent call last) Cell In[8], line 53 import pywt4 import matplot…...
Python:爬虫概念与分类
网络请求: https://www.baidu.com url——统一资源定位符 请求过程: 客户端,指web浏览器向服务器发送请求 请求:请求网址(request url);请求方法(request methods);请求头(request header)&…...
flask开发中设置Flask SQLAlchemy 的 db.Column 只存储非负整数(即 0 或正整数)
如果你想控制一个 Flask SQLAlchemy 的 db.Column 只存储非负整数(即 0 或正整数),你可以在模型中使用验证来确保这一点。一种常见的方法是使用模型的 validate 方法或者在执行插入或更新操作时进行检查。 以下是实现这一目标的几种方法&…...
从0到1解决项目问题经验-Vue3前端
问题1: 我有文件里面这么一段代码,但是现在有个问题,就是在设备信息详情的抽屉页面中,当我首次点击查看的时候,显示的物流中心名称现在是跟"deviceInfo.logisticsCenterName"做的绑定,于是现在显…...
Vue.js的CSS过渡与动画:常用案例解析
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…...
【论文阅读】Co2l: Contrastive continual learning
原文链接:[2106.14413] Co$^2$L: Contrastive Continual Learning 阅读本文前,需要对持续学习的基本概念以及面临的问题有大致了解,可参考综述: Wang L, Zhang X, Su H, et al. A comprehensive survey of continual learning: …...
Python给对象数组排序
文章目录 1. 使用sorted()函数(返回新的排序后的列表)2. 使用list.sort()方法(原地排序,不返回新列表)3. 如果数据结构是集合(set),集合本身是无序的,无法直接排序&#…...
Docker-清理容器空间prune
docker system prune -a 是一个非常有用的命令,用于清理 Docker 系统中未使用的资源,包括停止的容器、未使用的网络、卷以及未被任何容器引用的镜像(悬空镜像和所有未使用的镜像)。以下是关于该命令的详细说明: 命令…...
Kubernetes》》K8S》》Deployment 、Pod、Rs 、部署 nginx
Deployment deployment文档说明 kubectl get rs,deployment,pods 删除pod 、deployment 、service # 如果只删除pod,deployment会自动重建,所以应该先删除deployment。 # 下面演示的是删除所有deployment,可以指定只删除某个 # 删除所有…...
【Zookeeper搭建】Zookeeper分布式集群搭建完整指南
Zookeeper分布式集群搭建 (一)克隆前准备工作 一、时钟同步 步骤: 1、输入date命令可以查看当前系统时间,可以看到此时系统时间为PDT(部分机器或许为EST),并非中国标准时间。我们在中国地区…...
基于YOLO11/WVP的电梯系统开发-模型训练与rk3568移植
1. 环境准备 代码下载: https://github.com/ultralytics/ultralytics.git切换到 8.3.0 以上的分支,yolov11 只在上述分支支持, 下载后在 ultralytics 根目录下安装 yolo 依赖环境: pip install -e . -i https://pypi.tuna.tsinghua.edu.cn…...
[数据结构]并查集(系统整理版)
基础用法 int p[N];//路径压缩 寻找祖宗节点 int find(int x){if(p[x]!x) p[x]find(p[x]);return p[x]; }int main(){ //初始化for(int i1;i<n;i) p[i]i; }合并 void merge(int a,int b){int aafind(a),bbfind(bb);if(aa!bb){p[aa]bb;} }查询是否联通 bool is_connected(…...
人工智能与软件工程结合的发展趋势
AI与软件工程的结合正在深刻改变软件开发的流程、工具和方法,其发展方向涵盖了从代码生成到系统维护的整个生命周期。以下是主要的发展方向和技术趋势: 1. 软件架构体系的重构 从“面向过程”到“面向目标”的架构转型: AI驱动软件设计以目标…...
Compose 实践与探索十七 —— 多指手势与自定义触摸反馈
上一节我们讲了滑动的手势识别以及嵌套滑动,二者都属于触摸反馈这个大的范畴内的知识。本节我们将深入触摸反馈这个话题,讲一讲多指手势的识别与完全自定义的触摸反馈的实现。 1、多指手势 多指手势可以分为两类: 利用 API 处理预设好的手…...
哈希表 - 两个数组的交集(集合、数组) - JS
一、Set基础 在 JavaScript 中,Set 是一种集合(Collection)数据结构,用于存储唯一值(不允许重复),并且可以高效地进行添加、删除、查询等操作。它类似于数组(Array)…...
26_ajax
目录 了解 接口 前后端交互 一、安装服务器环境 nodejs ajax发起请求 渲染响应结果 get方式传递参数 post方式传递参数 封装ajax_上 封装ajax下 了解 清楚前后端交互就可以写一些后端代码了。小项目 现在写项目开发的时候都是前后端分离 之前都没有前端这个东西&a…...
Java面试黄金宝典24
1. 什么是跳表 定义 跳表(Skip List)是一种随机化的数据结构,它基于有序链表发展而来,通过在每个节点中维护多个指向其他节点的指针,以多层链表的形式组织数据。其核心思想是在链表基础上增加额外层次,每…...
每日c/c++题 备战蓝桥杯(全排列问题)
题目描述 按照字典序输出自然数 1 到 n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。 输入格式 一个整数 n。 输出格式 由 1∼n 组成的所有不重复的数字序列,每行一个序列。 每个数字保留 5 个场…...
Layui实现table动态添加行,可删除、表格可编辑,小数校验
实现如图需求,layui实现的可编辑table,包含B、C、D、E列,A列不用实现出现,A列放在附件就是让你明白,不同的物料名称,行是不一样的。除了头部表头和E列不能编辑,每个表格都可编辑,其中…...
Spring Boot 非web应用程序
在 Spring Boot 框架中,要创建一个非Web应用程序(纯Java程序) main方法运行,不启动tomcat,main方法执行结束,程序就退出了; 方式一 1、SpringBoot开发纯Java程序,应该采…...
数据分析中的基线校正算法全解析:原理、实现与应用
数据分析中的基线校正算法全解析:原理、实现与应用 在数据分析中,基线漂移是一个常见问题,会严重影响数据的解释和分析精度。本文将详细介绍12种主流基线校正方法,包括数学原理、Python实现代码和适用场景分析。 基线漂移问题概述 基线漂移主要由以下因素引起: 仪器强度…...