SIG Mesh协议学习

news2024/12/23 6:45:21

1. 简介

Bluetooth SIG组织在2017年7月17日发布了蓝牙Mesh标准. 蓝牙Mesh不同于传统Bluetooth Low Energy(BLE)协议的1对1, 1对多的通信方式, 它实现了多对多的通信. 这使得mesh网络中的各个节点之间可以相互通信. 蓝牙Mesh协议建立在BLE的物理层和链路层之上, 也就是说它可以和BLE 4.0及以上版本的蓝牙设备通信. 注意这并不意味着它支持所有BLE最新的特性, 譬如低功耗蓝牙的LE Coded PHY及2M PHY, 在现有的Bluetooth Mesh规范中并不支持.
在这里插入图片描述

2. BLE 物理层和链路层

2.1 BLE 物理层

BLE工作在2.4GHz ISM频段2402MHz-2480MHz. BLE定义了40个信道, 每个信道2MHz宽度. 其中有3个广播信道, 图中绿色标示的37, 38, 39信道. 它们被用于设备的发现, 广播等功能. 这三个信道所处的频段正好避开了和同样工作在2.4GHz频段的WiFi最常用的第1, 6, 11信道 减少正常通信的干扰. 其他37个信道用做BLE建立连接后的双向数据传输, 叫做数据信道. 在打开蓝牙的自适用跳频功能后, 设备将会自动侦测干扰来选择合适的工作信道. 这两种信道类型正是对应于BLE的两种主要通讯模式Advertising 和 Connection. 蓝牙Mesh在网络内部节点间的通信只采用了Advertising的方式

在这里插入图片描述

2.2 BLE 链路层

Advertising是指蓝牙广播设备在3个广播信道里以特定的时间间隔发送消息, 同时蓝牙扫描设备以特定时间长度的的扫描窗口和间隔, 依次扫描3个广播信道来接收广播设备发送过来的信息. 图中三个不同颜色的柱状图表示37,38,39三个广播信道. 广播设备连续在三个信道里发送消息, 间隔为20ms. 而扫描设备的扫描窗口时间为30ms, 扫描间隔为40ms, 一次扫描一个信道. 蓝牙Mesh设备在网络内部通信时, 以尽可能接近100%的占空比来扫描广播信道. 也就是说扫描窗口时间等于扫描间隔, 以确保信息不会丢失. 蓝牙Mesh设备在发送特定信息的时候并不会像普通BLE广播要等一个广播间隔, 而是延迟一小段随机时间就立即发送出去.

在这里插入图片描述

3. 蓝牙Mesh发布/订阅系统

3.1 简介

在这里插入图片描述

Mesh网络中的发布-订阅系统(Publish-Subscribe system)是一种非常重要的通信实现方式。它基于订阅者(Subscriber)和发布者(Publisher)之间的事件通信,使得用户能够方便地向多个节点或设备传输数据或消息,进而区分不同目标设备分类收到相对应的信息。

在Mesh网络中,执行发布-订阅通信需要确定以下两个主要组件:

  1. 订阅者:负责接收或订阅感兴趣的消息或事件,并将其处理或转发给其他设备或节点。订阅者同时也会注册自己想要接受的消息类型、范围、地址等相关属性。

  2. 发布者:负责生成或发布消息或事件,同时向订阅者广播这些消息,以达到与目标设备或节点的通信目的。

具体来说,当发布者创建一个新的事件时,它将该事件域名、事件数据和发布者ID打包成一个消息,然后将该消息广播到与其成功链接的Mesh网络设备。当Mesh网络内的设备接收到该消息时,如果它被订阅者所订阅,那么该设备将处理该消息并将其传递给订阅者。

通过这种方式,设备可以轻松地互相发送消息,并向订阅者提供潜在数据源。此时,每个设备都可以作为发布者或订阅者,使得多个设备之间的消息传递在Mesh网络中自由、轻松和快速共享。

总之,Mesh网络的发布-订阅系统是一种高效、灵活、安全的通信机制,在 IoT 应用领域有着广泛的应用前景。它可以极大地简化设备之间的信息交流,并且具有很高的可扩展性和强大的适应性。

3.2 订阅方和发布方如何进行信息匹配呢?

