开源嵌入式实时操作系统uC/OS-II介绍
一、uC/OS-II的诞生:从开源实验到行业标杆
背景与起源
uC/OS-II(Micro-Controller Operating System Version II)诞生于1992年,由嵌入式系统先驱Jean J. Labrosse开发。其前身uC/OS(1991年)最初作为教学工具发布于《Embedded Systems Programming》杂志,随后因用户需求演变为商业级实时操作系统(RTOS)。uC/OS-II的设计目标是为资源有限的嵌入式设备提供高可靠性、可移植性和确定性实时响应,填补了当时小型RTOS市场的空白。
核心设计哲学:
- Labrosse强调代码透明性与可裁剪性,uC/OS-II以简洁性和可验证性著称:
- 全内核代码量仅6,000行左右(C语言),便于开发者理解与定制;
- 采用优先级抢占式调度,确保硬实时任务的确定性;
- 开源,代码通过MISRA C规范认证,适合安全关键场景。
来自uC/OS官网
-
µC/OS-II and µC/OS-III are preemptive, highly portable, and scalable real-time kernels。
uC/OS是一种抢占式、高度可移植和可扩展的实时内核。
-
Designed for ease of use on a huge number of CPU architectures, these kernels are a key component of the µC/OS real-time operating system。
uC/OS内核便于在众多CPU架构上使用,这也是uC/OS实时操作系统的一个关键组成部分。
-
µC/OS-II and µC/OS-III are preemptive, highly portable, and scalable real-time kernels.
uC/OS是一种抢占式、高度可移植和可扩展的实时内核
-
Preemptive multitasking real-time kernel with optional round-robin scheduling
抢占式多任务实时内核,可选择轮流调度方式
-
Delivered with complete, clean, consistent source code with in-depth documentation
提供完整、干净、一致的源代码,并附有深入的文档
-
Highly scalable: Unlimited number of tasks, priorities, and kernel objects
具有高度的可裁剪性:无数量限制的任务,优先级和内核成员
-
Resource-efficient: 6K to 24K bytes code space, 2K+ bytes data space)
高效的代码:6-24KB代码空间和2KB的数据空间
-
Very low interrupt disable time
极低的关中断耗时
-
Extensive performance measurement metrics (configurable)
提供多种性能测量机制
-
Certifiable for safety-critical applications
可适用于关键安全应用的认证报告
uC/OS-II vs uC/OS-III
二、行业应用与认证:高可靠性领域的信任之选
uC/OS-II凭借其确定性响应与可审计性,广泛应用于对可靠性要求严苛的领域:
医疗设备
通过**FDA 510(k)**认证案例:用于心脏起搏器、输液泵等生命维持设备,其任务调度机制确保关键任务(如心跳信号处理)的零延迟执行。
优势:代码可追溯性满足IEC 62304医疗软件安全标准。
航空航天
符合DO-178B/C航空标准:用于飞行控制子系统(如无人机导航模块),通过形式化验证工具(如LDRA)确保代码无死锁与优先级反转风险。
案例:NASA部分低轨卫星的地面测试系统采用uC/OS-II。
工业与汽车电子
符合IEC 61508(工业安全)与ISO 26262(汽车功能安全)标准,用于PLC控制器、车载ECU等。
例如:Bosch的早期发动机控制单元(ECU)采用uC/OS-II管理多任务时序。
三、任务调度算法:硬实时性的核心保障
1. 优先级抢占式调度
uC/OS-II采用静态优先级抢占模型:
每个任务分配唯一优先级(0为最高,通常保留给系统任务);
调度器始终运行最高优先级就绪任务,低优先级任务被抢占;
**中断服务程序(ISR)**可触发任务切换,确保极低延迟。
2. 调度器实现机制
就绪表(Ready List):
通过位图(bitmap)和链表管理任务状态,查找最高优先级任务的时间复杂度为O(1)。
临界区保护:
通过关闭中断或调度器锁保证数据一致性。
任务切换时间:
典型值< 5μs(ARM Cortex-M3 @72MHz)。
就绪表:
高效管理的秘密 - 就绪表是任务调度的核心数据结构,由两部分组成:
OSRdyGrp(8位组标志):标记哪些任务组(每组8个优先级)包含就绪任务。
OSRdyTbl[](8元素数组):每个元素对应一个优先级组,每位表示具体优先级任务是否就绪。
- 任务就绪的更新逻辑
当任务进入就绪态时,系统通过位操作更新就绪表:
OSRdyGrp |= OSMapTbl[prio >> 3]; // 标记组
OSRdyTbl[prio >> 3] |= OSMapTbl[prio & 0x07]; // 标记具体位
- 快速查找最高优先级任务
uC/OS-II通过**查表法(OSUnMapTbl)**快速定位最高优先级任务,仅需3次查表操作:
y = OSUnMapTbl[OSRdyGrp]; // 找到最高优先级组
x = OSUnMapTbl[OSRdyTbl[y]]; // 找到组内最高优先级位
highest_prio = (y << 3) + x; // 计算全局优先级
该算法时间复杂度为O(1),远优于遍历搜索,确保调度高效性。
3. 任务调度算法的代码注释+图解
Task Running -> OSQPend -> Task Waiting -> OSQPost -> Task Ready -> Task Ready流程
OSQPend:优先级为45的任务等待资源被挂起
OSQPost:释放资源唤醒被挂起的优先级为45的任务
任务调度相关变量和常量定义
优先级为45的任务相关变量在任务创建时初始化
任务就绪组变量定义
将挂起的优先级为45的任务置为Ready状态
OS_Sched找到Ready的任务(优先级为45)并执行调度
优先级为10的任务相关变量在任务创建时初始化
将挂起的优先级为10的任务置为Ready状态
OS_Sched找到Ready的任务(优先级为10)并执行调度
4. 实时性增强设计
零中断延迟:ISR直接调用调度器,无需等待内核退出;
优先级天花板协议:可选配置防止优先级反转;
确定性行为:无动态内存分配,任务状态转换时间可预测。
5. 实时性保障
- 确定性分析
操作 | 时钟周期数 |
---|---|
查找最高优先级任务 | 5~10 |
上下文切换 | 24~50 |
中断响应延迟 | 典型值< 5μs |
- 优先级反转预防
虽然uC/OS-II未内置优先级继承机制,但可以通过以下方式规避:
- 合理设计任务优先级
- 控制临界区执行时间
- 使用信号量策略优化
四、性能对比:uC/OS-II vs 主流RTOS
以下为基于ARM Cortex-M4平台的典型性能数据对比(单位:时钟周期):
指标 | uC/OS-II | FreeRTOS | VxWorks |
---|---|---|---|
任务切换时间 | 80 | 450 | 180 |
中断响应延迟(无屏蔽) | 12 | 25 | 10 |
优先级反转保护 | 可选 | 基础 | 内置 |
内存占用(最小配置) | 2KB | 6KB | 50KB+ |
结论:
uC/OS-II在低资源场景(如MCU)中表现优异,任务切换效率接近硬件级RTOS(如VxWorks);
相比FreeRTOS,其确定性更强,适合硬实时系统;
局限性:缺乏动态任务创建、多核支持等现代功能。
五、uC/OS-II 商业使用授权详解
- 授权模式的历史演变
开源阶段(1998-2000年):
uC/OS-II 最初以开源形式发布,遵循 GPLv2 许可证,允许免费使用和修改,但要求衍生作品也开源。这限制了其在商业闭源产品中的应用。
商业授权阶段(2000年至今):
为满足企业闭源需求,开发者 Jean Labrosse 创立 Micrium 公司,将 uC/OS-II 转为商业授权模式。用户需购买许可证,免除开源义务,并可嵌入私有产品。
- 当前授权类型与条款
uC/OS-II 的商业授权由 Silicon Labs(2016年收购 Micrium)管理,提供灵活授权方案:
单产品授权(Per-Product License)
费用:一次性付费(约
3
,
000
−
3,000−10,000,具体根据产品销量和用途协商)。
范围:授权绑定至单一产品型号,允许无限量生产。
条款:无需公开源代码,无版税(Royalty-Free)。
多产品/企业授权(Enterprise License)
费用:年度订阅或定制化报价,适合多产品线企业。
范围:覆盖公司所有产品,包含技术支持与更新服务。
附加服务:优先技术支持、代码定制、安全认证协助(如 IEC 61508、DO-178C)。
教育与非盈利授权
费用:免费或大幅折扣,需提供机构证明。
限制:仅限教学或研究,禁止商业用途。
- 授权核心条款与限制
代码所有权:用户获得 uC/OS-II 的使用权,非所有权。禁止转售、逆向工程或未经授权的分发。
硬件绑定:授权通常与特定处理器架构绑定(如 ARM Cortex-M),更换硬件需重新授权。
地域与期限:全球有效,永久使用(除非违反条款)。
- 技术支持与附加服务
购买商业授权后,用户可享受:
技术支持:通过工单系统或专属客户经理解决技术问题。
代码更新:获取安全补丁和功能增强(如新处理器适配)。
认证支持:协助通过医疗(FDA)、航空(DO-178C)等行业认证,提供所需文档与测试用例。
- 免费评估与试用
评估版(Evaluation Kit)
功能:完整代码,但限制商用(通常 30-90 天试用期)。
目的:供开发者验证 uC/OS-II 在目标硬件的兼容性。
- 与其他 RTOS 的授权对比
RTOS | 授权类型 | 费用模型 | 开源义务 | 适用场景 |
---|---|---|---|---|
uC/OS-II | 商业授权 | 一次性付费 | 无 | 安全关键、闭源产品 |
FreeRTOS | MIT | 许可证 免费 | 无 | 低成本、开源友好项目 |
VxWorks | 商业授权 | 高额订阅费+版税 | 无 | 高端工业、航空航天 |
Zephyr | Apache 2.0 | 免费 | 需声明修改 | IoT、可扩展性需求 |
- 常见问题与注意事项
Q: 是否需要为每个产品购买独立授权?
A: 是。若同一公司推出多个产品型号(如不同硬件版本),需为每个型号单独授权。
Q: 授权是否支持多核处理器?
A: uC/OS-II 仅支持单核,多核需求需升级至 uC/OS-III(需额外授权)。
Q: 开源版本能否用于商业产品?
A: 否。GPLv2 版本要求产品开源,违反可能引发法律风险。
- 迁移至商业授权的流程
联系 Silicon Labs 销售团队,提供产品信息与预期销量。
签署 商业许可协议(CLA),明确授权范围与费用。
获取官方代码库访问权限及技术支持账号。
- uC/OS-II商业授权模式更新
SiliconLabs收购uC/OS-II开发公司后,在2020年时决定将uC/OS-II源代码托管到github,并将授权license修改为Apache 2.0,这样可以吸引更多用户去使用uC/OS-II。
六、总结:经典RTOS的持续生命力
uC/OS-II凭借其透明架构与可验证性,在医疗、航空等安全关键领域仍占据一席之地。尽管现代RTOS(如Zephyr、Azure RTOS)在功能扩展性上更胜一筹,uC/OS-II的极简设计与硬实时保障使其成为资源受限系统中“小而美”的经典选择。对于开发者而言,理解其调度机制是掌握实时系统设计的绝佳起点。
图表说明:性能数据基于公开基准测试(如EMF Benchmark Suite),实际数值可能因编译器优化与硬件差异浮动。
相关文章:
开源嵌入式实时操作系统uC/OS-II介绍
一、uC/OS-II的诞生:从开源实验到行业标杆 背景与起源 uC/OS-II(Micro-Controller Operating System Version II)诞生于1992年,由嵌入式系统先驱Jean J. Labrosse开发。其前身uC/OS(1991年)最初作为教学工…...
QT基础八、与时间相关的UI控件
目录 一、时间类:QTime 1. 创建 QTime 对象 2. 获取当前时间 3. 设置时间 4. 时间格式化 5. 时间加减操作 6. 时间比较 7. 计算时间间隔 8. 判断时间是否有效 9. 使用 QElapsedTimer 测量时间间隔 二、日期类:QDate 1. 创建 QDate 对象 2. 获…...
大道至简 少字全意 易经的方式看 缓存 mybatis缓存 rendis缓存场景 案例
目录 介绍 mybatis缓存 一级缓存 1.是什么 2.特点 3.场景 mybatis 二级缓存 1.是什么 2.特点 3.配置步骤 注意 一级缓存问题 二级缓存问题 扩展 1.MyBatis集成 Redis 2.直接使用Redis redis 缓存 一、String 字符串 二、Llst 列表 三、Hash 哈希 四、Set…...
Python爬虫selenium验证-中文识别点选+图片验证码案例
1.获取图片 import re import time import ddddocr import requests from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from selenium.webdriver.support.wait import WebDriverWait from …...
设计模式Python版 中介者模式
文章目录 前言一、中介者模式二、中介者模式示例 前言 GOF设计模式分三大类: 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式:关注类和对象之间的组…...
docker-compose Install deepseek
前言 deepseekAI助手。它具有聊天机器人功能,可以与用户进行自然语言交互,回答问题、提供建议和帮助解决问题。DeepSeek 的特点包括: 强大的语言理解能力:能够理解和生成自然语言,与用户进行流畅的对话。多领域知识&…...
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_process_options
ngx_process_options 声明在 src\core\nginx.c static ngx_int_t ngx_process_options(ngx_cycle_t *cycle); 定义在 src\core\nginx.c static ngx_int_t ngx_process_options(ngx_cycle_t *cycle) {u_char *p;size_t len;if (ngx_prefix) {len ngx_strlen(ngx_prefix);p …...
vue:vite 代理服务器 proxy 配置
Vite 代理服务器(Proxy)的配置通常用于开发环境,以解决跨域请求等问题。以下是一个详细的配置步骤: 通过以上步骤,你就可以在 Vite 项目中配置代理服务器,以便在开发过程中方便地访问后端服务。 找到 Vi…...
【数据结构】快指针和慢指针
一、 给你单链表的头结点 head ,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。 要求:只遍历一遍链表 可以使用快慢指针:fast 一次走两步,slow 一次走一步。当 fast NULL(偶数个结点)或…...
初级渗透测试工程师需要学什么?网络安全零基础入门到精通教程建议收藏!
1、前言 本文主要介绍如何成为一名初级的渗透测试工程师所需要学习的内容,后续也会基于此将自己的学习总结、心得记录下来。相信在不断坚持下,争取在今年五月初成为一名初级的渗透测试工程师。 2、涉及知识领域 基础网络知识: 理解TCP/IP协…...
WSL2下ubuntu开启NFS服务
1. wsl2下ubuntu配置 安装 NFS 服务: sudo apt-get install nfs-kernel-server rpcbindnfs 配置文件/etc/exports: sudo vi /etc/exports打开/etc/exports 以后在后面添加如下所示内容: /home/mk/nfs *(rw,sync,no_subtree_check,no_root…...
superset
开源的BI工具还是选择apache的superset,2021年的是用过davince,结果2023年就不维护了,dataart也是一样的到2023年也没人维护了,dataease国产的人家也要吃饭,社区版也有限制。因而选择用python开发的superset成了唯一的…...
CSS通过webkit-scrollbar设置滚动条样式
查看::-webkit-scrollbar-*各项关系 以下图为例,可以分别定义滚动条背景、滚动轨道、滚动滑块的样式。 需要先给外部容器设置高度,再设置overflow: auto,最后设置三个webkit属性。 <!DOCTYPE html> <html lang"en">…...
Mac下Python版本管理,适用于pyenv不起作用的情况
前言 声明:之前也在网上看到过可以使用pyenv来管理python版本,但由于作者的python安装路径实在是繁杂不堪,因此安装完成pyenv体验下来没有任何用处,但偶然发现vscode似乎可以看到各个python版本,因此写下这篇博客记录…...
基于SpringBoot+mybatisplus+vueJS的Cosplay文化展示与交流社区设计与实现
博主介绍:硕士研究生,专注于信息化技术领域开发与管理,会使用java、标准c/c等开发语言,以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年,拥有近12年的管理工作经验,拥有较丰富的技术架…...
Linux动静态库
铺垫 1.动态库与静态库本质上都是文件。 2.关于动静态链接 动态链接:将库中需要的函数地址,填入可执行程序,建立关联。 优点:节省资源,不会出现太多重复代码。 缺点:对库的依赖性比较强,一…...
区块链中的数字签名:安全性与可信度的核心
数字签名是区块链技术的信任基石,它像区块链世界的身份证和防伪标签,确保每一笔交易的真实性、完整性和不可抵赖性。本文会用通俗的语言,带你彻底搞懂区块链中的数字签名! 文章目录 1. 数字签名是什么?从现实世界到区块…...
Java实现斗地主-做牌以及对牌排序
卡牌类 public class Card {private String size;//大小private String color;//花色private int value;//权值public Card() {}public Card(String size, String color, int value) {this.size size;this.color color;this.value value;}public String toString(){return …...
SQL写法技巧
目录 1.批量插入,查询,删除数据 缺点 实现方法 1.批量插入数据 2.批量查询数据 3.批量删除数据 4.批量修改数据 解释 2.树型表查询 方法一:递归(适用于多级的情况) 方法二:表的自连接 方法三:MySQL递归&am…...
`pip freeze > requirements.txt` 命令
pip freeze > requirements.txt 命令的作用是将当前 Python 环境中已安装的所有包及其版本号导出到一个名为 requirements.txt 的文件中。这个文件通常用于记录项目的依赖包,以便在其他环境中快速安装相同的依赖。 ### 具体作用 1. **生成依赖列表**:…...
windows安装pytorch
windows安装pytorch 通过pip来安装pytorch. 1、更新pip 在激活的虚拟环境中,输入命令: python -m pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple/2、安装cpu版的pytorch pip3 install torch torchvision torchaudio -i http…...
计算机网络之路由协议(自治系统)
一、自治系统(AS) 自治系统是由同一个技术管理机构管理、使用统一选路策略的一些路由器的集合。它是网络的基本构成单位,每个自治系统是一个独立运营并自主决定与谁交换流量的实体。自治系统内部运行内部网关协议(IGP)…...
unity获取指定麦克风的分贝(deepseek)
在Unity中,获取指定麦克风的分贝值需要使用Microphone类来捕获麦克风输入,并通过AudioSource或直接处理音频数据来计算分贝值。以下是实现步骤和示例代码: 实现步骤: 1、初始化麦克风:使用Microphone.Start开始录制麦…...
Spring5框架八:整合Mybatis
精心整理了最新的面试资料,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 1、导入相关的jar包 <dependencies><!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --><dependency><groupId>…...
从人机环境系统智能角度看传统IP的全球化二次创作法则
从人机环境系统智能的视角看,传统IP的全球化二次创作法则需结合技术、文化、伦理与环境的复杂协同。这一过程不仅是内容的本土化改编,更是人、机器与环境在动态交互中实现价值共创的体现。 一、人机环境系统智能的底层逻辑与IP二次创作的融合 1、感知层&…...
《论软件的可靠性评价》审题技巧 - 系统架构设计师
论软件的可靠性评价写作框架 一、考点概述 软件可靠性评价作为软件可靠性活动的关键环节,是确保软件质量、提升用户体验的重要手段。本题主要考察以下几个方面的内容: 首先,本题要求考生理解并掌握软件可靠性评价的基本概念及其在软件开发…...
基于数据可视化学习的卡路里消耗预测分析
数据分析实操集合: 1、关于房间传感器监测数据集的探索 2、EEMD-LSTM模型择时策略 — 1.EEMD分解与LSTM模型搭建 3、EEMD-LSTM模型择时策略 — 2. 量化回测 4、国际超市电商销售数据分析 5、基于问卷调查数据的多元统计数据分析与预测(因子分析、对应分…...
毕业项目推荐:基于yolov8/yolov5/yolo11的果蔬检测识别系统(python+卷积神经网络)
文章目录 概要一、整体资源介绍技术要点功能展示:功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出(xls格式)功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…...
Graspness Discovery in Clutters for Fast and Accurate Grasp Detection 解读
研究背景 研究问题 :这篇文章要解决的问题是如何在杂乱的环境中快速且准确地检测抓取姿态。传统的 6自由度抓取方法将场景中的所有点视为平等,并采用均匀采样来选择抓取候选点,但忽略了抓取位置的重要性,这极大地影响了抓取姿态检…...
Redission可重试、超时续约的实现原理(源码分析)
Redission遇到其他进程已经占用资源的时候会在指定时间waitTime内进行重试。实现过程如下: 执行获取锁的lua脚本时,会返回一个值, 如果获取锁成功,返回nil,也就是java里的null 如果获取锁失败,用语句“PT…...
vscode 配置 Copilot 提示GHE.com连接失败
步骤一:打开设置并进入 settings.json 点击菜单栏中的 “文件” -> “首选项” -> “设置”。 在搜索设置栏中输入 “Copilot: Advanced”。 点击搜索结果下方的 “在 settings.json 中编辑” 链接,这会打开 settings.json 文件。 步骤二&#…...
红队内网攻防渗透:内网渗透之内网对抗:实战项目VPC1打靶PHP-RCE三层代理路由防火墙上线密码喷射域控提权
红队内网攻防渗透 实战网络攻防靶场记录1.靶机配置详情讲解1.1 入口点靶机:Windows Server 20121.2 第一层靶机:Windows 7 + Windows 101.3 第二层靶机:Windows 2012 R21.4 第三层靶机:Windows 2016 web +Windows 2016 AD域1.5 攻击者系统 :Kali-linux2.靶场渗透完整流程2…...
四、综合案例(Unity2D)
一、2D渲染 1、2D相机基本设置 上面是透视,下面是正交 2、图片资源 在Unity中,常规图片导入之后,一般不在Unity中直接使用,而是转为精灵图Sprite 将图片更改为即可使用Unity内置的图片切割功能 无论精灵图片是单个的还是多个的…...
50周学习go语言:第1周 环境搭建
以下是为零基础学习者准备的详细第1周教程,包含环境搭建、工具配置和首个Go程序的完整操作指南: 一、Go语言环境安装(Windows/macOS/Linux通用) 1. 下载安装包 官网地址:https://go.dev/dl//根据系统选择对应版本&am…...
Docker Desktop 入门教学
引言 Docker Desktop 是 Docker 官方为开发者提供的桌面应用程序,支持在 Windows 和 macOS 上轻松构建、运行和共享容器化应用程序。它集成了 Docker 引擎、Docker CLI 客户端以及 Docker Compose 等工具,方便您在本地开发和测试。 一、快速安装 1. 系…...
BOOST电路设计
目录 1电路模型 2器件选型 2.1设计需求 2.2参数计算 2.2.1电感L计算 2.2.2电容计算 2.2.3电阻计算 3仿真测试 4参数测试 4.1负载调整率 4.2电容测试 4.3电感测试 5实际应用 1电路模型 Boost升压电路,可以工作在电流断续工作模式(DCM)和电流连续工作模式(CCM)。CCM工…...
Qt常用控件之标签QLabel
标签QLabel QLabel 标签用来显示文本和图片,在 Qt 中使用频率很高。 1. Label属性 属性说明textQLabel 中的文本。textFormat文本的格式。其中 Qt::PlainText 为纯文本;Qt::RichText 为富文本(支持 html 格式); Qt:…...
基于Spring Boot的公司资产网站设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
网络安全知识--网络、网络安全产品及密码产品概述
🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 网络结构 网络设备:交换机、路由器、负载均衡 安全设备: 通信网络安全类:通信安全、网络监测与控制 区域边界安全类:隔离类…...
【mysql中mvcc的含义和作用及原理】
MySQL中的MVCC(多版本并发控制)是一种用于提高数据库并发性能的机制,通过维护数据的多个版本,实现读写操作的无锁并发。以下是其核心要点: 1. MVCC的含义 全称:Multi-Version Concurrency Control…...
【Android】Android 悬浮窗开发 ( 动态权限请求 | 前台服务和通知 | 悬浮窗创建 )
文章目录 一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后返回处理 二、悬浮窗 前台服务和通知1、前台服务 启动 悬浮窗 的必要性① 保持悬浮窗存活② 悬浮窗的要求③ 悬浮窗版本兼容 2、其它类型服务简介① 前台服务…...
【FAQ】HarmonyOS SDK 闭源开放能力 —Live View Kit (1)
1.问题描述: 客户端创建实况窗后,通过Push kit更新实况窗内容,这个过程是自动更新的还是客户端解析push消息数据后填充数据更新?客户端除了接入Push kit和创建实况窗还需要做什么工作? 解决方案: 通过Pu…...
基于Flask的第七次人口普查数据分析系统的设计与实现
【Flask】基于Flask的第七次人口普查数据分析系统的设计与实现(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 基于Flask的人口普查可视化分析系统 二、项目界面展示 登录/注册 首页/详情 …...
java实现多图合并加字和画框等
java实现多图合并加字和画框等 在wutool中,封装了图片处理工具类,基于java自带的BufferedImage类,实现多图合并和加字、图片画框等。 关于wutool wutool是一个java代码片段收集库,针对特定场景提供轻量解决方案,只要…...
腾讯SQL面试题解析:如何找出连续5天涨幅超过5%的股票
腾讯SQL面试题解析:如何找出连续5天涨幅超过5%的股票 作者:某七年数据开发工程师 | 2025年02月23日 关键词:SQL窗口函数、连续问题、股票分析、腾讯面试题 一、问题背景与难点拆解 在股票量化分析场景中,"连续N天满足条件"是高频面试题类型。本题要求在单表stoc…...
Elasticsearch 自动补全搜索 - autocomplete
作者:来自 Elastic Amit Khandelwal 探索处理自动完成的不同方法,从基础到高级,包括输入时搜索、查询时间、完成建议器和索引时间。 在本文中,我们将介绍如何避免严重的性能错误、Elasticsearch 默认解决方案为何不适用以及重要的…...
大屏自适应终极方案:基于比例缩放的完美适配实践(Vue3版)
需求背景 在数据可视化大屏开发中,我们常面临这样的挑战:如何让1920*1080的设计稿在不同分辨率设备上完美呈现?传统的响应式布局难以应对复杂的大屏元素排布,本文介绍一种基于CSS3变换的终极适配方案 实现思路 本方案的核心是动…...
云计算中的API网关是什么?为什么它很重要?
在云计算架构中,API网关(API Gateway)是一个重要的组件,主要用于管理、保护和优化不同服务之间的接口(API)通信。简单来说,API网关就像是一个中介,它充当客户端和后端服务之间的“桥…...
前端ES面试题及参考答案
目录 let/const 与 var 的区别?TDZ 是什么? 箭头函数与普通函数的区别?箭头函数能否作为构造函数? 模板字符串的嵌套表达式和标签模板用法? 解构赋值的应用场景及对象 / 数组解构差异? 函数参数默认值的生效条件及暂时性死区问题? 展开运算符(...)在数组 / 对象中…...
【架构思维基础:如何科学定义问题】
架构思维基础:如何科学定义问题 一、问题本质认知 1.1 问题矛盾 根据毛泽东《矛盾论》,问题本质是系统内部要素间既对立又统一的关系。例如: 电商系统矛盾演变: 90年代:商品供给不足 vs 消费需求增长00年代&#x…...