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

车载以太网网络测试-27【SOME/IP-SD简述】

文章目录

  • 1 摘要
  • 2 SOME/IP-SD协议介绍
    • 2.1 定义与作用
    • 2.2 SOMEIP/SD协议通俗易懂的理解
      • 2.2.1 SOMEIP/SD协议是什么?
      • 2.2.2 通信流程(简化)
      • 2.2.3 车载功能示例
      • 2.2.4 类比理解
    • 2.3 SOME/IP-SD报文结构
      • 2.3.1 Flags
        • 2.3.1.1 REBOOT (Bit 7)
        • 2.3.1.2 UNICAST (Bit 6)
        • 2.3.1.3 Explicit Initial Data Control Flag(Bit 5)
  • 3 总结

1 摘要

SOME/IP-SD(Scalable service-Oriented MiddlewarE over IP - Service Discovery) 是基于IP的可扩展面向服务中间件中的服务发现协议,是汽车电子和嵌入式系统中实现动态服务发现与通信的核心组件。该协议规范详细说明了协议SOME/IP服务发现(SOME/IP-SD)的格式、消息序列和语义。本文将对SOME/IP-SD协议进行详细介绍。

2 SOME/IP-SD协议介绍

2.1 定义与作用

  • 定义

(1) SOME/IP-SDAUTOSAR(汽车开放系统架构) 标准的一部分,扩展自 SOME/IP 协议,专为车载网络设计。
(2) 它基于IP网络(如以太网),用于在分布式系统中动态发现、注册和订阅服务,支持服务的可用性通知和生命周期管理。
(3) 协议遵循发布/订阅模式,服务提供者(Provider)和消费者(Client)通过SD报文交互,无需静态配置。

  • 核心作用

(1) 动态服务发现

  • 自动探测服务:客户端无需预先知道服务提供者的地址和端口,通过SD报文动态发现服务实例。
  • 服务注册/注销:服务启动时向网络广播其存在,关闭时通知其他节点释放资源。

(2) 服务状态管理

  • 服务可用性通知:通过 Offer/Stop Offer 报文告知网络服务的上线/下线状态。
  • 事件订阅:客户端可订阅服务状态变化(如传感器数据更新),服务端通过 Subscribe/Subscribe Ack 报文响应。

(3) 网络优化

  • 多播与单播结合:初始发现阶段使用多播(如IPv4 239.255.0.0),后续通信切到单播以减少流量。
  • TTL(生存时间)控制:通过配置报文生存时间,避免无效服务占用网络资源。

(4) 负载均衡与冗余

  • 多实例支持:同一服务可由多个节点提供(如冗余ECU),SD协议帮助客户端选择最优实例。
  • 服务优先级:通过配置服务优先级字段实现关键服务(如刹车控制)的快速响应。

2.2 SOMEIP/SD协议通俗易懂的理解

2.2.1 SOMEIP/SD协议是什么?

  • SOMEIP(Scalable service-Oriented MiddlewarE over IP)
    可以理解为车载系统的“服务语言”,它让车内不同ECU(电子控制单元,类似小电脑)之间通过以太网/IP网络互相调用服务(比如读取传感器数据、控制空调等)。

  • SD(Service Discovery)
    相当于“服务广播系统”。当某个ECU提供服务(比如“我可以提供车速数据”),它会通过SD协议广播通知其他ECU;其他ECU需要服务时,也能通过SD快速找到它。

2.2.2 通信流程(简化)

  1. 服务上线

    • 比如车速传感器ECU启动后,通过SD协议广播:“大家好!我是车速服务,我的IP是192.168.1.10,需要车速数据可以找我!”
    • 其他ECU(如仪表盘ECU)收到这条广播后,会记录下这个服务的地址。
  2. 服务请求

    • 仪表盘ECU需要显示车速时,通过SOMEIP协议向车速传感器ECU发送请求:“请告诉我当前车速!”
    • 车速传感器回复:“当前车速是60km/h”。
  3. 服务下线

    • 如果车速传感器ECU关闭,它会通过SD协议广播:“我要下线了,别找我了!”
    • 仪表盘ECU收到后,会停止请求车速数据(或切换备用传感器)。