在Mesh网络的发布-订阅系统中,需要以下信息来进行匹配:

  1. 订阅者节点所需的消息类型或事件类型:订阅者在注册时需要描述自己感兴趣的消息类型事件类型,以便发布者能够将消息广播到正确的目标设备。

  2. 订阅者节点所需的消息范围或地址范围:即订阅者关注的消息传递的具体位置和范围。例如,当订阅者只希望接收某个楼层的温度数据时,可以通过设置特定楼层的地址范围来实现。

  3. 消息的具体内容:发布者所创建和广播的消息需要包含一系列的信息、属性或值。在接收消息的过程中,订阅者根据发布者发送的消息类型、数据等属性来判断这些消息是否适用自己的匹配要求。

  4. 网络拓扑结构:订阅者和发布者位于Mesh网络不同部分,需要建立稳定连接并了解网络拓扑结构,以确保有效地将消息传递给目标设备。

综上所述,可见订阅者需要告知发布者它的感兴趣分类数据范围,消息类型,节点地址以及其他相关信息。在消息发送过程中,发布者则会将这些属性打包进消息中广播,确保目标设备能够精确收到自己感兴趣的数据。完成这个基本机制需要发布订阅系统同时支持消息类型的订阅和多级话题的匹配等灵活功能。

4. Mesh的网络泛洪以及处理方式

蓝牙Mesh网络使得设备可以在广阔的区域中安装, 同时每个设备之间保持通信. 消息可以在在无线覆盖范围之内的设备之间直接通信, 也可以通过中继设备和无线覆盖范围之外的设备通信. 消息可以被多次中继, 从而实现非常广阔的消息传输. 蓝牙Mesh采用的是管理型网络泛洪方式来进行网络信息的传输, 即网络中所有具备中继功能的设备都会转发收到的消息.

  • 优点是无需特定的路由设备, 确保消息多路径传输无障碍的到达目的设备

  • 缺点是可能会对网络消息泛滥造成通信延迟.

所以蓝牙Mesh采用以下措施来优化泛洪通信来减少不必要的冗余信息传输

  • Message cache: Message cache通常用于缓存已经处理过的消息,以便设备能够更轻松和高效地处理来自其他节点的相同消息。通过使用Message cache技术,可以最大限度地减少冗余的数据操作和传输,并且可以提高网络的带宽利用率。但是,如果设备不及时清空Message cache缓存,可能会占据大量的内存资源,导致系统性能下降。

  • Time to Live(TTL): TTL则主要用于限制消息在Mesh网络中传播的范围和时间,避免数据包在网络中持续传递并占用过多的带宽资源。在Mesh网络中,每条消息都会包含TTL属性。当某个设备接收到一个TTL值为0的消息时,它将停止对该消息的进一步转发。因此,TTL可以有效地防止链式反应,避免因数据包的无限循环而使网络负载过度

Mesh网络中,泛洪是一种常见的消息路由技术,指在网络内部传递消息时将数据包广播到所有邻近节点的行为。当设备接收到一个新的数据包时,它会自动向与它邻近的节点广播该消息,并且这个广播过程将在整个Mesh网络上继续扩散,直至达到目标设备或达到最大跳数限制。

当然,采用泛洪方式进行数据包转发也存在许多问题和局限性,例如:

  1. 路由效率低下:由于消息的广播是不可控的、无法预测的,同时涉及到多个设备的处理和转发,导致在网络繁忙或拥塞时容易出现通信延迟较大的情况,并且可能占用大量带宽资源。

  2. 容易产生冲突:多个设备同时使用泛洪方式发送消息时,如果没有正确的协调机制,就会造成数据包的冲突和混乱,从而导致通信失败或者降低网络的稳定性。

  3. 安全隐患:采用泛洪方式发送数据包时,会将消息广播到整个Mesh网络中的所有设备,包括未经授权的设备,在某些场景中,这可能会给安全造成影响。

为了避免以上问题,Mesh网络在数据传输中通常采用以下方式进行泛洪的优化和处理:

  1. 设备间通信协议选用具有鲁棒性、快速响应和高效率的路由协议,例如优化的Flood Routing(OFR),Distributed Flooding(DF)等结合路由表策略的机制可以有效限制过度的泛洪消息数量及其范围.

  2. 对于大部分智能家居等应用场景,一般使用以低功耗蓝牙为基础构建起来的mesh协议,其不仅功耗较小,同时收发设备均简单,实现复杂度低与成本降低。

  3. 通过控制广播量、监视并限制每个节点所转发的泛洪数据包数量和频率来降低路由冲突和带宽耗费。

