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

uniapp微信小程序:WIFI设备配网之TCP/UDP开发AP配网

一、AP配网技术原理

1.1 配网模式选择

AP配网(SoftAP模式)是IoT设备配网成功率最高的方案之一

1、其核心原理:

  • ​设备端​​:启动AP模式(如SSID格式YC3000_XXXX,默认IP192.168.4.1
  • ​手机端​​:直连设备热点后建立TCP/UDP通信,传输目标路由器的SSID/Password

1.2 协议交互流程

sequenceDiagram
小程序->>设备AP: 连接热点(SSID:YC3000_XXXX)
小程序->>设备AP: 建立TCP连接(IP:192.168.4.1:8266)
小程序->>设备AP: 发送AT+CJWAP指令
设备AP-->>小程序: 返回"Data Correct"或"Data Error"
小程序->>设备AP: 发送AT+RST指令重启
设备AP->>路由器: 连接目标WiFi
基础描述(大白话)

WiFi设备进入配网状态,实际是进入AP模式,设备开放一个Wifi热点出来。手机通过连接上设备Wifi模块的热点,将路由器名字和密码直接发送给Wifi设备,设备接收成功后,重启设备。

        UDP配网逻辑是一样的,如果需要UDP通信,命令参考UDPSocket | 微信开放文档

二、操作过程

2.1 用户长按按钮,触发WiFi设备进入配网模式。设备在此模式下创建wifi热点(单纯AP模式),开启TCP服务(默认 IP 为192.168.4.1,端口为8266),使指示灯闪烁。
2.2 小程序按照提示依次获取 Wi-Fi 列表,输入目标路由器的 SSID/PSW,再选择设备 softAP 热点的 SSID/PSW。
2.3 手机连接设备 softAP 热点成功后,小程序作为 TCP 客户端会连接 Wi-Fi 设备上面的 TCP 服务。
2.4 小程序给设备 TCP 服务,发送目标 Wi-Fi 路由器的 SSID/PSW 。 

2.5 设备接收成功后重启,配网成功 

三、UniApp开发实现

3.1 开发环境配置

        1.​​manifest.json声明权限​​:

"mp-weixin" : {"appid" : "******",//微信小程序appid"setting" : {"urlCheck" : false,"minified" : true},"usingComponents" : true,"permission" : {//必要,获取WiFi配置必须申请使用位置权限"scope.userLocation" : {"desc" : "用户使用小程序关联物联设备时,需要获取用户的所在位置区域"}},"requiredPrivateInfos" : [ "getLocation", "chooseLocation" ],},

        2.设备热点连接​​(需用户手动操作引导) 

uni.connectWifi({SSID: 'YC3000_XXXX', // 设备热点名称password: 'z111111',success: (res) => { console.log("连接成功,开始TCP通信") },fail: (err) => { console.log("连接失败", err) }
});

3.2 TCP核心通信模块

连接建立
    this.tcp = wx.createTCPSocket();console.log('运行')this.tcp.connect({address: '192.168.4.1',//默认 IP 为192.168.4.1port: 8266,//默认端口为8266});

指令发送 

this.tcp.write('AT+CJWAP="WIFI账户名","WIFI密码"');

重启设备 

this.tcp.write('AT+RST');

四、Demo页面源码

<template lang="html"><view class="sin-home"><view class="">设备配网</view><input v-model="form.name"  type="text" placeholder="网络1名称" placeholder-class="placeholder" ><input v-model="form.pwd"  type="text" placeholder="密码" placeholder-class="placeholder" ><view class="">获取授权</view><button @click="getconfirm()">getconfirm</button><view class="">获取wifi</view><button @click="getWIFI()">getWIFI</button><view class="">测试配网</view><button @click="startWifi()">startWifi</button><button @click="connectWifi()">connectWifi</button><button @click="connectTCP()">connectTCP</button><button @click="sendDataTCP()">sendDataTCP</button><button @click="sendRST()">sendRST</button><view>{{tips}}</view>{{tips2}}</view>
</template><script>export default {name: 'home',data() {return {form: {name: '',result: '',pwd: ''},tips:'暂无数据',tips2:'未连接',tcp:'',}},computed: {},watch: {},onLoad() {},async onReady() {},onShow() {},// 下拉刷新onPullDownRefresh:function(){},onPageScroll(e) {},methods: {getconfirm(){// 获取授权状态uni.getSetting({success: (res) => {const hasLocationAuth = res.authSetting['scope.userLocation']const hasAgreePrivacy = uni.getStorageSync('hasAgreePrivacy')// 如果隐私和位置权限都已授权,直接返回if (hasAgreePrivacy && hasLocationAuth) {resolve(true)return}// 处理隐私协议if (!hasAgreePrivacy) {uni.showModal({title: '位置信息授权',content: '获取WiFi列表需要位置权限,是否前往设置?',confirmText: '去设置',cancelText: '取消',success: (modalRes) => {if (modalRes.confirm) {// 打开设置页面uni.openSetting({success: (settingRes) => {resolve(!!settingRes.authSetting['scope.userLocation'])},fail: () => {resolve(false)}})} else {resolve(false)}},fail: () => {resolve(false)}})} },fail: () => {resolve(false)}})},getWIFI(){wx.getWifiList({success(res) {this.tips = JSON.stringify(res)wx.onGetWifiList(function(res) {console.log("获取wifi列表");console.log(res.wifiList,102); //在这里提取列表数据this.tips = JSON.stringify(res.wifiList)})},fail(res) {console.log(res)//报错的相关处理},})},// 开启wifistartWifi() {console.log('开始wifi接口');wx.startWifi({complete (res) {console.log(res)}})},// 链接wificonnectWifi() {uni.connectWifi({SSID: 'YC3000_XXXX', // 设备热点名称password: '',success: (res) => { console.log("连接成功,开始TCP通信") },fail: (err) => { console.log("连接失败", err) }});return},// 链接TCPconnectTCP() {this.tcp = wx.createTCPSocket();console.log('运行')this.tcp.connect({address: '192.168.4.1',port: 8266,});},// 发送命令-账号密码sendDataTCP() {this.tcp.write('AT+CJWAP="WIFI账户名","WIFI密码"');},// 发送命令-重启sendRST(){this.tcp.write('AT+RST');},}}
</script><style lang="scss">.sin-home{padding: 50px 20px;}
</style>

demo页面展示

                

五、注意

1、想要获取WiFi列表,必须授权获取位置信息。

2、开发者工具暂时不支持 调试,必须使用真机进行开发

3、使用手机手动切换连接设备热点会出问题,请使用connectWifi()链接

相关文章:

uniapp微信小程序:WIFI设备配网之TCP/UDP开发AP配网

一、AP配网技术原理 1.1 配网模式选择 AP配网&#xff08;SoftAP模式&#xff09;是IoT设备配网成功率最高的方案之一 1、其核心原理&#xff1a; ​​设备端​​&#xff1a;启动AP模式&#xff08;如SSID格式YC3000_XXXX&#xff0c;默认IP192.168.4.1&#xff09;​​手…...

docker部署seata

seata版本&#xff1a;2.0.0 使用eureka作为注册中心&#xff0c;mysql作为存储 拉取镜像 docker pull seataio/seata-server:2.0.0mysql建表语句 可从 github下载sql脚本 -- seata_server.branch_table definition CREATE TABLE branch_table (branch_id bigint NOT NULL,…...

JVM 内存分布详解

/*** 示例类&#xff0c;展示各种成员在JVM中的存储位置*/ public class MemoryDistributionExample {// 1. 实例变量&#xff08;普通成员变量&#xff09; - 存储在堆内存的对象实例中private int instanceVar 10;private String instanceRef "Instance Reference&quo…...

AR行业应用案例与NXP架构的结合

1. 工业巡检AR头盔 场景示例&#xff1a;宁德核电基地使用AR智能头盔进行设备巡检&#xff0c;通过实时数据叠加和远程指导&#xff0c;将工作效率提升35%。头盔需处理传感器数据、图像渲染和低延迟通信1。 NXP架构支持&#xff1a; 协处理器角色&#xff1a;NXP i.MX RT系列M…...

OpenCV 图形API(49)颜色空间转换-----将 NV12 格式的图像数据转换为 BGR 颜色空间函数NV12toBGR()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 将图像从NV12&#xff08;YUV420p&#xff09;颜色空间转换为BGR。 该函数将输入图像从NV12颜色空间转换为RGB。Y、U和V通道值的常规范围是0到25…...

Transformer中Post-Norm和Pre-Norm如何选择?

pre-norm: x n 1 x n f ( n o r m ( x n ) ) x_{n1}x_nf(norm(x_n)) xn1​xn​f(norm(xn​)) 其中第二项的方差由于有 norm 是不随层数变化的&#xff0c;于是 x 的方差会在主干上随层数积累。到了深层以后&#xff0c;单层对主干的影响可以视为小量&#xff0c;而不同层的 …...

jvm-描述符与特征签名的区别

在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;存储的是方法签名&#xff0c;而不是仅仅方法描述符。方法签名包含了方法的参数类型和返回值类型的信息&#xff0c;而方法描述符通常指的是仅包含参数类型的那部分信息。为了更清晰地理解这两者的区别以及它们如何在JVM…...

JVM有什么调优参数?

-Xms&#xff1a;堆最小值 -Xmx&#xff1a;堆最大值。-Xms与-Xmx 的单位默认字节都是以k、m做单位的。 通常这两个配置参数相等&#xff0c;避免每次空间不足&#xff0c;动态扩容带来的影响。 -Xmn&#xff1a;新生代大小 -Xss&#xff1a;每个线程池的栈大小。在jdk5以上…...

QT:Qt5 串口模块 (QSerialPort) 在 VS2015 中正确关闭串口避免被占用

以下是使用 Qt5 串口模块 (QSerialPort) 在 VS2015 中正确关闭串口避免被占用的完整示例代码&#xff1a; #include <QSerialPort> #include <QDebug>// 创建全局或类成员变量&#xff08;推荐使用智能指针&#xff09; QSerialPort *serialPort nullptr; // 打开…...

14.QT-多元素控件|QListWidget|QTableWidget|QTreeWidget(C++)

Qt中提供的多元素控件有: QListWidgetQListViewQTableWidgetQTableViewQTreeWidgetQTreeView 以QTableWidget和QTableView为例. QTableView是基于MVC设计的控件.QTableView⾃⾝不持有数据.使⽤QTableView的时候需要⽤⼾创建⼀个Model对象(⽐如 QStandardModel ),并且把Model…...

单页面应用的特点,什么是路由,VueRouter的下载,安装和使用,路由的封装抽离,声明式导航的介绍和使用

文章目录 一.什么是单页面应用?二.什么是路由?生活中的路由和Vue中的路由 三.VueRouter(重点)0.引出1.介绍2.下载与使用(5个基本步骤2个核心步骤)2.1 五个基本步骤2.2 两个核心步骤 一.什么是单页面应用? 定义和特点:所有功能都在一个HTML中实现 示例:网易云音乐 多页面应…...

Java并发编程-线程通讯

Java并发编程-线程通讯 线程通讯常见场景实现方法等待通知信号量实现栅栏实现锁机制实现 CountDownLatchCountDownLatch 常用方法说明模拟报表统计场景其他样例 CyclicBarrier 线程通讯 线程通讯指的是多个线程之间通过共享内存或消息传递等方式来协调和同步它们的执行。在多线…...

ubuntu学习day4

4 Linux 文件操作 4.1 基于文件指针的文件操作 Linux 中对目录和设备的操作都是文件操作&#xff0c;文件分为普通文件&#xff0c;目录文件&#xff0c;链接文件和设备文件。普通文件&#xff1a;也称磁盘文件&#xff0c;并且能够进行随机的数据存储(能够自由 seek 定位到某…...

百度暑期实习岗位超3000个,AI相关岗位占比87%,近屿智能携AIGC课程加速人才输出

今年3月&#xff0c;百度重磅发布3000暑期实习岗位&#xff0c;聚焦大模型、机器学习、自动驾驶等AI方向的岗位比例高达87%。此次实习岗位涉及技术研发、产品策划、专业服务、管理支持、政企解决方案等四大类别&#xff0c;覆盖超300个岗位细分方向。值得一提的是&#xff0c;百…...

vin码识别技术-车辆vin识别代码-Java接口集成

快速识别车辆vin码有助于提升汽车保险行业、4s店车辆出入库、二手车交易、车辆租赁公司等众多业务流程的管理。vin码识别接口&#xff0c;为汽车后市场实现车辆vin信息的快速提取提供了高效且可靠的解决方案。基于先进的ocr技术&#xff0c;能够迅速定位图片中的VIN码区域&…...

随机深林算法是分类还是回归?

随机森林算法既可以用于分类也可以用于回归。 一、随机森林用于分类的情况 原理 随机森林是一种集成学习算法&#xff0c;它通过构建多棵决策树来提高预测性能。在分类任务中&#xff0c;每棵决策树都是基于随机选择的特征子集和随机抽样的数据子集&#xff08;通常是通过自助…...

【现代深度学习技术】循环神经网络05:循环神经网络的从零开始实现

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…...

北京大学|第8讲:《生成未必理解:基于扩散模型能否实现视觉世界模型》

导 读INTRODUCTION 随着人工智能技术的飞速发展&#xff0c;AI在图像和视频生成领域取得了显著成就&#xff0c;但生成和理解之间的统一仍然是一个挑战。北京大学深圳研究生院助理教授袁粒的团队正在探索如何实现这一目标&#xff0c;他们的研究可能会改变我们对AI生成和理解能…...

C++如何处理多线程环境下的异常?如何确保资源在异常情况下也能正确释放

多线程编程的基本概念与挑战 多线程编程的核心思想是将程序的执行划分为多个并行运行的线程&#xff0c;每个线程可以独立处理任务&#xff0c;从而充分利用多核处理器的性能优势。在C中&#xff0c;开发者可以通过std::thread创建线程&#xff0c;并使用同步原语如std::mutex、…...

Gmssl实战

最近项目要引入gm算法&#xff0c;实现aes和sm4数据加密&#xff0c;研究了一下两个系统的安装和测试用例 linux&#xff0c;从github下载GmSSL库&#xff08; https://github.com/guanzhi/GmSSL.git &#xff09;&#xff0c;以下为安装方法。 ## GmSSL库安装编译,需要确认…...

C语言 函数(上)

目录 1.函数的概念 2.库函数 3.自定义函数 4.形参和实参 5.return语句 1.函数的概念 数学中我们其实就见过函数的概念&#xff0c;比如&#xff1a;一次函数y kx b&#xff0c;k和b都是常数&#xff0c;给一个任意的x&#xff0c; 就得到一个y值。 其实在C语言也引入…...

2025.04.20【Lollipop】| Lollipop图绘制命令简介

Customize markers See the different options allowing to customize the marker on top of the stem. Customize stems See the different options allowing to customize the stems. 文章目录 Customize markersCustomize stems Lollipop图简介R语言中的Lollipop图使用ggp…...

多源异构网络安全数据(CAPEC、CPE、CVE、CVSS、CWE、ATTCK、D3FEND)的详细解析,包括其作用、数据内容及相互联系

1. 各数据源的作用与数据内容 数据源核心作用核心数据类型示例CWE&#xff08;Common Weakness Enumeration&#xff09;描述软件/硬件安全弱点的根本原因&#xff08;代码缺陷、逻辑错误&#xff09;弱点分类、描述、修复建议CWE-79&#xff08;跨站脚本漏洞&#xff09;CVE&…...

2025年渗透测试面试题总结-拷打题库10(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 2025年渗透测试面试题总结-拷打题库10 1. CSRF成因及防御措施 | 非Token防御 2. XSS Worm原理 3. Co…...

(二十九)安卓开发中DataBinding 和 ViewBinding详解

在安卓开发中&#xff0c;DataBinding 和 ViewBinding 是两种非常有用的工具&#xff0c;它们都可以简化视图与代码之间的交互&#xff0c;但它们的目的和功能有所不同。本文将详细讲解它们的定义、区别&#xff0c;并结合代码示例和具体使用场景进行说明。 一、ViewBinding 简…...

【C#】.net core 6.0调用MVC API接口时,提示Unsupported Media Type,状态码415

&#x1f339;欢迎来到《小5讲堂》&#x1f339; &#x1f339;这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。&#x1f339; &#x1f339;温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01;&#…...

Spark SQL核心解析:大数据时代的结构化处理利器

在大数据处理领域&#xff0c;Spark以其强大的分布式计算能力脱颖而出&#xff0c;而Spark SQL作为Spark生态系统的重要组成部分&#xff0c;为结构化和半结构化数据处理提供了高效便捷的解决方案。它不仅整合了传统SQL的强大查询功能&#xff0c;还深度集成到Spark的计算框架中…...

oracle expdp/impdp 用法详解

oracle expdp/impdp 用法详解 创建逻辑目录&#xff0c;该命令不会在操作系统创建真正的目录&#xff0c;最好以system等管理员创建。 create directory db_bak as d:\test\dump; 查看管理理员目录&#xff08;同时查看操作系统是否存在&#xff0c;因为Oracle并不关心该目录是…...

什么是AI智能音视频?小天互连即时通讯带您体验

信息爆炸的时代&#xff0c;音视频会议与我们的工作形影不离。如何更好的进行音视频互动呢&#xff1f;&#xff0c;小天互连即时通讯深度接入DeepSeek&#xff0c;以AI 技术与大模型的结合将为音视频处理带来更高视频享受&#xff0c;更便捷的操作&#xff0c;更安全的环境&am…...

Qt 概述

目录 1. Qt 背景介绍1.1 什么是 Qt1.2 Qt 的发展史1.3 Qt 支持的平台1.4 Qt 版本1.5 Qt 的优点1.6 Qt 的应用场景1.7 Qt 的成功案例1.8 Qt 的发展前景及就业分析 2. 搭建 Qt 开发环境2.1 Qt 的开发工具概述2.2 Qt SDK 的下载和安装2.2.1 Qt SDK 的下载2.2.2 Qt SDK 的安装 2.3 …...

uniapp-商城-31-shop页面中的 我的订单

前面的章节讲了很多关于页面 布局 的知识。 现在来看看其他栏目&#xff0c;我的订单页面。 1 页面样式图 基本的样式包含shop页面 我的订单 点击我的订单&#xff0c;跳转到订单页面 点击订单的每一条订单&#xff0c;跳转到订单详情 2、创建订单页面 2.1 创建sub页面文件…...

CCF-GESP认证的学习资源与知识点详细指南

CCF-GESP认证的学习资源与知识点详细指南 一、CCF-GESP认证简介 CCF编程能力等级认证&#xff08;GESP&#xff09;是由中国计算机学会&#xff08;CCF&#xff09;主办的青少年编程能力认证考试&#xff0c;旨在提升青少年的计算机和编程教育水平&#xff0c;推广编程教育。G…...

使用SystemWeaver生成SOME/IP ETS ARXML的完整实战指南

使用SystemWeaver生成SOME/IP ETS ARXML的完整实战指南 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;可以分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/ccc 一、SystemWeaver与SOME/IP基础认知 1.1 SystemWe…...

Docker概念详解

文章目录 一、Docker&#xff1a;容器化应用的基石1.1 环境1.2 Docker 是什么1.3 Docker镜像1.3.1 基础镜像(Base Image)1.3.2 Dockerfile1.3.3 容器镜像&#xff08;Container Image&#xff09; 1.4 Registry1.5 容器1.6 Docker VS 虚拟机 二、Docker 的架构原理2.1 C/S软件架…...

CentOS7安装MySQL教程

一、准备阶段 1、更新系统软件包 首先&#xff0c;要确保系统已安装的软件包是最新版本&#xff0c;在终端执行以下命令&#xff1a; sudo yum update -y 2、添加 MySQL 官方 Yum 仓库 下载仓库配置文件&#xff08;包含GPG公钥&#xff09;&#xff1a;执行以下命令下载 My…...

把dll模块注入到游戏进程的方法_远线程注入

一. 概述 远线程注入是指为要注入的目标进程创建一个远程线程,在远程线程里面加载要注入的目标dll。Windows操作系统提供了跨进程的内存读写机制,这就为各种注入打下了基础。 二. 用到的Windows API函数 创建远程线程的API是CreateRemoteThread,查找msdn,其函数原型如下…...

实践项目开发-hbmV4V20250407-React+Taro多端项目依赖冲突解决方案

ReactTaro多端项目依赖冲突解决方案 问题背景 在开发基于ReactTaro的多端项目时&#xff0c;经常会遇到各种依赖版本冲突问题&#xff0c;特别是当项目同时需要支持小程序、H5和React Native时。本文记录了一个实际项目中遇到的依赖冲突问题及完整解决方案。 环境信息 项目…...

黑苹果win10和macOS双系统

问题&#xff1a;win10系统更新导致原有clover引导损坏&#xff0c;无法通过clover引导进入双系统&#xff0c;每次只能进入win10。 解决办法&#xff1a;使用EasyUEFI管理EFI启动项&#xff0c;将macOS启动项移动至最前&#xff0c;如果没效果还是每次启动都进win10&#xff…...

机器学习-08-推荐算法-案例

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中关联规则 参考 机器学习&#xff08;三&#xff09;&#xff1a;Apriori算法&#xff08;算法精讲&#xff09; Apriori 算法 理论 重点 MovieLens:一个常用的电影推荐系统领域的数据集 23张图&#x…...

数据结构——栈和队列

目录 1.栈&#xff08;stack&#xff09; 1.1 模拟实现 1.1.1 定义栈 1.1.2 初始化栈 1.1.3 销毁栈 ​编辑 1.1.4 入栈----栈顶 ​编辑 1.1.5 判栈空 1.1.6 出栈——栈顶 ​编辑 1.1.7 取栈顶数据 ​编辑 1.1.8 取栈的有效数据个数 ​编辑 2.队列&#xff08;…...

负载均衡与实时调度—LSF

文章目录 一、什么是LSF二、常用LSF作业命令2.1、提交作业-bsub2.2、查询作业-bjobs2.3、杀死作业-bkill2.4、查询队列-bqueues一、什么是LSF LSF(Load Sharing Facility),负载均衡设施,是一款分布式系统资源管理工具,LSF通过需求收集、分析负载、实时调度,使用户充分共享…...

[预备知识]2. PyTorch基本操作

PyTorch基本操作 本章节介绍 PyTorch 的基本操作&#xff0c;包括张量创建、数学运算和常用函数的使用方法。 1. 张量操作 1.1 张量创建 张量是PyTorch的核心数据结构&#xff0c;可表示为&#xff1a; 标量&#xff1a; x ∈ R x \in \mathbb{R} x∈R向量&#xff1a; x …...

音视频学习(三十五):aud

概念 AUD&#xff08;Access Unit Delimiter&#xff09;访问单元分隔符 AUD 是在视频编码&#xff08;特别是 H.264/AVC&#xff09;中定义的一种 NALU&#xff08;网络抽象层单元&#xff09; 类型&#xff0c;用于指示视频流中一帧&#xff08;访问单元&#xff09;的边界。…...

【Unity笔记】Unity音视频播放监听器封装笔记:VideoPlayer + AudioSource事件触发与编辑器扩展

关键点 Unity VideoPlayer 播放结束事件Unity AudioSource 播放检测 Unity音视频播放监听器封装笔记&#xff1a;VideoPlayer AudioSource事件触发与编辑器扩展 在 Unity 的多媒体开发中&#xff0c;我们经常需要监听 VideoPlayer 或 AudioSource 的播放状态&#xff0c;以便…...

使用有界线程池结合信号量限制任务提交速率

以下是使用 BoundedExecutor&#xff08;有界线程池&#xff09;结合信号量&#xff08;Semaphore&#xff09; 限制任务提交速率的完整代码实现&#xff0c;避免无界队列导致内存溢出&#xff1a; 代码实现 import java.util.concurrent.*;public class BoundedExecutorWithS…...

大数据学习(109)-Impala 和 Hive 之间的 SQL 差异

&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一…...

STM32F103_HAL库+寄存器学习笔记19 - CAN发送中断+CAN接收中断+接收所有CAN报文+ringbuffer数据结构

导言 完成本章节的学习后&#xff0c;CAN驱动代码已经具备实战项目的大部分功能&#xff0c;完全可以在工作上使用&#xff1a; CAN发送有串行与中断方式&#xff0c;且三个发送邮箱都使用了;CAN接收用FIFO1的三个邮箱与高效的数据结构ringbuffer。另外&#xff0c;还有接收FI…...

【 Git 全局忽略文件完全指南:配置、规则与最佳实践】

Git 全局忽略文件完全指南&#xff1a;配置、规则与最佳实践 前言 在软件开发过程中&#xff0c;我们经常遇到一些不需要被版本控制系统追踪的文件&#xff0c;例如IDE配置文件、编译生成的中间文件、日志文件等。虽然可以在每个项目中创建.gitignore文件&#xff0c;但对于开…...

RabbitMQ常见面试题回答重点

文章目录 什么是消息队列&#xff1f;为什么需要消息队列消息队列的模型消息队列常见名词如何保证消息不丢失&#xff1f;&#xff08;可靠性&#xff09;如何保证消息不重复/业务幂等性如何保证消息有序性如何处理消息堆积消息队列设计为推送还是拉取 / 推拉模式优点无法路由的…...

一文详解opencv-python环境搭建:Mac配置python的cv2开发环境

在计算机视觉领域&#xff0c;OpenCV 作为跨平台的计算机视觉和机器学习软件库&#xff0c;凭借其丰富的功能和稳定的性能&#xff0c;已成为开发者的重要工具之一。而 Python 语言因其简洁的语法和强大的科学计算生态&#xff0c;成为许多开发者调用 OpenCV 功能的首选语言组合…...