2.2.3 车载功能示例

场景:自动空调调节

  1. 服务注册

    • 温度传感器ECU:通过SD广播:“我能提供车内温度数据!”
    • 空调控制ECU:通过SD广播:“我能调节空调温度!”
  2. 服务调用

    • 车机系统(中控屏)需要自动调节空调时:
      1. 通过SD找到温度传感器ECU,用SOMEIP请求当前温度(比如“25℃”)。
      2. 通过SD找到空调控制ECU,用SOMEIP发送指令:“请把温度调到22℃”。
    • 空调ECU收到指令后,控制风扇和压缩机工作。
  3. 动态变化

    • 如果用户手动关闭空调,空调控制ECU会通过SD通知其他ECU:“我现在不可用!”
    • 车机系统会显示“空调已关闭”,并停止发送调节指令。

2.2.4 类比理解

为什么用SOMEIP/SD?

  1. 灵活性:ECU可以动态加入或退出网络(比如插拔新设备)。
  2. 省资源:只有需要服务的ECU才会通信,避免无效广播。
  3. 标准化:不同厂商的ECU只要支持SOMEIP/SD,就能互相协作。

类比理解

  • SOMEIP:像手机APP调用微信支付接口——APP(仪表盘)向微信(车速传感器)请求服务(支付/车速数据)。
  • SD:像外卖平台的商家列表——你需要订餐(服务)时,先看看哪些商家(ECU)在线,然后直接联系。

这样是不是更清晰了呢? 😊

2.3 SOME/IP-SD报文结构

依照惯例我们先来看下SOME/IP-SD的报文格式如下图11所示:
在这里插入图片描述

SOME/IP-SD(Scalable service-Oriented MiddlewarE over IP - Service Discovery)报头是用于服务发现和通信管理的消息头部结构,基于SOME/IP协议扩展而来。SOME/IP-SD报文本质上属于SOME/IP报文的一个特定类型,它在标准SOME/IP协议框架的基础上进行了功能扩展。这种扩展主要通过引入两类关键字段实现:

  1. Entry字段
    负责维护服务实例的状态同步,并管理服务发布与订阅的交互关系。

  2. Option字段
    用于承载与Entry相关的补充信息,为Entry字段的功能实现提供必要的辅助数据。

这种设计使SOME/IP-SD在保留SOME/IP核心通信能力的同时,增加了服务发现和动态管理的特性。
以下是其核心字段的详细说明:

  • 报文头部 (Header)解析
字段长度(字节)描述
Message ID4固定值 0xFFFF8100
Length4从 Request ID 开始到报文结束的总长度
Request ID4客户端标识符 (通常为 0x00000000)
Protocol Version1固定值 0x01
Interface Version1固定值 0x01
Message Type10x02 (表示是 NOTIFICATION 消息)
Return Code1固定值 0x00
  • 服务发现特定字段
字段长度(字节)描述
Flags1包含重启标志和单播标志
Reserved3保留字段,设置为 0
Entry Array Length4入口数组的总长度
Entry Array可变包含一个或多个 Entry
Option Array Length4选项数组的总长度
Option Array可变包含一个或多个 Option

2.3.1 Flags

在这里插入图片描述
SOME/IP-SD 头部应该以一个名为 Flags 的 8 位字段开始,参见下图中 Flags 的表示。
在这里插入图片描述

在 SOME/IP(Scalable service-Oriented MiddlewarE over IP)协议中,Service Discovery(SD)Flags 字段 是消息头中的一个重要部分,用于控制或标记 SOME/IP-SD 消息的行为和属性。以下是关于 Flags 字段的详细说明:

SOME/IP-SD 消息头的 Flags 字段占 1 字节(8 bits),结构如下:

