【HFP】蓝牙HFP协议来电处理机制解析
目录
一、协议概述与技术背景
1.1 HFP协议演进
1.2 核心角色定义
1.3 关键技术指标
二、来电接入的核心交互流程
2.1 基础流程概述:AG 的 RING 通知机制
2.2 HF 的响应:本地提醒与信令交互
三、带内铃声(In-Band Ring Tone)机制详解
3.1 带内铃声的技术定位
3.2 Answer Incoming Call from the HF – In-Band Ringing(从HF端接听带内振铃电话)
3.3 Answer Incoming Call from the HF – No In-Band Ringing(从HF端接听无带内振铃电话)
3.4 关键差异对比
四、通话控制的双向性:Answer Incoming Call from the AG(从AG端接听电话)
五、动态配置: Change the In-Band Ring Tone Setting(变更带内振铃设置)
5.1 能力协商:SDP 与 + BRSF 的角色
5.2 动态切换流程:+BSIR 信令的应用
5.3 HF 的协同处理:音频通道的静音控制
六、异常处理与状态同步
6.1 通话中断的统一信令:+CIEV 的核心作用
6.2 连接恢复机制
七、工程实现中的关键挑战与解决方案
7.1 多设备兼容性:SDP 能力协商的完备性
7.2 低功耗优化:信令与音频的能耗平衡
7.3 实时性保障:信令延迟的优化
八、典型应用场景与测试用例
8.1 场景一:手机(AG)与蓝牙耳机(HF)的来电交互
8.2 场景二:车载蓝牙网关(AG)的自动接听
九、未来技术演进方向
9.1 与 LE Audio 的融合
9.2 智能化铃声策略
十、附录:协议调试指令速查
十一、总结
在蓝牙通信技术体系中,语音通话的接入流程是实现设备间实时通信的核心环节之一。随着物联网和智能设备的快速发展,蓝牙作为短距离通信的主流技术,其协议规范的准确性和可靠性对于耳机(HF)、网关(AG)等设备的互联互通至关重要。本文将围绕蓝牙协议中 4.13 章节来电接听(Answer an Incoming Call) 的规范展开,深入解析 AG 与 HF 在来电场景下的交互逻辑、带内铃声机制及异常处理流程。
一、协议概述与技术背景
1.1 HFP协议演进
Hands-Free Profile(HFP)作为车载蓝牙系统的核心技术标准,历经多个版本迭代。最新1.9版本在来电处理机制上进行了重大优化,特别是在带内铃声(In-band Ring Tone)控制方面引入了更灵活的交互策略。
1.2 核心角色定义
-
AG(Audio Gateway):通常是手机等音源设备
-
HF(Hands-Free Unit):车载系统、蓝牙耳机等终端设备
-
Service Level Connection:包含控制信道(RFCOMM)和音频传输能力
-
Audio Connection:已建立的音频传输通道
1.3 关键技术指标
参数 | 规格要求 |
RING消息间隔 | ≤5秒 |
带内铃声编码 | G.711/PCM |
SDP特性位 | 0x00000001(支持带内铃声) |
响应超时 | 30秒 |
二、来电接入的核心交互流程
2.1 基础流程概述:AG 的 RING 通知机制
当 AG 接收到来电时,其核心任务是通过 Unsolicited RING Alerts(非请求式振铃通知)向 HF 传达来电状态。根据协议规范,RING 通知需持续发送,直至以下两种情况之一发生:
-
用户通过 HF 完成通话接听(Call Acceptance);
-
来电因任何原因中断(如对方挂断、信号故障等)。
关键技术点:
-
RING 的本质:这是一种蓝牙协议层的控制信令,用于触发 HF 的本地提醒(如响铃、震动)。
-
持续发送机制:AG 通过蓝牙链路周期性推送 RING 信令,确保 HF 即使在低功耗状态下也能及时感知来电。
2.2 HF 的响应:本地提醒与信令交互
HF 在接收到 RING 通知后,需执行两项核心操作:
-
触发本地提醒:通过扬声器播放铃声、振动马达震动或指示灯闪烁等方式通知用户。
-
保持信令监听:等待用户操作(如接听、拒接),并在用户确认后向 AG 发送ATA 命令(蓝牙音频传输协议的控制指令)。
协议原文映射:
"The HF shall produce a local alerting in reaction to the RING."
三、带内铃声(In-Band Ring Tone)机制详解
3.1 带内铃声的技术定位
带内铃声是指 AG 通过已建立的音频连接(Audio Connection)向 HF 传输铃声信号,与传统的协议层 RING 通知形成互补。其应用场景由 AG 的SDP 记录或 +BRSF 消息中的"In-band ring tone" 支持标识决定。
技术优势:
-
灵活性:可动态切换铃声类型(如自定义铃声),增强用户体验;
-
兼容性:与传统协议层通知并存,适应不同设备的能力差异。
3.2 Answer Incoming Call from the HF – In-Band Ringing(从HF端接听带内振铃电话)
①前提条件:服务层连接(Service Level Connection)
在启用带内铃声前,AG 与 HF 必须先建立服务层连接。若连接未建立,AG 需自动触发连接建立流程,确保信令与媒体通道的可用性。
②音频连接的建立与铃声传输
-
音频通道初始化:AG 通过蓝牙音频协议(如 A2DP、AVRCP)建立双向音频流通道;
-
铃声数据传输:AG 将铃声的 PCM 编码数据通过音频连接推送至 HF,由 HF 的音频解码器还原为声波信号。
③处理流程
-
发送RING警报:AG向HF发送RING警报,提醒用户有来电。
-
发送带内振铃音:如果AG支持带内振铃,并且SLC已建立,AG会通过已建立的音频连接(通常是SCO连接)将振铃音发送给HF。
-
用户接听:用户使用HF提供的适当手段(如按键)接受来电。
-
发送ATA命令:HF向AG发送ATA命令,通知AG用户已接受来电。
-
AG处理来电:AG开始处理来电,包括接通电话等操作。
-
中断处理:如果正常的来电处理程序因任何原因被中断,AG应发出+CIEV结果码,其值指示(callsetup=0),以通知HF这种情况。
3.3 Answer Incoming Call from the HF – No In-Band Ringing(从HF端接听无带内振铃电话)
①前置条件:
同样,AG和HF之间必须存在一个正在进行的服务级别连接。如果该连接不存在,AG应自主建立SLC。
②处理流程:
当 AG 不支持带内铃声或用户禁用该功能时,流程简化为:
-
AG 仅通过协议层 RING 信令通知 HF;
-
HF 本地生成默认铃声(如设备内置提示音);
-
通话接听时,AG 按需建立音频连接并路由语音流。
3.4 关键差异对比
特性 | 带内铃声模式 | 非带内铃声模式 |
铃声来源 | AG 推送的音频流 | HF 本地生成 |
音频连接建立时机 | 来电阶段提前建立 | 接听时按需建立 |
带宽占用 | 持续占用音频通道 | 接听前仅占用信令通道 |
四、通话控制的双向性:Answer Incoming Call from the AG(从AG端接听电话)
除 HF 侧的用户操作外,AG 也可作为控制主体发起通话接听流程,典型应用场景包括:
-
车载蓝牙网关自动接听(如通过车载按键);
-
工业设备的远程控制接听。
前置条件:AG和HF之间必须存在一个正在进行的服务级别连接。AG应使用上述两种程序之一来提醒HF。
核心流程:
-
AG 通过 RING 通知或带内铃声触发 HF 本地提醒;
-
用户通过 AG 端接口(如物理按键、触屏)确认接听;
-
AG 向 HF 发送通话建立信令,同步完成音频通道初始化。
技术要点:
-
信令对称性:AG 与 HF 均具备通话控制权限,需通过协议层确保操作互斥(如避免同时接听导致冲突);
-
状态一致性:AG 需通过 +CIEV 结果码 (如
callsetup=0
表示中断,callsetup=1
表示成功)实时同步通话状态至 HF。
五、动态配置: Change the In-Band Ring Tone Setting(变更带内振铃设置)
5.1 能力协商:SDP 与 + BRSF 的角色
AG 通过SDP 记录中的SupportedFeatures 字段“In-band ring tone”向 HF 声明带内铃声支持能力。在服务层连接建立阶段,HF 可通过解析该字段决定是否启用带内铃声功能。
SDP 字段示例(伪代码):
ServiceRecord { SupportedFeatures: { In-band ring tone: 0x01 // 0x01表示支持,0x00表示不支持 } }
5.2 动态切换流程:+BSIR 信令的应用
在服务层连接持续期间,AG 可通过 +BSIR Unsolicited Result Code(蓝牙设置带内铃声)动态修改铃声配置,典型场景包括:
-
从默认铃声切换为自定义铃声;
-
因功耗优化需求临时禁用带内铃声。
信令格式(基于 AT 命令集):
+BSIR: <mode>,<tone_id> // mode: 0=禁用带内铃声,1=启用带内铃声 // tone_id: 铃声标识(如0=默认,1-255=自定义)
5.3 HF 的协同处理:音频通道的静音控制
当 HF 希望临时屏蔽 AG 的带内铃声时,可在接收到+CIEV:(callsetup=1)
(通话建立中)后执行音频通道静音操作,并在接收到+CIEV:(callsetup=0)
(通话中断)时恢复音量。这一机制适用于用户希望仅通过协议层通知(如震动)感知来电的场景。
六、异常处理与状态同步
6.1 通话中断的统一信令:+CIEV 的核心作用
无论何种原因导致通话流程中断(如用户拒接、信号超时、设备断电),AG 均需通过 +CIEV 结果码 向 HF 发送中断通知,具体参数如下:
-
callsetup=0
:表示通话建立失败或中断; -
扩展参数:可附加错误码(如
cause=1
表示对方挂断,cause=2
表示超时)。
信令示例:
+CIEV: callsetup,0,1 // 通话中断,原因码1(对方挂断)
6.2 连接恢复机制
若中断原因为临时信号波动,AG 可自动尝试重建服务层连接与音频连接,无需用户干预。该机制通过协议层的重连定时器与状态机管理实现,确保弱网环境下的通话稳定性。
七、工程实现中的关键挑战与解决方案
7.1 多设备兼容性:SDP 能力协商的完备性
-
挑战:不同厂商的 AG 与 HF 可能对带内铃声的支持存在差异,导致协商失败;
-
方案:
-
在连接建立阶段增加能力探测信令(如 + BRSF 查询);
-
设计向下兼容逻辑,优先使用非带内铃声模式作为 fallback。
-
7.2 低功耗优化:信令与音频的能耗平衡
-
挑战:持续的音频连接会增加设备功耗,影响续航;
-
方案:
-
引入自适应铃声传输策略:根据 HF 的电量状态动态调整铃声传输时长;
-
在非带内模式下,采用间歇式 RING 信令发送(如每 2 秒发送一次,而非持续发送)。
-
7.3 实时性保障:信令延迟的优化
-
挑战:蓝牙协议栈的处理延迟可能导致铃声播放与信令不同步;
-
方案:
-
为 RING 信令分配高优先级链路层队列;
-
在 HF 端设计信令缓存缓冲区,确保铃声播放与信令触发的时间差小于 50ms。
-
八、典型应用场景与测试用例
8.1 场景一:手机(AG)与蓝牙耳机(HF)的来电交互
流程验证点:
-
手机接到来电时,是否及时向耳机发送 RING 信令;
-
若手机支持带内铃声,耳机是否正确解析并播放推送的音频流;
-
用户通过耳机按键接听时,ATA 命令的传输延迟是否小于 200ms。
8.2 场景二:车载蓝牙网关(AG)的自动接听
测试重点:
-
AG 主动接听时,是否同步向 HF 发送状态信令;
-
带内铃声与车载音响系统的混音效果是否符合声学设计标准;
-
多设备连接时(如同时连接手机与车载设备),铃声路由的优先级逻辑是否正确。
九、未来技术演进方向
9.1 与 LE Audio 的融合
随着 LE Audio(低功耗音频)标准的普及,带内铃声机制可与LC3 编码、多流音频特性结合,实现更高音质、更低功耗的铃声传输。例如,通过 LE Audio 的广播音频功能,AG 可同时向多个 HF 设备推送差异化铃声。
9.2 智能化铃声策略
结合 AI 算法,AG 可根据环境噪声动态调整带内铃声的音量、节奏:
-
在嘈杂环境中自动增强低频成分,提升可感知度;
-
根据用户作息时间自动切换静音 / 响铃模式,减少干扰。
十、附录:协议调试指令速查
AT+BRSF(查询设备能力):HF向AG发送AT+BRSF=<HF支持的特性>命令,通知AG其支持的特性。AG则发送+BRSF=<AG支持的特性>进行响应。如果双方都支持编解码器协商功能,HF应发送AT+BAC=<HF可用的编解码器>命令给AG。
AT+CIND(查询状态指示)和AT+CMER(启用事件报告):HF发送AT+CIND命令获取AG当前指示器的状态,AG则回复+CIND结果码。HF发送AT+CMER=3,0,0,1命令使能AG指示器的通知功能,这样当电话状态发生变化时,AG会主动发送CIEV通知HF。
AT+BIND:HF发送AT+BIND=<HF支持的HF指示器>命令告知AG其支持的HF端通用状态指示器。AG则回复+BIND结果码,告知HF其支持的HF指示器。HF可以通过AT+BIND?命令获取AG端状态指示器的使能状态。
ATA:HF在用户接受来电后,向AG发送ATA命令,通知AG用户已接受来电。AG随后开始处理来电。
+BSIR:AG使用+BSIR非请求结果码通知HF带内振铃设置的变更。
十一、总结
本文围绕蓝牙协议 4.13 章节,系统解析了来电接听流程中的核心机制,包括 RING 信令交互、带内铃声的动态管理、双向通话控制及异常处理逻辑。对于蓝牙工程师而言,理解这些协议细节是实现设备兼容性、优化用户体验的基础。在实际开发中,需结合具体硬件特性,通过信令抓包分析(如使用 Wireshark 捕获 HCI 日志)、音频质量测试(如 PESQ 评分)等手段,确保协议实现的准确性与可靠性。
十二、参考文献
-
Bluetooth Core Specification Version 6.0
-
Bluetooth SIG. Hands-Free Profile Specification.
-
LE Audio Technical Documentation (Bluetooth SIG, 2023)
相关文章:
【HFP】蓝牙HFP协议来电处理机制解析
目录 一、协议概述与技术背景 1.1 HFP协议演进 1.2 核心角色定义 1.3 关键技术指标 二、来电接入的核心交互流程 2.1 基础流程概述:AG 的 RING 通知机制 2.2 HF 的响应:本地提醒与信令交互 三、带内铃声(In-Band Ring Tone࿰…...
03-谷粒商城笔记
一个插件的install和生命周期的报错是不一样的 Maven找不到ojdbc6和sqljdbc4依赖包 这时候我找到了jar包,然后我就先找到一个jar安装到了本地仓库。 在终端上进行命令了: mvn install:install-file -DfileD:\ojdbc6-11.2.0.4.jar -DgroupIdcom.oracle …...
PHP 反序列化CLI 框架类PHPGGC 生成器TPYiiLaravel 等利用
# 反序列化链项目 -PHPGGC&NotSoSecure -NotSoSecure https://github.com/NotSoSecure/SerializedPayloadGenerator 为了利用反序列化漏洞,需要设置不同的工具,如 YSoSerial(Java) 、 YSoSerial.NET 、 PHPGGC 和它的先决条件。 Deserializati…...
LeetCode热题100——283. 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0] 输出:…...
C++入门小馆: 探寻vector类
嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的pa…...
力扣hot100_链表(3)_python版本
一、25. K 个一组翻转链表 1.1、206. 反转链表 py代码 class ListNode:def __init__(self, val0, next node):self.val valself.next next class Solution:def reverseList(self, head):pre Nonecur headwhile cur:next cur.nextcur.next prepre curcur nextreturn p…...
Lua 第9部分 闭包
在 Lua 语言中,函数是严格遵循词法定界的第一类值。 “第一类值”意味着 Lua 语言中的函数与其他常见类型的值(例如数值和字符串)具有同等权限: 一个程序可以将某个函数保存到变量中(全局变量和局部变量均可&a…...
【Linux】冯诺依曼体系结构及操作系统架构图的具体剖析
目录 一、冯诺依曼体系结构 1、结构图 2、结构图介绍: 3、冯诺依曼体系的数据流动介绍 4、为什么在该体系结构中要存在内存? 二、操作系统架构图介绍 1、操作系统架构图 2、解析操作系统架构图 3、为什么要有操作系统? 前些天发现了一…...
解析虚拟机与Docker容器化服务的本质差异及Docker核心价值
解析虚拟机与Docker容器化服务的本质差异及Docker核心价值 1.1 硬件虚拟化与操作系统级虚拟化 虚拟机(VM)基于硬件级虚拟化技术(Hypervisor),通过模拟完整硬件栈(CPU、内存、存储、网络)创建独…...
FreeRTOS深度解析:队列集(Queue Sets)的原理与应用
FreeRTOS深度解析:队列集(Queue Sets)的原理与应用 什么是队列集? 在FreeRTOS中,队列集(Queue Sets,英文名xQueueSet)是一种强大的数据结构,用于高效管理多个队列。它的…...
java将pdf转换成word
1、jar包准备 在项目中新增lib目录,并将如下两个文件放入lib目录下 aspose-words-15.8.0-jdk16.jar aspose-pdf-22.9.jar 2、pom.xml配置 <dependency><groupId>com.aspose</groupId><artifactId>aspose-pdf</artifactId><versi…...
网络原理 - 6
目录 4. 滑动窗口 滑动窗口出现丢包 情况一:数据报已经抵达,ACK 被丢了编辑 情况二:数据报直接就丢了 5. 流量控制 完! 4. 滑动窗口 这个滑动窗口是 TCP 中非常有特点的机制。 我们知道,TCP 是通过确认应答&…...
【Linux网络】构建类似XShell功能的TCP服务器
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
Spring AI - Redis缓存对话
先看效果 对话过程被缓存到了Redis 中。 原理 在上一节我们快速入门了SpringAI,具体文章请查看:快速入门Spring AI 创建 ChatClient 的代码如下: this.chatClient ChatClient.builder(chatModel).defaultSystem(DEFAULT_PROMPT).defaultAd…...
rk3588 驱动开发(二)第四章嵌入式 Linux LED 驱动开发实验
4.1 Linux 下 LED 灯驱动原理 Linux 下的任何外设驱动,最终都是要配置相应的硬件寄存器。所以本章的 LED 灯驱动 最终也是对 RK3588 的 IO 口进行配置,与裸机实验不同的是,在 Linux 下编写驱动要符合 Linux 的驱动框架。开发板上的 LED 连接…...
第49讲:AI驱动的农业碳汇估算与生态价值评估 —— 打造更“绿”的智慧农业未来
目录 🌍 一、农业碳汇:我们为什么要关心它? 🤖 二、AI是如何介入农业碳汇评估的? 🛠 三、案例实战:AI估算区域农田碳汇储量 📍 场景设定: 📊 数据来源: 🔁 处理流程: 📈 四、生态价值评估:从碳储量到生态效益 🧭 五、平台与工具推荐 💬 六、…...
springmvc入门案例
目录 前言 springmvc概述 springmvc入门案例(使用配置类替代原本的web.xml) 第一步、创建一个web工程 第二步、引入相应的依赖(servlet-api、spring-webmvc、) 第三步、编写 SpringMVC配置类,并开启包扫描功能 第四步、编写…...
Node.js学习
概述 Node.js 是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境,允许在服务器端运行 JavaScript 代码。它采用事件驱动和非阻塞 I/O 模型,适合构建高性能、可扩展的网络应用,尤其擅长处理实时应用和大规模数据密集型场景 背景 JavaScri…...
SQL注入漏洞中会使用到的函数
目录 一、信息获取函数 1. 通用函数 2. 元数据查询(INFORMATION_SCHEMA) 二、字符串操作函数 1. 字符串连接 2. 字符串截取 3. 编码/解码 三、报错注入专用函数 1. MySQL 2. SQL Server 3. PostgreSQL 四、时间盲注函数 1. 通用延迟 2. 计…...
MIT IDSS深度解析:跨学科融合与系统科学实践
麻省理工学院的IDSS(Institute for Data, Systems, and Society, IDSS)是一个致力于通过先进分析方法推动教育与研究的前沿机构。它将工程学、信息科学和数据科学的方法与社会科学的分析方法相结合,以应对复杂的社会挑战。 MIT IDSS 建立在统计学、计算机科学和特定应用领域…...
重塑智慧出行新生态,德赛西威全新战略愿景发布
4月22日,上海车展开幕前夕,德赛西威以“智新境,向远大”为主题,正式对外发布全新发展战略及使命、愿景;同时,代表未来AI出行趋势的智慧出行解决方案Smart Solution 3.0重磅亮相。 一、把握变革节点 创领产…...
全面解析 classification_report:评估分类模型性能的利器
解读 classification_report 的使用:评估分类模型性能的关键工具 在机器学习中,分类任务是最常见的应用场景之一。无论是垃圾邮件过滤、图像识别还是情感分析,分类模型的性能评估都是至关重要的一步。而 classification_report 是 Scikit-le…...
Qt案例 使用QFtpServerLib开源库实现Qt软件搭建FTP服务器,使用QFTP模块访问FTP服务器
本以为搭建和访问FTP服务器的功能已经是被淘汰的技术了,只会在学习新技术的时候才会了解学习学习,WinFrom版本,和windows Api版本访问FTP服务器的功能示例也都写过。没想到这次会在项目中再次遇到, 这里记录下使用Qt开源库QFtpSer…...
图像后处理记录
图像后处理记录 ocr后处理记录 opencv裁剪 编译命令 cmake -S . -B build-x64 -DBUILD_LIST"core,imgproc,imgcodecs,highgui" -DBUILD_SHARED_LIBSOFF -DBUILD_opencv_appsOFF -DBUILD_opencv_jsOFF -DBUILD_ANDROID_PROJECTSOFF -DBUILD_ANDROID_EXAMPLESOFF -…...
解决element中的el-anchor链接被作为路由跳转导致页面404
解决element中的el-anchor链接被作为路由跳转导致页面404 问题: 在使用elementPlus时,el-anchor-link中的href被识别为路由进行跳转,导致不能正常跳转到锚点,且页面显示404。 解决:自定义方法解决 <!--添加hand…...
Mapreduce中maven打包
MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序(例如:jar包),并发运行在…...
C++初阶——string的使用(下)
C初阶——string的使用(下) 一、string类对象的容量操作 对于string的容量操作,我们可以通过顺序表来理解,顺序表是通过动态数组来实现的,在数据结构专栏的第一篇就是顺序表的详细讲解,链接如下ÿ…...
AIGC vs 人类创作者:是竞争还是协作?
AIGC vs 人类创作者:是竞争还是协作? 随着人工智能技术的飞速发展,特别是生成式AI(AIGC, AI-Generated Content)的崛起,越来越多的领域开始出现AI的身影。从文本创作、图像生成到音乐制作,AIGC…...
Stable Baselines3 结合 gym 训练 CartPole 倒立摆
视频讲解: Stable Baselines3 结合 gym 训练 CartPole 倒立摆 今天介绍下stable_baselines3和gym,可以方便实现DL的实现,应用在机械臂catch、reach等场景 测试代码仓库:https://github.com/LitchiCheng/DRL-learning.git https:…...
ctfshow web8
前言 学习内容:简单的盲注脚本的书写 web8 这个题目题目手动注入很麻烦 主要是他过滤了 union 空格和 过滤了union的解决方法 1、使用盲注(报错注入和盲注) 2、使用时间盲注 3、堆叠注入 盲注脚本的书写 首先他是有注入点的 然后熟悉requests包的使用 …...
Linux程序地址空间
目录 研究背景 程序地址空间回顾 来段代码感受一下 进程地址空间 Linux2.6内核进程调度队列 一个CPU拥有一个runqueue 优先级 活跃队列(只出不进) 过期队列(只进不出) active指针和expired指针 总结 研究背景 Linux内核版本&#…...
破茧成蝶:阿里云应用服务器让传统 J2EE 应用无缝升级 AI 原生时代
丝滑升级拥抱大模型:详解AI时代的应用智能化升级路径 破茧成蝶:阿里云应用服务器让传统 J2EE 应用无缝升级AI原生时代 ——十年代码无需重写,三步开启智能化跃迁 作者:孤弋、孚阳 序幕:一场跨越 20 年的技术对话 在杭…...
游戏引擎学习第240天:将渲染器移至第三层
这节又枯燥又无聊简直了 回顾并为今天的内容做铺垫 昨天我们说到,想对渲染器和平台层的集成方式做一些修改。我们之前简单讲了一下修改的目的:我们希望游戏本身不再直接调用 OpenGL 的渲染代码,而是只生成一组渲染指令缓冲区,然…...
2025.04.23华为机考第三题-300分
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 03. 时空旅行者的最优路径 问题描述 A先生是一名时空旅行者,他可以在不同的时空点之间穿梭。每次从一个时空点跳跃到另一个时空点需要消耗一个时间单位。在每个时空点,都有一些特…...
Kafka 保证多分区的全局顺序性的设计方案和具体实现
Kafka 本身无法直接保证多分区的全局顺序性,因为分区设计旨在并行处理以提升吞吐量。 要实现多分区的顺序性,可尝试通过以下方法在系统层面或业务逻辑上解决: 一、方案设计 单一分区路由(还是将消息发送到同一分区)&a…...
数据结构初阶:二叉树(四)
概述:本篇博客主要介绍链式结构二叉树的实现。 目录 1.实现链式结构二叉树 1.1 二叉树的头文件(tree.h) 1.2 创建二叉树 1.3 前中后序遍历 1.3.1 遍历规则 1.3.1.1 前序遍历代码实现 1.3.1.2 中序遍历代码实现 1.3.1.3 后序遍历代…...
华为开发岗暑期实习笔试(2025年4月16日)
刷题小记: 第一题怀疑测试样例不完整,贪心法不应该能够解决该题。第二题使用0-1BFS解决单源最短路径的问题,往往搭配双端队列实现。第三题是运用动态规划解决最大不重叠子区间个数的问题,难点在于满足3重判断规则,所需…...
第一篇:Django简介
第一篇:Django简介 文章目录 第一篇:Django简介一、纯手写一个简易版的web框架1、软件开发架构2、HTTP协议3、简易的socket服务端4、wsgiref模块5、动静态网页6、后端获取当前时间展示到html页面上7、字典数据传给html文件8、数据从数据库中获取的展示到…...
2025年渗透测试面试题总结-拷打题库13(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 2025年渗透测试面试题总结-拷打题库13 一、GitHub等三方敏感信息泄漏防御 二、业务逻辑漏洞技术规避 …...
(09)Vue脚手架的使用(Vite、vue-cli、create-vue)
本系列教程目录:Vue3Element Plus全套学习笔记-目录大纲 文章目录 第3章 Vue脚手架3.1 vite3.3.1 Vite使用1)创建Vite项目2)Vite项目打包 3.1.2 组件化开发3.1.4 Vite工程运行原理1)分析main.js2)自定义根组件 3.2 vue…...
Unity 将Excel表格中的数据导入到Mysql数据表中
1.Mysql数据表users如下: 2.即将导入的Excel表格如下: 3.代码如下: using System; using System.Data; using System.IO; using Excel; using MySql.Data.MySqlClient; using UnityEngine; using UnityEditor;public class ImportExcel {// …...
【QT】信号与槽中多个按钮(pushbutton)共用一个槽函数的两种实现方式
两种方法的对比 方法1:sender() 优点:代码简洁,无需额外参数 缺点:依赖运行时类型转换,安全性较低 适用场景:简单场景,少量按钮 方法2:Lambda (推荐) 优点:安全直观&…...
Python----深度学习(神经网络的过拟合解决方案)
一、正则化 1.1、正则化 正则化是一种用于控制模型复杂度的技术。它通过在损失函数中添加额外的项(正则 化项)来降低模型的复杂度,以防止过拟合。 在机器学习中,模型的目标是在训练数据上获得较好的拟合效果。然而,过…...
【金仓数据库征文】从 HTAP 到 AI 加速,KingbaseES 的未来之路
国产数据库早已实现 “可替代”,但要真正与国际头部厂商掰手腕,必须在 HTAP(Hybrid‑Transaction/Analytical Processing)与 AI 加速 两条技术赛道上实现跨越。KingbaseES 自 V8R3 调整为多进程架构后,历经 V8R6、KSOn…...
创建第一个Spring Boot项目
什么是Spring Boot 随着Spring的快速发展,项目中的XML文件越来越多,繁琐的配置以及,整合第三方框架的配置问题,导致大大增加了开发和部署的效率,使开发者无法专心于业务的开发。Spring Boot就相当于使Spring框架的脚手…...
Java—— 正则表达式 练习
需求: 请编写正则表达式验证用户输入的手机号码是否满足要求。 请编写正则表达式验证用户输入的邮箱号是否满足要求。 请编写正则表达式验证用户输入的电话号码是否满足要求。 验证手机号码 13112345678 13712345667 13945679027 139456790271 验证座机电话号码 02…...
Linux[指令与权限]
Linux指令与权限 Linux环境中,打包文件有多种 tar (打包/解包) 指令 tar -czvf 文件要打包到的位置 文件(打包并压缩到) tar -xzvf 文件(在当前目录下解压) tar选项 -c创建压缩文件 -z使用gzip属性压缩 -v展现压缩过程 -f后面使用新建文档名 -x不要新建,解压 -C 文件…...
MySQL数据库精研之旅第十期:打造高效联合查询的实战宝典
专栏:MySQL数据库成长记 个人主页:手握风云 目录 一、简介 1.1. 为什么要使用联合查询 1.2. 多表联合查询时的计算 1.3. 示例 二、内连接 2.1. 语法 2.2. 示例 三、外连接 4.1. 语法 4.2. 示例 一、简介 1.1. 为什么要使用联合查询 一次查询需…...
【Redis】集合类型Set 常用命令详解
1. sadd - 添加 语法:sadd key value > sadd testset A 1 > sadd testset B 1 > sadd testset C 1 > sadd testset C # set的值不能重复 0 > smembers set1 # 查询指定set的所有值,乱序 1) "B" 2) "A" 3) "C&qu…...
React 5 种组件提取思路与实践
在开发时,经常遇到一些高度重复但略有差异的 UI 模式,此时我们当然会把组件提取出去,但是组件提取的方式有很多,怎么根据不同场景选取合适的方式呢?尤其时在复杂的业务场景中,组件提取的思路影响着着代码的可维护性、可读性以及扩展性。本文将以一个[详情]组件为例,探讨…...