电子电气架构 --- 面向服务的体系架构
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。
老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师:
周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧!
旧人不知我近况,新人不知我过往,近况不该旧人知,过往不与新人讲。纵你阅人何其多,再无一人恰似我。
时间不知不觉中,来到新的一年。2025开始新的忙碌。成年人的我也不知道去哪里渡自己的灵魂,独自敲击一些文字算是对这段时间做一个记录。

一、 前言
近年来,汽车“新四化”(智能化、网联化、电动化、共享化)的快速推进,给汽车行业带来了新的技术变革,汽车的功能变得越来越复杂,尤其是智能座舱、智能驾驶、智能底盘的出现,促使汽车电子电气架构也相应地发生变革。
随着汽车智能化发展、汽车功能的增加,汽车上的电子控制单元(Electronic Control Unit,ECU)也越来越多,每个ECU的信号都必须在设计时进行静态规划和路由,为了应对这种增长带来的挑战,汽车行业正在采用1种新的架构,即面向服务的体系架构(Service-Oriented Architecture,SOA)。
二、SOA简介
SOA是从遵循服务导向原则的可重用服务中构建复杂软件系统的方法。SOA也是1个组件模型,它将应用程序的不同功能单元(称为服务),通过这些服务之间定义良好的接口和契约联系起来。接口采用中立的方式进行定义,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务以1种统一和通用的方式进行交互。SOA可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。服务层是SOA的基础,可以直接被应用调用,从而有效控制系统中因软件代理交互而产生的人为依赖性。
SOA的特点是松耦合性、路径透明、可复用性、一定的标准化,不涉及底层编程接口和通讯模型。
SOA在IT行业中已经使用了多年,旨在描述和构建分布式系统。同时,面向服务的设计在汽车工业中也变得极为重要。
传统汽车通讯是基于信号的通讯方式,即信息发送者不关心谁接收而只负责将信号发送出去,接收者也不关心是谁发送的,而只负责接收信号,这种方式适用于有限大小控制数据的应用场景。
SOA代码灵活性强,支持请求/响应模式,支持复杂的数据模型,可扩展性强,能够满足自动驾驶等应用场景下,大量数据的动态交互,可以对系统进行部分更新,如图1所示。

汽车领域采用SOA的优势是能加快车辆与互联网的互联互通。比如,能够将各种新功能灵活地与互联网集成;能够实现更高效的车载自动诊断系统OBD(On Board Diagnostics,OBD)及空中下载技术(Over-The-Air Technology,OTA)软件升级,有助于实现各种远程诊断、预诊断功能;能够大幅提升影音娱乐功能的用户体验,能够实现不同平台间的各种App共享功能;更便于实现平台架构升级;同时各个服务可以由不同团队独立开发,可以缩短车辆开发的时间。
三、 SOA主要模块及功能
Wonseon和Seung设计了端到端的SOA,如图

在传统的车载网络中:
-> 许多ECU是基于CAN等旧式IVN进行工作;
-> 大量的车辆信息和功能也来自旧式IVN;
-> 基于以太网的ECU上的新应用程序应可以访问这些信息/功能。
在本架构中,主要的功能模块有SOA适配器(SOA Adaptor),SOA网关(G/W),SD代理(SD Proxy)和服务路由(Service Router)。下面将介绍各个模块的功能。
三、SOA适配器
-> 将信息/功能从旧式IVN转换为“服务”,任何基于以太网的ECU上的应用程序都可以轻松访问。
-> 在以太网方面,服务是在SOME/IP协议之上提供的。
-> 可以在旧版IVN和基于以太网的IVN之间的“桥接ECU”上实现,例如域控制单元,区域控制器等。也可以仅在具有以太网接口的非桥接ECU上实现。
-> SOA适配器提供的服务可以动态更改。
1、SOA网关
-> 处理与外部设备/网络互通相关的问题。
-> 必要时转换协议并翻译。
-> 缓存外部信息以处理外部网络的可用性和成本问题。
-> 应用策略并执行服务级别的访问控制。
-> 应该在具有外部连接的ECU上实施。
2、SD代理
-> 可以使用SD代理实现集中式SD。通过1个称为“SD代理”的中央模块交换服务发现消息。SOME/IP-SD消息也可用于ECU与SD代理之间的通信。
-> 分布式SD方法的安全和流量问题可以由集中式SD处理。每个服务只能由允许的ECU查找和订阅。可以有效地监视服务可用性和搜索/订阅尝试。
3、服务路由
可以使用服务路由器来处理来自SOA分布式性质的问题。服务只能通过服务路由器来使用。服务路由可以应用于选定的服务。SD代理可用于高效的服务路由实施,安全和资源问题可以得到有效处理,可以基于域、ECU、服务甚至方法来控制服务访问,策略也可以动态应用。
4、汽车SOA应用现状
SOA是汽车以太网和IP带来的汽车系统/软件体系架构的创新,其概念可以扩展到从传统ECU到外部设备的端到端范围。SOA适配器和SOA网关可以分别用于旧设备和外部设备。通过使用其他SOA实体可以有效地管理SOA。端到端SOA支持快速高效地部署各种互联汽车服务。
在面向服务架构汽车软件开发方法和实践中,提出SOA汽车软件的分成模型,如图示。