Bit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0
REBOOTUNICASTExplicit Initial Data Control Flag保留保留保留保留保留
2.3.1.1 REBOOT (Bit 7)
  • 作用:标识服务实例是否刚刚重启。

  • 取值:

    • 1:表示服务实例在发送此消息前经历了重启(需要重新同步状态)。
    • 0:正常操作状态。
  • 用途:用于通知客户端或服务发现代理,服务实例可能丢失了之前的订阅或状态信息,需要重新初始化。

  • 工作机制:

  1. 初始化状态:
  • 系统每次重启后,Reboot Flag 初始设置为 1
  • 该状态持续保持,直到 Session ID 完成一次完整循环(从最大值绕回到 1)
  • Session ID 完成绕回后,Reboot Flag 重置为 0
  1. 状态管理要求:
    需要为以下每种通信场景维护独立的状态记录:

发送方向:

  • 多播通信:维护单一计数器
  • 单播通信:为每个通信对端维护独立计数器

接收方向:

  • 多播通信:为每个发送方维护独立计数器
  • 单播通信:为每个通信对端维护独立计数器
  1. 重启检测逻辑:
    通过比较通信对端当前数据包(new)和上次接收数据(old)的状态值进行判断:
    有效重启条件:
    a) 状态变化检测:当 old.reboot=0 → new.reboot=1 时
    b) 持续重启检测:当 old.reboot=1 ∧ new.reboot=1 ∧ old.session_id ≥ new.session_id 时

关键点说明:

  • 该机制要求为每个通信对端关系(源地址+目标地址)维护独立的状态记录
  • 发送和接收方向需要分别维护各自的计数器集合
  • 设计上避免了依赖不可靠的通信环境进行状态判断
2.3.1.2 UNICAST (Bit 6)
  • 作用:指示服务实例是否支持单播通信(即直接响应请求到客户端地址)。
  • 取值:
    • 1:服务实例支持单播响应(客户端可以直接通信)。
    • 0:服务实例仅通过组播通信(默认)。
  • 用途:优化网络流量,避免不必要的组播通信。

注意:
Unicast Flag 是历史 SOME/IP 版本的遗留,仅出于兼容性原因保留。除此之外的使用非常有限。

2.3.1.3 Explicit Initial Data Control Flag(Bit 5)
  • 位置:Flags 字段的第 5 位(从 0 开始计数,即第 6 个比特位)。

  • 功能
    该标志用于指示服务实例是否在 服务发现报文(Service Discovery Entry) 中显式携带初始数据(Initial Data)。

    • 0(默认):不携带初始数据。客户端需要通过后续请求(如 GetSubscribe)主动获取数据。
    • 1:服务实例会在 OfferServiceSubscribeAck 报文中直接包含初始数据(通过 EventField 类型的 Entry 传输)。
  • 使用场景

  1. 服务提供方(Server)

    • OfferService 条目中设置该标志位,表示服务实例会直接发布初始数据(例如配置参数、状态快照等),无需客户端额外请求。
    • 适用于数据量较小或需要快速同步的场景(如车辆启动时ECU状态的立即同步)。
  2. 客户端(Client)

    • Subscribe 请求中可设置该标志位,要求服务端在 SubscribeAck 响应中立即返回当前数据(避免轮询或等待首次事件通知)。
  • 注意事项
  • 兼容性:客户端和服务端需协商支持该功能(例如通过 SOME/IP-SD 协议版本或服务合约定义)。
  • 性能权衡:显式传输初始数据可能增加单个报文大小,需根据数据量和实时性需求权衡使用。
  • TTL 字段的关系:即使设置了该标志,数据的有效期仍受 TTL(Time To Live)限制。

相关协议行为

  1. REBOOT 标志

    • 当服务实例重启后,应在首次发送的 OfferServiceFindService 消息中设置此标志。
    • 客户端收到带 REBOOT 标志的消息后,可能需要重新订阅事件或恢复状态。
  2. UNICAST 标志

    • 若服务实例支持单播,客户端可以直接通过单播地址(而非组播)发送请求(如 SubscribeEventgroup)。
    • 单播通信可减少网络负载,但需确保客户端和服务实例的地址可达。

Flags 之后,SOME/IP-SD 头部应该有一个名为 Reserved 的 24 位字段

3 总结

以上介绍了SOME/IP-SD协议的定义与作用、通信流程简述以及报文的结构简单介绍,希望能对大家学习SOME/IP-SD协议有所帮助,后续还会继续介绍SOME/IP-SD协议的其他重要内容,有任何问题欢迎大家留言一起讨论、交流、进步!

