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

【HFP】蓝牙语音通信高级功能解析:快速拨号与呼叫等待协议实现

在蓝牙语音通信系统中,除了基础的通话建立与控制流程,高级功能如快速拨号(内存拨号、最后号码重拨)和呼叫等待通知的实现,直接影响着用户体验的便捷性与系统的实用性。这些功能依赖于蓝牙协议中特定的 AT 命令交互、状态同步机制以及多任务处理逻辑。本文围绕蓝牙核心规范中4.19 - 4.21 节的技术要求,深入解析 HF(耳机)与 AG(网关)在快速拨号和呼叫等待场景下的协议流程、信令交互及工程实现要点。

一、核心指令矩阵

功能模块AT指令响应码状态变更
内存拨号ATD>n+CIEV:2IDLE→DIALING
最后重拨AT+BLDN+CIEV:2IDLE→DIALING
呼叫等待通知AT+CCWA=[n]#NAME?CALL_WAITING

二、内存拨号(Memory Dialing):HF 触发 AG 本地号码快速呼出

内存拨号功能允许HF使用AG内存中存储的号码发起语音呼叫。用户可通过预设的快捷键或语音指令,快速拨打常用联系人号码,提高通话效率。

2.1 功能定位与应用场景

内存拨号允许 HF 通过简短的指令触发 AG 调用其本地存储的电话号码,避免用户手动输入长号码。典型应用包括:

  • 车载场景:通过方向盘按键快速拨打预设的紧急号码(如家人、救援电话);

  • 智能耳机:语音指令 “拨打妈妈” 对应 AG 内存中的特定号码。

2.2 协议流程与信令交互

2.2.1 前提条件

  • 服务层连接:AG 与 HF 必须建立服务层连接(SPP/RFCOMM 链路),确保 AT 命令传输通道可用;

  • 号码存储:AG 本地需预存与指令对应的电话号码(如通过 AT+SMSS 等命令预先写入)。

2.2.2 核心信令流程

①HF 发起指令:用户通过 HF 操作(如按键、语音)触发内存拨号,HF 发送ATD>Nan…;命令至 AG,其中Nan…为内存位置标识(如ATD>1;表示调用 AG 内存第 1 位置的号码);

②AG 解析与响应

  • 若内存位置有效,AG 启动通话建立流程,发送+CIEV: callsetup=2通知 HF 呼叫已发起;

  • 若内存位置无号码存储,AG 返回ERROR响应;

③音频连接建立:若尚未建立音频连接,AG 在通话建立阶段同步创建音频通道(A2DP/AVRCP),并将语音流路由至 HF;

④状态同步

  • 对方振铃时,AG 发送+CIEV: callsetup=3

  • 通话成功连接后,发送+CIEV: call=1

  • 若流程中断(如超时、号码无效),发送+CIEV: callsetup=0

⑤异常处理

  • 号码不存在:若AG内存中不存在指定索引的号码,AG应返回ERROR响应。

  • 呼叫中断:若呼叫建立过程中发生异常,AG应发送+CIEV结果码(callsetup=0)通知HF。

⑥标准时序图

⑦内存数据结构

struct phone_memory {uint16_t index;     // 存储位置索引char number[32];    // 号码缓冲区uint8_t ton;        // 号码类型标识time_t timestamp;   // 最后访问时间
};

协议原文映射:

"The HF shall send an ATD>Nan…; command to the AG. The AG shall then start the call establishment procedure using the phone number stored in the AG memory location."

2.3 工程实现关键点

①内存地址编码规范

  • 地址范围:需定义 AG 支持的内存地址范围(如 1-200),并在 HF 端界面显示对应标签;

  • 兼容性处理:对不支持内存拨号的旧版 AG,HF 需 fallback 至手动拨号流程。

②防误触机制

  • 双重确认:在 HF 端设计 “长按确认” 逻辑,避免误触触发紧急号码拨打;

  • 指令校验:AG 对接收到的Nan…进行格式校验(如仅限数字,长度≤3 位),防止非法指令注入。

③流程图解

三、最后号码重拨(Last Number Re-Dial):一键回拨最近通话

3.1 功能特性与使用场景