该模型主要包括3个层级:元服务、基础服务和应用服务,通过不同的服务层级来分别对应不同层级的汽车业务逻辑。
元服务是最小单元。包括汽车的传感器和执行器等的基本接口。基础服务是中间层服务,在利用元服务的基础上,可自定义汽车业务模块,比如利用自车状态服务和雷达传感器等服务,组合出环境信息融合的服务。应用服务是最顶层的服务,可以访问和调用基础服务以帮助其解决业务问题。
在设计中,上层服务调用下层服务,下层服务不调用上层服务,这一原则有助于构建清晰简单的SOA汽车软件架构。宝马公司在新一代的E/E架构中引入了SOA的方法,如图4所示。SOA为整个系统提供大量的抽象服务。严格的封装和层次结构允许针对接口和使用敏捷方法进行测试,并且它们降低了系统复杂性。在各代汽车之间重用软件组件将变得更加简单。

BMW下一代E/E架构
大众MEB平台车载应用服务架构(In-Car Appli⁃cation-Server,ICAS),采用了1种可升级的新方法,如图5所示。采用集中式功能与应用程序软件和I/O功能分离的架构,来降低整体系统复杂性和应用程序之间的依赖性,同时可以高效快速地开发客户功能,提供一些客户职能所需的基本服务,并且利用面向服务的通信。

大众MEB平台车载应用服务架构升级方法示例
在该架构中还强调,SOA是数字化的关键,如图所示,该架构的优点如下:

-> 采用面向服务的通信;
-> 使用服务发现和发布/订阅进行动态绑定;
-> 数据表示主要基于REST(表述性状态传递)过渡到统一接口、无状态、关注点分离;
-> 接口的向前和向后兼容性。
最后,通过提高可更新性、可升级性、重用能力和便携性,使大众汽车可以实现各种功能。
在AUTOSAR自适应平台(Adaptive Platform,AP)设计中,为了支持复杂的应用程序,同时在处理分布和计算资源分配方面允许最大的灵活性和可扩展性,AP遵循了面向服务的体系结构理念。
SOA通常具有AP所具有的系统间特性。例如,服务可以驻留在应用程序运行的本地ECU上,也可以位于远程ECU上,该远程ECU也在运行另一个AP例。
上汽组建“零束”软件子公司,聚焦基于SOA技术的智能驾驶系统工程,同时推出“Z-ONE”的SOA开放平台,致力于打造上汽SOA的软件生态。该平台是以SOA理念打造整车功能,将汽车各个功能模块化。同时可以让第3方开发者甚至是普通用户参与到软件功能的打造。
五、汽车SOA开发流程
开发面向服务的车用应用程序,并使用空中软件更新部署它。主要流程如图7所示。