相关文章:

车载以太网网络测试-27【SOME/IP-SD简述】

文章目录 1 摘要2 SOME/IP-SD协议介绍2.1 定义与作用2.2 SOMEIP/SD协议通俗易懂的理解2.2.1 SOMEIP/SD协议是什么?2.2.2 通信流程(简化)2.2.3 车载功能示例2.2.4 类比理解 2.3 SOME/IP-SD报文结构2.3.1 Flags2.3.1.1 REBOOT (Bit 7)2.3.1.2 U…...

Ubuntu 22.04上升级Node.js版本

在Ubuntu 22.04上升级Node.js版本有几种方法,推荐使用NVM(Node Version Manager),因为它可以让你轻松管理多个Node.js版本。 方法1: 使用NVM(推荐) 1. 安装NVM # 下载并安装NVM curl -o- https://raw.gi…...

软件设计师“面向对象设计”真题考点分析——求三连

一、考点分值占比与趋势分析 综合知识历年考察统计 年份考题数分值占比考察重点2018334%继承类型、设计原则2019445.3%多态实现、类关系2020556.7%设计模式应用、接口隔离2021334%消息通信、封装特性2022668%开闭原则、组合模式2023556.7%模板方法、适配器模式2024445.3%单一…...

flutter dart 函数语法

以下是 Dart 语言中函数语法的 详细实例说明,涵盖了所有常用写法 基本语法参数类型(必选、可选、命名、默认值)匿名函数、箭头函数高阶函数(函数作为参数/返回值)异步函数(async / await) 1. …...

鸿蒙Flutter实战:24-混合开发详解-4-初始化Flutter

概述 将 Flutter 模块添加至宿主鸿蒙项目中后,接下需要实现页面跳转、消息通信等功能,本文重点介绍如何初始化 Flutter。 项目配置 添加依赖 编辑 ohos_app/oh-package.json 文件 如果通过 Har 包方式引入 Flutter 模块,则需要添加如下内…...

微信小程序之Promise-Promise初始用

我们来尝试使用Promise。 1、需求&#xff0c;做个抽奖的按钮&#xff0c; 抽奖规则&#xff1a; 30%的几率中奖&#xff0c;中奖会提示恭喜恭喜&#xff0c;奖品为10万 RMB 劳斯莱斯优惠券&#xff0c;没中奖会提示再接再厉。 2、先搭界面&#xff1a; <view class&qu…...

工业 / 农业 / AR 场景怎么选?Stereolabs ZED 双目3D相机型号对比与选型建议

Stereolabs ZED 相机系列为视觉感知领域提供了多种创新解决方案&#xff0c;适用于不同应用场景。选择合适的 ZED 相机型号&#xff0c;需综合考虑分辨率、深度感知范围、接口类型等因素。 Stereolabs ZED 相机产品系列概览 ZED&#xff1a;首款立体视觉相机&#xff0c;专为高…...

(Git) 稀疏检出(Sparse Checkout) 拉取指定文件

文章目录 &#x1f3ed;作用&#x1f3ed;指令总览&#x1f477;core.sparseCheckout&#x1f477;sparse-checkout 文件 &#x1f3ed;实例演示⭐END&#x1f31f;交流方式 &#x1f3ed;作用 类似于 .gitignore 进行文件的规则匹配。 一般在需要拉取大型项目指定的某些文件…...

Nginx 部署前端项目dist文件到局域网然后ngrok部署到公网

①项目里面 npm run build 生成的dist文件 ②下载nginx: download 将dist文件夹放入html文件夹中 ③conf修改配置 里面有nginx.conf 文本修改④在此目录下 打开cmd 输入 start nginx.exe 启动代理 ⑤http://localhost:90/index.html即可或者域名换成你的ip地址也可以 …...

【sylar-webserver】9 网络模块

目录 Address 类图 知识点 常用结构体 常用函数 Socket 类图 主要功能 初始化 socket 流程&#xff1a; ByteArray 知识点 zigzag 算法 TLV 编码结构 Stream 类图 Stream 流结构&#xff0c;提供字节流读写接口 SocketStream TcpServer 类图 主要功能 Address…...

