SOME/IP--协议英文原文讲解11
前言
SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块:
1. SOME/IP协议讲解
2. SOME/IP-SD协议讲解
3. python/C++举例调试讲解
4.2.6 Error Handling
Error handling can be done in the application or the communication layer below. Therefore SOME/IP supports two different mechanisms:
• Return Codes in the Response Messages of methods
• Explicit Error Messages
SOME/IP 在两种情况发送 错误消息
1. method 的 响应消息
消息类型是0x80 , ReturnCode 设置错误码
2. 显式的直接发送 错误码
消息类型是0x81, ReturnCode 设置错误码 payload中携带更多的错误信息
可以任选其一
或者 两种都用
Which one of both is used, depends on the configuration.
[PRS_SOMEIP_00901]
Upstream requirements: RS_SOMEIP_00008
Return Codes in the RESPONSE Messages (Message Type 0x80) of methods shall
be used to transport application errors and the response data of a method from the
provider to the caller of a method. Message Type RESPONSE 0x80 shall be used
in cases where no additional/extended error information (apart from the error code
encoded in the Return Code field) needs to be propagated to the caller.
Note:
Please be aware that return codes of the Request and Response methods are not
treated as errors from the point of view of SOME/IP. This means that the message type
is still 0x80 if a request/response method exits with a return code not equal to 0x00
(message type is still 0x80 if ApplicationError of AUTOSAR ClientServerOperation is
different from E_OK).
method response的消息类型是0x80(非错误消息)
站在SOMEIP的角度 returnCode 中的错误码 不是真正的错误消息 ,只是应用程序处理的非OK的结果。
[PRS_SOMEIP_00902]
Upstream requirements: RS_SOMEIP_00008
Explicit Error Messages shall be used to transport application errors and the response
data or generic SOME/IP errors from the provider to the caller of a method.
[PRS_SOMEIP_00903] 0x81消息类型的使用作用
Upstream requirements: RS_SOMEIP_00008
If more detailed error information (apart from an error code encoded in the Return
Code field) needs to be propagated to the caller, an ERROR message (Message type
0x81) shall be used. The payload of the Error Message shall be filled with serialized
error specific data, e.g. an exception string, or other error information. This additional
error information shall be modeled in the interface description, or defined by the standard.
This can be used to handle all different application errors that might occur in the server.
In addition, problems with the communication medium or intermediate components
(e.g. switches) may occur, which have to be handled e.g. by means of reliable transport.
All messages have a return code field in their header. (See chapter 4.1.2)
这段内容([PRS_SOMEIP_00903])描述了 **SOME/IP 协议** 中 **0x81 消息类型(ERROR 消息)** 的使用场景和作用。以下是详细解释:
---
### 核心作用
1. **传播详细的错误信息**:
- 当需要向调用方传递比 **Return Code** 字段更详细的错误信息时,应使用 **ERROR 消息(消息类型 0x81)**。
- ERROR 消息的有效载荷(payload)可以包含序列化的错误特定数据,例如异常字符串或其他错误信息。
2. **错误信息的标准化**:
- 额外的错误信息应在接口描述中建模,或由标准定义。
- 这确保了错误信息的格式和内容在不同实现之间保持一致。
3. **应用错误的处理**:
- ERROR 消息可用于处理服务器中可能发生的所有不同类型的应用错误。
4. **通信问题的处理**:
- 除了应用错误外,通信介质或中间组件(如交换机)的问题也可能发生。
- 这些问题可以通过可靠的传输机制(如 TCP)来处理。
---
### 关键点
1. **ERROR 消息的结构**:
- ERROR 消息的消息类型为 **0x81**。
- 消息头中包含 **Return Code** 字段,用于指示错误的基本类型。
- 消息的有效载荷可以包含详细的错误信息,例如异常字符串或其他数据。
2. **Return Code 字段**:
- 所有 SOME/IP 消息的头部都包含一个 Return Code 字段,用于指示操作的结果(成功或失败)。
- 如果 Return Code 字段不足以描述错误,则需要使用 ERROR 消息传递更多信息。
3. **错误信息的序列化**:
- 错误信息需要以序列化的形式填充到 ERROR 消息的有效载荷中。
- 序列化格式应在接口描述或标准中定义。
4. **接口描述的作用**:
- 接口描述文件应定义可能的错误类型及其对应的错误信息格式。
- 这确保了客户端和服务器对错误信息的解析和处理是一致的。
---
### 使用场景
1. **服务器内部错误**:
- 例如,服务器在处理请求时发生异常,需要将详细的错误信息(如异常堆栈)传递给客户端。
2. **通信问题**:
- 例如,网络中断或交换机故障导致消息无法传递,需要通知客户端。
3. **自定义错误信息**:
- 例如,服务器可以返回自定义的错误描述,帮助客户端更好地理解问题。
---
### 示例
假设一个 SOME/IP 服务器在处理请求时发生了一个应用错误,错误代码为 `0x80`(表示通用错误),同时需要传递详细的错误信息。
#### ERROR 消息的结构:
- **消息类型**:0x81(ERROR 消息)
- **Return Code**:0x80(通用错误)
- **有效载荷**:序列化的错误信息,例如:
```json
{
"errorCode": 1001,
"errorMessage": "Invalid input parameter",
"details": "Parameter 'value' must be between 0 and 100"
}
```
#### 客户端处理:
- 客户端接收到 ERROR 消息后,解析 Return Code 和有效载荷,显示详细的错误信息给用户或记录日志。
---
### 总结
[PRS_SOMEIP_00903] 规定了 SOME/IP 中 **ERROR 消息(0x81)** 的使用场景和作用:
1. 用于传递比 Return Code 更详细的错误信息。
2. 错误信息应以序列化的形式填充到有效载荷中,并在接口描述或标准中定义。
3. 适用于处理服务器内部错误、通信问题以及自定义错误信息。
[PRS_SOMEIP_00904]
Upstream requirements: RS_SOMEIP_00008
Only responses (Response Messages (message type 0x80) and Error Messages
(message type 0x81) shall use the return code field to carry a return code to the request
(Message Type 0x00) they answer.
Message Type 0x00 的响应消息类型只有0x80 和 0x81 ,并且只有这两种类型消息 使用returnCode携带错误吗
[PRS_SOMEIP_00905]
Upstream requirements: RS_SOMEIP_00008
All other messages than 0x80 and 0x81 shall set this field to 0x00.
For message type see Chapter 4.1.2.7.
除了0x80 0x81的消息类型 returnCode的值要设置为 0x00
ReturnCode的编程类型应该为 uint8_t类型。
错误码的生成 和 处理 没有指定 ,客户可根据自己的情况编程处理。
[PRS_SOMEIP_00539]
Upstream requirements: RS_SOMEIP_00008
A SOME/IP error message (i.e. return code 0x01 - 0x1f) shall not be answered with
an error message.
-
当一个 SOME/IP 错误消息被接收时,不应再以错误消息进行响应。
-
换句话说,错误消息不应触发进一步的错误消息
-
该规则的目的是避免错误消息的无限循环
4.2.6.2 Error Message
For more flexible error handling, SOME/IP allows a different message layout specific
for Error Messages instead of using the message layout of Response Messages.
The recommended layout for the exception message is the following:
• Union of specific exceptions. At least a generic exception without fields needs to
exist.
• Dynamic Length String for exception description.
Rationale: The union gives the flexibility to add new exceptions in the future in a typesafe manner. The string is used to transport human readable exception descriptions to
ease testing and debugging.
这段内容描述了 **SOME/IP 协议** 中 **错误消息(Error Message)** 的灵活布局设计,特别是为了支持更灵活的错误处理。以下是详细解释:
---
### 核心设计
1. **错误消息的布局**:
- SOME/IP 允许错误消息使用不同于响应消息(Response Message)的布局。
- 这种设计使得错误消息可以包含更丰富的错误信息,而不仅仅是 Return Code。
2. **推荐的错误消息布局**:
- **特定异常的联合体(Union of specific exceptions)**:
- 至少需要包含一个没有字段的通用异常(generic exception)。
- 联合体(Union)的设计允许在未来以类型安全的方式添加新的异常类型。
- **动态长度字符串(Dynamic Length String)**:
- 用于传输人类可读的异常描述,便于测试和调试。
---
### 关键点
1. **联合体(Union)的作用**:
- 联合体是一种数据结构,可以存储多种不同类型的值,但同一时间只能使用其中一种类型。
- 在错误消息中使用联合体,可以为不同的异常类型定义不同的字段,同时保持类型安全。
- 例如:
```c
union Exception {
GenericException generic;
InvalidParameterException invalidParam;
TimeoutException timeout;
// 其他异常类型
};
```
2. **通用异常(Generic Exception)**:
- 至少需要定义一个没有字段的通用异常,作为默认的异常类型。
- 例如:
```c
struct GenericException {
// 无字段
};
```
3. **动态长度字符串**:
- 用于传输人类可读的异常描述,例如错误消息或堆栈跟踪。
- 这种设计便于开发人员测试和调试系统。
4. **灵活性和可扩展性**:
- 联合体和动态长度字符串的设计使得错误消息可以灵活地适应未来的需求。
- 例如,可以轻松添加新的异常类型,而无需修改现有的消息布局。
---
### 示例布局
以下是一个错误消息的示例布局:
```c
struct ErrorMessage {
uint8_t returnCode; // Return Code (0x01 - 0x1F)
union Exception {
GenericException generic;
InvalidParameterException invalidParam;
TimeoutException timeout;
// 其他异常类型
} exception;
string description; // 动态长度字符串
};
struct GenericException {
// 无字段
};
struct InvalidParameterException {
string paramName; // 无效参数的名称
string expectedValue; // 期望的值
};
struct TimeoutException {
uint32_t timeoutDuration; // 超时时间(毫秒)
};
```
---
### 使用场景
1. **服务器返回错误消息**:
- 例如,客户端发送请求时提供了无效参数,服务器返回错误消息:
- Return Code: `0x03`(无效参数)
- Exception: `InvalidParameterException`
- Description: `"Parameter 'value' must be between 0 and 100"`
2. **客户端处理错误消息**:
- 客户端接收到错误消息后,解析 Return Code、异常类型和描述,记录日志或显示给用户。
---
### 总结
SOME/IP 协议中的错误消息设计具有以下特点:
1. **灵活的布局**:使用联合体和动态长度字符串,支持多种异常类型和人类可读的描述。
2. **可扩展性**:通过联合体设计,可以轻松添加新的异常类型。
3. **便于测试和调试**:动态长度字符串提供了详细的错误信息,便于开发人员分析和解决问题。
这种设计使得 SOME/IP 协议能够更灵活地处理各种错误场景,并提供详细的错误信息,帮助开发人员快速定位和解决问题。
[PRS_SOMEIP_00188]
Upstream requirements: RS_SOMEIP_00008
The receiver of a SOME/IP message shall not return an error message for events/notifications.
事件和通知类消息不能回复错误码
[PRS_SOMEIP_00189]
Upstream requirements: RS_SOMEIP_00008
The receiver of a SOME/IP message shall not return an error message for fire&forget
methods.
F&F消息 不能返回错误码
[PRS_SOMEIP_00537]
Upstream requirements: RS_SOMEIP_00008
The receiver of a SOME/IP message shall not return an error message for events/notifications and fire&forget methods if the Message Type is set incorrectly to Request or
Response.
通过消息ID辨识出来 消息是 事件、通知、F&F 时,但是MessageType是错误的,这用情况也不用回复错误码
[PRS_SOMEIP_00190]
Upstream requirements: RS_SOMEIP_00008
For Request/Response methods the error message shall copy over the fields of the
SOME/IP header (i.e. Message ID, Request ID, and Interface Version) but not the
payload. In addition Message Type and Return Code have to be set to the appropriate
values.
错误回复消息 的 header要和请求保持一致拷贝过来,不过其中的MessageType和ReturnCode要设置为自己需要的。
4.2.6.3 Error Processing Overview
[PRS_SOMEIP_00576]
Upstream requirements: RS_SOMEIP_00008, RS_SOMEIP_00014
Error handling shall be based on the message type received (e.g. only methods
can be answered with a return code) and shall be checked in a defined order of
[PRS_SOMEIP_00195].
这条上面讲了
[PRS_SOMEIP_00910]
Upstream requirements: RS_SOMEIP_00008, RS_SOMEIP_00014
UDP报文的检查
For SOME/IP messages received over UDP, the following shall be checked:
• The UDP datagram size shall be at least 16 Bytes (minimum size of a SOME/IP
message) 最少16个字节
• The value of the length field shall be less than or equal to the remaining bytes in
the UDP datagram payload 长度域描述的字节数 要少于或等于 后面的字节数
If one check fails, a malformed error shall be issued.
[PRS_SOMEIP_00195]
Upstream requirements: RS_SOMEIP_00008, RS_SOMEIP_00014
SOME/IP messages shall be checked by error processing. This does not include the
application based error handling but just covers the error handling in messaging and
RPC.
An overview of the error processing is shown in Figure 4.12.
下图中表示了 常见RPC错误码的检查场景。
[PRS_SOMEIP_00614]
Upstream requirements: RS_SOMEIP_00008, RS_SOMEIP_00014
When one of the errors specified in [PRS_SOMEIP_00195] occurs while receiving
SOME/IP messages over TCP, the receiver shall check the TCP connection and shall
restart the TCP connection if needed.
当发生上面流程图中的错误时,如果是TCP报文 ,则需要检查TCP连接是否正常,因为有可能TCP连接异常会导致那些错误。
Rational:
用下面方法检查TCP连接
Checking the TCP connection might include the following:
• Checking whether data is received for e.g. other Eventgroups.
如果收到同一个TCP连接上的其他正常数据包 说明连接正常
• Sending out a Magic Cookie message and waiting for the TCP ACK.
发送魔术Cookie包 等待TCP回复。
• Reestablishing the TCP connection
重置TCP连接
4.2.6.4 Communication Errors and Handling of Communication Errors
When considering the transport of RPC messages different reliability semantics exist:
• Maybe — the message might reach the communication partner
• At least once — the message reaches the communication partner at least once
• Exactly once — the message reaches the communication partner exactly once
When using the above terms, in regard to Request/Response the term applies to both
messages (i.e. request and response or error).
While different implementations may implement different approaches, SOME/IP currently achieves "maybe" reliability when using the UDP binding and "exactly once" reliability when using the TCP binding. Further error handling is left to the application.
For "maybe" reliability, only a single timeout is needed, when using request/response
communication in combination of UDP as transport protocol. Figure 4.13 shows the
state machines for "maybe" reliability. The client’s SOME/IP implementation has to
wait for the response for a specified timeout. If the timeout occurs SOME/IP shall
signal E_TIMEOUT to the client application.
这段内容(4.2.6.4)讨论了 **SOME/IP 协议** 中 **RPC 消息传输的可靠性语义** 以及 **通信错误的处理**。以下是详细解释:
---
### 核心内容
1. **可靠性语义**:
- 在传输 RPC 消息时,存在以下三种可靠性语义:
- **Maybe(可能到达)**:消息可能会到达通信对方。
- **At least once(至少一次)**:消息至少会到达通信对方一次。
- **Exactly once(恰好一次)**:消息恰好会到达通信对方一次。
- 对于 Request/Response 通信,这些语义适用于请求和响应(或错误)消息。
2. **SOME/IP 的可靠性实现**:
- 使用 **UDP 绑定** 时,SOME/IP 实现的是 **"maybe" 可靠性**。
- 使用 **TCP 绑定** 时,SOME/IP 实现的是 **"exactly once" 可靠性**。
- 进一步的错误处理由应用程序负责。
3. **"Maybe" 可靠性的超时处理**:
- 当使用 UDP 作为传输协议时,只需要一个超时机制来处理请求/响应通信。
- 如果超时发生,SOME/IP 实现应向客户端应用程序发送 `E_TIMEOUT` 错误。
---
### 关键点
1. **UDP 绑定的可靠性**:
- UDP 是无连接的协议,不保证消息的可靠传输。
- 因此,使用 UDP 绑定时,SOME/IP 只能实现 **"maybe" 可靠性**。
- 消息可能会丢失、重复或乱序到达。
2. **TCP 绑定的可靠性**:
- TCP 是面向连接的协议,提供可靠的消息传输。
- 因此,使用 TCP 绑定时,SOME/IP 可以实现 **"exactly once" 可靠性**。
- 消息不会丢失、重复或乱序到达。
3. **超时机制**:
- 在使用 UDP 绑定时,客户端需要设置一个超时时间,等待服务器的响应。
- 如果超时发生,客户端应通知应用程序,并返回 `E_TIMEOUT` 错误。
4. **状态机**:
- 图 4.13 展示了 **"maybe" 可靠性** 的状态机。
- 客户端的状态机包括以下状态:
- 等待请求发送。
- 等待响应。
- 超时处理。
---
### 实现建议
1. **UDP 绑定的实现**:
- 客户端发送请求后,启动一个超时计时器。
- 如果在超时时间内未收到响应,则触发 `E_TIMEOUT` 错误。
- 客户端可以选择重试请求或通知上层应用。
2. **TCP 绑定的实现**:
- 由于 TCP 提供可靠的传输,客户端不需要实现超时机制。
- 如果连接中断,TCP 会通知应用程序,SOME/IP 实现可以处理连接错误。
3. **错误处理**:
- 应用程序需要根据不同的可靠性语义实现适当的错误处理逻辑。
- 例如,在使用 UDP 绑定时,应用程序可能需要实现重试机制。
---
### 示例场景
#### 场景 1:UDP 绑定("maybe" 可靠性)
- 客户端发送请求:`getData()`。
- 启动超时计时器(例如 1 秒)。
- 如果在 1 秒内未收到响应,客户端触发 `E_TIMEOUT` 错误。
- 客户端可以选择重试请求或通知上层应用。
#### 场景 2:TCP 绑定("exactly once" 可靠性)
- 客户端发送请求:`calculate(5, 10)`。
- 服务器处理请求并返回响应:`result = 15`。
- 客户端接收到响应,确保消息不会丢失或重复。
---
### 总结
SOME/IP 协议支持不同的可靠性语义,具体取决于使用的传输协议:
1. **UDP 绑定**:实现 **"maybe" 可靠性**,需要超时机制处理请求/响应通信。
2. **TCP 绑定**:实现 **"exactly once" 可靠性**,提供可靠的消息传输。
3. **错误处理**:应用程序需要根据可靠性语义实现适当的错误处理逻辑。
根据文件内容,图 4.13 展示了 **SOME/IP 协议** 中 **"maybe" 可靠性** 的状态机。以下是详细解释:
---
### 状态机描述
#### 客户端状态机
1. **初始状态**:
- 客户端准备发送请求。
2. **发送请求(sendReq)**:
- 客户端发送请求消息,进入 **waitingForResponse** 状态。
3. **等待响应(waitingForResponse)**:
- 客户端等待服务器的响应。
- 如果接收到响应(rspReceived),则处理响应并结束。
- 如果超时(rspTimeout),则触发 **Error: NoResponse** 错误。
4. **错误处理(Error: NoResponse)**:
- 客户端通知应用程序请求超时,返回 `E_TIMEOUT` 错误。
#### 服务器状态机
1. **接收请求(reqReceived)**:
- 服务器接收到客户端的请求,进入 **processing** 状态。
2. **处理请求(processing)**:
- 服务器处理请求并生成响应。
3. **发送响应(sendRsp)**:
- 服务器发送响应消息,结束处理。
---
### 关键点
1. **"maybe" 可靠性**:
- 使用 UDP 绑定时,SOME/IP 实现的是 **"maybe" 可靠性**。
- 消息可能会丢失、重复或乱序到达。
2. **超时机制**:
- 客户端在发送请求后启动超时计时器。
- 如果超时发生,客户端触发 `E_TIMEOUT` 错误。
3. **状态转换**:
- 客户端的状态转换包括发送请求、等待响应和处理超时。
- 服务器的状态转换包括接收请求、处理请求和发送响应。
---
### 总结
图 4.13 展示了 SOME/IP 协议中 **"maybe" 可靠性** 的状态机,适用于使用 UDP 绑定的场景。客户端需要处理请求发送、响应接收和超时错误,而服务器需要处理请求接收、处理和响应发送。
对于 **"exactly once" 可靠性**,可以使用 TCP 绑定,因为 TCP 提供了可靠的消息传输。
0voice · GitHub
相关文章:
SOME/IP--协议英文原文讲解11
前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 4.2.6 Er…...
Spring Boot 概要(官网文档解读)
Spring Boot 概述 Spring Boot 是一个高效构建 Spring 生产级应用的脚手架工具,它简化了基于 Spring 框架的开发过程。 Spring Boot 也是一个“构件组装门户”,何为构件组装门户呢?所谓的“构件组装门户”指的是一个对外提供的Web平台&#x…...
图像处理篇---图像处理中常见参数
文章目录 前言一、分贝(dB)的原理1.公式 二、峰值信噪比(PSNR, Peak Signal-to-Noise Ratio)1.用途2.公式3.示例 三、信噪比(SNR, Signal-to-Noise Ratio)1.用途2.公式3.示例 四、动态范围(Dyna…...
Win11更新系统c盘爆满处理
1.打开磁盘管理 2.右击c盘选择属性,进行磁盘管理,选择详细信息。 3.选择以前安装的文件删除即可释放c盘空间。...
C++关键字之mutable
1.介绍 在C中,mutable是一个关键字,用于修饰类的成员变量。它的主要作用是允许在常量成员函数或常量对象中修改被标记为mutable的成员变量。通常情况下,常量成员函数不能修改类的成员变量,但有些情况下,某些成员变量的…...
vue3 采用xlsx库实现本地上传excel文件,前端解析为Json数据
需求:本地上传excel 文件,但需要对excel 文件的内容进行解析,然后展示出来 1. 安装依赖 首先,确保安装了 xlsx 库: bash复制 npm install xlsx 2. 创建 Vue 组件 创建一个 Vue 组件(如 ExcelUpload.v…...
【Linux系统】—— 冯诺依曼体系结构与操作系统初理解
【Linux系统】—— 冯诺依曼体系结构与操作系统初理解 1 冯诺依曼体系结构1.1 基本概念理解1.2 CPU只和内存打交道1.3 为什么冯诺依曼是这种结构1.4 理解数据流动 2 操作系统2.1 什么是操作系统2.2 设计OS的目的2.3 操作系统小知识点2.4 如何理解"管理"2.5 系统调用和…...
易语言模拟真人鼠标轨迹算法 - 防止游戏检测
一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…...
PHP旅游门票预订系统小程序源码
🌍 旅游门票预订系统:一站式畅游新体验,开启您的梦幻旅程 🌟 一款基于ThinkPHPUniapp精心雕琢的旅游门票预订系统,正翘首以待,为您揭开便捷、高效、全面的旅游预订新篇章!它超越了传统预订平台…...
侯捷 C++ 课程学习笔记:内存管理的每一层面
目录 一、C 应用程序的内存管理架构 二、C 内存原语 三、内存管理的实际应用 四、学习心得 一、C 应用程序的内存管理架构 C 应用程序的内存管理架构可以分为多个层次,从应用程序到操作系统 API,每一层都提供了不同的内存管理功能。 架构图…...
Python开发Django面试题及参考答案
目录 Django 的请求生命周期是怎样的? Django 的 MTV 架构中的各个组件分别是什么? Django 的 URL 路由是如何工作的? Django 的视图函数和视图类有什么区别? Django 的模板系统是如何渲染 HTML 的? Django 的 ORM 是如何工作的? Django 的中间件是什么?它的作用是…...
前端js进阶,ES6语法,包详细
进阶ES6 作用域的概念加深对js理解 let、const申明的变量,在花括号中会生成块作用域,而var就不会生成块作用域 作用域链本质上就是底层的变量查找机制 作用域链查找的规则是:优先查找当前作用域先把的变量,再依次逐级找父级作用域直到全局…...
【三十四周】文献阅读:DeepPose: 通过深度神经网络实现人类姿态估计
目录 摘要AbstractDeepPose: 通过深度神经网络实现人类姿态估计研究背景创新点方法论归一化网络结构级联细化流程 代码实践局限性实验结果总结 摘要 人体姿态估计旨在通过图像定位人体关节,是计算机视觉领域的核心问题之一。传统方法多基于局部检测与图模型&#x…...
将 Vue 项目打包后部署到 Spring Boot 项目中的全面指南
将 Vue 项目打包后部署到 Spring Boot 项目中的全面指南 在现代 Web 开发中,前后端分离架构已经成为主流。然而,在某些场景下,我们可能需要将前端项目(如 Vue)与后端项目(如 Spring Boot)集成部…...
Linux 权限系统和软件安装(二):深入理解 Linux 权限系统
在 Linux 的世界里,权限系统犹如一位忠诚的卫士,严密守护着系统中的文件与目录,确保只有具备相应权限的用户才能进行操作。与其他一些操作系统不同,Linux 并不依据文件后缀名来标识文件的操作权限,而是构建了一套独特且…...
计算机网络常考大题
运输层的主要功能 运输层为应用进程之间提供端到端的逻辑通信。 运输层还要对收到的报文进行差错检测。 运输层需要有两种不同的运输协议,即面向连接的 TCP 和无连接的 UDP 传输控制协议 TCP 概述 TCP 是面向连接的运输层协议。 每一条 TCP 连接只能有两个端点…...
百度首页上线 DeepSeek 入口,免费使用
大家好,我是小悟。 百度首页正式上线了 DeepSeek 入口,这一重磅消息瞬间在技术圈掀起了惊涛骇浪,各大平台都被刷爆了屏。 百度这次可太给力了,PC 端开放仅 1 小时,就有超千万人涌入体验。这速度,简直比火…...
《跟李沐学 AI》AlexNet论文逐段精读学习心得 | PyTorch 深度学习实战
前一篇文章,使用 AlexNet 实现图片分类 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 本篇文章内容来自于学习 9年后重读深度学习奠基作之一:AlexNet【下】【论文精读】】的心得。 《跟李沐…...
Linux搭建Nginx直播流媒体服务RTMP/RTSP转Http-flv视频浏览器在线播放/Vue/Java/ffmpeg
参考文章: https://blog.csdn.net/whatareyouding/article/details/144317654 https://www.cnblogs.com/Gredae/p/18362900 https://www.cnblogs.com/kn-zheng/p/17422707.html https://blog.51cto.com/u_16099344/10281495 https://www.tulingxueyuan.cn/tlzx/jsp…...
Node.js高频面试题精选及参考答案
目录 什么是 Node.js?它的主要特点有哪些? Node.js 的事件驱动和非阻塞 I/O 模型是如何工作的? 为什么 Node.js 适合处理高并发场景? Node.js 与传统后端语言(如 Java、Python)相比,有哪些优势和劣势? 简述 Node.js 的运行原理,包括 V8 引擎的作用。 什么是 Nod…...
公开整理-最新中国城市统计NJExcel+PDF版本(1985-2024年)
数据简介:《中国城市统计NJ》从1985年开始,本NJ内容共分四个部分:第一部分是全国城市行政区划,列有不同区域、不同级别的城市分布情况;第二、三部分分别是地级以上城市统计资料和县级城市统计资料,具体包括人口、劳动力及土地资源、综合经济、工业、交通…...
ModuleNotFoundError: No module named ‘xgboost‘
问题: --------------------------------------------------------------------------- ModuleNotFoundError Traceback (most recent call last) Cell In[1], line 64 import pickle5 from sklearn.metrics import mean_squared_error, r2_…...
应用层协议HTTP
应用层协议HTTP 引言 应用层协议是程序员自己制定的,但是良好的协议是保证网络通信的基础,前代的计算工程师已经帮助我们制定了一些很好用的应用层协议,http(hybertext transfer protocol)(超文本传输协议)就是其中之一。 http协议是客户端…...
常见的“锁”有哪些?
悲观锁 悲观锁认为在并发环境中,数据随时可能被其他线程修改,因此在访问数据之前会先加锁,以防止其他线程对数据进行修改。常见的悲观锁实现有: 1.互斥锁 原理:互斥锁是一种最基本的锁类型,同一时间只允…...
PAT 甲级 1091 Acute Stroke
一开始只是简单的递归(bfs),导致最后两个没法通过(爆栈了) //最后两个案例没有通过,只是最简单的bfs暴力算法 #include<cstdio> using namespace std; int v[62][1288][130]{0}; int find(int i,int…...
flowable适配达梦数据库
文章目录 适配相关问题无法从数据库产品名称“DM DBMS”中推断数据库类型分析解决 构建ibatis SqlSessionFactory时出错:inStream参数为null分析解决 liquibase相关问题问题一:不支持的数据库 Error executing SQL call current_schema: 无法解析的成员访…...
Git入门:数据模型 to 底层原理
版本控制系统(VCS)是软件开发中不可或缺的工具,而Git作为现代版本控制的事实标准,其底层设计远比表面命令更加优雅。本文将从数据模型的角度,揭示Git的核心工作原理。 Git的核心概念 1. 快照(Snapshot&am…...
Bootstrap Blazor UI 中 <Table> 组件 <TableColumn> 使用备忘01:EF Core 外码处理
应用场景:将外码转换为对应的文本进行显示、编辑。 例如,有一个【用户】表,其中有一个【用户类型ID】字段;另有一个【用户类型】表,包含【ID】、【名称】等字段。现在要求在 <Table> 组件显示列表中,…...
Redis过期数据处理
Redis缓存过期后数据还能恢复吗? Redis缓存过期后,数据通常会被删除,但可以通过以下几种方法尝试恢复数据: 1. 数据备份恢复 RDB 持久化恢复:Redis 提供了 RDB(Redis Database Backup)持久化…...
零基础学C/C++160——字符串
题目描述 给定两个由小写字母组成的字符串A和B,判断B中的字符是否全部在A中出现。 输入 输入为多组测试数据。 输入数据只有一行,包含2个字符串A和B,每个字符串后面有一个#字符标记(#不属于A或B),其中B…...
Spring Boot+Vue项目从零入手
Spring BootVue项目从零入手 一、前期准备 在搭建spring bootvue项目前,我们首先要准备好开发环境,所需相关环境和软件如下: 1、node.js 检测安装成功的方法:node -v 2、vue 检测安装成功的方法:vue -V 3、Visu…...
Linux 命令大全完整版(13)
5.文件管理命令 patch 功能说明:修补文件。语 法:patch [-bceEflnNRstTuvZ][-B <备份字首字符串>][-d <工作目录>][-D <标示符号>][-F <监别列数>][-g <控制数值>][-i <修补文件>][-o <输出文件>][-p &l…...
MySQL面试学习
MySQL 1.事务 事务的4大特性 事务4大特性:原子性、一致性、隔离性、持久性 原⼦性: 事务是最⼩的执⾏单位,不允许分割。事务的原⼦性确保动作要么全部完成,要么全不执行一致性: 执⾏事务前后,数据保持⼀…...
CentOS中shell脚本对多台机器执行下载安装
1.建立免密ssh连接 详情见这篇: CentOS建立ssh免密连接(含流程剖析)-CSDN博客 2.脚本编写 我这里只是简单写了个demo进行演示,如果服务器很多可以先暂存成文件再逐行读取host进行连接并执行命令 用node1去ssh连接node2和node…...
【Java】多线程和高并发编程(四):阻塞队列(上)基础概念、ArrayBlockingQueue
文章目录 四、阻塞队列1、基础概念1.1 生产者消费者概念1.2 JUC阻塞队列的存取方法 2、ArrayBlockingQueue2.1 ArrayBlockingQueue的基本使用2.2 生产者方法实现原理2.2.1 ArrayBlockingQueue的常见属性2.2.2 add方法实现2.2.3 offer方法实现2.2.4 offer(time,unit)方法2.2.5 p…...
C语言多人聊天室 ---chat(客户端聊天)
head.h #ifndef __HEAD_H #define __HEAD_H// 常用头文件 #include <stdio.h> #include <stdlib.h> #include <string.h>// 网络编程涉及的头文件 #include <sys/socket.h> #include <netinet/in.h> #include <netinet/ip.h>#include <…...
设计模式教程:命令模式(Command Pattern)
1. 什么是命令模式? 命令模式(Command Pattern)是一种行为型设计模式。它将请求封装成一个对象,从而使你能够用不同的请求、队列和日志请求以及支持可撤销操作。 简单来说,命令模式通过把请求封装成对象的方式解耦了…...
【华三】STP的角色选举(一文讲透)
【华三】STP的角色选举 一、引言二、STP基础概念扫盲三、根桥选举过程详解四、根端口选举过程详解五、指定端口选举过程详解六、阻塞端口七、总结与配置建议七、附录**1. BPDU字段结构图(文字描述)****2. 华三STP常用命令速查表** 文章总结 一、引言 在…...
Trae+Qt+MSVC环境配置
Trae Trae是字节跳动基于VSCode推出的AI集成开发环境(IDE),是一款专为中文开发者深度定制的智能编程工具。其目标是通过AI技术实现从“Copilot”到“Autopilot”的编程模式演进。 类似这样的IDE比如Windsurf、Cursor,都是基于VS…...
SpringSecurity初始化的本质
一、对SpringSecurity初始化的几个疑问 通过前面第一次请求访问的分析我们明白了一个请求就来后的具体处理流程 对于一个请求到来后会通过FilterChainProxy来匹配一个对应的过滤器链来处理该请求。那么这里我们就有几个疑惑。 FilterChainProxy什么时候创建的?过滤器链和对应的…...
3D Gaussian Splatting(3DGS)的核心原理
3D Gaussian Splatting(3DGS)的核心原理 1. 基本概念 3D Gaussian Splatting(3DGS) 是一种基于 高斯分布的点云表示与渲染技术,核心思想是将三维场景建模为一系列 可学习的高斯分布,每个高斯分布具有以下…...
Transformers快速入门-学习笔记
一、自然语言处理 NLP 是借助计算机技术研究人类语言的科学自然语言处理发展史 一、不懂语法怎么理解语言 依靠语言学家人工总结文法规则 Chomsky Formal Languages 难点:上下文有关文法 规则增多,存在矛盾 二、只要看得足够多,就能处理语言…...
【Http和Https区别】
概念: 一、Http协议 HTTP(超文本传输协议)是一种用于传输超媒体文档(如HTML)的应用层协议,主要用于Web浏览器和服务器之间的通信。http也是客户端和服务器之间请求与响应的标准协议,客户端通常…...
学习路程二 LangChain基本介绍
前面简单调用了一下deepseek的方法,发现有一些疑问和繁琐的问题,需要更多的学习,然后比较流行的就是LangChain这个东西了。 目前大部分企业都是基于 LangChain 、qwen-Agent、lammaIndex框架进行大模型应用开发。LangChain 提供了 Chain、To…...
简识Kafka集群与RocketMQ集群的核心区别
前记:各位潘安、各位子健/各位彦祖、于晏,文字较多,优先看目录。 Kafka集群与RocketMQ集群的核心区别及架构图例说明 一、核心区别对比 特性Kafka 集群RocketMQ 集群设计目标高吞吐量实时日志流系统(如日志收集、大数据流水线&a…...
基于Python+django+mysql旅游数据爬虫采集可视化分析推荐系统
2024旅游推荐系统爬虫可视化(协同过滤算法) 基于Pythondjangomysql旅游数据爬虫采集可视化分析推荐系统 有文档说明 部署文档 视频讲解 ✅️基于用户的协同过滤推荐算法 卖价就是标价~ 项目技术栈 Python语言、Django框架、MySQL数据库、requests网络爬虫…...
9-1. MySQL 性能分析工具的使用——last_query_cost,慢查询日志
9-1. MySQL 性能分析工具的使用——last_query_cost,慢查询日志 文章目录 9-1. MySQL 性能分析工具的使用——last_query_cost,慢查询日志1. 数据库服务器的优化步骤2. 查看系统性能参数3. 统计SQL的查询成本:last_query_cost4. 定位执行慢的…...
网络安全监测探针安装位置 网络安全监测系统
🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 软件简介: SockMon(SocketMonitor)网络安全监控系统是一款为电脑专业人员打造的一款出色的安防监控软件。在如今这个恶意软件,攻击&#…...
Git版本控制系统---本地操作(万字详解!)
目录 git基本配置 认识工作区、暂存区、版本库 添加文件--情况一: 添加文件-情况二: 修改文件: 版本回退: git基本配置 1.初始化本地仓库,注意:一定要在一个目录下进行,一般都是新建一个文件夹,在文件…...
forge-1.21.x模组开发(二)给物品添加功能
功能效果 创建一个兑换券,当使用兑换券对着兑换机右键时,获得一条烤鱼 创建兑换券 创建ExchangeCouponsItem.java,继承Item,定义兑换券内容 public class ExchangeCouponsItem extends Item {public ExchangeCouponsItem(Prop…...