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

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的掌握(如 BLE 5.1 定位、Android 14 的扫描优化)。本文补充 20 + 道进阶面试题,结合实战案例,突破 “技术深水区”。


一、高阶场景面试题:复杂环境下的扫描挑战

Q16:多设备并发扫描时,如何避免扫描性能下降?(OPPO 2023 社招真题)

题目背景:OPPO 智能手表需同时扫描 20 + 智能家居设备(如灯泡、插座),常出现扫描延迟或丢包。

答案
性能下降的核心原因

  • 蓝牙芯片 HCI 缓冲区容量有限(通常≤1KB),高并发时数据包被覆盖;
  • 协议栈(Bluedroid)处理线程优先级低,无法及时处理大量广播包;
  • 应用层回调(如onScanResult)阻塞主线程,导致扫描结果堆积。

解决方案

关键代码示例(Android)

// 设置批量上报模式(延迟1秒上报,减少回调次数)
ScanSettings settings = new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).setReportDelay(1000)  // 1000ms延迟上报.build();// 使用线程池处理扫描结果(避免主线程阻塞)
BluetoothLeScanner scanner = bluetoothAdapter.getBluetoothLeScanner();
scanner.startScan(filters, settings, new ScanCallback() {@Overridepublic void onBatchScanResults(List<ScanResult> results) {Executors.newSingleThreadExecutor().execute(() -> {// 异步处理扫描结果(如去重、存储)processScanResults(results);});}
});

Q17:低功耗模式下,如何通过 “扫描 - 休眠” 策略平衡发现率与功耗?(vivo 2024 校招真题)

题目背景:vivo TWS 耳机需在待机时持续扫描手机,要求功耗≤1mA。

答案
核心策略:通过周期性 “扫描 - 休眠” 循环,在保证设备发现率的前提下降低平均功耗。

参数设计公式:平均功耗 = 扫描功耗 ×(扫描时间 / 总周期) + 休眠功耗 ×(休眠时间 / 总周期)

实战参数表(以 nRF52832 芯片为例):

场景扫描周期(T)扫描时间(t)休眠时间(T-t)发现率(理论值)平均功耗(mA)
快速发现期200ms100ms100ms95%2.1
稳定监控期2000ms50ms1950ms85%0.8

验证方法:使用功耗仪(如 Nordic Power Profiler Kit)实测,结合抓包工具统计漏扫率(漏扫率 = 未发现的广播包数 / 总广播包数)。

Q18:Android 12 + 的权限变更对 BLE 扫描有何影响?如何适配?(三星 2023 社招真题)

题目背景:三星 Galaxy S22 升级 Android 12 后,部分应用扫描失败。

答案
Android 12 + 的权限变更

  • 新增BLUETOOTH_SCAN权限(需动态申请);
  • 扫描时需声明uses-permissionuses-feature
  • 后台扫描需额外申请BLUETOOTH_ADMIN权限(部分机型限制)。

适配步骤(附权限声明示例)

①清单文件声明

<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />

②动态申请权限(Kotlin):  

val permissions = arrayOf(Manifest.permission.BLUETOOTH_SCAN,Manifest.permission.BLUETOOTH_CONNECT,Manifest.permission.ACCESS_FINE_LOCATION  // Android 11及以下仍需位置权限
)
ActivityResultContracts.RequestMultiplePermissions().launch(permissions)

③后台扫描限制:Android 12 + 禁止应用在后台持续扫描,需通过WorkManagerForegroundService实现定时扫描(如每 5 分钟扫描 10 秒)。

Q19:Android 中 startScan() 调用后无回调,可能的原因有哪些?

答案

①权限问题

  • 缺少 ACCESS_FINE_LOCATION(Android 6.0+)或 BLUETOOTH_SCAN(Android 12+)。
  • 解决方案:动态申请权限并检查系统设置。

②蓝牙未开启

  • 系统蓝牙开关关闭。
  • 解决方案:调用 BluetoothAdapter.enable() 或引导用户手动开启。

③扫描冲突

  • 多次调用 startScan() 未停止之前的扫描。
  • 解决方案:先调用 stopScan()

④设备不广播

  • 目标设备未开启广播(如处于休眠状态)。
  • 解决方案:使用抓包工具(如 Elisys)确认广播包。

⑤芯片/系统 Bug

  • 某些机型存在兼容性问题。
  • 解决方案:升级系统版本或针对特定机型做适配。

Q20:Android 后台扫描的限制与解决方案

答案

①限制

  • Android 8.0+ 对后台服务限制严格,startScan() 可能被系统终止。
  • 某些厂商(如华为、小米)对后台扫描有额外限制。

②解决方案

  • 前台服务:将扫描服务升级为前台服务,显示持续通知。
  • JobScheduler:使用 JobScheduler 定期唤醒应用执行扫描。
  • 厂商适配:针对特定机型(如小米)加入白名单。

二、安全、性能与特殊场景

Q21:BLE 扫描过程中可能存在哪些安全风险?如何防范?

答案

BLE 扫描可能面临以下安全风险:

①设备追踪与隐私泄露

  • 固定 MAC 地址可被长期监控,定位用户轨迹。
  • 广播数据含特征值(如设备名称、RSSI),暴露设备类型或用户行为。

②伪造广播与中间人攻击

  • 恶意设备伪造合法广播包,诱导连接后窃取数据或注入恶意指令。

③重放攻击

  • 截获合法广播包后重复发送,欺骗扫描设备执行错误操作(如开门、转账)。

④资源耗尽攻击

  • 大量伪造广播包占用扫描设备的 CPU / 内存资源,导致系统卡顿或崩溃。

防范措施:

①地址随机化(核心防护)

  • 使用 动态随机地址(Random Address)(BLE 4.2+),周期性更换 MAC 地址,避免长期追踪。
  • 区分 静态随机地址(Static Random Address)和 私有随机地址(Private Random Address),后者结合定时器进一步增强隐私性。蓝牙MAC地址-CSDN博客

②数据加密与认证

  • 对广播数据启用 AES-CCM 加密(需配合安全连接流程,如 LE Secure Connections)。
  • 在 GAP 层或应用层添加 设备认证机制(如预共享密钥、数字证书),验证广播源合法性。

③防重放与新鲜性校验

  • 在广播数据中嵌入 时间戳(Timestamp) 或 序列号(Sequence Number),扫描端校验数据新鲜性,拒绝重复包。

④扫描策略优化

  • 白名单过滤:仅扫描预信任的设备 UUID/MAC,拒绝未知设备广播。
  • 限制扫描时长与间隔:避免长时间全信道扫描,减少资源暴露窗口。
  • 信道跳频:结合 BLE 信道划分(37/38/39 广播信道),动态切换扫描信道,降低被干扰概率。

⑤固件与协议栈安全

  • 选用安全合规的协议栈(如 Zephyr、ARM mbed TLS),及时更新固件修补漏洞(如 BlueBorne、KRACK 等历史漏洞)。
  • 禁用不安全的旧协议(如 BLE 4.0 前的 Legacy Pairing),强制使用安全连接(Secure Connections)。

应用层安全设计

  • 对敏感操作(如配对、控制指令)添加 二次验证(如 PIN 码、生物识别)。
  • 限制广播数据中敏感信息的暴露(如隐藏设备型号、用户标识)。

BLE 扫描的安全风险需从 隐私保护、数据完整性、设备认证、资源管理 多维度防范,核心在于通过 地址随机化 + 加密认证 + 动态策略 构建防御体系,同时结合硬件(如支持安全元件的芯片)与固件的安全能力,实现端到端的安全防护。

Q22:如何在高密度设备环境中(如 1000+ 设备)优化扫描效率?

答案

在高密度设备环境中优化 BLE 扫描效率需多维度策略:

①硬件层:选用支持多链路并发和扫描分集(Scan Diversity)的芯片,提升并行处理能力与信号捕捉率。

②协议栈层:增大 HCI 缓冲区(修改 bt_stack.conf)避免数据溢出,提升扫描线程优先级(adb shell)确保资源抢占,启用主动扫描并合理配置扫描窗口 / 间隔(如缩短窗口提升频率)。

③应用层

  • 过滤策略:按 UUID/MAC/RSSI 预筛选目标设备,减少无效回调;
  • 异步批量处理:用 RxJava 等线程池异步处理扫描结果,通过setReportDelay()启用批量上报,降低 CPU 负载;
  • 去重机制:用集合缓存已发现设备地址,避免重复处理;
  • 分时扫描:采用周期性扫描或分信道轮询(如跨 37/38/39 信道分布),规避同频干扰。

④动态调优:根据设备密度自适应调整扫描参数(如延长间隔降低功耗),结合硬件特性(如多天线)提升抗干扰能力。

Q23:BLE 扫描与 Wi-Fi 扫描的共存问题如何解决?

答案

BLE与 Wi-Fi 均工作在 2.4GHz 公共频段(部分 Wi-Fi 也使用 5GHz),两者扫描时可能因频段重叠导致信号干扰,表现为扫描速度变慢、设备漏检或 Wi-Fi 吞吐量下降。解决共存问题需从硬件设计、系统调度、协议优化等多层面入手,以下是核心解决方案:

①硬件层优化:物理隔离与射频协同

  • 独立天线设计

    • 使用独立的 Wi-Fi 和 BLE 天线,或通过 天线分集技术 减少信号耦合干扰。
    • 示例:部分芯片组(如高通 QCA6391)集成独立射频链路,支持 Wi-Fi 与 BLE 并行工作。
  • 射频前端优化

    • 通过 射频开关(RF Switch) 或 双工器(Diplexer) 分时复用天线,避免同时收发信号。
    • 启用 动态频率选择(DFS)(仅适用于 5GHz Wi-Fi),避开 2.4GHz 频段的密集干扰。

②系统层调度:分时复用与优先级管理

  • 分时扫描(Time Division)

    • 操作系统(如 Android/iOS)通过 共存调度器 协调 Wi-Fi 和 BLE 扫描的时序:
      • 当 Wi-Fi 进行信道扫描或数据传输时,暂缓 BLE 扫描;
      • BLE 扫描期间,降低 Wi-Fi 扫描的频率或优先级。
    • 示例:Android 的 WiFiManager 和 BluetoothLeScanner 可通过系统服务动态调整扫描窗口。
  • 优先级配置

    • 根据业务场景设定优先级:
      • 视频通话、文件传输等 Wi-Fi 高负载场景,优先保障 Wi-Fi 带宽;
      • 低功耗蓝牙(如 ibeacon 定位)场景,可允许 BLE 间歇性扫描。

③协议层优化:信道规避与参数调整

  • 信道错峰策略

    • BLE 扫描时优先使用 非重叠信道
      • BLE 信道 1(2402MHz)、37(2402MHz)对应 Wi-Fi 的低频段(信道 1-3),干扰较少;
      • 避开 Wi-Fi 常用信道(如信道 6、11)。
    • 通过 主动扫描 替代 被动扫描,减少扫描时间(主动扫描可快速获取设备响应)。
  • 扫描参数调优

    • 减小 BLE 扫描窗口(Scan Window)或增大扫描间隔(Scan Interval),降低持续占用信道的时间。
    • 示例:Android 中通过 ScanSettings.Builder.setScanMode() 设置 LOW_LATENCY 或 LOW_POWER 模式,平衡扫描效率与共存性。

④应用层优化:动态感知与策略适配

  • 干扰感知与动态调整

    • 应用层实时监测 Wi-Fi 信号强度(如通过 WifiManager.getConnectionInfo()),当检测到 Wi-Fi 高负载时,主动延迟或降级 BLE 扫描频率。
    • 结合业务场景灵活切换扫描策略:
      • 后台定位场景:采用低频扫描(如间隔 10 秒);
      • 实时通信场景:临时提升扫描优先级,但限制持续时间。
  • 批量处理与节能模式

    • 使用 批量上报模式(如 BLE 的 setReportDelay())减少回调次数,降低 CPU 占用和射频开关频率。
    • 启用 Wi-Fi 的 节能模式(PS-Poll) 或 BLE 的 连接态节能机制(如超长间隔连接),避免持续唤醒射频模块。

⑤芯片级解决方案:共存芯片与固件优化

  • Combo 芯片协同

    • 采用集成 Wi-Fi/BLE 的单芯片方案,芯片内部通过 时分双工(TDD) 或 频分双工(FDD) 硬件机制实现共存。
    • 固件层预定义共存规则,如 Wi-Fi 传输时自动暂停 BLE 广播接收。
  • 厂商定制化驱动:部分厂商(如 Broadcom、Realtek)在驱动层提供 共存配置接口,可通过系统参数(如 Android 的 bt_config.conf)调整 BLE 与 Wi-Fi 的协同策略。

典型场景与验证方法:

  • 验证工具:使用频谱分析仪(如 Keysight N934x)监测 2.4GHz 频段占用情况,对比同时扫描时的信号重叠度。
  • 极端场景测试:在密集 Wi-Fi 环境(如办公室、商场)中,测试 BLE 设备的扫描成功率与 Wi-Fi 吞吐量的相互影响。

BLE 与 Wi-Fi 共存的核心是 分时、分信道、分优先级 的资源管理。通过硬件隔离减少物理干扰,系统层动态调度避免信道冲突,应用层根据业务灵活适配扫描策略,结合芯片级协同优化,可有效提升两者的并行工作效率。实际开发中需结合设备硬件能力与场景需求,选择性价比最优的方案(如优先采用支持共存的 Combo 芯片,其次通过软件策略调优)。


三、前沿技术面试题:BLE 5.1 + 与扫描的结合

Q24:BLE 5.1 的 AoA/AoD 定位技术如何与扫描结合?(华为 2024 校招真题)

题目背景:华为智能家居场景需通过 BLE 定位设备(如空调遥控器)。

答案
核心概念

  • AoA(Angle of Arrival):接收设备(如手机)通过多个天线接收广播包的相位差,计算发射设备的到达角度;
  • AoD(Angle of Departure):发射设备(如遥控器)通过多个天线发送广播包,接收设备计算离开角度。

扫描与定位的结合流程(附示意图):

关键 API(Android 12+)

// 启用AoA扫描(需手机支持多天线)
ScanSettings settings = new ScanSettings.Builder().setPhy(ScanSettings.PHY_LE_1M).setLegacy(false).setUseAoA(true)  // 启用到达角计算.build();// 从ScanResult获取方位角
ScanResult result = ...;
if (result.getPrimaryPhy() == BluetoothDevice.PHY_LE_1M) {float angle = result.getAngleOfArrival();  // 单位:度(°)
}

Q25:BLE 5.2 的 “周期性广播同步(Periodic Advertising Sync)” 如何优化扫描功耗?(苹果 2023 社招真题)

题目背景:苹果 AirPods Pro 需在低电量时保持与 iPhone 的连接。

答案
传统扫描的痛点:设备需持续轮询广播通道,导致高功耗。

BLE 5.2 的改进

  • 设备按固定周期(16ms~2.56s)发送周期性广播;
  • 扫描设备同步到该周期,仅在广播发送时刻唤醒监听,其他时间休眠。

功耗对比(AirPods 案例)

技术扫描功耗(mW)发现延迟(ms)适用场景
传统扫描5.2100~500常规设备发现
周期性同步1.116~256低功耗长连接设备

Q26:华为2023校招题

题目:设计BLE扫描参数使设备在10秒内发现率>95%,且功耗低于5mA

 参考答案

new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_BALANCED).setReportDelay(0) // 实时上报.setScanInterval(80) // 80×0.625ms=50ms.setScanWindow(48)   // 48×0.625ms=30ms.build();

理论依据
50ms间隔覆盖100ms广播周期概率:P = 1 - (1 - 30/100)^3 ≈ 97.3%(三通道轮询) 

Q27:小米2024社招题

题目:BLE扫描导致UI卡顿如何优化?

解决方案

①回调线程分离:将扫描回调分发至工作线程

HandlerThread workerThread = new HandlerThread("BLE-Callback");
workerThread.start();
scanner.startScan(filters, settings, new ScanCallback() {@Overridepublic void onScanResult(...) {// 在workerThread执行}
});

②去重合并:相同设备200ms内仅更新一次

③数据预解析:广播包解析在Native层完成 


四、实战演练:扫描问题的端到端调试

场景 1:智能手表配对时扫描不到手机(小米手环 7 开发案例)

现象:用户打开手环蓝牙后,无法扫描到已开启蓝牙的 iPhone 15。

调试步骤与解析

①确认手机广播状态:使用 nRF Connect 抓包,发现 iPhone 15 的广播包中AD Type 0x09(设备名称)字段为空。

②检查扫描过滤条件:手环应用设置了ScanFilter过滤设备名称为 “iPhone”,但 iPhone 默认广播名称为空(需用户手动开启 “显示蓝牙名称”)。

③优化方案

  • 移除设备名称过滤,改为通过服务 UUID(如0000180A-0000-1000-8000-00805F9B34FB,手机信息服务)过滤;
  • 在应用层增加提示:“请确保手机蓝牙名称已开启”。

场景 2:Android 平板扫描时频繁崩溃(三星 Tab S8 案例)

现象:平板调用startScan()后,系统报BluetoothGattService: Binder is dead错误。

根因分析与解决

步骤操作结论
1. 检查日志查看logcat,发现btif_gattc线程 ANR扫描线程被阻塞
2. 分析代码应用在onScanResult中执行耗时操作(如数据库写入)主线程阻塞导致 Binder 死亡
3. 修复方案将扫描结果处理移至子线程(如使用Coroutine崩溃率从 30% 降至 0%

场景 3:汽车钥匙(BLE)扫描延迟高(特斯拉 Model 3 案例)

现象:用户靠近车辆时,钥匙需 3 秒以上才能扫描到汽车广播。

优化策略

优化点原方案新方案效果(延迟)
扫描模式低功耗模式(SCAN_MODE_LOW_POWER)平衡模式(SCAN_MODE_BALANCED)3s→500ms
扫描窗口50ms150ms(覆盖汽车广播周期)500ms→200ms
通道优先级轮询 37/38/39 通道优先扫描 38 通道(汽车常用)200ms→100ms

场景4:解析一个 BLE 扫描相关的系统崩溃日志 

日志片段

FATAL EXCEPTION: BluetoothLeScanner
Process: com.example.bleapp, PID: 12345
java.lang.SecurityException: Need ACCESS_FINE_LOCATION permissionat android.os.Parcel.createException(Parcel.java:2071)...

解析步骤

①异常类型识别SecurityException,权限相关问题。

②权限检查

  • Android 6.0+ 需要 ACCESS_FINE_LOCATION 权限。
  • 即使不使用位置信息,BLE 扫描仍需该权限(因设备可能携带位置信息)。

③解决方案

  • 动态申请权限:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_CODE_LOCATION);
}
  • 添加权限声明到 AndroidManifest.xml: 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

五、Android BLE 扫描常见问题汇总表

问题类型现象描述可能原因解决方法
扫描无回调调用startScan()后无onScanResult权限未申请(Android 12 + 的BLUETOOTH_SCAN动态申请权限 + 检查Settings
扫描结果重复同一设备每秒回调多次设备广播间隔 < 扫描窗口应用层去重(记录 MAC + 时间戳)
扫描丢包抓包显示有广播包但应用无回调Bluedroid HCI 缓冲区溢出开启批量上报(setReportDelay()
扫描功耗高设备续航下降明显扫描间隔过小(如 < 100ms)切换为 “扫描 - 休眠” 策略(如 Interval=1s)
iOS 设备难扫描无法扫描到 iPhone/iPadiOS 默认广播包不包含服务 UUID使用withServices:nil关闭过滤
后台扫描失效应用切后台后扫描停止Android 12 + 禁止后台持续扫描使用ForegroundService+ 定时任务

六、总结

BLE 扫描的进阶能力,本质是协议理解 + 平台适配 + 问题调试的技术闭环:

  • 协议层:掌握 BLE 5.0/5.1/5.2/5.4/6.0 的扩展特性(如扩展广播、周期性同步);
  • 平台层:熟悉 Android/iOS 的扫描 API 差异(如 Android 的ScanFilter、iOS 的CBCentralManager);
  • 调试层:熟练使用抓包工具(Elisys)、功耗仪(Power Profiler)、日志分析(logcat/syslog)。

通过本文补充的进阶题与实战案例,你不仅能应对面试中的 “超纲问题”,更能在实际开发中成为 BLE 扫描的 “技术专家”。


相关文章:

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...