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

【0x06】HCI_Authentication_Complete事件详解

目录

一、事件概述

二、事件格式及参数

2.1. HCI_Authentication_Complete事件格式

2.2. Status

2.3. Connection_Handle

三、事件的生成于处理

3.1. 事件生成

3.2. 认证流程

3.2.1. 发送认证请求

3.2.2. 处理流程

3.2.3. 示例代码

四、应用场景

4.1. 设备配对与连接场景

4.2. 高安全需求服务访问场景

4.3. 多设备互联场景

五、注意事项

5.1. 认证状态检查

5.2. 连接句柄的准确性

5.3. 资源管理

5.4. 异常处理和重试机制

5.5. 注意事项


在蓝牙通信中,安全是一个至关重要的因素。为了确保连接的安全性,蓝牙设备之间通常会进行认证操作。HCI_Authentication_Complete 事件就是用于告知认证发起方,特定连接的认证流程已经结束。这使得发起方能够根据认证结果来决定后续的连接操作,从而保障蓝牙通信的安全性。

一、事件概述

HCI_Authentication_Complete事件在指定连接的认证过程完成后发生,事件代码为 0x06。此事件中的Connection_Handle是指向一个ACL(Asynchronous Connection-Less)连接的句柄。值得注意的是,此事件仅在认证的发起者端生成,而不会在响应者端生成。

二、事件格式及参数

2.1. HCI_Authentication_Complete事件格式

HCI_Authentication_Complete事件的格式遵循蓝牙核心规范中定义的HCI事件格式。

事件格式主要由事件代码(Event Code)和事件参数(Event Parameters)两部分组成。

  • 事件头
    • HCI_type:1字节,表示该数据包为事件包,固定值为0x04。
    • Event_Code:1字节,表示事件的类型,对于HCI_Authentication_Complete事件,其值为0x06。
  • 事件参数:包括 Status 和 Connection_Handle 两个参数。
    • Status:表示认证的结果状态。
    • Connection_Handle:用于唯一标识一个 ACL 连接,通过它可以定位到刚刚完成认证的连接。

2.2. Status

Status 参数用于明确表示认证请求的完成状态。这是一个关键参数,因为它直接决定了后续连接建立过程是继续进行还是终止,并采取相应的措施。

  • 0x00:表示认证请求已经成功完成。意味着认证过程顺利通过,设备之间的身份验证得到认可。在这种情况下,连接建立过程通常会继续进行,例如,设备可能会开始协商连接参数,如传输速率、数据包大小等,为后续的数据传输做好准备。
  • 0x01 - 0xFF:取值范围从 0x01 到 0xFF 表示认证请求未能成功完成。这个范围内的不同值对应着不同的错误原因,具体的错误代码和描述可以参考 [Vol 1] Part F(《蓝牙核心规范》第 1 卷 F 部分)中的 Controller Error Codes(控制器错误代码)。蓝牙Controller错误代码全面概览_connection rejected due to limited resources-CSDN博客

2.3. Connection_Handle