最后号码重拨允许 HF 通过AT+BLDN命令快速回拨 AG 最近一次拨打的号码,适用于:

  • 通话中断恢复:对方未接听时快速重拨;

  • 高频联系人场景:频繁回拨同一号码(如工作伙伴)。

3.2 协议流程与信令设计

①前提条件

  • 服务层连接:与内存拨号一致,需提前建立 SPP 链路;

  • 号码缓存:AG 需维护最近一次成功拨打的号码缓存(掉电可保留或清空,依设备设计而定)。

②信令交互细节

  1. HF 触发重拨:用户操作 HF 发送AT+BLDN命令;

  2. AG 逻辑处理

    1. 若存在有效缓存号码,执行与内存拨号相同的通话建立流程;

    2. 若无缓存号码(如首次使用、缓存已清除),AG 返回ERROR

  3. 状态通知:与内存拨号流程一致,通过+CIEV系列信令同步呼叫状态。

③ 关键差异(与内存拨号对比)

特性内存拨号最后号码重拨
号码来源AG 内存预设AG 通话记录缓存
指令格式ATD>Nan…;AT+BLDN
缓存时效性长期有效通常为最近一次(可配置)

3.3 工程实现挑战

①号码缓存一致性

  • 多设备场景:当 AG 同时连接多个 HF 时,需确保AT+BLDN触发的是主设备操作,避免多端竞争;

  • 缓存更新时机:仅在通话成功建立(call=1)时更新缓存,未接通的号码不纳入记录。

②误操作防护

  • 可视化提示:HF 端显示最近拨打的号码摘要(如部分号码掩码),供用户确认后再触发重拨;

  • 超时机制:缓存号码在一段时间(如 7 天)未使用后自动清除,避免旧号码无效拨打。

四、呼叫等待通知(Call Waiting Notification):多任务通话的状态同步

4.1 功能定义与协议目标

呼叫等待功能允许 AG 在当前通话中收到新来电时,向 HF 发送实时通知,用户可选择保持当前通话并接听新来电(三方通话)或拒绝新来电。其核心依赖于:

  • 网络侧支持呼叫等待服务(如运营商开通该业务);

  • AG 与 HF 间的信令通道实时性(确保通知不延迟)。

4.2 协议交互流程

①功能激活与关闭

  • HF 激活指令:用户通过 HF 发送AT+CCWA=1命令(部分协议版本为AT+CCWA默认激活);

  • AG 响应:返回OK确认,并开启呼叫等待监测;

  • 关闭流程:HF 发送AT+CCWA=0或断开服务层连接时,AG 停止通知。

②新来电通知机制

当 AG 在通话中检测到新来电时:

  1. 发送+CCWA: <status>,<call_id> unsolicited 信令至 HF,其中:

    1. status=1表示新来电等待,status=0表示通知取消;

    2. call_id为新通话标识(用于后续切换 / 拒接);

  2. HF 接收到信令后,触发本地提醒(如提示音、指示灯闪烁);

  3. 用户操作处理:

    1. 接听新来电:HF 发送AT+CHLD=2命令(接听并保持当前通话);

    2. 拒绝新来电:HF 发送AT+CHLD=3命令(直接拒接)。

协议原文要点:

"The AG shall send the corresponding +CCWA unsolicited result code to the HF whenever an incoming call is waiting during an ongoing call."

4.3 多通话管理逻辑

① 三方通话支持

若 AG 支持三方通话(Three-way Calling):

  1. 接听新来电后,当前通话进入保持状态,AG 通过音频通道切换实现双工通信;

  2. 用户可通过 HF 指令(如AT+CHLD=1)在通话间切换,或合并为会议通话。

②资源竞争处理

  • 音频通道复用:同一时刻仅激活一个通话的音频流,通过 AVRCP 协议控制音量与路由;

  • 信令优先级+CCWA信令需分配高优先级队列,确保在网络延迟时仍能及时送达。

五、信令协议深度解析:AT 命令与状态码

5.1 快速拨号相关 AT 命令

ATD>Nan…;

  • 功能:内存拨号指令,触发 AG 调用指定内存位置的号码;

  • 参数:Nan…为 1-3 位数字,对应 AG 存储的联系人条目;

  • 响应:成功则返回OK++CIEV系列信令,失败返回ERROR

AT+BLDN

  • 功能:最后号码重拨,无参数;

  • 响应:成功调用缓存号码则返回OK,否则ERROR