总之,Mesh网络的泛洪技术是一种灵活而高效的数据传输方法,但在具体实现时,需要采用一些优化和处理手段来优化网络效率、减少数据冲突和提高安全性。

5. Mesh的重要组成部分

在Mesh网络中,有三个重要的概念:节点元素

5.1 Mesh的组

组是Mesh网络中的一个逻辑实体,指一组彼此关联的设备,它们可以互相交互、通信,并共享相同的广播通道。每个组都有一个唯一的组ID,设备可以选择加入到不同的组中,也可以同时处于多个组中。在Mesh网络中,通过组ID来标识某个设备所属的组,以便相关的设备能够互相通信和协同工作。

通过组的方式,Mesh网络能够实现许多有用的功能和好处。以下是一些常见的例子:

  1. 提高网络灵活性:通过将设备划分为不同的组,可以帮助用户将设备进行更细粒度的管理,并在需要时快速重新配置整个组。用户可以自由地加入或退出不同的组,并且可以随时更改组配置。

  2. 增强安全性:Mesh网络中的每个组都具有唯一的组ID,这使得设备之间的通信变得更加安全和可靠。只有拥有正确组ID的设备才能接收和发送特定组的消息,从而确保了网络通信的安全性和私密性。

  3. 提供灵活的控制和路由:通过组的方式,用户可以选择不同结点以及元素来完成各种灵活的控制和路由任务。Mesh节点可以充当原始设备、终端设备或路由设备,根据当前需要和部署条件,可在任意时刻进行调整.

  4. 降低通信延迟:通过限制数据包在网络上传播的距离并提高路由效率,组网可以降低通信延迟,从而增加 Mesh网络的响应速度。在广大的 IoT应用中具有特别重要的相关性能提升.

  5. 高度可扩展性:通过组的方式,Mesh网络可以轻松地添加新设备或扩展到更大的范围,无需重新整个网路拓扑结构进行重组或多次加入或移除单个节点。只需要确定设备的组归属属性,就能快速配备全部 Mesh 网络。

总之,组是构建 Mesh 网络的重要工具,它们可以使网络更加灵活、更易于管理和控制,并允许节点按照不同的类别和应用场景对数据包进行更有针对性的传输和路由,从而提供更高效、更安全、更健壮的物联网方案。

5.2 Mesh的设备节点

5.2.1 节点介绍

节点(Node)是Mesh网络中的一个基本单元,它是组成Mesh网络的设备或者板子,能够支持Mesh网络协议,并与其他节点互相通信和协同工作。节点可以充当原始设备、终端设备或路由设备。每个节点都有一个唯一的6字节地址(unicast address),用于标识节点在网络中的位置和身份。

一个蓝牙设备(如插座)在没有加网前被称为Unprovisioned Device. 启动配置设备(Provisioner)通过Provisioning蓝牙设备 完成认证, 创建网络密钥, 蓝牙设备成为未配置的蓝牙节点(Node).

在这里插入图片描述

未配置好的节点是不能做任何事情的, Provisioner再进行节点配置 绑定应用层和网络层密钥, 设置模型的发布/订阅等. 完成上述动作后蓝牙设备(Device)成为蓝牙Mesh网络里的功能节点(Node)

在这里插入图片描述

  • 如果一个设备成为了蓝牙 mesh 网络的一部分,我们就把它叫做节点(node)。反之,我们就把它叫做“未配网的设备”(unprovisioned devices)。把未配网的设备变成节点的过程我们把它叫做 “配网”(provisioning)。配网过程会给设备分配net key和device key。

  • net key:network key在配网阶段由配网者分配给node,用于mesh网络层的消息解析,解析失败消息直接丢弃

  • device key:在配网阶段分配。只有节点自己和provisioner会持有。用于configuration消息解析(例如:绑定appkey,设置订阅地址,设置发布地址)

  • app key:在配网完成后的configuration阶段分配,用于upper transport层的接入消息解析

5.2.2 四种节点特性

