【HFP】蓝牙HFP协议音频连接核心技术深度解析
目录
一、音频连接建立的总体要求
1.1 发起主体与时机
1.2 前提条件
1.3 同步连接的建立
1.4 通知机制
二、不同主体发起的音频连接建立流程
2.1 连接建立触发矩阵
2.2 AG 发起的音频连接建立
2.3 HF 发起的音频连接建立
三、编解码器连接建立流程
3.1 发起条件
3.2 建立主体
3.3 编解码器连接建立(Codec Connection Setup)
3.4 编解码器通知与响应
3.5 同步连接建立
3.6 失败处理
四、可用编解码器更新
4.1 更新机制
4.2 编解码器列表要求
五、编解码器重新协商
六、音频连接释放
6.1 释放主体与时机
6.2 前提条件
6.3 释放流程
七、总结
7.1 音频连接建立流程图
7.2 音频连接释放流程图
7.3 关键命令与响应
八、参考资料
在蓝牙免提协议(HFP)体系中,音频连接管理是用户体验的核心支撑。本文将详细解析蓝牙音频连接建立(Audio Connection Setup)与释放(Audio Connection Release)的过程。
一、音频连接建立的总体要求
音频连接建立是指蓝牙设备(如耳机HF与音频网关AG)之间,根据用户操作或内部事件,建立音频数据传输通道的过程。这一过程不仅涉及音频数据的传输,还包括音频参数(如采样率、帧格式等)的协商与设置。
1.1 发起主体与时机
无论是免提设备(HF)还是音频网关(AG),在用户操作或内部事件触发时,都可根据需要发起音频连接的建立。具体而言,HF 和 AG 在通话过程中都具备发起音频连接的能力,并且在无通话进行时,它们也可能有此能力。
1.2 前提条件
-
服务级连接存在:在音频连接建立之前,AG与HF之间必须已经存在一个服务级连接(Service Level Connection)。
-
功能支持:HF和AG均需支持音频连接建立的相关功能,包括可能的编解码器协商(Codec Negotiation)。
1.3 同步连接的建立
音频连接的建立总是意味着同步连接(Synchronous Connection)的建立,并且该同步连接总是与现有的服务级连接相关联。原则上,使用本节描述的流程建立音频连接不一定与任何通话过程相关。
1.4 通知机制
发起方和接受方都需要通知对方新音频连接的存在。
二、不同主体发起的音频连接建立流程
音频连接可以由HF或AG发起,具体取决于用户操作或内部事件。发起方负责触发连接建立过程,而接收方则负责响应并确认连接。
2.1 连接建立触发矩阵
触发源 | 触发条件 | 典型场景 |
AG端 | 来电接听/媒体播放启动 | 手机自动切换车载扬声器 |
HF端 | 用户按下通话键/语音唤醒 | 车载系统发起语音拨号 |
2.2 AG 发起的音频连接建立
当 AG 要建立音频连接时,如果服务级别协商表明双方都支持编解码器连接(Codec Connection)功能,AG 应发起编解码器连接的建立流程。
关键代码示例(AG端逻辑):
void ag_initiate_audio_connection() { if (codec_negotiated) { send("+BCS=%d", selected_codec_id); start_timer(BCS_RESPONSE_TIMEOUT); } else { initiate_codec_negotiation(); }
}
2.3 HF 发起的音频连接建立
若双方都支持编解码器协商(Codec Negotiation)功能,HF 发起音频连接建立时,需触发 AG 建立编解码器连接。这是因为只有 AG 了解网络的编解码器选择和设置。具体操作是,HF 向 AG 发送 AT 命令 “AT + BCC”。若 AG 将启动编解码器连接流程,会回复 “OK”;若无法启动,则回复 “ERROR”。AG 发送 “OK” 响应后,将启动编解码器连接设置流程。建立的同步连接类型和使用的设置取决于要通过该连接传输的媒体格式。
三、编解码器连接建立流程
3.1 发起条件
在用户操作或内部事件触发时,HF 或 AG 可根据需要发起编解码器连接设置流程。并且,HF 或 AG 可能需要进行一些内部操作,如内部路由、修改音频路径的采样率、帧和 / 或采样对齐等。
3.2 建立主体
尽管音频连接可由 AG 或 HF 触发,但编解码器连接和同步连接通常由 AG 建立(除非其中一个设备是旧版设备)。
3.3 编解码器连接建立(Codec Connection Setup)
当AG或HF决定建立音频连接时,如果双方支持编解码器协商功能,则需先进行编解码器连接建立。这一步骤确保双方就使用的编解码器类型达成一致。
①AG发起编解码器连接
-
AG在服务级协商中确认双方支持编解码器协商功能后,发起编解码器连接建立过程。
-
AG根据HF提供的可用编解码器列表(通过AT+BAC命令发送),选择合适的编解码器。
②HF发起编解码器连接
-
HF在需要建立音频连接时,向AG发送AT+BCC命令,触发AG发起编解码器连接。
-
AG响应OK或ERROR,表示是否接受请求。
③编解码支持矩阵
编码类型 | 带宽 | 强制要求 | 典型码率 |
CVSD | 窄带 | 是 | 64 kbps |
mSBC | 宽带 | 可选 | 128 kbps |
LC3-SWB | 超宽带 | 可选 | 256 kbps |
3.4 编解码器通知与响应
AG 在建立同步连接之前,需通知 HF 将使用的编解码器 ID。若在当前服务级连接上至少成功选择过一次编解码器,除非下一次同步连接需要更改编解码器,否则 AG 无需再次通知 HF。若 HF 在服务级连接流程完成后发送了额外的 “AT + BAC”,则可能需要重新选择编解码器。
AG 会向 HF 发送非请求响应 “+BCS = <Codec ID>”。若 HF 支持该 ID,需用 AT 命令 “AT + BCS = <Codec ID>” 进行响应;若收到的 ID 不可用,HF 需用 “AT + BAC” 发送其可用编解码器。
AG 收到 “AT + BCS” 中与发送的 ID 相同时,总是回复 “OK”,否则回复 “ERROR”。若发送 “+BCS” 后未收到 “AT + BCS”,而是收到 “AT + BAC”,流程将结束,但 AG 可根据新收到的 “AT + BAC” 中的信息重新选择编解码器 ID 后重新启动流程。
3.5 同步连接建立
在编解码器连接建立成功后,AG负责建立同步连接。同步连接的类型和设置取决于待传输媒体格式。
①连接参数协商
-
AG根据选定的编解码器类型,确定同步连接的参数(如采样率、帧格式等)。
-
AG通过+BCS命令向HF通知将使用的编解码器ID。
②连接确认
-
HF收到+BCS命令后,发送AT+BCS=命令进行确认。
-
AG响应OK或ERROR,确认连接参数是否一致。
③ SCO与eSCO对比
参数 | SCO | eSCO |
重传机制 | 不支持 | 支持 |
时隙间隔 | 固定 | 可协商 |
典型应用 | 传统语音 | 高质量音频 |
3.6 失败处理
若在同步连接建立之前编解码器连接建立流程失败,需在建立任何同步连接之前重新启动该流程。若根据所选编解码器的要求无法建立(e)SCO 链路(例如,选择了宽带或超宽带编解码器,但具有重传功能的链路基带协商失败),AG 需重新启动编解码器连接建立流程,目的是选择一个可用的编解码器。在放弃尝试建立编解码器连接之前,应使用强制窄带编解码器(CVSD)。
以下是编解码器连接建立流程的详细流程图:
四、可用编解码器更新
4.1 更新机制
在已建立的服务级连接上,若双方都支持编解码器协商功能,HF 可随时发送 “AT + BAC”,以通知 AG 可用编解码器集合的动态变化,且无需关闭任何现有的音频连接。若 AG 已启动编解码器连接设置流程,当所选编解码器不可用时,HF 应在收到 AG 的 “+BCS” 非请求响应后发送 “AT + BAC”。
4.2 编解码器列表要求
“AT + BAC” 命令中必须始终列出强制窄带编解码器,因此该命令的列表永远不会为空,这为建立音频连接提供了一个始终可用的备用选项。若支持强制宽带编解码器或强制超宽带编解码器,除非宽带语音或超宽带语音支持暂时不可用,否则也应始终列在 “AT + BAC” 命令中。若 HF 之前在 “AT + BAC” 命令中表明支持宽带语音或超宽带语音,在 HF 发送下一个 “AT + BAC” 命令之前,AG 应分别将其解释为宽带语音或超宽带语音支持的暂时暂停。若 “AT + BAC” 命令中不包含强制宽带语音编解码器,则不应包含其他宽带语音编解码器;若不包含强制超宽带语音编解码器,则不应包含其他超宽带语音编解码器。
五、编解码器重新协商
当 AG 建立音频连接时,会根据最近一次 “AT + BAC” 命令交换中传达的可用编解码器列表来决定使用的编解码器。所选的蓝牙编解码器将在正在进行的同步连接中一直使用,无论 AG 或 HF 端的连接发生任何变化。若要更改所选的蓝牙编解码器,AG 可发起编解码器连接设置流程,重新协商后选择的新编解码器将用于下一次音频连接。
六、音频连接释放
6.1 释放主体与时机
无论是 HF 还是 AG,在用户操作或内部事件触发时,都可释放现有的音频连接。具体来说,HF 和 AG 在通话过程中都应具备释放音频连接的能力;若它们在无通话进行时能建立音频连接,那么在无通话时也应能释放该连接。
-
用户主动挂断
-
网络信号丢失
-
设备低电保护
-
QoS不达标
6.2 前提条件
音频连接存在:在音频连接释放之前,AG与HF之间必须已经存在一个音频连接。
6.3 释放流程
-
发起方触发:HF或AG可以根据用户操作或内部事件触发音频连接释放。
-
同步连接断开:音频连接释放总是意味着其对应的同步连接被断开。
-
音频路径路由:当音频连接释放时,音频路径应被路由回AG。
下面是音频连接释放的简单流程图:
时序流程:
七、总结
蓝牙音频连接的建立与释放是一个复杂而严谨的过程,涉及到多个主体(HF 和 AG)、多种命令(如 “AT + BCC”、“AT + BAC”、“AT + BCS” 等)以及多种状态的协商和切换。作为蓝牙工程师,深入理解这些规范对于开发出高质量、稳定可靠的蓝牙音频设备至关重要。在实际应用中,需要严格遵循这些规范,同时根据具体的产品需求和场景进行适当的优化和调整,以提供更好的用户体验。希望本文能为蓝牙工程师们在音频连接相关的开发工作中提供有价值的参考。
7.1 音频连接建立流程图
用户操作/内部事件 -> [HF/AG发起] -> -> 编解码器协商(如果支持) -> -> AG选择编解码器 -> -> AG发送+BCS通知HF -> -> HF确认(AT+BCS) -> -> AG建立同步连接 -> -> 音频连接建立成功
7.2 音频连接释放流程图
用户操作/内部事件 -> [HF/AG发起] -> -> 断开同步连接 -> -> 音频路径路由回AG -> -> 音频连接释放成功
7.3 关键命令与响应
①AT+BAC(Available Codecs)
-
功能:HF向AG发送可用编解码器列表。
-
格式:AT+BAC=
-
响应:无直接响应,但AG在后续步骤中可能使用此信息。
②AT+BCC(Codec Connection Trigger)
-
功能:HF触发AG发起编解码器连接。
-
格式:AT+BCC
-
响应:AG响应OK或ERROR。
③ +BCS(Bluetooth Codec Selection)
-
功能:AG向HF通知选定的编解码器ID。
-
格式:+BCS=
-
响应:HF发送AT+BCS=进行确认,AG响应OK或ERROR。
八、参考资料
-
蓝牙协议相关文档
-
蓝牙技术联盟官方网站资源
相关文章:
【HFP】蓝牙HFP协议音频连接核心技术深度解析
目录 一、音频连接建立的总体要求 1.1 发起主体与时机 1.2 前提条件 1.3 同步连接的建立 1.4 通知机制 二、不同主体发起的音频连接建立流程 2.1 连接建立触发矩阵 2.2 AG 发起的音频连接建立 2.3 HF 发起的音频连接建立 三、编解码器连接建立流程 3.1 发起条件 3.…...
PowerBI 表格显示无关联的表数据
假设有两张没有建立关联的数据表: 产品表 库存表 我们将他们放入表格里显示,数据会出问题。 因为 [库存表] 里的数据有除 [产品表] 以外的产品的数据,所以PBI无法从两张表中找到一一对应的数据。 解决方法:(不建立关联关系的情况下) 新建一个度量值&a…...
观察者模式详解与C++实现
1. 模式定义 观察者模式(Observer Pattern)是一种行为型设计模式,定义了对象间的一对多依赖关系。当一个对象(被观察者/主题)状态改变时,所有依赖它的对象(观察者)都会自动收到通知…...
用ffmpeg 实现拉取h265的flv视频转存成264的mp4 实现方案
1.需要对ffmpeg进行源码修改 这里使用 https://github.com/numberwolf/FFmpeg-QuQi-H265-FLV-RTMP 这位大神提供的源码 需要 x265_3.2.1.tar.gz last_x264.tar.bz2 fdk-aac-2.0.1.tar.gz FFmpeg-QuQi-H265-FLV-RTMP-master.zip 这些包 升级ubuntu18.04 apt update a…...
《AI赋能职场:大模型高效应用课》第8课 AI辅助职场沟通与协作
【本课目标】 掌握AI辅助邮件、沟通话术的优化技巧。学习利用AI快速生成高效的会议纪要。通过实操演练,提升职场沟通效率与协作能力。 【准备工具】 DeepSeek大模型(deepseek.com)百度文心一言(yiyan.baidu.com) 一…...
PowerBI下载安装教程
1、打开官方下载链接,或者Microsoft store里搜索下载(通过官网下载可以选择安装路径,应用商店直接会安装到默认路径里)。 2、等待下载成功后,直接点击【打开】即可。...
PowerBI如何钻取到明细
PowerBI如何钻取到明细 最近做项目领导提到一需求,在查看账龄的时候,还想查看到它的一个明细情况。 PowerBI如何钻取到明细,以一个案例分享下: 第一步:我们先查看账龄的一个分布情况: 第二步:…...
常见算法题
import java.util.*;class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val val;this.left left;this.right right;} }public class test_04_16 {//获取二叉…...
C语言超详细结构体知识
1.自定义类型:结构体的介绍 在之前的博客中,我们简单介绍过了关于结构体的基本知识,这里我们稍微复习一下。 结构体(struct)是C语言中一种重要的复合数据类型,它允许将不同类型的数据组合成一个整体。 1.1结构体的定义 结构体使…...
2N60-ASEMI功业控制与自动化专用2N60
编辑:ll 2N60-ASEMI功业控制与自动化专用2N60 型号:2N60 品牌:ASEMI 封装:TO-220F 批号:最新 最大漏源电流:2A 漏源击穿电压:600V RDS(ON)Max:5.00Ω…...
发现“横”字手写有难度,对比两个“横”字
我发现手写体“横”字“好看”程度,难以比得上印刷体: 两个从方正简体启体来的“横”字: 哪个更好看?我是倾向于左边一点。 <div style"transform: rotate(180deg); display: inline-block;"> 左边是我从方正简…...
深入解析 HTML5 Web IndexedDB 数据库:构建高效离线应用的基石
摘要 在现代 Web 应用开发中,离线访问和高效处理大量结构化数据的需求日益增长。HTML5 的 IndexedDB 作为一种强大的客户端 NoSQL 数据库,为开发者提供了可靠的解决方案。本文将全面介绍 IndexedDB 的特性、语法、方法、应用实例、使用场景,以及其优势与劣势,帮助开发者深…...
17-算法打卡-哈希表-快乐数-leetcode(202)-第十七天
1 题目地址 202. 快乐数 - 力扣(LeetCode)202. 快乐数 - 编写一个算法来判断一个数 n 是不是快乐数。「快乐数」 定义为: * 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 * 然后重复这个过程直到这个数变为 1…...
决战浏览器渲染:减少重绘(Repaint)与重排(Reflow)的性能优化策略
在现代Web开发中,流畅的用户体验是衡量应用质量的关键指标之一。用户与界面的每一次交互,背后都牵动着浏览器复杂而精密的渲染过程。当这个过程不够高效时,用户就会感受到卡顿、延迟,甚至页面“掉帧”。在众多影响渲染性能的因素中…...
深度解析生成对抗网络:原理、应用与未来趋势
在人工智能的浩瀚星空中,生成对抗网络(Generative Adversarial Networks,GAN)犹如一颗璀璨的明星,自 2014 年由 Ian Goodfellow 等人提出以来,便以其独特而强大的生成能力,在计算机视觉、自然语…...
电能质量治理解决方案:构建高效、安全的电力系统
随着“双碳”目标的推进及新型电力系统的快速发展,大量电力电子设备(如光伏逆变器、充电桩、变频器等)接入电网,导致谐波畸变、无功功率激增、电压波动等问题日益突出。电能质量恶化不仅威胁设备安全,还影响电网稳定运…...
生态篇|多总线融合与网关设计
引言 1. 车内多总线概览 2. 主流车载总线技术对比 3. 网关设计原则与架构 4. 协议转换与映射策略 5. 安全与诊断功能集成...
热门与冷门并存,25西电—电子工程学院(考研录取情况)
1、电子工程学院各个方向 2、电子工程学院近三年复试分数线对比 学长、学姐分析 由表可看出: 1、电子科学与技术25年相较于24年上升20分 2、信息与通信工程、控制科学与工程、新一代电子信息技术(专硕)25年相较于24年下降25分 3、25vs24推…...
HDFS入门】HDFS安全与权限管理解析:从认证到加密的完整指南
目录 引言 1 认证与授权机制 1.1 Kerberos认证集成 1.2 HDFS ACL细粒度控制 2 数据加密保护 2.1 传输层加密(SSL/TLS) 2.2 静态数据加密 3 审计与监控体系 3.1 操作审计流程 3.2 安全监控指标 4 权限模型详解 4.1 用户/组权限模型 4.2 umask配置原理 5 安全最佳实…...
合成数据中的对抗样本生成与应用:让AI模型更强、更稳、更安全
目录 合成数据中的对抗样本生成与应用:让AI模型更强、更稳、更安全 一、什么是对抗样本? 二、为什么要在合成数据中引入对抗样本? 三、对抗样本在图像合成数据中的生成方法 ✅ 方法1:FGSM(Fast Gradient Sign Met…...
考研系列-计算机网络-第二章、物理层
一、通信基础 1.物理层基本概念 2.数据通信基础知识...
uni-app 安卓10以上上传原图解决方案
在Android 10及以上版本中,由于系统对文件访问的限制,使用chooseImage并勾选原图上传后,返回的是图片的外部存储路径,如:file:///storage/emulated/0/DCIM/Camera/。这种外部存储路径,无法直接转换成所需要…...
关于element的dialog的取消(关闭弹窗)方法触发两次
在这里插入图片描述 关闭的时候加个修饰符.native close.native...
vue,uniapp解决h5跨域问题
如果有这样的跨域问题,解决办法: ✅ 第一步:在项目根目录下创建 vue.config.js 和 package.json 同级目录。 // vue.config.js module.exports {devServer: {proxy: {/api: {target: https://app.yycjkb.cn, // 你的后端接口地址changeOrig…...
2025-04-18 李沐深度学习3 —— 线性代数
文章目录 1 线性代数1.1 标量、向量与矩阵1.2 矩阵概念1.3 按特定轴求和 2 实战:线性代数2.1 标量2.2 向量2.3 矩阵2.4 张量2.5 降维2.6 点积2.7 矩阵-向量积2.8 矩阵-矩阵乘法2.9 范数2.10 练习 1 线性代数 1.1 标量、向量与矩阵 标量(Scalarÿ…...
2026《数据结构》考研复习笔记三(C++高级教程)
C高级教程 一、文件和流二、异常处理三、命名空间四、模板五、信号处理六、多线程 一、文件和流 iostream 用于标准输入/输出(控制台I/O),处理与终端(键盘输入和屏幕输出)的交互 包含以下全局流对象: cin&…...
python进阶: 深入了解调试利器 Pdb
Python是一种广泛使用的编程语言,以其简洁和可读性著称。在开发和调试过程中,遇到错误和问题是不可避免的。Python为此提供了一个强大的调试工具——Pdb(Python Debugger)。 Pdb是Python标准库中自带的调试器,可以帮助…...
前端资源加载失败后重试加载(CSS,JS等引用资源)
前端资源加载失败后的重试 .前端引用资源时出现了资源加载失败(这里针对的是路径引用异常或者url解析错误时) 解决这个问题首先要明确一下几个步骤 1.什么情况或者什么时候重试 2.如何重试 3.重试过程中的边界处理 这里引入里三个测试脚本,分别加载里三个不同的脚…...
每日算法【双指针算法】(Day 2-复写零)
双指针算法 1.算法题目(复写零)2.讲解算法原理3.编写代码 1.算法题目(复写零) 注意:不要越界,不能开额外的数组,只能从现有数组上进行操作,没有返回值。 2.讲解算法原理 解法:双指针操作 先根据“异地”操作…...
【C++深入系列】:模版详解(上)
🔥 本文专栏:c 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录: 你不需要很厉害才能开始,但你需要开始才能很厉害。 ★★★ 本文前置知识: 类和对象(上) …...
PyCharm Flask 使用 Tailwind CSS v3 配置
安装 Tailwind CSS 步骤 1:初始化项目 在 PyCharm 终端运行:npm init -y安装 Tailwind CSS:npm install -D tailwindcss3 postcss autoprefixer初始化 Tailwind 配置文件:npx tailwindcss init这会生成 tailwind.config.js。 步…...
设计模式每日硬核训练 Day 15:享元模式(Flyweight Pattern)完整讲解与实战应用
🔄 回顾 Day 14:组合模式小结 在 Day 14 中,我们学习了组合模式(Composite Pattern): 适用于构建树状层级结构,使得“单个对象”和“对象集合”统一操作。广泛用于文件系统、UI 控件树、组织结…...
使用Service发布应用程序
使用Service发布应用程序 文章目录 使用Service发布应用程序[toc]一、什么是Service二、通过Endpoints理解Service的工作机制1.什么是Endpoints2.创建Service以验证Endpoints 三、Service的负载均衡机制四、Service的服务发现机制五、定义Service六、Service类型七、无头Servic…...
美家市场2025电视版分享码-美家市场电视直播软件分享码免费获取
美家市场2025电视版作为一款备受欢迎的应用市场,为用户提供了海量的电视直播软件,而分享码则是免费获取这些资源的重要途径。与此同时,乐看家桌面也是一款在智能电视领域极具特色的软件,它能与美家市场搭配使用,为用户…...
动手学深度学习:手语视频在NiN模型中的测试
前言 NiN模型是在LeNet的基础上修改,提出了1x1卷积层和全局平均池化层的概念,减少了全连接所带来的参数量很多的问题。本篇在之前代码的基础上添加了模型保存,loss和acc记录以及记录模型时间等功能,所以模型后面的代码会重新记录…...
医院数据中心智能化数据上报与调数机制设计
针对医院数据中心的智能化数据上报与调数机制设计,需兼顾数据安全性、效率性、合规性及智能化能力。以下为系统性设计方案,分为核心模块、技术架构和关键流程三部分: 一、核心模块设计 1. 数据上报模块 子模块功能描述多源接入层对接HIS/LIS/PACS/EMR等异构系统,支持API/E…...
Ubuntu命令速查
当你在Ubuntu系统中需要快速查询常用命令时,可以使用以下速查表: 列出文件和目录: ls切换目录: cd [目录路径]显示当前工作目录的绝对路径: pwd创建新目录: mkdir [目录名]删除文件或目录: rm […...
一次制作参考网杂志的阅读书源的实操经验总结(附书源)
文章目录 一、背景介绍二、书源文件三、详解制作书源(一)打开Web服务(二)参考网结构解释(三)阅读书源 基础(四)阅读书源 发现(五)阅读书源 详细(六…...
python抓取HTML页面数据+可视化数据分析(投资者数量趋势)
本文所展示的代码是一个完整的数据采集、处理与可视化工具,主要用于从指定网站下载Excel文件,解析其中的数据,并生成投资者数量的趋势图表。以下是代码的主要功能模块及其作用: 1.网页数据获取 使用fetch_html_page函数从目标网…...
下拉框select标签类型
在我们很多页面里有下拉框的选择,这种元素怎么定位呢?下拉框分为两种类型:我们分别针对这两种元素进行定位和操作 select标签 : 通过select类处理。 非select标签 1、针对下拉框元素,如果是Select标签类型,…...
嵌入式C语言位操作的几种常见用法
作为一名老单片机工程师,我承认,当年刚入行的时候,最怕的就是看那些密密麻麻的寄存器定义,以及那些让人眼花缭乱的位操作。 尤其是遇到那种“明明改了寄存器,硬件就是不听话”的情况,简直想把示波器砸了&am…...
数据库原理及应用mysql版陈业斌实验四
🏝️专栏:Mysql_猫咪-9527的博客-CSDN博客 🌅主页:猫咪-9527-CSDN博客 “欲穷千里目,更上一层楼。会当凌绝顶,一览众山小。” 目录 实验四索引与视图 1.实验数据如下 student 表(学生表&…...
【免登录ORACLE,jdk8安装包下载】jdk-8u441-windows-i586.exe和jdk-8u441-windows-x64.exe有什么区别
jdk-8u441-windows-i586.exe和jdk-8u441-windows-x64.exe主要有以下区别: 我用夸克网盘分享了「jdk」,链接:https://pan.quark.cn/s/c72666843e2b 适用系统架构: jdk-8u441-windows-i586.exe适用于32位的Windows操作系统&#x…...
Oracle日志系统之附加日志
Oracle日志系统之附加日志 在 Oracle 数据库中,附加日志(Supplemental Log)是一种增强日志记录的机制,用于在数据库的 redo log 中记录更多的变更信息,尤其是在进行数据迁移、复制和同步等任务时,能够确保…...
从零到一:管理系统设计新手如何快速上手?
管理系统设计是一项复杂而富有挑战性的任务,它要求设计者具备多方面的知识和技能,包括需求分析、架构设计、数据管理、用户界面设计等。对于初次接触这一领域的新手而言,如何快速上手并成为一名合格的管理系统设计者呢?本文将从管…...
Web 前端包管理工具深度解析:npm、yarn、pnpm 全面对比与实战建议
引言: 在现代web前端开发中,包管理工具的重要性不言而喻,无论是构建项目脚手架,安装ui库,管理依赖版本,还是实现monorepo项目结构,一个高效稳定的包管理工具都会大幅提升开发体验和协作效率 作为一名前端工程师,深入了解这些工具背后的机制与差异,对于提升项目可维护性和团队…...
Windows 图形显示驱动开发-WDDM 1.2功能—Windows 8 中的 DirectX 功能改进(六)
一、具有多示例抗别名示例访问权限的 UAV Direct3D 11 允许光栅化到无序访问视图, (UAV) 没有呈现目标视图 (RTV) /DSV 绑定。 即使 UAV 可以具有任意大小,实现也可以使用视区/剪刀矩形的像素尺寸来操作光栅器。 DirectX 11 硬件的示例模式仅为单个示例…...
Jenkins 多分支流水线: 如何创建用于 Jenkins 状态检查的 GitHub 应用
使用 Jenkins 多分支流水线时,您可以将状态检查与 GitHub 拉取请求集成。 以下是状态检查的示例 要实现这些类型的状态检查,您需要创建一个与 Jenkins 主实例集成的 GitHub 应用。 在本博客中,我们将介绍如何创建一个 GitHub 应用ÿ…...
LeeCode912. 排序数组
给你一个整数数组 nums,请你将该数组升序排列。 你必须在 不使用任何内置函数 的情况下解决问题,时间复杂度为 O(nlog(n)),并且空间复杂度尽可能小。 示例 1: 输入:nums [5,2,3,1] 输出:[1,2,3,5]示例 2…...
Maven 简介(图文)
Maven 简介 Maven 是一个Java 项目管理和构建的工具。可以定义项目结构、项目依赖,并使用统一的方式进行自动化构建,是Java 项目不可缺少的工具。 Maven 的作用 提供标准化的项目结构:以前不同的开发工具创建的项目结构是不一样的…...