5.2 呼叫等待控制命令

AT+CCWA

  • 格式:AT+CCWA=[<mode>],其中mode=1激活,mode=0关闭;

  • 默认值:通常为关闭状态,需显式激活。

+CCWA结果码

  • 格式:+CCWA: <status>[,<call_id>]

  • 示例:+CCWA: 1,2表示有新来电(通话 ID=2)等待。

六、工程实现中的关键挑战与解决方案

6.1 多指令冲突处理

挑战:当 HF 同时发送内存拨号与重拨指令时,可能导致 AG 信令解析混乱。

解决方案:

  • 指令队列管理:在 AG 端维护 FIFO 队列,同一时刻仅处理一条指令;

  • 操作互斥锁:通过状态机标记当前处理中的指令类型,拒绝并发操作。

6.2 呼叫等待通知延迟

挑战:蓝牙链路延迟可能导致+CCWA信令晚于实际来电,影响用户体验。

解决方案:

  • 信令压缩:简化+CCWA载荷(如仅传输必要的 status 字段),减少传输耗时;

  • 预连接优化:在通话期间保持服务层连接处于活跃状态,避免临时建立带来的延迟。

6.3 内存拨号的跨设备兼容性

挑战:不同厂商 AG 的内存地址编号规则可能不一致(如有的从 0 开始,有的从 1 开始)。

解决方案:

  • 协商机制:在服务层连接建立阶段,通过+BRSF消息交换内存拨号支持范围;

  • 动态映射:HF 端提供地址映射配置界面,允许用户自定义 AG 的地址规则。

七、测试体系构建:从单元到场景验证

7.1 内存拨号测试用例

①正向测试:

  • 验证 AG 对有效地址的正确解析与号码调用;

  • 检查+CIEV: callsetup=2信令在指令发送后的 100ms 内返回。

②负向测试:

  • 输入无效地址(如 0、大于最大存储值),验证 AG 返回ERROR

  • 模拟内存地址无号码存储场景,确认流程中断。

7.2 呼叫等待测试场景

①单设备场景:

  • AG 在通话中接收新来电,验证 HF 是否正确显示+CCWA通知;

  • 测试接听 / 拒接新来电时的音频切换延迟(应 < 500ms)。

②多设备场景:

  • AG 同时连接两个 HF,验证+CCWA信令是否广播至所有设备;

  • 测试主从 HF 设备对呼叫等待操作的协同处理(如仅主设备可接听)。

八、典型应用场景与优化实践

8.1 车载蓝牙:方向盘按键快速拨号

优化方案:

  • 语音联动:结合语音识别,用户说 “拨打爸爸” 直接触发内存拨号,无需手动按键;

  • 紧急号码优先:内存地址 1-3 预存紧急联系人,通过红色按键一键拨打,跳过确认流程。

8.2 真无线耳机(TWS):触控重拨最近通话

实现要点:

  • 触控手势定义:如右耳双击触发AT+BLDN,左耳双击激活内存拨号;

  • 电量优化:在耳机待机状态下,AG 缓存号码仅保留最近 5 条,减少内存占用。

8.3 企业 IP 电话:呼叫等待与会议通话集成

扩展功能:

  • 自动转接:当用户拒接新来电时,AG 自动将呼叫转至语音信箱;

  • 通话记录同步:将内存拨号、重拨记录同步至企业通讯管理平台,便于审计。

九、未来技术演进:智能化与融合通信

9.1 AI 驱动的智能拨号

  • 场景识别:根据用户地理位置(如办公室、家中)自动推荐内存号码;

  • 号码预测:通过通话历史机器学习,在 HF 界面优先展示高频号码。

9.2 与 VoIP 的融合

  • 跨网络拨号:AG 支持同时拨打传统电话与 VoIP 号码,HF 通过统一指令触发;

  • 呼叫等待的云端管理:通过云服务器协调多个 AG 的呼叫等待状态,实现企业级电话会议。

9.3 低功耗设计改进

  • 信令休眠机制:在无操作时,服务层连接进入低功耗模式,仅保留紧急拨号指令监听;

  • 内存缓存优化:采用哈希表存储内存号码,提升 AG 检索速度的同时降低 CPU 占用。

十、总结