在Mesh网络中,常见的四种节点特性包括:

  1. Relay(中继)节点:Relay节点是Mesh网络中最常见的节点类型之一,它可以接收、处理和转发消息,并与其他Relay节点一起充当信息传输的重要中转站,帮助扩展消息传输范围和距离,提高网络的信号覆盖和可靠性。

  2. Proxy(代理)节点:Proxy节点通常用于连接异构网络、管理多个虚拟子网或进行远程控制。Proxy节点可以在Mesh网络内外建立安全连接,并对访问该网络的设备进行身份验证和授权,从而保证了网络数据的安全性和隐私性。

  3. Friend(朋友)节点:Friend节点也是一种重要的节点类型,在Mesh网络中能够与低功耗节点建立有效的通信链接,并提供数据缓存、转发和发送功能,帮助低功耗节点实现长时间的待机模式,延长电池使用寿命,并极大地缩短网络恢复时间。

  4. LPN(低功耗)节点:LPN节点是指低功耗无线设备,通常用于IoT场景中需要长时间运行、稳定工作的设备上。LPN节点采用低功耗技术,能够延长设备使用寿命,在Mesh网络中具有较小的功耗、更高的可靠性和灵活性。

这四种节点类型在Mesh网络中具有不同的功能和特性,但它们都是构成Mesh网络的重要组成部分。通过合理地设计和分配节点类型,可以使Mesh网络实现更有效和高效的数据传输,同时也能够优化设备的配置、降低维护成本,并提高网络的安全性和稳定性。

可以举例说明Mesh网络中四种节点类型的各自应用场景:

  1. Relay(中继)节点:在家庭物联网应用中,Relay节点经常用于扩展无线局域网的信号覆盖范围和传输距离,如路由器和智能家居设备之间的通信。在工业和城市管道等现场监控应用中,Relay节点也可以作为分布式传感器和执行器之间的数据中转站,实现信息采集、处理和远程控制。

  2. Proxy(代理)节点:Proxy节点通常用于提供安全、可靠和高效的外部连接功能,连接Mesh网络和Internet,或与其他网络互联。这种节点特别适用于企业、政府、医疗机构等需要保护数据隐私和信息安全的应用中,如数据监测、电子商务、远程健康管理等应用。

  3. Friend(朋友)节点:Friend节点常用于连接低功率消耗设备,帮助它们减少耗电量并延长电池使用寿命。例如,在智能家居、健康医疗和工业设备监控等应用场景中,Friend节点可以作为嵌入式设备和传感器之间的中转站,提供数据存储和转发服务,并帮助控制设备的功耗和资源占用。

  4. LPN(低功耗)节点:LPN节点通常用于许多能源保护环境下需要长时间工作的物联网应用场景,如气象观测、农业生产、城市交通、基础设施管理等。这种节点可以采用低功耗模式,保证在连接网络时减少电源耗电量。同时,高效的端到端传输机制可以确保数据的高可靠性,使得网格网络在广泛的应用领域有重要的价值。

5.2 Mesh的元素

元素(Element)是一个实际物理上的设备或者板子,它可以包含多个服务(Service),而每个服务可以包含多个特性(Characteristic)。元素是使用Mesh进行通信的最小单元,每个元素都有一个唯一的 16 位元素名称(element name),类似于命名空间,在整个 Mesh网络中为节点、服务和特性提供了一种机制。元素可以被认为是在其节点内部承载服务和特性的设备。

因此,在Mesh网络中,节点是网络的最基本单位,而组和元素则用于在节点之间建立逻辑关系,并使他们能够实现相互沟通和协作。节点可以拥有多个元素和组,这些元素和组可用于为该节点提供不同的功能和应用场景。

一个节点可以包含1个或多个元素(Elements), 比如一个双孔插座板, 每个插孔就是一个元素.

在这里插入图片描述

  • 每个元素在加网的过程会被分配唯一的单播地址(Unicast Address), 地址范围是0x0001-0x7FFF.

  • 还有一个组播地址(Group Address)就是前面讲到的发布/订阅机制里的厨房, 花园等. 元素订阅特定的组播地址, 就会收到发布者发送到此地址的消息. 组播地址范围0xC000-0xFEFF.

  • 还有虚拟地址(Virtual Address), 每一个虚拟地址逻辑上对应一个128-bit的Label UUID. 通过对该Label UUID作哈希运算得出虚拟地址的低14位数值. 虚拟地址的范围为0x8000-0xBFFF.

5.3 模型

模型(Models)顾名思义就是定义了基本功能的最小单位模型, 比如设备的开关 灯光亮度调节等 模型包含了三个部分:

在这里插入图片描述

  • 状态(State)表明一个元素的当前状态. 比如灯泡中包含开关和亮度的状态值. 不同状态可以设置为绑定关系(Bound State). 比如灯泡亮度为非零值时, 开关状态应该是开. 而灯泡亮度调整到0的时候, 其开关状态也应该被设置为关闭.

  • 消息(Message)有SET/GET/STATUS三种类型, 分别用来设置请求发送状态值.

  • 行为(Behavior)定义了模型在接收到消息后所作的动作行为. 比如开关模型定义的行为就是在收到了SET的消息后, On/Off的状态就要变为SET消息里给定的值. 如果收到了GET消息那么就把On/Off的状态通过STATUS消息传给询问方.

蓝牙Mesh的消息通信是基于服务器/客户端的架构, 对外提供状态访问接口的叫做服务器(server), 而来访问服务器端状态的叫做客户端(client). 模型分为三种:

  • 服务器模型(Server model): 定义了一个包括状态,绑定状态和消息的集合. 比如灯包含有通用开关服务器模型(Generic OnOff Server) 和灯亮度服务器模型(Light Lightness Server).

  • 客户端模型(Client model): 定义了一群消息用来请求改变服务器端的状态. 客户端模型不含有状态(State). 比如开关中含有通用开关客户端模型(Generic OnOff Client)以及灯亮度客户端模型(Light Lightness Client).

  • 控制模型(Control model): 可以包含上述两种模型的功能

目前SIG定义好的模型包括Generic, Sensors, Time and Scenes, Lighting. 客户产品如果不在列表的话可以定义Vendor Model来实现相应的功能.

在蓝牙技术中,Vendor和Generic是两种不同类型的模型,它们有以下不同:

  • Vendor model:这是由特定厂商为其产品开发的专有模型。厂商可以根据自己的需求来定义该模型,以满足产品的特殊功能要求。因此,每个Vendor model都是独特的,只能被相应制造商的设备所识别和使用。

  • Generic model:相比之下,Generic model则是通用的、普适性强的蓝牙模型,任何符合规范的设备都能识别和使用。Generic model通常涉及一些标准或已定制的操作属性,内置了一些通用的数据类型,在进行数据交换时更加方便和灵活。

总之,Vendor model是特定设备生产商为满足其产品特殊需求而开发的专用模型,而Generic model是一个通用的、可适用于各种设备的蓝牙模型。

为了方便理解, 图中是灯和开关的模型简化意图

左边灯的元素中含有通用开关(Generic OnOff)和灯的亮度(Light Lightness)服务器模型, 分别包含通用开关(Generic OnOff)和灯亮度(Light Lightness Actual)状态. 两个状态是绑定状态关系.

右边开关设备元素中包含了通用开关(Generic OnOff)和灯亮度(Light Lightness)客户端模型. 通过消息来获知设置服务器端元素的状态. 客户端模型不含有状态.

6. Mesh的网络拓扑

Mesh网络的网络拓扑结构是分布式的、网状的,不像传统的星形或总线结构。Mesh网络通常由大量的节点组成,在节点之间建立连接,形成一个复杂的网格。Mesh网络中的每个节点都可以直接和多个相邻节点进行通信和数据交换,也可以通过其他节点作为中继站来实现多跳传输。

在Mesh网络中,有两种常见的拓扑结构:全网Mesh和部分Mesh。全网Mesh是一种所有节点彼此直接相连的Mesh网络结构,适用于小型网络环境。部分Mesh则是一种随机的、大规模的Mesh网络结构,其中只有一部分节点能彼此直接通信,而其他节点之间需要经过多次跳转才能互相交流。这种拓扑结构具有较高的伸缩性和鲁棒性,可以适应大规模网络环境。

除了全网Mesh和部分Mesh,还有一些其他的Mesh拓扑结构,如混合Mesh、层级Mesh等。这些不同的Mesh拓扑结构根据具体的应用场景和需求选择和设计,旨在提供更好的网络覆盖和信号质量,同时还要考虑网络的安全性、可靠性和延迟等因素。

总之,Mesh网络的拓扑结构是分布式、网状的,具有高度互联性和弹性。通过合理设计网络节点和连接方式,可以让Mesh网络成为能够适应各种应用环境和场景的一种重要通信技术。
在这里插入图片描述