Connection_Handle 在蓝牙通信中用于唯一标识ACL连接的关键参数。通过正确地解析和使用这个参数,可以确保蓝牙设备之间的通信顺畅无阻。

  • 有效位:尽管 Connection_Handle 占据了2个字节的空间,但根据蓝牙核心规范,只有其中的低12位是有效的,用于唯一标识一个ACL连接。
  • 值范围Connection_Handle 的值范围从 0x0000 到 0x0EFF(十六进制表示),这对应于十进制的0到3839。由于只有12位有效,因此最大的有效值是 0x0EFF(即 2^12 - 1
  • 用途:在后续的HCI命令和数据包中,可以使用这个 Connection_Handle 来指定要操作的具体连接。例如,在发送数据、更改连接参数或断开连接时,都需要用到这个句柄。

三、事件的生成于处理

HCI_Authentication_Complete 事件是Bluetooth协议栈中用于指示链路层(Link Layer)认证过程完成的事件。这个事件在蓝牙设备之间的安全连接建立过程中非常重要。

3.1. 事件生成

HCI_Authentication_Complete 事件由蓝牙硬件控制器生成,并在以下情况下被触发:

  • 设备配对:当两个蓝牙设备尝试建立安全连接并进行配对时,会进行认证过程。
  • 重新连接:已经配对过的设备在重新连接时,根据配置可能需要重新进行认证。

认证过程通常涉及交换一些认证信息,如链路密钥(Link Key),以验证设备的身份。一旦认证成功或失败,HCI会生成一个 HCI_Authentication_Complete 事件来通知主机(Host)认证的结果。

3.2. 认证流程

3.2.1. 发送认证请求

主机通过发送HCI_Authentication_Requested命令来请求对远端设备进行认证。该命令包含了要认证的连接的连接句柄(Connection_Handle),用于指定哪个连接需要进行认证。

3.2.2. 处理流程

当主机(Host)接收到 HCI_Authentication_Complete 事件时,会进行以下处理:

  • 解析事件:首先解析事件的各个字段,获取连接句柄和认证状态。
  • 状态检查
    • 如果状态为成功(0x00),则表明认证过程完成,设备间可以安全通信。
    • 如果状态为失败,则需要根据具体的失败原因采取适当的措施,如重新尝试认证、断开连接或通知用户。
  • 后续操作
    • 如果认证成功,可以继续进行其他安全相关的操作,如加密(Encryption)过程。
    • 如果认证失败,可能需要记录日志、通知应用程序或用户,并根据需要决定是否重试或放弃连接。

3.2.3. 示例代码

以下是一个简化的伪代码示例,展示了如何处理 HCI_Authentication_Complete 事件:

void handleHCIAuthenticationCompleteEvent(uint8_t* eventBuffer, uint16_t eventLength) {uint8_t eventCode = eventBuffer[0];uint16_t connectionHandle = (eventBuffer[1] << 8) | eventBuffer[2];uint8_t status = eventBuffer[3];if (eventCode == HCI_EVENT_AUTHENTICATION_COMPLETE) {if (status == 0x00) {// 认证成功printf("Authentication successful for connection handle: %04X\n", connectionHandle);// 进行后续的安全操作,如加密} else {// 认证失败printf("Authentication failed for connection handle: %04X, Status: %02X\n", connectionHandle, status);// 根据失败原因采取相应措施}} else {// 处理其他事件}
}

四、应用场景

4.1. 设备配对与连接场景

  • 初次配对
    • 场景描述:如用户首次将蓝牙耳机与手机配对,双方会进行认证过程。
    • 事件作用:手机收到HCI_Authentication_Complete事件后,根据认证结果决定是否继续建立连接。
    • 后续操作:认证成功则建立音频连接,失败则提示用户配对失败原因。
  • 已配对设备重新连接
    • 场景描述:已配对的蓝牙设备(如手机和蓝牙手环)在重新建立连接时,会进行认证。
    • 事件作用:手机根据HCI_Authentication_Complete事件中的Status参数判断连接是否成功。
    • 后续操作:成功则同步数据,失败则尝试解决问题,如检查连接设置或更新固件。

4.2. 高安全需求服务访问场景

  • 移动支付
    • 场景描述:蓝牙移动支付设备(如支付终端与手机)连接过程中,认证至关重要。
    • 事件作用:手机收到认证成功事件后,才允许后续的支付操作数据传输。
    • 后续操作:认证失败则立即终止交易,保障支付安全。
  • 医疗设备数据传输
    • 场景描述:蓝牙医疗设备(如血糖仪与手机健康管理应用)需要确保数据传输的安全性。
    • 事件作用:手机收到认证成功事件后,才接收和存储医疗设备数据。
    • 后续操作:认证失败则不接收数据,防止错误或未经授权数据进入系统。

4.3. 多设备互联场景

  • 智能家居系统
    • 场景描述:智能家居环境中,多个蓝牙设备与中枢相互连接。
    • 事件作用:中枢收到HCI_Authentication_Complete事件后,根据认证结果允许或拒绝设备访问。
    • 后续操作:如智能门锁认证成功后,允许用户远程控制门锁;认证失败则发出警报或提示。
  • 车载蓝牙系统
    • 场景描述:车载蓝牙系统与多种设备(如手机、智能手表)连接。
    • 事件作用:车载蓝牙收到认证成功事件后,实现相应功能。
    • 后续操作:如通过手机播放音乐、在智能手表上显示车辆信息等;认证失败则提醒用户重新连接或检查兼容性。

五、注意事项

在处理蓝牙通信中的HCI_Authentication_Complete事件时,以下是一系列重要的注意事项和流程梳理,以确保认证过程的准确性和安全性。

5.1. 认证状态检查

  • 准确判断Status参数
    • Status = 0x00 表示认证成功。
    • Status 在 0x01 至 0xFF 之间表示认证失败,需参考蓝牙核心规范(Vol 1, Part F)中的Controller Error Codes来确定具体失败原因。
  • 避免误判:误判可能导致数据泄露或连接中断,需严格根据Status值进行判断。

5.2. 连接句柄的准确性

  • 正确使用Connection_Handle参数
    • Connection_Handle唯一标识ACL连接,需确保其准确性。
    • 避免设备混淆连接状态,特别是在多设备连接场景下。
  • 确保范围与映射正确:Connection_Handle应在 0x0000 至 0x0EFF 范围内,并正确映射到相应连接。

5.3. 资源管理

  • 认证成功时的资源分配
    • 合理分配后续连接所需的资源,如内存、数据传输通道等。
    • 确保资源分配的及时性和完整性,避免影响连接性能和用户体验。
  • 认证失败时的资源清理:彻底清除与失败连接尝试相关的资源,防止资源泄漏。

5.4. 异常处理和重试机制

  • 异常情况处理
    • 考虑丢失参数或接收不完整事件的情况,设置异常处理程序。
    • 对于认证失败,设置合理的重试次数和间隔,避免资源浪费。
  • 兼容性和互操作性问题
    • 考虑不同设备和协议版本的差异,确保正确处理事件。
    • 在跨平台设备连接时,遵循相同的事件处理标准。

5.5. 注意事项

  • 认证失败处理:控制器不会自动断开连接,主机需决定是否继续尝试或断开连接。
  • 安全简单配对模式:启用时,认证过程可能涉及更多交互和复杂流程。
  • 事件解析:主机需正确解析事件中的参数信息来判断认证结果。

综上所述,HCI_Authentication_Complete事件是蓝牙通信中的一个重要事件,它标志着指定连接的认证过程已经完成。通过检查Status参数的值,主机可以确定认证是否成功,并据此进行后续操作或错误处理。此事件只在认证的发起者端生成,因此响应者端需要通过其他机制来确定认证状态。

相关文章:

【0x06】HCI_Authentication_Complete事件详解

目录 一、事件概述 二、事件格式及参数 2.1. HCI_Authentication_Complete事件格式 2.2. Status 2.3. Connection_Handle 三、事件的生成于处理 3.1. 事件生成 3.2. 认证流程 3.2.1. 发送认证请求 3.2.2. 处理流程 3.2.3. 示例代码 四、应用场景 4.1. 设备配对与连…...

JS-Web API -day03

一、事件流 1.1 事件流与两个阶段说明 事件流 指的是事件完整执行过程中的流动路径 假设页面有个div标签&#xff0c;当触发事件时&#xff0c;会经历两个阶段&#xff0c;分别是捕获阶段、冒泡阶段 捕获阶段&#xff1a;Document - Element html - Elementbody - Element div…...

电子应用设计方案103:智能家庭AI浴缸系统设计

智能家庭 AI 浴缸系统设计 一、引言 智能家庭 AI 浴缸系统旨在为用户提供更加舒适、便捷和个性化的沐浴体验&#xff0c;融合了人工智能技术和先进的水疗功能。 二、系统概述 1. 系统目标 - 实现水温、水位和水流的精确控制。 - 提供多种按摩模式和水疗功能。 - 具备智能清洁…...

linux静态库+嵌套makefile

linux静态库嵌套makefile 文章目录 linux静态库嵌套makefile1、概述2、代码结构3、代码1&#xff09;main.c2&#xff09;主makefile3&#xff09;fun.c4&#xff09;func.h5&#xff09;静态库makefile 4、运行效果1&#xff09;在main.c目录下执行make2&#xff09;到output目…...

AIP-127 HTTP和gRPC转码

编号127原文链接AIP-127: HTTP and gRPC Transcoding状态批准创建日期2019-08-22更新日期2019-08-22 遵守面向资源设计的API使用RPC进行定义&#xff0c;但面向资源设计框架允许这些API表现为整体上符合REST/JSON约定的接口。这一点很重要&#xff0c;可以帮助开发者利用现有知…...

代码随想录算法训练营day32

代码随想录算法训练营 —day32 文章目录 代码随想录算法训练营前言一、动态规划理论基础二、509. 斐波那契数动态规划动态规划优化空间版递归法 三、70. 爬楼梯动态规划动态规划空间优化 746. 使用最小花费爬楼梯动态规划空间优化 总结 前言 今天是算法营的第32天&#xff0c…...

设计模式的艺术-开闭原则

原则使用频率图&#xff08;仅供参考&#xff09; 1.如何理解开闭原则 简单来说&#xff0c;开闭原则指的是 “对扩展开放&#xff0c;对修改关闭”。 当软件系统需要增加新的功能时&#xff0c;应该通过扩展现有代码的方式来实现&#xff0c;而不是去修改已有的代码。 例如我…...

【易康eCognition实验教程】003:点云数据加载浏览与操作详解

文章目录 一、加载并创建点云数据二、三维浏览1. 点云模式2. 点云视图设置 三、使用点云 一、加载并创建点云数据 本实验点云数据位于专栏配套实验数据包中的data003.rar中的terrian.las&#xff0c;解压后进行以下实验操作。 打开ecognition软件&#xff0c;点击【File】→【…...

海外雅思备考经验

1.18号斯图雅思考试 第一次考雅思&#xff0c;第一次在国外考雅思&#xff01; 最近在德国斯图加特联培&#xff0c;报考了1月18号的雅思机考&#xff0c;下面分享一些考试经验. ✌️考试地点 EZ Plus WEST Hasenbergstr. 31/1,, in the backyard of Hasenbergstrae 31, Stuttg…...

Oracle之Merge into函数使用

Merge into函数为Oracle 9i添加的语法&#xff0c;用来合并update和insert语句。所以也经常用于update语句的查询优化&#xff1a; 一、语法格式&#xff1a; merge into A using B on (A.a B.a) --注意on后面带括号&#xff0c;且不能更新join的字段 when matched then upd…...

Spring Boot 自定义属性

Spring Boot 自定义属性 在 Spring Boot 应用程序中&#xff0c;application.yml 是一个常用的配置文件格式。它允许我们以层次化的方式组织配置信息&#xff0c;并且比传统的 .properties 文件更加直观。 本文将介绍如何在 Spring Boot 中读取和使用 application.yml 中的配…...

前端面试题-问答篇-5万字!

1. 请描述CSS中的层叠&#xff08;Cascade&#xff09;和继承&#xff08;Inheritance&#xff09;规则&#xff0c;以及它们在实际开发中的应用。 在CSS中&#xff0c;层叠&#xff08;Cascade&#xff09;和继承&#xff08;Inheritance&#xff09;是两个关键的规则&#x…...

2025年1月21日(树莓派点亮呼吸灯第一次修改)

系统信息&#xff1a; Raspberry Pi Zero 2W 系统版本&#xff1a; 2024-10-22-raspios-bullseye-armhf Python 版本&#xff1a;Python 3.9.2 已安装 pip3 支持拍摄 1080p 30 (1092*1080), 720p 60 (1280*720), 60/90 (640*480) 已安装 vim 已安装 git 学习目标&#xff1a;…...

【Linux网络编程】传输层协议

目录 一&#xff0c;传输层的介绍 二&#xff0c;UDP协议 2-1&#xff0c;UDP的特点 2-2&#xff0c;UDP协议端格式 三&#xff0c;TCP协议 3-1&#xff0c;TCP报文格式 3-2&#xff0c;TCP三次握手 3-3&#xff0c;TCP四次挥手 3-4&#xff0c;滑动窗口 3-5&#xf…...

JavaScript系列(41)--状态管理实现详解

JavaScript状态管理实现详解 &#x1f504; 今天&#xff0c;让我们深入探讨JavaScript的状态管理实现。状态管理是现代前端应用中的核心概念&#xff0c;它帮助我们有效地管理和同步应用数据。 状态管理基础概念 &#x1f31f; &#x1f4a1; 小知识&#xff1a;状态管理是一…...

flume和kafka整合 flume和kafka为什么一起用?

‌Flume和Kafka一起使用的主要原因是为了实现高效、可靠的数据采集和实时处理。‌‌12 实时流式日志处理的需求 Flume和Kafka结合使用的主要目的是为了完成实时流式的日志处理。Flume负责数据的采集和传输,而Kafka则作为消息缓存队列,能够有效地缓冲数据,防止数据堆积或丢…...

【深度学习】 自动微分

自动微分 正如上节所说&#xff0c;求导是几乎所有深度学习优化算法的关键步骤。 虽然求导的计算很简单&#xff0c;只需要一些基本的微积分。 但对于复杂的模型&#xff0c;手工进行更新是一件很痛苦的事情&#xff08;而且经常容易出错&#xff09;。 深度学习框架通过自动…...

什么是三高架构?

大家好&#xff0c;我是锋哥。今天分享关于【什么是三高架构?】面试题。希望对大家有帮助&#xff1b; 什么是三高架构? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 “三高架构”通常是指高可用性&#xff08;High Availability&#xff09;、高性能&#xff…...

IOS 自定义代理协议Delegate

QuestionViewCell.h文件代码&#xff0c;定义代理协议 protocol QuestionViewCellDelegate <NSObject>- (void)cellIsOpenDidChangeAtIndexPath:(NSIndexPath *)indexPath;endinterface QuestionViewCell : UITableViewCellproperty (nonatomic, weak) id<QuestionVi…...

【flutter版本升级】【Nativeshell适配】nativeshell需要做哪些更改

flutter 从3.13.9 升级&#xff1a;3.27.2 nativeshell组合库中的 1、nativeshell_build库替换为github上的最新代码 可以解决两个问题&#xff1a; 一个是arg("--ExtraFrontEndOptions--no-sound-null-safety") 在新版flutter中这个构建参数不支持了导致的build错误…...

C#编程:List.ForEach与foreach循环的深度对比

在C#中&#xff0c;List<T>.ForEach 方法和传统的 foreach 循环都用于遍历列表中的元素并对每个元素执行操作&#xff0c;但它们之间有一些关键的区别。 List<T>.ForEach 方法 方法签名&#xff1a;public void ForEach(Action<T> action)类型&#xff1a;…...

leetcode_2762. 不间断子数组

2762. 不间断子数组 - 力扣&#xff08;LeetCode&#xff09; 运用滑动窗口和multise(平衡二叉树实现) 符合条件 右窗口向右扩展 不符合条件 左窗口向左扩展 class Solution { public:long long continuousSubarrays(vector<int>& nums) {int max, min; //表示窗…...

Java学习教程,从入门到精通,JDBC创建数据库语法知识点及案例代码(99)

JDBC创建数据库语法知识点及案例代码 一、JDBC创建数据库语法 在JDBC中&#xff0c;创建数据库主要通过执行SQL语句来实现。其基本语法如下&#xff1a; CREATE DATABASE database_name;CREATE DATABASE 是固定的SQL语句关键字&#xff0c;用于指定创建数据库的操作。databa…...

进阶——第十六届蓝桥杯(sscanf的运用)

声明变量 char tx_buf[30];char rx_buf[30];char car_type[5];char car_num[5];char car_time[15]; int sscanf(const char *str, const char *format,...); sscanf函数功能 sscanf 函数从字符串 str 中读取数据&#xff0c;根据 format 所指定的格式将数据存储到后续的变量中…...

嵌入式硬件篇---ADC模拟-数字转换

文章目录 前言第一部分&#xff1a;STM32 ADC的主要特点1.分辨率2.多通道3.转换模式4.转换速度5.触发源6.数据对齐7.温度传感器和Vrefint通道 第二部分&#xff1a;STM32 ADC的工作流程&#xff1a;1.配置ADC2.启动ADC转换 第三部分&#xff1a;ADC转化1.抽样2.量化3.编码 第四…...

Spark Streaming编程基础

文章目录 1. 流式词频统计1.1 Spark Streaming编程步骤1.2 流式词频统计项目1.2.1 创建项目1.2.2 添加项目依赖1.2.3 修改源目录1.2.4 添加scala-sdk库1.2.5 创建日志属性文件 1.3 创建词频统计对象1.4 利用nc发送数据1.5 启动应用&#xff0c;查看结果 2. 编程模型的基本概念3…...

android wifi AsyncChannel(WifiManager和WifiP2pManager)

AynscChannel的讲解 [Android]AsyncChannel介绍-CSDN博客 WifiP2pManager里的channel的使用理解 WifiP2pManager.java public void createGroup(Channel c, ActionListener listener) {checkChannel(c);c.mAsyncChannel.sendMessage(CREATE_GROUP, WifiP2pGroup.NETWORK_ID_PE…...

生存网络与mlr3proba

在R语言中,mlr3包是一个用于机器学习的强大工具包。它提供了一种简单且灵活的方式来执行超参数调整。 生存网络是一种用于生存分析的模型,常用在医学和生物学领域。生存分析是一种统计方法,用于研究事件发生的时间和相关因素对事件发生的影响。生存网络可以用来预测个体在给…...

C#Object类型的索引,序列化和反序列化

前言 最近在编写一篇关于标准Mes接口框架的文章。其中有一个非常需要考究的内容时如果实现数据灵活和可使用性强。因为考虑数据灵活性&#xff0c;所以我一开始选取了Object类型作为数据类型&#xff0c;Object作为数据Value字段&#xff0c;String作为数据Key字段&#xff0c…...

【动态规划】记忆化搜索

Ban or Problem - A - Codeforces 【CCPC】2022年绵阳站部分题解&#xff08;ACGM&#xff09;_ban or pick, whats the trick-CSDN博客 #include<iostream> using namespace std; #include<cstring> #include<algorithm> #define inf -0x3f3f3f3f #defi…...

深度学习 DAY1:RNN 神经网络及其变体网络(LSTM、GRU)

实验介绍 RNN 网络是一种基础的多层反馈神经网络&#xff0c;该神经网络的节点定向连接成环&#xff0c;其内部状态可以展示动态时序行为。相比于前馈神经网络&#xff0c;该网络内部具有很强的记忆性&#xff0c;它可以利用它内部的记忆来处理任意时序的输入序列&#xff0c;…...

BW复制ERP数据源跑程序激活后才可见

场景&#xff1a; BW提取ERP数据走ODP通道之后&#xff0c;数据源需要用下列程序激活加入白名单后才能被BW系统访问到&#xff1b; 检查&#xff1a; 1、RSA6检查数据源是否可正常使用&#xff0c;若为绿√表示可正常访问&#xff0c;反之&#xff0c;则不行。 2、白名单表ROO…...

MarsCode青训营打卡Day10(2025年1月23日)|稀土掘金-147.寻找独一无二的糖葫芦串、119.游戏队友搜索

资源引用&#xff1a; 147.寻找独一无二的糖葫芦串 119.游戏队友搜索 今日小记&#xff1a; 回乡聚会陪家人&#xff0c;休息一天~ 稀土掘金-147.寻找独一无二的糖葫芦串&#xff08;147.寻找独一无二的糖葫芦串&#xff09; 题目分析&#xff1a; 给定n个长度为m的字符串表…...

无人机 PX4 飞控 | PX4源码添加自定义参数方法并用QGC显示与调整

无人机 PX4 飞控 | PX4源码添加自定义参数方法并用QGC显示与调整 0 前言 之前文章添加了一个自定义的模块&#xff0c;本篇文章在之前的自定义模块中&#xff0c;添加两个自定义参数 使用QGC显示出来&#xff0c;并通过QGC调整参数值&#xff0c;代码实现参数更新 新增的参…...

【全栈】SprintBoot+vue3迷你商城-扩展:vue3项目创建及目录介绍

【全栈】SprintBootvue3迷你商城-扩展&#xff1a;vue3项目创建及目录介绍 往期的文章都在这里啦&#xff0c;大家有兴趣可以看一下 【全栈】SprintBootvue3迷你商城&#xff08;1&#xff09; 【全栈】SprintBootvue3迷你商城&#xff08;2&#xff09; 【全栈】SprintBootvu…...

Linux系统 C/C++编程基础——基于Qt的图形用户界面编程

ℹ️大家好&#xff0c;我是练小杰&#xff0c;今天周四了&#xff0c;距离除夕只有4天了&#xff0c;各位今年卫生都搞完了吗&#xff01;&#x1f606; 本文是接着昨天Linux 系统C/C编程的知识继续讲&#xff0c;基于Qt的图形用户界面编程概念及其命令&#xff0c;后续会不断…...

23.日常算法

1. 最小绝对差 题目来源 给你个整数数组 arr&#xff0c;其中每个元素都 不相同。请你找到所有具有最小绝对差的元素对&#xff0c;并且按升序的顺序返回。 每对元素对 [a,b] 如下&#xff1a; a , b 均为数组 arr 中的元素 a < b b - a 等于 arr 中任意两个元素的最小绝对…...

迅为RK3568开发板篇OpenHarmony实操HDF驱动控制LED-添加内核编译

编译内核时将该 HDF 驱动编译到镜像中&#xff0c;接下来编写驱动编译脚本 Makefile&#xff0c;代码如下所示&#xff1a; 加入编译体系&#xff0c;填加模块目录到 drivers/hdf_core/adapter/khdf/linux/Makefile 文件 更多内容可以关注&#xff1a;迅为RK3568开发板篇OpenHa…...

为AI聊天工具添加一个知识系统 之54 为事务处理 设计 基于DDD的一个 AI操作系统 来处理维度

本文要点 要点 Architecture程序 它被设计为一个双面神结构的控制器&#xff0c;它的两侧一侧编译执行另一侧 解释执行&#xff0c;自已则是一个 翻译器--通过提供两个不同取向之间 的 结构映射的显示器&#xff08;带 图形用户接口GUI和命令行接口CLI 两种 接口&#xff09…...

Golang 中除了加锁还有哪些安全读写共享变量的方式?

Golang 中除了加锁还有哪些安全读写共享变量的方式&#xff1f; 在 Golang 中&#xff0c;除了使用 Mutex 锁来保护共享变量外&#xff0c;还可以通过 Channel 和 原子性操作 来实现安全读写共享变量。 1. 使用 Channel 原理 Channel 是 Golang 中用于 Goroutine 之间通信的…...

【优选算法】8----四数之和

有看过我上篇算法博客并且去做过的铁子们&#xff0c;对这道题的话应该就不会那么陌生了&#xff0c;因为这两道题 的解题思路有着异曲同工之妙~ -----------------------------------------begin------------------------------------- 题目解析&#xff1a; 跟三数之和就多了…...

订单状态定时处理、来单提醒和客户催单(day10)

Spring Task 介绍 Spring Task 是 Spring 框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑。 定位&#xff1a; 定时任务框架 作用&#xff1a; 定时自动执行某段Java代码 为什么要在 Java 程序中使用 Spring Task&#xff1f; 应用场景&#xff1…...

备赛蓝桥杯之第十五届职业院校组省赛第一题:智能停车系统

提示&#xff1a;本篇文章仅仅是作者自己目前在备赛蓝桥杯中&#xff0c;自己学习与刷题的学习笔记&#xff0c;写的不好&#xff0c;欢迎大家批评与建议 由于个别题目代码量与题目量偏大&#xff0c;请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题&#xff0…...

【2024年华为OD机试】(C卷,100分)- 查找接口成功率最优时间段 (JavaScriptJava PythonC/C++)

一、问题描述 题目解析 题目描述 服务之间交换的接口成功率作为服务调用关键质量特性&#xff0c;某个时间段内的接口失败率使用一个数组表示。数组中每个元素都是单位时间内失败率数值&#xff0c;数组中的数值为 0~100 的整数。给定一个数值 minAverageLost&#xff0c;表…...

Linux进度条实现

Linux进度条实现 1.\r\n2.缓冲区3.缓冲区分类4.进度条实现 &#x1f31f;&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f;&#x1f31f; &#x1f680;&#x1f680;系列专栏&#xff1a;【Linux的学习】 &#x1f4dd;&#x1f4dd;本篇内容&#xff1a;\…...

Java如何实现反转义

Java如何实现反转义 前提 最近做的一个需求&#xff0c;是热搜词增加换一批的功能。功能做完自测后&#xff0c;交给了测试伙伴&#xff0c;但是测试第二天后就提了一个bug&#xff0c;出现了未知词 levis。第一眼看着像公司售卖的一个品牌-李维斯。然后再扒前人写的代码&…...

计算机网络 (57)改进“尽最大努力交付”的服务

前言 计算机网络中的“尽最大努力交付”服务是网络层的一种数据传输方式。这种服务的特点是网络层只负责尽力将数据报从源端传输到目的端&#xff0c;而不保证数据传输的可靠性。 一、标记与分类 为数据分组打上标记&#xff1a; 给不同性质的分组打上不同的标记&#x…...

Java 基于 SpringBoot 的校园外卖点餐平台微信小程序(附源码,部署,文档)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

重构(4)

&#xff08;一&#xff09;添加解释性变量&#xff0c;使得代码更容易理解&#xff0c;更容易调试&#xff0c;也可以方便功能复用 解释性的变量 总价格为商品总价&#xff08;单价*数量&#xff09;-折扣&#xff08;超过100个以上的打9折&#xff09;邮费&#xff08;原价的…...

【Arduino】语言参考功能

前言 翻译Arduino 参考处列出的常用函数。文中为了减少篇幅&#xff0c;达到能快速翻到查询的目标&#xff0c;在介绍函数中&#xff0c;对部分内容进行了省略&#xff0c;不会列出函数输入参数类型&#xff0c;以及使用注意事项等等&#xff0c;所以若是首次使用或者是调试时出…...