快速拨号与呼叫等待功能是蓝牙语音通信向便捷化、智能化演进的重要标志,其协议实现涉及信令交互、状态机设计、多任务处理等多个技术维度。对于蓝牙工程师而言,需深入理解 AT 命令的底层传输机制(如 SPP 的流控策略),并结合设备硬件特性优化流程时序。在实际开发中,应通过分层测试体系验证功能的可靠性,尤其关注跨厂商兼容性与异常场景处理。

十一、参考文献

  • Bluetooth Core Specification Version 6.0

  • AT Command Set for Bluetooth SPP and HSP Profiles

  • 《蓝牙技术开发与应用实战》(电子工业出版社)

  • IETF RFC 3261 (SIP 协议,三方通话相关扩展)

相关文章:

【HFP】蓝牙语音通信高级功能解析:快速拨号与呼叫等待协议实现

在蓝牙语音通信系统中&#xff0c;除了基础的通话建立与控制流程&#xff0c;高级功能如快速拨号&#xff08;内存拨号、最后号码重拨&#xff09;和呼叫等待通知的实现&#xff0c;直接影响着用户体验的便捷性与系统的实用性。这些功能依赖于蓝牙协议中特定的 AT 命令交互、状…...

CVE-2025-24813:Apache Tomcat RCE 漏洞分析

CVE-2025-24813 是 Apache Tomcat 中的一个严重远程代码执行 (RCE) 漏洞,源于路径等效缺陷,允许攻击者绕过安全约束并远程执行任意代码。 CYFIRMA 的研究发现了一些活跃的漏洞利用,一些 PoC 漏洞在地下论坛上流传。攻击者利用基于 HTTP PUT 的任意文件上传、NTFS 连接漏洞利…...

神经网络之训练的艺术:反向传播与常见问题解决之道

神经网络训练的艺术&#xff1a;反向传播与常见问题解决之道 摘要 神经网络是现代机器学习的核心工具之一&#xff0c;而反向传播则是其训练过程中不可或缺的算法。本文深入探讨了反向传播的工作原理以及在训练过程中常见的问题&#xff0c;如梯度消失、梯度爆炸、死 ReLU 单…...

小土堆pytorch--transform

torchvision中的transform torchvision中的transform1. transforms的使用1.1 transforms的结构及用法理论1.2 相应代码1.3 对上述代码的解释 2. 常见的transforms2.1 python 的call函数2.2 ToTensor的使用2.3 Normalize的使用2.4 Resize的使用2.5 Compose的使用2.6 RandomCrop的…...

【Django】REST 常用类

ModelSerializer serializers.ModelSerializer 是 Django REST framework&#xff08;DRF&#xff09;里的一个强大工具&#xff0c;它能极大简化序列化和反序列化 Django 模型实例的流程。下面从多个方面详细介绍它&#xff1a; 1. 基本概念 序列化是把 Django 模型实例转化…...

PyTorch常用命令详解:助力深度学习开发

&#x1f4cc; 友情提示&#xff1a; 本文内容由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;创作平台的gpt-4-turbo模型生成&#xff0c;旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证&#xff0c;建议读者通过官方文档或实践进一步确认其准…...

第二章 Logback的架构(二)

Logger, Appenders 和 Layouts Appenders 和 Layouts 基于日志记录器选择性地启用或禁用日志记录请求只是其中的一部分功能。Logback允许将日志记录请求输出到多个目标。在Logback术语中&#xff0c;输出目标被称为Appender。 目前&#xff0c;已经存在适用于控制台、文件、远…...

【大数据】服务器上部署Apache Paimon

1. 环境准备 在开始部署之前&#xff0c;请确保服务器满足以下基本要求&#xff1a; 操作系统: 推荐使用 Linux&#xff08;如 Ubuntu、CentOS&#xff09;。 Java 环境: Paimon 依赖 Java&#xff0c;推荐安装 JDK 8 或更高版本。 Flink 环境: Paimon 是基于 Apache Flink 的…...

【IP101】图像处理进阶:从直方图均衡化到伽马变换,全面掌握图像增强技术

&#x1f31f; 图像增强魔法指南 &#x1f3a8; 在图像处理的世界里&#xff0c;增强就像是给图片化妆&#xff0c;让它展现出最佳的状态。让我们一起来探索这些神奇的增强术吧&#xff01; &#x1f4da; 目录 基础概念 - 图像增强的"美容院"直方图均衡化 - 光线的…...