节点之间的连线表示无线信号覆盖范围内的直接连接, 对无线信号覆盖范围外的节点之间的通信需要经过中继节点. 如图中的Q,R,S进行消息转发到达目的节点. 图中有3个好友节点, 其中节点P和O分别有3个和2个低功耗节点组合, 好友节点N没有低功耗节点组合. 节点T是BLE设备, 通过GATT Bearer方式和代理中继节点S进行通信, 节点S必须转发所有和节点T的消息传输. 比如BLE节点T要发送消息给低功耗节点L. 首先节点T通过GATT Bearer在数据信道发消息给节点S, 然后节点S通过Advertising Bearer方式在广播信道转发消息. 节点H,R,O,N都在其无线信号覆盖范围并接收到消息, 节点O作为低功耗节点L的好友会储存收到的消息, 在节点L从睡眠中醒来后会查询好友节点O来取得这个发送给它的消息并做相应的处理.

7. Mesh的系统架构

蓝牙mesh的协议栈是层级结构

在这里插入图片描述

  • 最低层就是BLE层, 就像一开始介绍的蓝牙mesh建立在BLE物理层和链路层之上, 采用Advertising和Connection两种数据传输方式.

  • 承载层(Bearer Layer)把BLE层的数据抽象并供上层使用. 目前定义了两种承载: 广播承载和GATT承载. 分别对应BLE的Advertising和Connection方式.

  • 网络层(Network Layer)负责基于地址的消息传输. 实现中继和代理特性以及对信息进行网络层加解密和认证行为.

  • 底层传输层(Lower Transport Layer)负责将数据分段和重组.

  • 上层传输层(Upper Transport Layer)负责应用层信息数据的加密, 解密和认证. 它还定义了节点间传输控制信息, 包括了朋友特性的应用实现.

  • 接入层(Access Layer)负责定义应用数据的格式. 定义并控制应用数据在上层传输层的加密解密的过程. 它确保从下层接收到的数据是正确的并传输到更高层的应用.

  • 基础模型层(Foundation Model Layer)负责定了状态, 消息, 模型等, 实现mesh网络的配置.

  • 模型层(Model Layer)负责标准化用户应用场景的实例, 比如灯模型, 传感器模型等.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/661602.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MachXO2系列 FPGA LCMXO2-7000HC-4TG144C-可编程逻辑器件介绍

莱迪思深力科MachXO2系列LCMXO2-7000HC-4TG144C是高度可配置的串行逻辑器件(PLD),具有低误差,具有和高系统集成等特性。MachXO2系列逻辑密度增加了3倍,嵌入存储增加了10倍,静态降低100倍,而成本…

动态获取项目根目录的两种方式

说明:如果项目上传的文件是存储在本地的,为了项目可以在其他电脑上也可能正常运行,可以将文件上传至项目的static文件夹里,并将文件路径保存至数据库中,前端显示时使用也可以通过该路径访问。要想获取到本地项目static…

如何评估大型语言模型(LLM)?

编者按:近期几乎每隔一段时间,就有新的大语言模型发布,但是当下仍然没有一个通用的标准来评估这些大型语言模型的质量,我们急需一个可靠的、综合的LLM评估框架。 本文说明了为什么我们需要一个全面的大模型评估框架,并…

DOCker安装(一)

DOCker的安装 1、简介 Docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器。 Docker容器通过Docker镜像来创建。 容器之间互不干扰 容器与镜像的关系类似于面向对象编程中的对象与类。 对象->容器 镜像->类 通过镜像来创建容器 …

如何用MarkDown轻松排版和格式化文档?

前言 大家好哦!我写作用的语言是MarkDown,真的非常好用,在本文中我将一字字的教你如何使用这个轻量化,容易上手的轻标记语言。 1. 什么是MarkDown MarkDown是一种轻量级的标记语言,它可以在文本中通过简单的标记实现…

基于Java+SpringBoot+Vue+uniapp微信小程序实现仓储管理系统

博主介绍:✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

OpenHarmony端云一体化应用开发快速入门练习(上)基础配置

一 、整体说明 SDK版本更新说明 二、开发流程 集成SDK (一)前提条件 安装HUAWEI DevEco Studio 3.1及以上版本,配置 SDK API Version 9及以上,Compile SDK Version 9及以上,Compatible SDK Version 9及以上。 &#…

mpi实现矩阵乘法,卷积,池化(gemm,covn,pooling)