野火鲁班猫(arrch64架构debian)从零实现用MobileFaceNet算法进行实时人脸识别(四)安装RKNN Toolkit2

RKNN Toolkit2是用来将onnx模型转成rknn专用模型&#xff0c;并可通过RKNN Toolkit Lite2或者RKNPU调用NPU进行加速计算的工具。 一开始我安装很多次都无法成功安装。后来跟售后技术对接&#xff0c;必须是PC平台的Linux环境才可以。我的电脑是windows&#xff0c;所以我需要用…...

第六部分:阶段项目 5:构建 NestJS RESTful API 服务器

现在&#xff0c;是时候将你学到的 NestJS 知识付诸实践&#xff0c;构建一个简单的 RESTful API 服务器了。我们将基于第四阶段的项目&#xff08;博客文章 API 或任务管理 API&#xff09;&#xff0c;使用 NestJS 的方式重新实现它。 选择以下一个项目&#xff1a; 项目选…...

【工作流】Fastgpt配置豆包模型-火山引擎

V4.9.7 Fastgpt现在不通过oneapi 来配置模型和渠道了&#xff0c; 可以直接在页面进行设置 首先在账号- 模型提供商里面 填入豆包的信息&#xff1a; 渠道名随便填&#xff0c;厂商选豆包&#xff0c; 然后选3个模型&#xff0c;如图所示 如果没有填入模型映射的话是没办法 …...

vite搭建vue3项目及相关配置

1.npm create vite 设置你的项目名&#xff0c;选择框架&#xff0c;选择语言 我此处选的为Vue typescripe 2.按照命令去执行 cd vite-vue3-app 进入项目文件&#xff0c;npm install 安装依赖&#xff0c;npm run dev 运行项目 此处由于node、npm版本导致报错问题如图 在…...

web实验(2)

实验1 搭建nginxssl的加密认证web服务器 第一步&#xff1a;准备工作 # 恢复快照 [rootserver ~]# setenforce 0 [rootserver ~]# systemctl stop firewalld [rootserver ~]# systemctl disable firewalld [rootserver ~]# yum install nginx mod_ssl -y [r…...

数字孪生技术如何重塑能源产业?

近年来&#xff0c;全球能源行业正步入一个前所未有的转型期。一方面&#xff0c;“双碳”目标驱动能源结构向低碳化、清洁化发展&#xff1b;另一方面&#xff0c;新能源比例快速上升&#xff0c;给传统电力系统带来巨大的不确定性。与此同时&#xff0c;数字化浪潮也席卷能源…...

你通俗易懂的理解——线程、多线程与线程池

一&#xff1a;异常处理 1.1 异常概述 &#xff08;1&#xff09;场景 &#xff08;2&#xff09;定义 &#xff08;3&#xff09;异常抛出机制 Java把不同的异常用不同的类表示 &#xff08;4&#xff09;如何对待异常 1.2 常见异常类 &#xff08;1&#xff09;Throwable &am…...

spring+tomcat 用户每次发请求,tomcat 站在线程的角度是如何处理用户请求的,spinrg的bean 是共享的吗

对于 springtomcat 用户每次发请求&#xff0c;tomcat 站在线程的角度是如何处理的 比如 bio nio apr 等情况 tomcat 配置文件中 maxThreads 的数量是相对于谁来说的&#xff1f; 以及 spring Controller 中的全局变量:各种bean 对于线程来说是共享的吗&#xff1f; 一、Tomca…...

机器人坐标系标定

机器人坐标系标定 机器人坐标系标定 1. 知识目标 理解机器人坐标系的定义掌握机器人坐标系的分类 2. 技能目标 能够正确标定机器人坐标系 3. 机器人坐标系的作用 代表不同的物体或边界示例&#xff1a; 相对于桌子、弓箭、坯料、其他机器或边界移动 用途&#xff1a; 使用…...

VR光伏车棚虚拟仿真系统:开启绿色能源新视界​