【Azure Redis 缓存】关于Azure Cache for Redis 服务在传输和存储键值对(Key/Value)的加密问题

问题描述 Azure Cache for Redis 服务在传输和存储数据时是如何加密呢&#xff1f; 问题回答 一&#xff1a;关于Azure cache for Redis服务在数据传输过程中是如何加密的&#xff1f; 为了确保在Azure cache for Redis和客户端应用程序之间传输的数据安全&#xff0c;需要启用…...

Cursor 被封解决方案

一、注册一个无限邮箱 没事点点广告&#xff0c;让网站活久一点(✪ω✪) 2925邮箱-无限邮2925无限邮箱支持多种客户端收发邮件且数据安全加密多端同步。只需要注册一个账号&#xff0c;就能生成无限多个2925子邮箱账号&#xff0c;同时利用一邮多用功能对多个子邮箱邮件进行集…...

spring上传文件添加水印

1、实现 MultipartFile package com.pojo.common.core.domain;import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream;import org.springframework.lang.Nullable; import org.springframework.util.Assert; im…...

CSS分栏布局

分栏布局将区域划分为若干垂直的栏&#xff0c;子元素放置到栏中&#xff0c;填满一个后再填充下一个。如果设置了 column-count 栏数量或 column-width 栏宽度&#xff0c;元素就成为分栏容器。需要注意&#xff0c; column-width 实际上是最小栏宽度。浏览器使用这个值计算栏…...

通过 ModernBERT 实现零样本分类的性能提升

文本分类 是机器学习中最基础的任务之一&#xff0c;拥有悠久的研究历史和深远的实用价值。更重要的是&#xff0c;它是许多实际项目中不可或缺的组成部分&#xff0c;从搜索引擎到生物医学研究都离不开它。文本分类方法被广泛应用于科学论文分类、用户工单分类、社交媒体情感分…...

【AI】Ubuntu 22.04 4060Ti 16G vllm-api部署Qwen3-8B-FP8

下载模型 # 非常重要&#xff0c;否则容易不兼容报错 pip install modelscope -U cd /data/ai/models modelscope download --model Qwen/Qwen3-8B-FP8 --local_dir ./Qwen3-8B-FP8 安装vllm 创建虚拟环境 mkdir vllm cd vllm/ python -m venv venv ource venv/bin/activat…...

QML ProgressBar控件详解

在 QML 中&#xff0c;ProgressBar 是一个常用的进度条控件&#xff0c;用于显示任务的完成进度。以下是 ProgressBar 的详细用法&#xff0c;包括基本用法、自定义样式、动态绑定数据等。 1. 基本用法 1.1 最简单的 ProgressBar import QtQuick.Controls 2.15ProgressBar {w…...

STM32教程:串口USART通讯协议原理及分析(基于STM32F103C8T6最小系统板标准库开发)*详细教程*