在2019年世界移动通信大会(巴塞罗那)上,梅赛德斯·奔驰展示了一款经过特别改装的车辆,这款车辆与开源游戏SuperTuxKart相结合,打造了一个沉浸式的游戏系统。玩家可以通过真实的方向盘来控制游戏中的车辆,而空调则模拟出虚拟赛车在驶过不同场景(如火山)时的气流和温度效果。
Andreas的开发假设与流程
假设车辆制造商现在希望开发这样的游戏系统,并将其作为车主可选的更新部署到车辆上。以下是其开发流程:
1、需求分析
首先,进行详细的需求分析,具体步骤如下:
(1)主机将展示一款赛车视频游戏,游戏声音将通过车载音响系统播出。
(2)游戏中的效果应在实车上得到反映,例如:空调应根据游戏中的场景和虚拟车的速度调节气流和温度;游戏中的撞车事故应通过可逆安全带拉紧器来告知用户;电动座椅调节器和按摩器可产生更多的触觉效果;在虚拟比赛开始时,车内的环境照明应模拟交通信号灯。
(3)虚拟车辆的水平动力学应根据当前方向盘的角度来计算。
(4)虚拟车辆的速度应根据油门踏板和制动踏板的输入来确定。
(5)所指定的效果体验应与视频游戏中显示的情况完全匹配。
(6)游戏的最小帧速率应达到30 fps。
(7)效果的延迟应等于或小于1帧的持续时间(基于最小帧频)。
此外,还存在一些非功能性需求:
(1)此功能应能部署在现有汽车上,无需对硬件进行任何修改。
(2)该功能不得损害机动车的安全性。
(3)只有在车辆周围环境允许安全操作时,该功能才可启用。
2、起草软件和系统架构
根据需求分析的结果,起草软件和系统架构,并构建面向服务的部分。
在“SuperTuxKart”应用程序的需求定义完成后,我们起草了其软件和系统架构。针对需求中的第2至第4步,我们设计了以下三个步骤:
分解
实现“SuperTuxKart”应用程序的必要组件在一定程度上遵循了面向服务和面向信号的方法。
面向服务的部分:
在这部分中,“Super-TuxKart”应用程序被描述为一个服务消费者组件(客户端)。它消费的服务包括喷油嘴服务(Nozzle)和转向/踏板状态服务(Steering/Pedal status)。
转向/踏板状态服务接口的目的是定期接收踏板和转向角的状态,为“Super-TuxKart”应用程序提供施加的踏板压力和转向角信息。
喷油嘴服务接口的目的是实现对油泵执行器的控制。“Super-TuxKart”应用程序根据游戏中的场景和虚拟车辆的速度,以所需的喷嘴效果强度来刺激该接口,如图8所示。

面向信号的部分:软件架构的某些部分不会由服务接口实现,而是由经典的面向信号的方法。通常考虑与传感器和执行器密切相关的软件功能。对于该应用,必要的传感器是踏板和转向装置。执行器则是由喷油嘴表示。为了将3个组件集成到我们的软件架构草案中,引入了图9中的信号接口。传感器踏板和转向装置为转向/踏板状态服务提供接口;执行器喷油嘴为喷油嘴服务提供接口(图9)。

信号接口
3、 部署方案
接下来,我们将采用恰当的网络技术来部署软件架构,具体考虑以下三个通信网络:以太网、底盘/动力总成网络以及LIN网络。
(1)以太网拓扑网络
第一个网络是基于以太网拓扑构建的。在这个网络中,三个电子控制单元(ECU)通过一个中央以太网交换机实现互连。其中,ECU 1作为中央计算平台,承载着“SuperTuxKart”应用程序的部署任务。对于踏板/转向服务,我们选择了底盘/传动系统域的域控制器ECU 2作为部署目标。同样地,车身域的域控制器ECU 3则被选定为喷油嘴服务的部署目标。
(2)底盘/传动系统网络
第二个网络聚焦于底盘/传动系统域,该网络描述了两种基于CAN和FlexRay协议的系统总线拓扑结构,它们均连接到底盘/传动系统域的域控制器。这种设计确保了底盘/传动系统域内各组件之间的高效、可靠通信。
(3)LIN网络
第三个网络则是基于LIN协议的系统总线拓扑。在这个网络中,我们特别关注了油泵执行器,它被部署在一个专用的LIN组件上,并且由喷油嘴服务进行控制。这种混合通信方式如图10所示,展示了不同网络协议在汽车电子系统中的协同工作,实现了对车辆各部件的精准控制和高效管理。