VR 光伏车棚虚拟仿真系统&#xff0c;是一种集成了先进计算机技术与前沿虚拟现实技术的创新工具。它的核心在于&#xff0c;通过数字化手段高度逼真地模拟光伏车棚电站从规划建设到实际运行的全流程情境 &#xff0c;为相关人员提供一个沉浸式、交互式的虚拟操作空间。​ 借助 …...

阿里云服务器 篇十三(加更):Web书签(链接共享和迷你导航):改为使用宿主机DB等优化

文章目录 系列文章搭建 LinkAce将docker-compose配置迁移到项目目录添加脚本只保留最新备份改为使用宿主机DB获取当前LinkAce数据库备份导入LinkAce数据库备份创建数据库账号修改容器内MySQL客户端连接配置:禁用SSL连接修改 Docker 相关配置回滚和彻底清除数据卷改为使用宿主机…...

Typescript学习教程,从入门到精通,TypeScript 包装类与包装对象语法知识点及案例代码(10)

TypeScript 包装类与包装对象语法知识点及案例代码 在 TypeScript 中&#xff0c;包装类&#xff08;Wrapper Classes&#xff09;和包装对象&#xff08;Wrapper Objects&#xff09;是处理基本数据类型&#xff08;如 Boolean、Number、String&#xff09;的重要概念。这些包…...

若依代码生成

1。数据库&#xff0c;自己先创建好表和数据 启动访问页面&#xff0c;导入你的表 圈红的改成自己的业务名 生成后压缩&#xff0c;执行数据库脚本.sql文件 2。前台导入直接复制粘贴src 3。后台导入 复制main文件夹下的两个文件夹到 ruoyi-admin\src\main 如果不能访问在修改…...

Vue3 打印表格、Element Plus 打印、前端打印、表格导出打印、打印插件封装、JavaScript 打印、打印预览

&#x1f680; Vue3 高级表格打印工具封装&#xff08;支持预览、分页、样式美化&#xff09; 关键词&#xff1a;Vue3 打印表格、Element Plus 打印、前端打印、表格导出打印、打印插件封装、JavaScript 打印、打印预览 在企业级应用中&#xff0c;我们经常遇到打印报表、导出…...

实现一个前端动态模块组件(Vite+原生JS)

1. 引言 在前面的文章《使用Vite创建一个动态网页的前端项目》中我们实现了一个动态网页。不过这个动态网页的实用价值并不高&#xff0c;在真正实际的项目中我们希望的是能实现一个动态的模块组件。具体来说&#xff0c;就是有一个页面控件同时在多个页面中使用&#xff0c;那…...

面向对象编程在 JavaScript 中的实践

引言 前端开发正随着应用复杂度增加而向更严谨的架构模式演进。JavaScript 作为一种多范式语言&#xff0c;其面向对象特性为构建可维护、可扩展的大型应用提供了强大基础。 一、JavaScript 中的对象模型演化 对象字面量&#xff1a;最基础的封装 对象字面量是 JavaScript …...

Android 内存溢出(OOM)的 Kotlin 排查与优化指南

内存溢出&#xff08;Out Of Memory, OOM&#xff09;是 Android 开发中常见且棘手的问题&#xff0c;尤其在处理大图、复杂数据或内存泄漏时。本文将通过 Kotlin 代码示例 和工具使用&#xff0c;提供一套比较完整的排查与优化方案。 一、检测工具&#xff1a;定位内存问题根源…...

Docker常用命令介绍

Docker常用命令 1、本地镜像管理 save 命令 将一个或多个 Docker 镜像保存到一个 tar 归档文件中&#xff0c;以便在其他环境中分发或备份。 # 语法&#xff1a;docker save [OPTIONS] IMAGE [IMAGE...]# 保存单个镜像到文件 docker save -o myimage.tar myimage:latest# 保…...

(高级)高级前端开发者指南:框架运用与综合实战

当您已经掌握了HTML5、CSS3和JavaScript的基础知识后&#xff0c;接下来就是学习现代前端框架和性能优化的高级阶段。本文将重点介绍Vue.js/React的组件化开发、状态管理和路由配置&#xff0c;以及前端性能优化的核心技巧。通过丰富的代码示例和详细讲解&#xff0c;帮助您在实…...

边缘计算正在重新定义物联网的未来——你的设备还在“等云“吗?⚡