前言: 本文主要介绍了单片机的通讯协议和STM32的串口USART通讯的原理及分析。 通信的目的 将一个设备的数据传送到另一个设备,扩展硬件系统。 通信协议 指定通信的规则,通信双方按照协议规则进行数据收发。 STM32常见通讯协议 各通讯特点 USART: TX(发送)、RX(接…...

EDA文件

不同的EDA软件使用不同的文件扩展名和格式&#xff0c;以下是主流工具对应的文件类型&#xff1a; EDA软件文件扩展名说明Altium Designer.PcbDocAltium专属格式&#xff0c;需用原软件打开&#xff0c;可导出为Gerber或STEP文件用于生产。KiCad.kicad_pcbKiCad项目文件&#…...

【C/C++】构造函数与析构函数

&#x1f4d8; C 构造函数与析构函数详解笔记 &#x1f9e0; 为什么需要构造函数与析构函数&#xff1f; 在 C 中&#xff0c;对象创建和销毁过程如果仅靠手动赋值和清理非常容易出错。为此&#xff0c;语言提供了构造函数和析构函数&#xff1a; 构造函数&#xff1a;用于在…...

在Unity AR应用中实现摄像头切换功能

本教程将详细讲解如何在Unity AR Foundation项目中实现前后摄像头切换功能,并提供完整的代码解析。我们将使用AR Foundation的核心组件和简单的UI交互来实现这一功能。 第一部分:环境准备 1.1 所需组件 Unity 2019.4或更高版本 AR Foundation 4.0+ ARCore XR Plugin(Andro…...

Pycharm(十九)深度学习

一、深度学习概述 1.1 什么是深度学习 深度学习是机器学习中的一种特殊方法,它使用称为神经网络的复杂结构,特别是“深层”的神经网络,来学习和做出预测。深度学习特别适合处理大规模和高维度的数据,如图像、声音和文本。深度学习、机器学习和人工智能之间的关系如下图所…...

状态模式 VS 策略模式

在软件开发的世界里&#xff0c;设计模式如同工匠手中的精良工具&#xff0c;能帮助开发者打造出结构清晰、易于维护和扩展的软件系统。状态模式和策略模式便是其中两个常用却容易让人混淆的设计模式。接下来&#xff0c;我们会详细剖析它们的区别、适用场景&#xff0c;并给出…...

如何在 Ubuntu 24.04 本地安装 DeepSeek ?

在本地 Ubuntu 系统上安装 DeepSeek 可以让您在本地使用高级 AI 功能&#xff0c;从而消除对云服务的依赖需求。 What is DeepSeek? DeepSeek 是一个先进的开源人工智能模型&#xff0c;专为自然语言理解和生成而设计。它提供了类似ChatGPT的强大功能。 Prerequisites: A …...

云计算训练营笔记day02(Linux、计算机网络、进制)

Linux 是一个操作系统 Linux版本 RedHat Rocky Linux CentOS7 Linux Ubuntu Linux Debian Linux Deepin Linux 登录用户 管理员 root a 普通用户 nsd a 打开终端 放大: ctrl shift 缩小: ctrl - 命令行提示符 [rootlocalhost ~]# ~ 家目录 /root 当前登录的用户…...

数据库实验10 函数存储

数据库实验10 一、实验目的 掌握函数和存储过程的定义方法&#xff0c;包括标量函数、表值函数、存储过程的语法结构。理解函数和存储过程的作用及原理&#xff0c;区分标量函数与表值函数的应用场景&#xff0c;掌握存储过程的参数传递、逻辑控制和错误处理机制。能够熟练运…...

SQL Server执行安装python环境

安装注意事项 启用python脚本支持 sp_configure external scripts enabled, 1; RECONFIGURE; 安装后接受 Python EULA协议 接受python授权 setup.exe /qs /ACTIONInstall /FEATURESSQL_INST_MR /INSTANCENAME您的实例名 /IACCEPTROPENLICENSETERMS1 /IACCEPTPYTHONLICENSETE…...

ActiveMQ 安全机制与企业级实践(二)

四、企业级实践案例分析 4.1 案例背景介绍 某大型电商企业拥有复杂的分布式系统&#xff0c;涵盖订单管理、库存管理、物流配送、用户服务等多个核心业务模块。在业务快速发展过程中&#xff0c;系统间的通信量呈爆发式增长&#xff0c;为了实现系统的高效解耦和异步通信&…...

ActiveMQ 安全机制与企业级实践(一)

一、引言 在当今数字化时代&#xff0c;企业级应用的架构愈发复杂&#xff0c;各个系统之间的通信和协作变得至关重要。消息队列作为一种高效的异步通信机制&#xff0c;在企业级应用集成中扮演着关键角色。ActiveMQ 作为一款广泛使用的开源消息中间件&#xff0c;以其丰富的功…...

【Python pass 语句】

在 Python 中&#xff0c;pass 语句是一个特殊的空操作&#xff08;no-op&#xff09;语句&#xff0c;它的核心作用是保持程序结构的完整性&#xff0c;同时不执行任何实际操作。以下是详细说明&#xff1a; 一、基础特性 语法占位符&#xff1a;当语法上需要一条语句&#x…...

Maven依赖未生效问题

在你描述的情况下&#xff0c;测试类无法找到 Maven 依赖的 jar 包&#xff0c;可能由以下原因导致&#xff1a; 依赖未正确添加到 pom.xml 检查 pom.xml 文件中是否正确添加了 Elasticsearch 和 JUnit 等相关依赖。例如&#xff0c;对于 Elasticsearch 的 TransportClient 相关…...

NGINX `ngx_http_auth_request_module` 模块详解基于子请求的认证授权方案

一、背景介绍 在 Web 系统中&#xff0c;我们常常需要根据外部服务&#xff08;例如单点登录、API 网关、权限中心&#xff09;的结果来判断用户是否有权限访问某个资源。NGINX 提供的 ngx_http_auth_request_module 模块&#xff0c;正是为这种场景而生。它允许通过向后端发送…...

Qwen3简要介绍(截止20250506)

Qwen3是阿里云推出的一个大语言模型系列&#xff0c;它在多个方面进行了升级和优化。以下是Qwen3的一些主要特点&#xff1a; 模型规模多样&#xff1a;Qwen3提供了一系列不同规模的模型&#xff0c;包括稠密模型&#xff08;0.6B、1.7B、4B、8B、14B、32B&#xff09;以及专家…...

精益数据分析(42/126):移动应用商业模式的深度剖析与实战要点

精益数据分析&#xff08;42/126&#xff09;&#xff1a;移动应用商业模式的深度剖析与实战要点 在创业和数据分析的学习之路上&#xff0c;我们持续探索不同商业模式的奥秘&#xff0c;今天聚焦于移动应用商业模式。我希望和大家一起进步&#xff0c;深入解读《精益数据分析…...

2025.5.6总结

昨天12&#xff1a;30睡觉&#xff0c;结果翻来覆去睡不着&#xff0c;两点半左右才睡着。看了一下最近的睡眠打卡&#xff0c;平均入睡时间是凌晨12&#xff1a;30。 自五一一个人过了5天&#xff0c;我才明白&#xff0c;人是需要社交的&#xff0c;只有在社交中才能找到自我…...

UE5 脚部贴地不穿过地板方案

UE自带的IK RIG和ControlRig技术 【UE5】角色脚部IK——如何让脚贴在不同斜度的地面(设置脚的旋转)_哔哩哔哩_bilibili 实验后这个还是有一部分问题,首先只能保证高度不能穿过,但是脚步旋转还是会导致穿模 IK前,整个模型在斜坡上会浮空 参考制作:https://www.youtube.com/w…...

Spring AI 函数调用(Function Call)系统设计方案

一、系统概述与设计目标 1.1 核心目标 从零构建一个灵活、安全、高效的函数调用系统,使大语言模型能够在对话中调用应用程序中的方法,同时保持良好的开发体验和企业级特性。 1.2 主要功能需求 支持通过注解将普通Java方法标记为可被AI调用的函数自动生成符合LLM要求的函数…...

Jupyter Notebook为什么适合数据分析?

Jupyter Notebook 是一款超实用的 Web 应用程序&#xff0c;在数据科学、编程等诸多领域都发挥着重要作用。它最大的特点就是能让大家轻松创建和共享文学化程序文档。这里说的文学化程序文档&#xff0c;简单来讲&#xff0c;就是把代码、解释说明、数学公式以及数据可视化结果…...

Leetcode Hot 100字母异位词分词

题目描述 思路 根据题意&#xff0c;我们可以得知我们需要将字符统计数一样的字符串&#xff0c;放在一起&#xff0c;并以列表进行返回。因此我们可以通过一个哈希表&#xff0c;把统计相同的放在一起&#xff0c;最终返回即可 代码 class Solution:def groupAnagrams(self…...

用python实现鼠标监听与手势交互

摘要 本文探讨了一种基于Python的数学函数可视化系统的设计与实现&#xff0c;该系统整合了Pynput鼠标事件监听机制、Matplotlib绘图引擎以及PyQt5图形用户界面框架。系统通过人机交互方式实现了函数图像的直观构建与可视化表达&#xff0c;支持多种函数类型的参数化建模与实时…...

UE5 GAS开发P47 游戏标签

FGameplayTag 是 Unreal Engine 中用于标记游戏对象的系统。它允许开发者为游戏对象分配标签&#xff0c;以便在游戏中对其进行分类、识别和操作。 FGameplayTag 结构用于表示单个游戏标签&#xff0c;而 FGameplayTagContainer 则用于表示一组游戏标签。 这些标签可以用于诸…...

C# 实现PLC数据自动化定时采集与存储(无需界面,自动化运行)

C# 实现PLC数据自动化定时采集与存储&#xff08;无需界面&#xff0c;自动化运行&#xff09; 在平时开发中&#xff0c;我们时常会遇到需要后台静默运行的应用场景&#xff0c;这些程序不需要用户的直接操作或界面展示&#xff0c;而是专注于定时任务的执行。比如说&#xf…...

Java实现堆排序算法

1. 堆排序原理图解 堆排序是一种基于二叉堆&#xff08;通常使用最大堆&#xff09;的排序算法。其核心思想是利用堆的性质&#xff08;父节点的值大于或等于子节点的值&#xff09;来高效地进行排序。堆排序分为两个主要阶段&#xff1a;建堆和排序。 堆排序步骤&#xff1a; …...

封装axios,实现取消请求

封装axios import axios from axios// 创建自定义的请求类 class CancelableRequest {constructor() {this.controller new AbortController()}abort() {this.controller.abort()} }// 创建 axios 实例 const service axios.create({baseURL: process.env.VUE_APP_BASE_API,…...

在 Laravel 12 中实现 WebSocket 通信

在 Laravel 12 中实现 WebSocket 通信主要有两种主流方案&#xff1a;‌官方推荐的 Laravel Reverb‌ 和 ‌第三方库&#xff08;如 Soketi/Pusher 或 Workerman/Swoole&#xff09;‌。以下是详细实现步骤&#xff1a; 一、官方方案&#xff1a;Laravel Reverb&#xff08;推…...

iPhone或iPad想要远程投屏到Linux系统电脑,要怎么办?

苹果手机自带AirPlay投屏功能&#xff0c;对于苹果电脑&#xff0c;自然可以随时投屏。但如果电脑是Linux系统&#xff0c;而且还想要远程投屏呢&#xff1f;这时候要怎么将iPhone或iPad投屏到Linux电脑&#xff1f; 方法很简单&#xff0c;用AirDroid Cast的网页版即可。 步骤…...

Ubuntu 22.04 安装配置远程桌面环境指南

在云服务器或远程主机上安装图形化桌面环境,可以极大地提升管理效率和用户体验。本文将详细介绍如何在 Ubuntu 22.04 (Jammy Jellyfish) 系统上安装和配置 Xfce4 桌面环境,并通过 VNC 实现远程访问。 系统环境 操作系统:Ubuntu 22.04 LTS (Jammy Jellyfish)架构:AMD64安装…...

【Redis | 基础总结篇 】

目录 前言&#xff1a; 1.Redis的介绍&#xff1a; 2.Redis的类型与命令&#xff1a; 3.Redis的安装&#xff1a; 3.1.Windows版本 3.2.Linux版本 4.在java中使用Redis&#xff1a; 4.1.介绍 4.2.Jedis 4.3.Spring Data Redis 前言&#xff1a; 本篇主要讲述了Redis的…...

如何通过外网访问内网?对比5个简单的局域网让互联网连接方案

在实际应用中&#xff0c;常常需要从外网访问内网资源&#xff0c;如远程办公访问公司内部服务器、在家访问家庭网络中的设备等。又或者在本地内网搭建的项目应用需要提供互联网服务。以下介绍几种常见的外网访问内网、内网提供公网连接实现方法参考。 一、公网IP路由器端口映…...

iMeta | 临床研究+scRNA-seq的组合思路 | 真实世界新辅助研究,HER2⁺就一定受益?单细胞揭示真正的“疗效敏感克隆”

&#x1f44b; 欢迎关注我的生信学习专栏~ 如果觉得文章有帮助&#xff0c;别忘了点赞、关注、评论&#xff0c;一起学习 近年来&#xff0c;临床医学与单细胞组学的结合开启了全新的研究范式&#xff0c;让临床医生能以“显微镜”般的精度&#xff0c;深入理解疾病机制与疗效…...

国标GB28181视频平台EasyCVR安防系统部署知识:如何解决异地监控集中管理和组网问题

在企业、连锁机构及园区管理等场景中&#xff0c;异地监控集中管控与快速组网需求日益迫切。弱电项目人员和企业管理者亟需整合分散监控资源&#xff0c;实现跨区域统一管理与实时查看。 一、解决方案 案例一&#xff1a;运营商专线方案​ 利用运营商专线&#xff0c;连接各分…...