【HFP】蓝牙HFP服务层连接与互操作性核心技术研究
目录
一、互操作性设计哲学
二、服务级别连接(SLC)架构设计
2.1 连接建立流程总览
2.2 核心交互时序图
2.3 关键阶段技术实现
2.4 RFCOMM连接:通信的基石
2.5 特征交换与编解码协商
2.6 指示器状态同步
三、状态同步机制深度优化
3.1 指示器同步架构
3.2 HF指示器动态管理
四、链路容错与恢复机制
4.1 连接中断分类处理
4.2 智能重连算法
五、编解码协议与音频质量优化
5.1 常见编解码器对比
5.2 动态码率适配策略
六、工程实践与优化
6.1 典型场景测试用例
6.2 性能优化策略
6.3 状态指示器管理实践
6.4 三方通话与呼叫控制
七、典型问题深度排查
7.1 连接建立失败树状分析
7.2 性能优化检查表
八、互操作性测试重点
8.1 物理层兼容性测试
8.2 协议一致性测试
8.3 性能测试
九、服务级别连接释放机制
9.1 连接释放触发条件
9.2 连接释放时序图
9.3 异常处理机制
十、总结与建议
10.1 开发建议
10.2 最佳实践
十一、参考文献
一、互操作性设计哲学
HFP协议的核心价值体现在不同厂商设备间的无缝协作能力。本篇揭示服务层连接建立的深层机制,通过3大设计原则构建可靠通信基础:
-
渐进式能力协商:通过BRSF/BAC命令实现动态特性发现
-
状态同步机制:利用CIEV事件实现实时状态更新
-
容错恢复策略:链路丢失后的智能重连策略
二、服务级别连接(SLC)架构设计
2.1 连接建立流程总览
HFP 服务级别连接( Service Level Connection ,SLC)是实现设备间语音交互的基础,其建立过程涉及多阶段的协议交互和状态同步。以下是核心流程的分层解析:
2.2 核心交互时序图
2.3 关键阶段技术实现
①能力交换阶段
BRSF特性位图解析:
// BRSF特性位定义
#define BRSF_3WAY_CALLING 0x0001
#define BRSF_EC_NR 0x0002
#define BRSF_VOICE_RECOG 0x0004
#define BRSF_CODEC_NEGOTIATION 0x0020
#define BRSF_HF_INDICATORS 0x0040typedef struct {uint16_t hf_features;uint16_t ag_features;
} brsf_exchange_t;
②编解码协商
Codec ID映射表:
Codec ID | 编解码类型 | 支持带宽 |
0x01 | CVSD | 窄带 |
0x02 | mSBC | 宽带 |
0x03 | LC3-SWB | 超宽带 |
协商算法实现:
def codec_negotiation(hf_codecs, ag_codecs):priority_order = [0x03, 0x02, 0x01] # LC3优先for codec in priority_order:if codec in hf_codecs and codec in ag_codecs:return codecreturn 0x01 # 默认CVSD
2.4 RFCOMM连接:通信的基石
在HFP协议栈中,RFCOMM作为L2CAP层之上的虚拟串口协议,承担着数据传输通道的建立任务。其工作流程可分为四步:
-
设备发现:通过蓝牙广播包扫描发现目标设备,校验设备支持的UUID(如
SIMPLEPROFILE_SERV_UUID
)。 -
连接请求:主设备(HF或AG)发起连接请求,从设备响应后建立RFCOMM通道。
-
端口分配:为连接分配虚拟串口号(如Android系统的
/dev/rfcommX
)。 -
数据传输:在端口上实现双向字节流传输,支持文件、命令等数据的可靠交换。
流程图示例:
2.5 特征交换与编解码协商
在RFCOMM通道建立后,双方需通过AT命令交互支持的功能列表:
-
特征交换:
-
HF发送
AT+BRSF=<HF_Features>
,AG返回+BRSF:<AG_Features>
。 -
关键特征位包括:
Call_Waiting
(呼叫等待)、Three_Way_Calling
(三方通话)、Codec_Negotiation
(编解码协商)等。 -
HCI log:
-
AT HFP Supported Features: AT+BRSF=767
AT String: +BRSF: 879
-
编解码协商:
-
若双方支持
Codec_Negotiation
,HF发送AT+BAC=<Available_Codecs>
(如mSBC,AAC
)。 -
AG选择支持的编解码器并确认,确保音频传输的兼容性。
-
HCI Log:
-
代码示例(Android平台):
// 发送BRSF命令
BluetoothHeadset.sendVendorSpecificResultCode("+BRSF: 65535, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1\r\n"
);// 处理BAC命令
if (command.startsWith("AT+BAC=")) {String codecs = command.substring(6);// 解析支持的编解码器列表List<String> supportedCodecs = Arrays.asList(codecs.split(","));// 选择最优编解码器(如优先AAC)String selectedCodec = selectOptimalCodec(supportedCodecs);// 返回确认响应sendResponse("+BAC: " + selectedCodec + "\r\n");
}
2.6 指示器状态同步
状态指示器(Indicators)是反映设备运行状态的关键参数,包括:
-
服务状态:设备是否注册到网络
-
呼叫状态:当前是否处于通话中
-
信号强度:蓝牙或蜂窝网络信号质量
-
电量水平:设备剩余电量百分比
其同步流程如下:
1. 查询支持列表:HF发送AT+CIND=?
,AG返回支持的指示器索引(如service,call,signal,roam,battchg
)。
2. 读取当前状态:HF发送AT+CIND?
,AG返回各指示器的当前值(如+CIND: 0,1,3,0,5
)。
3. 启用状态更新:HF发送AT+CMER=1,0,0,1
启用自动推送,AG在状态变化时发送+CIEV
通知。
状态机设计建议:
三、状态同步机制深度优化
3.1 指示器同步架构
①AG指示器配置流程
-
CIND查询:获取支持指示器列表
-
CMER启用:设置事件报告模式
-
CIEV监听:实时状态更新
事件报告模式参数:
[CMER_Parameters]
Mode=3
Keypad=0
Display=0
Indicators=1
3.2 HF指示器动态管理
四、链路容错与恢复机制
4.1 连接中断分类处理
中断类型 | 触发条件 | 恢复策略 |
显式断开 | 用户主动断开 | 需人工干预 |
链路超时 | 信号丢失超过阈值 | 自动重连 |
协议层错误 | HCI错误码>0x00 | 重置协议栈后重试 |
蓝牙链路因干扰或距离问题可能中断,HFP协议定义了两种恢复策略:
-
显式断开重连:
-
当用户主动断开SLC后,需等待显式操作(如点击"重连"按钮)才能重新建立连接。
-
适用于用户可控场景,避免频繁自动重连导致的功耗问题。
-
-
超时自动重连:
-
若链路因超时断开(如
Link Supervision Timeout
),HF可立即发起重连请求。 -
需清空之前的状态缓存,重新执行SLC建立流程,确保状态一致性。
-
实现注意事项:
-
设置合理的超时阈值(通常0.625ms~40.9s),平衡响应速度与功耗。
-
在重连时添加随机退避机制,避免多设备同时重连导致的冲突。
4.2 智能重连算法
void reconnect_algorithm() {int retry_count = 0;while(retry_count < MAX_RETRY) {if (check_rssi() > -70) {establish_rfcomm();if (service_init() == SUCCESS) return;}adaptive_sleep(retry_count++);}notify_user();
}
五、编解码协议与音频质量优化
5.1 常见编解码器对比
编解码器 | 采样率 | 位深 | 典型码率 | 延迟 | 适用场景 |
SBC | 16-48kHz | 16bit | 328kbps | 150ms+ | 基础通话/音乐 |
AAC | 8-96kHz | 16bit | 128-320kbps | 80ms+ | 音乐流媒体 |
aptX | 48kHz | 16bit | 352kbps | <40ms | 游戏/视频同步 |
LDAC | 96kHz | 24bit | 660kbps | 50ms+ | 高解析度音频 |
5.2 动态码率适配策略
在复杂环境中,可结合信号强度动态调整编解码器:
六、工程实践与优化
6.1 典型场景测试用例
测试项 | 测试步骤 | 预期结果 |
编解码器协商 | 发送 AT+BAC → 检查 AT+BCS 响应 | 选择 mSBC,建立 eSCO 链路 |
状态通知延迟 | 模拟来电 → 测量 + CIEV 到达时间 | ≤50ms |
多连接并发 | 同时建立 HFP 和 A2DP 连接 | 无资源冲突 |
6.2 性能优化策略
①链路参数优化:
-
eSCO 间隔设为 20ms(默认 30ms),降低延迟
-
重传次数设为 3 次,平衡可靠性与带宽
②功耗管理:
-
通话间隙切换至 Hold 模式,电流降至 < 1mA
-
使用 AFH(自适应跳频)减少干扰
6.3 状态指示器管理实践
①关键指示器处理逻辑
-
服务状态(Service):
-
0
:未注册网络 -
1
:已注册网络 -
处理:显示网络状态图标(如📶/❌)
-
-
呼叫状态(Call):
-
0
:无活动呼叫 -
1
:有活动呼叫 -
处理:触发通话界面显示/隐藏
-
-
信号强度(Signal):
-
0-5
:信号质量等级 -
处理:动态调整信号条数量(如0格→5格)
-
-
电量水平(Battchg):
-
0-5
:电量百分比区间 -
处理:显示电池图标并触发低电量提醒(<20%)
-
②状态同步异常处理
-
超时重试:若未收到
+CIEV
响应,每隔2秒重发查询命令,最多重试3次。 -
状态校验:对异常值(如电量>100%)进行过滤,采用滑动窗口平滑处理。
6.4 三方通话与呼叫控制
①功能协商流程
-
查询支持情况:HF发送
AT+CHLD=?
,AG返回支持的呼叫保持类型(如0=Release_all,1=Release_specific
)。 -
呼叫处理命令:
-
AT+CHLD=1
:接听等待中的呼叫 -
AT+CHLD=2
:保持当前呼叫 -
AT+CHLD=3
:合并两个呼叫
-
②典型场景实现
场景:来电接听与保持
七、典型问题深度排查
7.1 连接建立失败树状分析
7.2 性能优化检查表
-
确保BRSF交换时间<300ms
-
编解码协商重试次数≤3次
-
CIEV事件响应延迟<50ms
-
链路丢失检测阈值设置(建议1200-2000ms)
-
AT命令缓冲区大小≥256字节
八、互操作性测试重点
8.1 物理层兼容性测试
-
LC配置验证:检查设备类别(CoD)字段是否符合规范。
-
嗅探子速率测试:在AVRCP场景中验证低功耗模式切换。
8.2 协议一致性测试
-
编解码协商测试:模拟不同编解码器组合,验证协商结果是否符合预期。
-
状态同步测试:通过注入虚假
+CIEV
通知,检测异常处理能力。
8.3 性能测试
-
连接建立时延:测量从发起连接到SLC建立完成的时间(应<3秒)。
-
状态更新延迟:评估
+CIEV
通知到UI更新的响应时间(应<100ms)。
九、服务级别连接释放机制
9.1 连接释放触发条件
HFP 服务级别连接(SLC)的释放可由以下事件触发:
触发条件 | 说明 |
用户显式请求 | 用户通过HF(免提设备)或AG(音频网关)发起断开连接操作 |
蓝牙功能关闭 | 当HF或AG任意一方关闭蓝牙功能时,系统自动触发释放流程 |
通话转移 | 在AG执行"Audio Connection Transfer"过程中(如通话中切换音频输出设备),可能触发SLC重建需求 |
核心交互流程:
9.2 连接释放时序图
标准的SLC释放流程包含以下关键步骤:
-
RFCOMM通道拆除:立即终止SLC关联的RFCOMM数据链路
-
音频连接清理:同步移除正在进行的音频流传输
-
底层协议可选释放:L2CAP和物理链路层可根据实现选择是否保留(为快速重连优化)
9.3 异常处理机制
在通话中执行SLC释放时,协议特别规定:
-
AG需在通话结束后尝试重建SLC(最大重试次数建议设置为3次)
-
重连超时时间应设为5秒,避免频繁重试消耗系统资源
// 连接释放异常处理伪代码
void handle_abnormal_release(reason_t reason) {if (reason == LINK_LOSS) {if (is_user_initiated()) {notify_ui("连接意外断开");} else {attempt_reconnect();}} else if (reason == PROTOCOL_ERROR) {reset_protocol_stack();log_error("协议栈异常:0x%x", get_error_code());}cleanup_service_layer();
}
十、总结与建议
10.1 开发建议
①协议栈分层实现:
-
分离 RFCOMM 连接管理与 AT 命令处理
-
使用状态机管理 SLC 生命周期
②兼容性测试:
-
覆盖主流手机品牌(如华为、苹果)
-
测试不同编解码器组合的兼容性
10.2 最佳实践
-
连接建立阶段:优先完成编解码器协商,避免通话中断
-
状态通知:使用 AT+CMER 使能主动上报,减少轮询开销
-
错误处理:对 AT 命令响应设置超时机制(建议 5 秒)
十一、参考文献
-
Bluetooth SIG. Hands-Free Profile Specification.
-
3GPP TS 27.007. AT Commands for User Equipment (UE) Based on GSM and GPRS.
相关文章:
【HFP】蓝牙HFP服务层连接与互操作性核心技术研究
目录 一、互操作性设计哲学 二、服务级别连接(SLC)架构设计 2.1 连接建立流程总览 2.2 核心交互时序图 2.3 关键阶段技术实现 2.4 RFCOMM连接:通信的基石 2.5 特征交换与编解码协商 2.6 指示器状态同步 三、状态同步机制深度优化 3…...
VSCode使用Remote-SSH连接服务器时启动失败glibc不符合
问题 远程主机可能不符合glibc和libstdc VS Code服务器的先决条件 原因 VSCode更新后,如果服务端GLIBC低于v2.28.0版本将不再满足需求 查看服务端GLIBC版本: ~$ ldd --version ldd (Ubuntu GLIBC 2.23-0ubuntu11.3) 2.23解决 下载V1.85版本 下载链…...
InceptionNeXt:When Inception Meets ConvNeXt论文翻译
论文名称:InceptionNeXt:WhenInceptionMeetsConvNeXt 论文地址:https://arxiv.org/pdf/2303.16900.pdf 摘要: 受视觉Transformer(ViTs)长距离建模能力的启发,大核卷积因能扩大感受野、提升模型性能而受到广泛研究与应用&#x…...
windows下,cursor连接MCP服务器
1.下载并安装node 安装后,在cmd命令框中,输入命令node -v可以打印版本号,证明安装完成 2.下载MCP服务器项目 在MCP服务器找到对应项目,这里以server-sequential-thinking为例子 在本地cmd命令窗口,使用下面命令下载…...
从零开始:使用 kubeadm 部署 Kubernetes 集群的详细指南
使用kubeadmin 部署k8s集群 目录 硬件要求 前期准备 Master 检查 API 服务器证书 清理并重新初始化 查 kubeadm 初始化日志 配置 crictl 的 endpoint 硬件要求 主机名 ip 硬件最低要求 建议,跑的块 master 10.1.1.7 2核,2G 内存给个6G node2 …...
rancher 采用ingerss ssl 部署nginx+php项目
rancher 采用ingerss ssl 部署nginxphp项目 一、创建nginx dockerfile,上传到阿里云镜像仓库(公有,不需要密码) 二、 创建php7.4 dockerfile,需要必须扩展, 上传到阿里云镜像仓库(公有&#x…...
开源聚合平台 Websoft9:开源创新已成为中小企业数字化转型、数据驱动企业的基础
引言:开源软件正在重塑企业数字化未来 根据2024年OpenLogic报告,94.57%的企业已使用开源软件,其中34.07%的机构加大了对开源技术的投入。开源软件凭借其灵活性、成本优势和生态协作能力,成为中小企业(SMB)数字化转型的…...
IntelliJ IDEA 中通义灵码插件使用指南
IntelliJ IDEA 中通义灵码插件使用指南 通义灵码(TONGYI Lingma)是阿里云推出的一款基于通义大模型的智能编码辅助工具,支持 IntelliJ IDEA 等主流 IDE。它提供了代码补全、自然语言生成代码、单元测试生成、代码注释与解释等功能࿰…...
如何免费使用Meta Llama 4?
周六, Meta发布了全新开源的Llama 4系列模型。 架构介绍查看上篇文章。 作为开源模型,Llama 4存在一个重大限制——庞大的体积。该系列最小的Llama 4 Scout模型就拥有1090亿参数,如此庞大的规模根本无法在本地系统运行。 不过别担心!即使你没有GPU,我们也找到了通过网页…...
introduceHLSL
最近打算好好学习一下ue的shader,跟着下面的视频,打算每天至少更新一集 https://www.youtube.com/watch?vlsXB1PQdGx0&t494s 通过下面的蓝图方式我们就可以得到一个变化的材质 alpha参数的生成实际上就是下面的式子 custom节点允许直接的写入hlsl…...
Module模块化
导出:export关键字 export var color "red"; 重命名导出 在模块中使用as用导出名称表示本地名称。 import { add } from "./05-module-out.js"; 导入: import关键字 导入单个绑定 import { sum } from "./05-module-out.js&…...
使用 Rsync + Lsyncd 实现 CentOS 7 实时文件同步
文章目录 🌀使用 Rsync Lsyncd 实现 CentOS 7 实时文件同步前言介绍架构图🧱系统环境🔧Rsync配置(两台都需安装)关闭SELinux(两台都需) 📦配置目标端(client)…...
软件工程第三章习题
一、选择题 1. (1)答案:D 解析:可行性研究是对项目在技术、经济、操作等多方面进行全面评估论证,也称为项目论证 。技术可行性研究、操作可行性研究、经济可行性研究只是可行性研究的部分内容,不能涵盖整体概念。 2. (2)答案&…...
基于ElasticSearch的向量检索技术实践
基于ElasticSearch的向量检索技术实践 作者:Tableau 原文地址:https://zhuanlan.zhihu.com/p/620260383 图片、视频、语音、文本等非结构化数据可以通过人工智能技术(深度学习算法)提取特征向量,然后通过对这些特征向量…...
Spring Boot 项目日志系统全攻略:Logback、Log4j2、Log4j与SLF4J整合指南
Spring Boot 项目日志系统全攻略:Logback、Log4j2、Log4j与SLF4J整合指南 日志系统是应用程序不可或缺的组成部分,良好的日志实践能极大提升开发调试和线上问题排查的效率。本文将全面介绍Spring Boot项目中各种日志框架的配置与使用方案,包…...
【设计模式】责任链模式
简介 很多公司都有请假的流程,当员工提交请假申请时,请求会沿着 组长 → 经理 → CEO 的链条传递,直到有对应层级的领导处理。 适用场景 一个请求需要多个对象中的一个或多个处理(如审批流程、过滤器链)。处理对象和…...
智能气候前沿:AI Agent结合机器学习与深度学习在全球气候变化驱动因素预测
全球气候变化已成为21世纪最严峻的环境挑战,其复杂的驱动因素如温室气体排放、气溶胶浓度、野火、海冰融化以及农业和生态系统变化等,交织影响着全球的气候格局。 第一:气候变化驱动因素与数据科学基础 1.1气候变化 全球气候变化 中国碳中…...
es 原生linux部署集群
背景 目的: 1. 理解不同部署方式的架构差异 2. 对比环境配置的复杂度 3. 评估性能与资源管理 4. 探索扩展性与高可用性 5. 学习安全与隔离机制 6. 实践监控与维护 7. 掌握混合部署与云原生场景 实验的最终目标 技能提升: 全面掌握Elasticsear…...
Springboot 同时支持不同的数据库,Oracle,Postgresql
## 关键字 Java,Springboot,Vscode,支持多种数据库 ## 背景环境 我在实际项目开发工程中遇到这样一个问题,用户 A 使用 Oracle 数据库,用户 B 使用 Postgresql 数据库,但是用户 AB 都使用我们的项目。所以…...
go --- go run main.go 和 go run .
目录 go run main.gogo run .示例 go run main.go 功能:只编译和运行指定的文件(main.go),忽略同目录下的其他文件。适用场景: 当你只需要运行一个独立的文件,且该文件不依赖其他文件时。适合单文件程序或…...
关于Spring MVC中@RequestMapping注解的详细解析,涵盖其核心功能、属性、使用场景及最佳实践
以下是关于Spring MVC中RequestMapping注解的详细解析,涵盖其核心功能、属性、使用场景及最佳实践: 1. 基础概念 RequestMapping是Spring MVC的核心注解,用于将HTTP请求映射到控制器(Controller)的方法上。它支持类级…...
deepseek使用记录26——从体力异化到脑力异化
我们的一切发现和进步,似乎结果是使物质力量具有理智生命,而人的生命则化为愚钝的物质力量。AI快速发展的现实中,人面临着比工业革命更深刻的异化。在工业革命中,人的身躯沦为了机器的一部分,而现在人的脑袋沦为了AI的…...
Ubertool 的详细介绍、安装指南及使用说明
Ubertool:多协议网络分析与调试平台 一、Ubertool 简介 Ubertool 是一款开源的 多协议网络分析工具,专为物联网(IoT)、嵌入式系统和工业自动化领域设计。它支持蓝牙、Wi-Fi、LoRa、CAN总线等多种通信协议的实时监控、数据包捕获…...
用 HTML、CSS 和 jQuery 打造多页输入框验证功能
在网页开发中,输入框验证是至关重要的一环,它能确保用户输入的数据符合特定要求,提升交互的准确性与流畅性。今天,我们就来深入剖析一个运用 HTML、CSS 和 jQuery 实现多页输入框验证的精彩实例,带你领略前端开发中表单…...
在CentOS上安装Docker需要注意的事项
文章目录 前言Docker Engine如何设置仓库设置镜像加速器获取镜像加速器地址 写在前面:大家好!我是晴空๓。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正,感谢大家的不吝赐教。我的唯一博客更新地址是:https://ac-…...
Chrome 135 版本新特性
Chrome 135 版本新特性 一、Chrome 135 版本浏览器更新 ** 1. 第三方托管账户注册迁移到 OIDC 授权码流程** Chrome 135 将账户注册的登录页面从营销网站迁移到动态网站,同时也将 OpenID Connect (OIDC) 的隐式流程迁移到授权码流程。这样做的目的是进一步提升第…...
CMake实战指南一:add_custom_command
CMake 进阶:add_custom_command 用法详解与实战指南 在 CMake 构建系统中,add_custom_command 是一个灵活且强大的工具,允许开发者在构建流程中插入自定义操作。无论是生成中间文件、执行预处理脚本,还是在目标构建前后触发额外逻…...
K8S学习之基础七十五:istio实现灰度发布
istio实现灰度发布 上传镜像到harbor 创建两个版本的pod vi deployment-v1.yaml apiVersion: apps/v1 kind: Deployment metadata:name: appv1labels:app: v1 spec:replicas: 1selector:matchLabels:app: v1apply: canarytemplate:metadata:labels:app: v1apply: canaryspec…...
7-1 列出连通集
作者 陈越 单位 浙江大学 给定一个有 n 个顶点和 m 条边的无向图,请用深度优先遍历(DFS)和广度优先遍历(BFS)分别列出其所有的连通集。假设顶点从 0 到 n−1 编号。进行搜索时,假设我们总是从编号最小的顶点…...
XML Schema 指示器
XML Schema 指示器 引言 XML Schema 是一种用于定义 XML 文档结构的语言,它能够确保 XML 文档的合法性。在 XML 文档的解析和应用中,XML Schema 指示器(XML Schema Indicator)扮演着至关重要的角色。本文将详细介绍 XML Schema 指示器的概念、作用、应用场景以及如何使用…...
Linux内核中TCP协议栈的实现:tcp_close函数的深度剖析
引言 TCP(传输控制协议)作为互联网协议族中的核心协议之一,负责在不可靠的网络层之上提供可靠的、面向连接的字节流服务。Linux内核中的TCP协议栈实现了TCP协议的全部功能,包括连接建立、数据传输、流量控制、拥塞控制以及连接关闭等。本文将深入分析Linux内核中tcp_close…...
17-产品经理-创建发布
点击“发布”-“创建发布”。 填写发布名称,选择测试的版本。还可以设置此次发布是否为“里程碑”。 点击“保存”后,进入该发布详情页面。需要为此次发布关联需求、已解决BUG、以及遗留BUG。可以通过设置条件,进行“搜索”,然后批…...
了解Spring的统一功能
目录 一、统一数据返回格式 1.引入统一数据返回格式 2.学习使用统一数据返回格式 support方法 beforeBodyWrite方法 统一数据返回格式具体逻辑 使用统一数据返回格式存在的问题 解决方法: 统一数据返回格式的优点 统一数据返回格式代码实现(包含了…...
123213
根据道路在道路网的地位、交通功能、对沿线的服务功能划分可分为快速路、主干路、次干路及支路 快速路完全为交通功能服务, 主干路以交通功能为主, 次干路是城市区域性的交通干道,为区域交通集散服务,兼有服务功能,结合主干路组成干路网 …...
通过 axios 请求回来的 HTML 字符串渲染到 Vue 界面上并添加样式
1. 通过 axios 获取数据 使用 axios 发起请求,获取返回的 HTML 字符串数据。 2. 在 Vue 中处理和渲染数据 由于 HTML 字符串中可能包含一些标签和样式,直接插入到 Vue 的模板中可能会导致样式问题。可以通过以下方式处理: 方法一…...
P1162 填涂颜色(BFS)
题目描述 由数字 0 组成的方阵中,有一任意形状的由数字 1 构成的闭合圈。现要求把闭合圈内的所有空间都填写成 2。例如:66 的方阵(n6),涂色前和涂色后的方阵如下: 如果从某个 0 出发,只向上下…...
【笔记】VS中C#类库项目引用另一个类库项目的方法
VS中C#类库项目引用另一个类库项目的方法 在 C# 开发中,有时我们需要在一个类库项目中引用另一个类库项目,但另一个项目可能尚未编译成 DLL。在这种情况下,我们仍然可以通过 Visual Studio 提供的项目引用功能进行依赖管理。 🎯 …...
进程内存分布--之smaps呈现memory-layout.cpp内存分布
上一篇介绍了:进程内存分布--之单线程代码来内存分布呈现memory-layout.cpp 这里我们使用smaps将更加形象的的体现内存分布,smaps文件是Linux的proc文件系统提供的一种可以查看内存资源使用情况的方法,Linux系统中运行的库、堆、栈等信息都可在smaps中查…...
再看自适应RAG方法:SEAKR|PIKE-RAG|DeepRAG
当大语言模型开始"怀疑人生":一场关于知识检索的AI内心戏 各位看官,今天我们要聊一个AI界的"哲学难题"——当大语言模型突然意识到自己可能是个"半瓶子醋",会发生什么奇妙反应? 想象一下这个场景:某天深夜,ChatGPT正对着用户提问"如…...
DNS服务(Linux)
DNS 介绍 dns,Domain Name Server,它的作用是将域名解析为 IP 地址,或者将IP地址解析为域名。 这需要运行在三层和四层,也就是说它需要使用 TCP 或 UDP 协议,并且需要绑定端口,53。在使用时先通过 UDP 去…...
探秘PythonJSON解析深度剖析json.loads处理嵌套JSON字符串的奥秘
哈喽,大家好,我是木头左! 在当今数字化时代,数据以各种格式呈现,而JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,在众多领域广泛应用。Python作为一门强大的编程语言,其内置的json模块为处理JSON数据提供了便捷的方法。然而,当遇到像{"name&q…...
Day7 FIFO与鼠标控制
文章目录 1. harib04a例程(获取按键编码)2. harib04b例程(加快中断处理)3. harib04c例程(FIFO缓冲区)4. harib04d例程(改善FIFO缓冲区)5. harib04e例程(整理FIFO缓冲区&a…...
软件工程第一章习题
第1章软件与软件工程 1.选择题 (1)下列说法中正确的是( )o A.20世纪50年代提出了软件工程的概念 B.20世纪60年代提出了软件工程的概念 C.20世纪70年代出现了客户机/服务器技术 D.20世纪80年代软件工程学科达到成熟 (2)软件危机的主要原因是( Do B.软件生产…...
Ollama 手动高速下载Win/Linux/Mac安装包及安装方法
前言 Ollama下载速度太慢,按这个方式,速度嘎嘎的快----下载地址 手动安装 如果要从以前的版本升级,则应删除旧库。比如:sudo rm -rf /usr/lib/ollama 解压 tar -C /usr -xzf ollama-linux-amd64.tgz # 解压到/usr文件夹# 如…...
Jmeter+Jenkins+Ant自动化持续集成环境搭建
一、安装准备 1.JDK:jdk-8u121-windows-x64 2.jmeter工具:apache-jmeter-2.13 3.ANT工具:apache-ant-1.9.7-bin 4.jenkins工具:jenkins-2.32.2 二、软件安装 1.JDK的安装 >双击JDK安装包,选择安装路径(本人是…...
【11】Redis快速安装与Golang实战指南
文章目录 1 Redis 基础与安装部署1.1 Redis 核心特性解析1.2 Docker Compose 快速部署1.3 Redis 本地快速部署 2 Golang 与 Redis 集成实战2.1 环境准备与依赖安装2.2 核心操作与数据结构实践2.2.1 基础键值操作2.2.2 哈希结构存储用户信息 3 生产级应用场景实战3.1 分布式锁实…...
ISP算法.红外图像增强
在图像处理领域,常见的图像处理一般都是白光相机,实际红外相机也是常见的一种相机,它可以用来对发热的东西进行成像,也可以作为白光相机夜晚不可见的一种辅助手段,为白光相机赋能夜视能力。 红外相机的成像原理在于辐射…...
Spring Boot中使用RedisTemplate操作Redis的几种数据类型详解
Redis作为高性能的键值存储系统,在现代Java应用中扮演着重要角色。Spring Boot通过RedisTemplate为开发者提供了便捷的Redis操作方式。本文将详细介绍如何使用RedisTemplate操作Redis的五种主要数据类型。 一、RedisTemplate简介 RedisTemplate是Spring Data Redi…...
大数据与人工智能之大数据架构(Hadoop、Spark、Flink)
一、核心特性与架构设计 1. Hadoop:分布式批处理的基石 核心组件: HDFS:分布式文件系统,支持大规模数据存储。MapReduce:基于“分而治之”的批处理模型,适合离线分析。 架构特点: 批处理主导&…...
VSCode中Marp插件
VSCode神级插件Marp,用Markdown来做PPT 优秀教程:https://zhuanlan.zhihu.com/p/582872955...