“数据不动算法动,算法不动代码动”——这句话正在成为物联网时代的新铁律。 当我们谈论物联网设备性能优化时,大多数开发者第一反应还是"上云"。但现实往往残酷:网络延迟让实时控制变成了"实时等待",带宽成本让企业CFO眉头紧锁,数据安全让合规部门夜…...

std::initialzer_list 与花括号{}数据列表

author: hjjdebug date: 2025年 05月 22日 星期四 15:50:23 CST descrip: std::initialzer_list 与花括号{}数据列表 文章目录 1.{数值列表}是什么?1.1 数组初始化 时 &#xff0c; 称为数组初始化列表1.2. 当用于容器时, 称为容器初始化列表1.3. 对于结构体或类&#xff0c;{…...

C++初阶-list的使用2

目录 1.std::list::splice的使用 2.std::list::remove和std::list::remove_if的使用 2.1remove_if函数的简单介绍 基本用法 函数原型 使用函数对象作为谓词 使用普通函数作为谓词 注意事项 复杂对象示例 2.2remove与remove_if的简单使用 3.std::list::unique的使用 …...

从单链表 list 中删除第 i 个元素--Python

从单链表 list 中删除第 i 个元素 一、问题引入二、解题步骤1.思维导图2.解题步骤 三、代码实现四、个人总结 一、问题引入 请编写程序&#xff0c;将 n 个整数顺次插入一个初始为空的单链表的表头。随后对任意给定的位序 i&#xff0c;删除链表中第 i 个结点。注意&#xff1…...

GraphPad Prism工作表的基本操作

《2025新书现货 GraphPad Prism图表可视化与统计数据分析&#xff08;视频教学版&#xff09;雍杨 康巧昆 清华大学出版社教材书籍 9787302686460 GraphPadPrism图表可视化 无规格》【摘要 书评 试读】- 京东图书 GraphPad Prism中包含5种工作表&#xff0c;每种工作表的基本操…...

C++初阶-list的使用1

目录 1.std::list简介 2.成员函数 2.1构造函数的使用 2.2list::operator的使用 3.迭代器 4.容量 4.1list::empty函数的使用 4.2list::size函数的使用 4.3list::max_size函数的使用 5.元素访问 6.修饰符 6.1list::assign函数的使用 6.2push_back和pop_back和push_fr…...

文献解读-病理影像多模态模型预测乳腺癌新辅助化疗的病理完全反应

期刊&#xff1a;Science Advances 影响因子&#xff1a;11.7&#xff0c;中科院1区Top 发表时间&#xff1a;2025年4月30日 概要&#xff1a;首都医科大学宣武医院放射科卢洁教授团队近日&#xff08;2025年5月&#xff09;在中科院1区top期刊《Sci Adv》&#xff08;IF11.7&a…...

Docker-Mysql

查看容器的详细信息 docker inspect mysql-8.4.5 Docker 启动 local-mysql 的完整命令 docker run -d \--name local-mysql \-e MYSQL_ROOT_PASSWORDyour_root_password \-v /AllenDocker/mysql/data:/var/lib/mysql \-p 3306:3306 \--restart unless-stopped \mysql:8.4.5 验…...

鸿蒙进阶——CMakelist、GN语法简介及三方库通用移植指南

文章大纲 引言一、GN常用的内置变量二、GN常用的内置函数三、CMake 重要语法1、生成动态库2、生成静态库3、生成OBJECT 库4、重要的函数和模块4.1、add_definitions4.2、execute_process4.3、add_dependencies4.4、install4.5、FetchContent 四、GN 重要语法1、编译Target2、预…...

场景化应用实战系列六:检索问答系统

目录 景化应用实战系列六&#xff1a;检索问答系统 一、目标设定 二、关键知识点梳理 三、案例讲解与实战操作 1. 数据准备与预处理 2. 倒排表构建 3. 文本相似度计算 4. 检索问答系统实现 5. 系统优化与改进 一、目标设定 构建一个高效的检索问答系统&#xff0c;能…...

3452. 好数字之和