矩阵乘法: 卷积: 池化: Mpi基本原理: 1.什么是MPI Massage Passing Interface:是消息传递函数库的标准规范,由MPI论坛开发。 一种新的库描述,不是一种语言。共有上百个函数调用接口,提供与C和F…

【Rust日报】2023-06-16 Rust在Stack Overflow上连续8年成为最受欢迎语言(文末有彩蛋)...

推荐23个Rust Top开源项目 根据LibHunt网站Rust主题下有关统计,这里列出前5个Rust Top开源项目:deno、rust、tauri、alacritty、rustdesk。 阅读更多:Top 23 Rust Open-Source Projects https://www.libhunt.com/topic/rust Tweets&#xff1…

微信小程序触底加载scroll-view

微信小程序触底加载 scroll-view 了解什么是触底加载? 需求:有个固定高度的容器,实现容器里面的内容触底加载 1、内容盒子的高度 2、盒子里内容的总高度 3、滚动条的scrollTop 触底加载的原理就是 当里面的容器触底的时候进行分页&#xff0…

【题解】[ABC306G] Return to 1(数论)

【题解】[ABC306G] Return to 1 题目链接 ABC306G - Return to 1 题意概述 本题多测,\(T\) 组数据。 对于每组数据,给定一个 \(n\) 个点 \(m\) 条边的有向图,无重边自环。 问从顶点 \(1\) 出发,能否恰好走 \({10^{10}}^{100}\) 步…

【八大排序(七)】归并排序初级篇-递归版

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:八大排序专栏⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习排序知识   🔝🔝 归并排序 1. 前言2. 归并排序基本思路3. …

在数组中各位置上计算该位置以前所有元素的累加结果(Nan值视为0)numpy.nancumsum()

【小白从小学Python、C、Java】 【等级考试500强双证书考研】 【Python-数据分析】 在数组中各位置上计算该位置以前 所有元素的累加结果(Nan值视为0) numpy.nancumsum() [太阳]选择题 以下说法错误的是: import numpy as np a np.array([[n…

使用兮克 2.5G 交换机将北京联通 EPON 改为 ODI 猫棒接入

使用兮克 2.5G 交换机将北京联通 EPON 改为 ODI 猫棒接入 最近入手了兮克2.5G交换机(兮克SKS1200-8GPY1XF),有 8 个 2.5G 电口和 1 个 10G SFP 光口;支持多种组网模式,其中一种是支持使用猫棒接入,由路由器…

聊聊微服务到底该如何划分

背景 现在动不动就是微服务架构,但是微服务划分的合理与否会极大的影响开发过程中的复杂度,划分的重要性不言而喻,但是在微服务划分这条路上并没有银弹,有的说DDD可以解决微服务的划分问题,吕哥想说的是那只是理论上的…

Linux常用命令——gcc命令

在线Linux命令查询工具 gcc 基于C/C的编译器 补充说明 gcc命令使用GNU推出的基于C/C的编译器,是开放源代码领域应用最广泛的编译器,具有功能强大,编译代码支持性能优化等特点。现在很多程序员都应用GCC,怎样才能更好的应用GCC…

Linux---上传和下载、压缩和解压

1. 上传下载 可以通过FinalShell工具,方便的和虚拟机进行数据交换。 在FinalShell软件的下方窗体中,提供了Linux的文件系统视图,可以方便的: 浏览文件系统,找到合适的文件,右键点击下载,即可…

STL中set与map介绍

目录 一. 键值对1. 关联式容器2. pair3. 应用场景 二. set1. set的介绍2. set的使用3. multiset的介绍 三. map1. map的介绍2. map的使用3. multimap的介绍 一. 键值对 ​ 用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value。key代表键…

Draw.io 高阶用法

drawio是一款非常不错画流程图的软件,而且是免费的,但大部分图形以2D为主,有时候 却需要一些3D效果来增强方案 举个例子: 需要变成这样,看起来更3D 方法: 先拖入一个圆形,把限制比例去掉&a…

【C数据结构】队列_Queue

目录 队列_Queue 【1】队列的概念及结构 【2】节点队列的实现 【2.1】队列的各个接口 【2.2】队列的初始化 【2.3】队列栈的释放 【2.4】队尾入队列 【2.5】队头出队列 【2.6】获取队列头部元素 【2.7】获取队列尾部元素 【2.8】获取队列中有效元素个数 【2.9】检测…