网络通信
“Super-TuxKart”应用程序融合了以太网拓扑中的面向服务通信与CAN、FlexRay、LIN系统总线拓扑中的经典面向信号通信,形成了独特的网络通信方式。
开发阶段概述
应用程序的开发过程主要分为三个阶段,每个阶段都承载着不同的任务与目标。
构建基础组件
在面向服务架构(SOA)中,API存储库作为核心基础组件,扮演着中央数据库的角色。它详尽地记录了服务的功能、接口等详细信息,为车内计算平台上的应用程序提供了丰富的服务资源。这些服务可被应用程序利用,以拓展功能,满足客户需求。
现有服务的整合利用
当应用程序明确了自身需求后,它会通过API存储库寻找能够满足这些需求的服务。理想情况下,存储库中的服务能够全面覆盖应用程序的需求。此时,应用程序可依据API存储库提供的接口描述进行软件设计。得益于面向服务架构的解耦特性,无需对域控制器或其背后的电子控制单元(ECU)进行任何修改。以“SuperTuxKart”为例,应用程序会根据需求调整空调气流,并在API存储库中寻找相应的服务。它会找到喷油嘴服务,并将其接口集成到应用程序中。
新服务的创建与拓展
若API存储库中的服务无法满足应用程序的需求,则需联系API的创建者进行更新,以拓展存储库的功能。然而,这一扩展过程可能会拖慢新应用程序的设计进度。因此,在设计API存储库时,应尽可能提供全面的功能,以减少后续拓展的需求。
空中更新机制
汽车嵌入式系统的软件空中更新涉及两个部分:一是由汽车制造商维护的服务器,负责管理更新程序包;二是客户端,负责接收、验证和分发更新程序至相应的ECU。
更新客户端功能通常集成在车辆的中央网关平台上,该平台作为通信总线之间的中央通信点,可直接访问主机。下载的更新包含一个或多个交叉编译的二进制文件,准备刷新至相应的ECU。中央网关的更新服务负责检查更新包,并将二进制文件分发至目标ECU。
研究表明,利用现有服务可以减少协调工作量,提高开发速度。然而,若应用程序始终能够无限制地访问现有服务,可能会带来安全方面的挑战,如访问行驶中的车辆的主动悬架系统。因此,有必要对汽车SOA的访问控制管理进行深入研究。
关键环节与未来展望
“分析和设计面向服务的架构”以及“实现和部署面向服务的软件”是有效开发SOA汽车软件的关键环节。为了实现汽车智能驾驶,通用高性能计算平台构成了未来新型E/E架构的硬件基础,而SOA则奠定了“软件定义汽车”的软件基础。
通过SOA平台,实现了软硬件的解耦,使得终端用户、汽车厂家及第三方开发者能够携手共建跨品牌、跨平台、跨车型的软件开发能力。这一平台以用户体验为核心,促进了各方开发者的协同合作与共赢发展,共同打造了智能汽车生态。
在这个生态中,汽车企业不仅生产制造汽车,还成为了移动出行的服务供应商,能够为用户提供丰富多样的软件服务。SOA软件平台上的多方协同合作,为软件汽车的不断进化和用户体验的持续提升提供了源源不断的动力。
未来,车主将能够根据乘员数量、道路情况、目的地甚至个人心情等不同条件,在车机及移动端APP上下载并配置不同的功能,以满足个性化需求。在SOA软件平台的助力下,通过数据、算法、软件的不断积累和迭代升级,汽车将逐渐从执行指令的冰冷机械进化为能够实时交流、洞察需求、主动服务的“有生命的出行伙伴”。
搁笔分享完毕!
愿你我相信时间的力量
做一个长期主义者
相关文章:
电子电气架构 --- 面向服务的体系架构
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁&am…...
TypeScript 装饰器类型详解
TypeScript 装饰器类型详解 一、类装饰器 // 参数:类的构造函数 function ClassDecorator(constructor: Function) {Object.defineProperty(constructor.prototype, timestamp, {value: Date.now()}); }ClassDecorator class DataService {// 装饰后自动添加times…...
Nyquist内置函数-杂项函数
1 Nyquist内置函数-杂项函数 1.1 杂项函数 这些函数对于日常使用来说都是安全且推荐的。 1.1.1 to-mono(sound) [SAL] (to-mono sound) [LISP] 如果 sound 是多声道声音,返回其所有声道的总和;如果 sound 本身就是单声道声音,则直接返回&…...
基姆拉尔森计算公式
基姆拉尔森计算公式(Zellers Congruence 的变体)是一种快速根据公历日期计算星期几的数学公式。其核心思想是通过对年月日的数值进行特定变换和取模运算,直接得到星期几的结果。 公式定义 对于日期 年-月-日,公式如下:…...
5 分钟用满血 DeepSeek R1 搭建个人 AI 知识库(含本地部署)
最近很多朋友都在问:怎么本地部署 DeepSeek 搭建个人知识库。 老实说,如果你不是为了研究技术,或者确实需要保护涉密数据,我真不建议去折腾本地部署。 为什么呢? 目前 Ollama 从 1.5B 到 70B 都只是把 R1 的推理能力…...
Python数据可视化-第6章-坐标轴的定制
环境 开发工具 VSCode库的版本 numpy1.26.4 matplotlib3.10.1 ipympl0.9.7教材 本书为《Python数据可视化》一书的配套内容,本章为第6章 坐标轴的定制 本章主要介绍了坐标轴的定制,包括向任意位置添加坐标轴、定制刻度、隐藏轴脊和移动轴脊。 参考 第…...
18认识Qt坐标系
平面直角坐标系(笛卡尔坐标系) 数学上的坐标系 右手坐标系 计算机中的坐标系 左手坐标系 坐标系的原点(0,0) 就是屏幕的左上角 /窗口的左上角 给 Qt 的某个控件,设置位置,就需要指定坐标.对于这个控件来说, 坐标系原点就是相对于父窗口/控件的. QPushButton 的父元素/父控件/父…...
动态循环表单+动态判断表单类型+动态判断表单是否必填方法
页面效果: 接口请求到的数据格式: list: [{demandType: "设备辅助功能要求",demandSettingList: [{id: "1907384788664963074",name: "测试表单",fieldType: 0,contentValue: "",vaildStatus: 0, // 0 非必填&a…...
keep-alive缓存
#keep-alive缓存动态路由的使用指南# 代码如下图 : <router-view v-slot"{ Component }"> <keep-alive :include"[Hot, Notifications, User, Setting, Test]"> <component :is"Component" …...
25.4.3学习总结【Java】
又是一道错题: 1. 班级活动https://www.lanqiao.cn/problems/17153/learning/?page1&first_category_id1&sortdifficulty&asc1&second_category_id3 问题描述 小明的老师准备组织一次班级活动。班上一共有 n 名 (n 为偶数) 同学,老师…...
Python入门(3):语句
目录 1 基本语句 1.1 表达式语句 1.2 赋值语句 2 控制流语句 2.1 条件语句 2.2 循环语句 while循环: for循环: 2.3 流程控制语句 1. break语句:退出整个循环体 2. continue语句:只跳过本次循环,还会进…...
运维之 Centos7 防火墙(CentOS 7 Firewall for Operations and Maintenance)
运维之 Centos7 防火墙 1.介绍 Linux CentOS 7 防火墙/端口设置: 基础概念: 防火墙是一种网络安全设备,用于监控和控制网络流量,以保护计算机系统免受未经授权的访问和恶意攻击。Linux CentOS 7操作系统自带了一个名为iptables的…...
开发一个小程序需要多久时间?小程序软件开发周期
开发一个小程序所需时间受多种因素影响,以下为你详细列举: 一、需求复杂度。若只是简单展示类小程序,如企业宣传、产品介绍,功能单一,大概 1 - 2 周可完成。若涉及复杂交互,像电商小程序,涵盖商…...
【数据结构篇】算法征途:穿越时间复杂度与空间复杂度的迷雾森林
文章目录 【数据结构篇】算法征途:穿越时间复杂度与空间复杂度的迷雾森林 一、 什么是算法1. 算法的定义1.1 算法的五个特征1.2 好算法的特质 2. 时间复杂度3. 空间复杂度 【数据结构篇】算法征途:穿越时间复杂度与空间复杂度的迷雾森林 💬欢…...
新增帧能耗指标|UWA Gears V1.0.9
UWA Gears 是UWA最新发布的无SDK性能分析工具。针对移动平台,提供了实时监测和截帧分析功能,帮助您精准定位性能热点,提升应用的整体表现。 本次版本更新主要新增帧能耗指标,帮助大家对每一帧的能耗进行精准监控,快速…...
蓝桥杯嵌入式16届———LCD模块
LCD有官方给我们提供的库,我们使用其非常简单,唯一要注意的就是LCD和LED的引脚冲突。 引脚状况 STM32CubeMX 端口配置 使能 比赛给的选手 资源数据包中有以下三个文件,(除去led相关的),将他们复制到自己…...
Ubuntu服务器挂载之前的数据硬盘
这里假设在挂载硬盘之前,您的硬盘从之前的服务器上正确卸载下来。请注意,以下任何操作不当都有可能导致硬盘数据丢失或损坏,如果您的数据非常重要,请及时备份。 1. 确认硬盘分区信息 使用以下命令查看磁盘信息,找到要…...
CMake在Windows环境下Visual Studio Code的使用
1,安装下载 地址:Visual Studio Code - Code Editing. Redefined 双击安装 选择安装路径 可勾选微软的AI工具 2,环境介绍 2.1 ,界面介绍 2.2中文包的安装 下载中文简体 汉化后的界面 2.3 配置C/C环境 VSCode安装好之后…...
注意力机制在大语言模型中的原理与实现总结
注意力机制在大语言模型中的原理与实现总结 1. 章节介绍 在大语言模型的学习中,理解注意力机制至关重要。本章节旨在深入剖析注意力机制的原理及其在大语言模型中的应用,为构建和优化大语言模型提供理论与实践基础。通过回顾神经网络基础及传统架构的局…...
大学生机器人比赛实战(二)软件篇
大学生机器人比赛深度开发指南:核心技术详解与实战代码解析 作为参加过多次机器人竞赛的选手,我将详细剖析比赛中的核心技术实现,包括软件架构设计、实时系统应用、各大赛事代码特点以及性能优化技巧。本指南将帮助你从代码层面深入理解如何…...
AI大模型从0到1记录学习 day13
第 13 章 Python高级语法 13.1 浅拷贝与深拷贝 直接赋值:对象的引用(别名),不产生拷贝。 浅拷贝:拷贝父对象,不会拷贝对象的内部的子对象。拷贝后只有第一层是独立的。 深拷贝:完全拷贝…...
大模型学习三:DeepSeek R1蒸馏模型组ollama调用流程
一、说明 目前DeepSeek R1及其蒸馏模型均支持使用ollama进行调用,可以在模型主页查看调用情况 deepseek-r1https://ollama.com/library/deepseek-r1 显存需求 ,我们显存是16G,可以玩好几个 二、以14B模型演示 1、安装ollama curl -fsSL htt…...
RAGFlow部署与使用介绍-深度文档理解和检索增强生成
ragflow部署与使用教程-智能文档处理与知识管理的创新引擎 1. ragflow简介 RAGFlow作为新一代智能文档处理平台,深度融合检索增强生成(RAG)技术与自动化工作流引擎,为企业级知识管理提供全栈解决方案。通过结合多模态解析、语…...
一文读懂 UML:基础概念与体系框架
UML 图是一种标准化的建模语言,在软件开发和系统设计等领域有着广泛的应用。以下是对 UML 图各类图的详细介绍: 1.用例图 定义:用例图是从用户角度描述系统功能的模型图,展现了系统的参与者与用例之间的关系。作用:帮…...
【AI赋能:58招聘数据的深度剖析之旅】
影刀出鞘,抓取数据 在当今数字化时代,数据分析已成为企业决策和发展的关键驱动力。而获取高质量的数据则是数据分析的首要任务。在这个信息爆炸的时代,网络上蕴含着海量的数据,其中招聘网站的数据对于人力资源分析、市场趋势研究…...
几何法证明卡特兰数_栈混洗
模型: 考虑从坐标原点 (0, 0) 到点 (n, n) 的路径,要求路径只能向右(x 方向)或向上(y 方向)移动,并且路径不能越过直线 y x(即始终满足 y< x )。这样的路径数量就是…...
Kafka的安装与使用(windows下python使用等)
一、下载 可以去官网下载:https://kafka.apache.org/downloads 版本可选择,建议下载比较新的,新版本里面自带zookeeper 二、安装 创建一个目录,此处是D:\kafka,将文件放进去解压 如果文件后缀是gz,解压…...
DataPermissionInterceptor源码解读
原文首发在我的博客:https://blog.liuzijian.com/post/mybatis-plus-source-data-permission-interceptor.html 目录 一、概述二、源码解读2.1 beforeQuery2.2 beforePrepare2.3 processSelect2.4 setWhere2.5 processUpdate2.6 processDelete2.7 getUpdateOrDelete…...
大模型中的参数规模与显卡匹配
在大模型训练和推理中,显卡(GPU/TPU)的选择与模型参数量紧密相关,需综合考虑显存、计算能力和成本。以下是不同规模模型与硬件的匹配关系及优化策略: 一、参数规模与显卡匹配参考表 模型参数量训练阶段推荐显卡推理阶…...
数据结构初阶: 顺序表的增删查改
顺序表 概念 顺序表是⽤⼀段物理地址连续的存储单元依次存储数据元素的线性结构,⼀般情况下采⽤数组存储。如图1: 顺序表和数组有什么区别? 顺序表的底层是用数组实现的,是对数组的封装,实现了增删查改等接口。 分…...