​题目来源&#xff1a; LeetCode题目&#xff1a;3452. 好数字之和 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 按要求判断求和即可。 解题代码&#xff1a; #python3 class Solution:def sumOfGoodNumbers(self, nums: List[int], k: int) -> int:r…...

GEE数据下载问题记录

GEE下载数据时的一些记录 1. GPT说 2. 验证 在未指定投影坐标系的情况下&#xff0c;下载原始数据导出的是MODIS Sinusoidal投影&#xff0c;如果单纯的对波段值进行操作&#xff0c;不会进行投影转换&#xff0c;如果涉及到波段平均&#xff0c;则会转投影到WGS84坐标系。如…...

P1833 樱花

P1833 樱花 - 洛谷 题目背景 《爱与愁的故事第四弹plant》第一章。 题目的描述 爱与愁大神后院里种了n棵樱花树&#xff0c;每棵都有美学值Ci​(0≤Ci​≤200)。爱与愁大神在每天上学前都会来赏花。爱与愁大神可是生物学霸&#xff0c;他懂得如何欣赏樱花&#xff1a;一种樱…...

文件操作和IO-3 文件内容的读写

文件内容的读写——数据流 流是操作系统提供的概念&#xff0c;Java对操作系统的流进行了封装。 数据流就像水流&#xff0c;生生不息&#xff0c;绵延不断。 水流的特点&#xff1a;比如要100mL的水&#xff0c;可以一次接10mL&#xff0c;分10次接完&#xff0c;也可以一次接…...

Day 0015:Metasploit 基础解析

目录 一、理论学习&#xff08;Metasploit 架构与核心组件&#xff09; 一、架构设计&#xff1a;分层与模块化 基础层&#xff08;Ruby 框架&#xff09;&#xff1a; 核心层&#xff08;模块引擎&#xff09;&#xff1a; 接口层&#xff08;交互界面&#xff09;&#…...

相机标定与图像处理涉及的核心坐标系

坐标系相互关系 #mermaid-svg-QxaMjIcgWVap0awV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QxaMjIcgWVap0awV .error-icon{fill:#552222;}#mermaid-svg-QxaMjIcgWVap0awV .error-text{fill:#552222;stroke:#552…...

单例模式的运用

单例模式实现分析 在我们的向量数据库配置类 MilvusVectorDatabaseConfig 中&#xff0c;采用了单例模式的实现方式&#xff0c;这是一种非常经典且实用的设计模式。 饿汉式单例实现 这种实现方式属于饿汉式单例模式&#xff0c;它的优点在于&#xff1a; // 在类加载时就创…...

PageHelper分页原理解析:从源码到MySQL方言实现

一、引言 分页查询是Web开发的必备功能&#xff0c;MyBatis生态中的PageHelper以其简单易用的特性广受欢迎。本文将从源码层面&#xff08;v5.3.2&#xff09;解析PageHelper的分页实现机制&#xff0c;结合MySQL方言展示完整的执行链路。 二、核心实现原理 1. 插件初始化 …...

MySQL中索引最左前缀法则、索引失效情况、前缀索引、索引设计原则

最左前缀法则 联合索引中&#xff0c;最左前缀法则指的是查询从索引的最左列开始&#xff0c;并且不跳过索引中的列&#xff0c;如果跳跃某一列&#xff0c;索引将会部分失效&#xff08;后面的字段索引失效&#xff09;举例假设有一个联合索引包含三个字段按顺序&#xff1a;…...

pdf图片导出(Visio和Origin)

一、Visio 导入pdf格式图片 1. 设计->大小&#xff0c;适应绘图。 2. 文件->导出&#xff0c;导出为pdf格式。 上面两部即可得到只包含图的部分的pdf格式。 如果出现的有默认白边&#xff0c;可以通过以下方式设置&#xff1a; 1. 文件->选项->自定义功能区->…...

NR 通讯的整体架构

前言&#xff1a; 并假设发射器发送了一个信号&#xff0c;如左下角所示&#xff08;蓝色&#xff09;&#xff0c;接收器检测到的信号显示在右侧&#xff08;红色&#xff09;。您在图中注意到的第一件事是什么&#xff1f;那就是发送的信号和接收的信号并不完全相同。 有什么…...