开源嵌入式实时操作系统NuttX介绍
一、NuttX RTOS的发展历程:从个人项目到Apache顶级开源项目
NuttX 是一款轻量级、可扩展的实时操作系统(RTOS),其发展历程堪称开源社区的经典案例。
- 起源与初创(2003-2007)
NuttX 由 Gregory Nutt 于2003年启动开发,最初目标是设计一款符合 POSIX/ANSI 标准 的嵌入式操作系统,以满足复杂设备的实时性需求。早期的NuttX以“微型Linux”为愿景,强调对标准接口的支持。 - 开源与社区化(2007-2016)
2007年,NuttX正式开源,吸引了嵌入式开发者的关注。其独特的 模块化架构 和 多平台支持 逐渐在工业控制、消费电子等领域崭露头角。 - Apache孵化与腾飞(2016至今)
2015年NuttX被三星选为TizenRT操作系统的内核,这进一步提升了它在行业内的知名度,2016年NuttX加入 Apache软件基金会(ASF) 孵化器,2019年在小米的推动下NuttX正式进入Apache基金会并很快在2020年成为Apache顶级项目。这一阶段,NuttX获得了企业级开发流程的支持,代码质量、社区协作、商业化应用和生态建设显著提升,成为嵌入式领域的重要玩家。
附上NuttX RTOS缔造者Gregory Nutt个人简历
- Embedded Firmware Development. 33 years experience leading the specification, design, and implementation of complex embedded systems for commercial and aerospace applications. Special emphasis on firmware architecture, hardware/firmware integration, operating systems, embedded Linux, C/C++, STL, multimedia, object-based developments, laser printers, signal processing applications.
- Embedded Linux/NuttX Contracting. Board Support Packages (BSPs), GNU tool chain, Digital Signal Processors (DSPs), embedded Linux, DTV, handheld, digital cinema, multimedia players, set-top boxes, barcode scanners.
- Project Management Successfully managed large, complex development efforts.
Apache NuttX RTOS官网
https://nuttx.apache.org/
二、NuttX的独特特性:为何开发者选择它?
NuttX在众多RTOS中脱颖而出,得益于其 兼容性、灵活性、标准化 的核心理念:
-
完全兼容POSIX/ANSI标准
- 支持标准API(如
pthread
、open/read/write
),开发者可无缝移植Linux应用代码,降低学习成本。 - 提供完整的文件系统(VFS、FAT、NFS)、网络协议栈(TCP/IP、IPv6、802.15.4)和Shell环境(NuttShell),功能接近Linux。
- 支持标准API(如
-
极致可伸缩性
- 内存占用从 2KB(裸机调度)到数MB(全功能配置) 灵活适配,覆盖从8位MCU到64位处理器的广泛硬件。
- 模块化设计允许通过
menuconfig
工具按需裁剪组件,避免资源浪费。
-
多平台与多架构支持
- 支持 ARM Cortex-M/A、ARM64、RISC-V、x86、Xtensa、MIPS 等主流架构,覆盖ESP32、STM32、Raspberry Pi等硬件平台。
- 提供硬件抽象层(HAL),简化移植流程。
-
硬实时与混合调度能力
- 基于优先级的抢占式调度,中断延迟低至 微秒级,满足硬实时需求。
- 支持 轮转调度(Round-Robin) 和 优先级继承协议,防止优先级反转。
-
支持多种类型文件系统与丰富的驱动模型
-
集成USB、CAN、I2C、SPI、UART、I3C、以太网、LCD framebuffer等外设驱动框架,提供 BSD Socket 网络接口。
-
支持 OpenAMP 多核通信框架,适应异构计算场景。
-
支持 VFS、FAT、NXFFS、ROMFS、Smart FS、PROCFS等。
-
支持EventFD、TimerFD、SignalFD
-
-
强大的网络协议栈支持
- 协议支持丰富:支持多种网络协议,包括IPv4、IPv6、TCP/IP、UDP、ARP、ICMP、ICMPv6、IGMPv2等,能满足不同网络应用场景的需求,无论是简单的设备联网还是复杂的网络通信功能都可实现。
- 套接字接口丰富:提供流、数据报和原始数据包套接字,支持多种地址族,如IPv4/IPv6(AF_INET,AF_INET6)、原始套接字(AF_PACKET)、原始IEEE 802.15.4(AF_IEEE802154)、原始蓝牙(AF_BLUETOOTH)和本地Unix域套接字(AF_LOCAL)等,还包括特殊的INET协议套接字,如原始ICMP和ICMPv6协议ping套接字(IPPROTO_ICMP,IPPROTO_ICMP6),为开发者提供了灵活多样的网络编程接口。
- 功能全面:具备IP转发、DNS名称解析、BSD兼容套接字层等功能,还提供网络实用程序,如DHCP服务器和客户端、SMTP客户端、TELNET服务器和客户端、FTP服务器和客户端、TFTP客户端、HTTP服务器和客户端、NTP客户端等,此外,还支持ICMPv6自主自动配置、NFS客户端网络文件系统(NFS,版本3,UDP)的支持以及PHY链接状态管理、XML RPC服务器等,能一站式满足网络通信和应用的多种需求。
- 可扩展性好:支持网络模块,如ESP8266等,方便开发者根据具体需求扩展网络功能,适应不同的硬件平台和应用场景,便于在各种嵌入式设备上构建网络应用。
三、开源社区的拥抱:企业与开发者的双重助力
NuttX的开源模式使其迅速获得全球开发者与企业的青睐,形成活跃的生态系统:
-
社区贡献与协作
- Apache基金会治理下,代码贡献者超过 300人,提交数逾 5万次,GitHub仓库活跃度稳居RTOS前列。
- 社区维护详尽的文档和示例,如 NuttX Apps 仓库提供传感器、通信、AI等应用模板。
-
企业级应用案例
- 索尼:在多款数码产品中使用NuttX管理硬件控制任务,借助其POSIX兼容性简化开发。
- 小米:将NuttX用于智能家居设备的实时控制模块,缩短产品上市周期。
- Fibit:最近两代手环都是基于NuttX进行开发。
- Atmel/Microchip:通过提供支持为SAMV7、SAME5、SAMD2L2、SAMA5、SAM34等MCU/MPU加入NuttX支持。
- NXP:为i.MX RT系列MCU提供官方NuttX支持,强化工控领域布局。
- Linux基金会:将NuttX纳入 Zephyr项目 的参考对比,推动行业标准化。
-
商业支持与工具链
- 企业如 Samsung、Google 通过赞助或代码回馈参与生态建设。
- 工具厂商提供专用调试插件(如Eclipse插件)和性能分析工具。
企业级应用案例补充
- SONY
- SONY Presentation in Linux Foundation Conference in 2016 - 基于NuttX开发
- SONY Presentation in Linux Foundation Conference in 2016 - 基于NuttX开发
- SONY基于NuttX RTOS的Spresense SDK开发指南
Spresense SDK 是用于控制上述硬件的软件。 Spresense SDK 使用RTOS之一的 NuttX 作为OS,并提供了详细的功能以基于该OS发挥 CXD5602 的性能。 Spresense 的每个驱动程序都是根据类似于Linux的 NuttX 的驱动程序框架以及 Spresense 的Audio,GNSS,ASMP等中间件层在驱动程序层之上实现的。
Spresense官网链接
https://developer.sony.com/spresense/development-guides/sdk_developer_guide_zh.html
- 小米Vela
Xiaomi Vela 是小米基于开源实时操作系统 NuttX 打造的物联网嵌入式软件平台,Vela 在各种物联网
硬件平台上提供统一的软件服务,支持丰富的组件和易用的框架,打通碎片化的物联网应用场景。
小米开源Vela官网链接
https://iot.mi.com/vela
openvela 简介
-
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
-
Vela 的命名源自拉丁语中船帆的含义,也是南方星空中船帆星座的名字。我们选择这个名字的意义是希望与开发者一道携手,共同踏上星辰大海的征途。
openvela 技术优势
-
高度可扩展:openvela 的设计注重模块化与可扩展性,使其能够灵活适应多样的物联网应用场景。小到仅配备 32K RAM 的微型 BLE 模组,大到拥有 256M RAM 的智能有屏音箱,openvela 都能提供高度可扩展的支持。
-
一站式解决方案:随着时间的推移,openvela 不断沉淀了各类 AIoT 应用的共性需求,成为一个功能完备的软件平台,为各类物联网解决方案提供了全面的支持。厂商采用 openvela,可以显著降低研发成本并加速产品的上市时间。
-
成熟的异构计算支持:openvela 为异构多核系统提供了强大的支持,实现了 MCU、MPU、DSP、GPU 以及 NPU 等不同处理单元间无缝的 IPC 通信机制。此外,openvela 还提供了一个高级的 RPC 框架,简化了 openvela 与 Android 和 Linux 系统的通信,使快速打造一个异构融合操作系统成为可能。
-
标准兼容和高可移植性:openvela 内核基于 Apache NuttX ,这个被称为 “Tiny Linux” 的系统为 openvela 提供了高标准的 POSIX 兼容性。通过持续提升其 POSIX 兼容性,openvela 当前已达到 88% 的兼容水平。这种高标准的兼容性意味着在其他标准操作系统(例如 Linux)上开发的软件可以轻松迁移到 openvela,几乎不需要额外的工作。
-
全面的连接套件:openvela 提供了广泛的协议支持,包括蓝牙 BR/EDR/LE、LE Mesh、WiFi、Matter、LTE Cat1、以太网、CAN/LIN 等。同时,它还能与小米的 HyperConnect 协议无缝集成,提供了强大的连接能力。
-
丰富的开发者工具:openvela 提供了一系列完备的开发者工具,包括系统监控、性能分析、调试器、追踪、崩溃分析和日志分析工具,为开发者提供了强大的支持。
- 三星TizenRT
-
Tizen has been commercialized in smart TV, smartphone, wearable devices (Gear S, Gear Fit), and smart home appliances. However, low-end and low-cost IoT devices, such as home appliances without display and wearable bands with a small LCD, have received less attention. The goal of TizenRT is to extend the Tizen platform device coverage to these kind of low-end devices. TizenRT is an RTOS-based lightweight platform fitting in these devices, which are typically equipped with Cortex-M/R processors with MPU, less than 2 MB RAM, and less than 16 MB Flash.
Tizen 已成功商业化应用于智能电视、智能手机、可穿戴设备(如 Gear S、Gear Fit)以及智能家电等产品中。然而,诸如无显示屏的家电、配备小尺寸 LCD 的可穿戴手环这类低端、低成本物联网设备,此前并未得到 Tizen 足够的关注。TizenRT的目标,便是将Tizen平台的设备覆盖范围延伸至这些低端设备。它是一款基于实时操作系统(RTOS)的轻量级平台,适用于通常配备带内存保护单元(MPU)的 Cortex - M/R 处理器、小于 2MB 随机存取存储器(RAM)以及小于 16MB 闪存的设备。
-
TizenRT was kicked off with TinyAra project, which was based on the NuttX kernel, in 2015. NuttX is a real-time operating system (RTOS) with an emphasis on standard compliance and a small footprint. While maintaining the kernel architecture, TizenRT has grown by building up the IPv4/IPv6 network stack, file system, lightweight database called AraStorage, device monitor, and IoT protocols, such as OCF and LWM2M. The combination of AraStorage and IoT protocols allows TizenRT to collect, store, and deliver IoT sensor data easily.
2015 年,TizenRT 项目随着 TinyAra 项目启动,而 TinyAra 项目基于 NuttX 内核。NuttX 是一款实时操作系统,注重标准兼容性且占用空间小。在保留内核架构的基础上,TizenRT 不断发展壮大,构建了 IPv4/IPv6 网络堆栈、文件系统、名为 AraStorage 的轻量级数据库、设备监视器,以及 OCF 和 LWM2M 等物联网协议。AraStorage 与物联网协议的结合,使 TizenRT 能够便捷地收集、存储和传输物联网传感器数据。
-
Typical RTOS-based development environment has several limitations. First, it can not load additional modules at runtime, and second, it’s used to being inferior to a Linux environment. To tackle these limitations, TizenRT adopts Linux-style development environments, including POSIX API, BSD Socket API, Shell, and Kconfig build configuration. This helps Linux developers build their business logics easily on top of TizenRT. In addition, TizenRT has adopted the lightweight JavaScript environment, consisting of JerryScript and IoT.js, since 2017.
典型的基于RTOS 的开发环境存在一些局限性。其一,无法在运行时加载额外模块;其二,通常逊色于 Linux 环境。为突破这些局限,TizenRT采用了类Linux 发环境,包括 POSIX API、BSD 套接字 API、Shell 以及 Kconfig 构建配置。这有助于 Linux 开发者在 TizenRT 之上轻松构建业务逻辑。此外,自 2017 年起,TizenRT 采用了由 JerryScript 和 IoT.js 组成的轻量级 JavaScript 环境。
-
TizenRT has been commercialized in smart home appliances and various IoT devices without display since 2017. Now, TizenRT is looking forward to some intelligent features such as voice services.
自 2017 年起,TizenRT 已在智能家电和各类无显示屏物联网设备中实现商业化应用。当下,TizenRT 正朝着具备语音服务等智能特性的方向发展。
三星TizenRT官网链接
https://github.com/Samsung/TizenRT
- 某国内公司
在其发布的代码里面引用了NuttX VFS的代码,来实现对多种第三方文件系统的支持。
在Gitee上的链接
https://gitee.com/openharmony/docs/blob/master/zh-cn/readme/%E5%86%85%E6%A0%B8%E5%AD%90%E7%B3%BB%E7%BB%9F.md
- Fibit
https://events.nuttx.apache.org/wp-content/uploads/2020/08/NuttX_at_Fitbit.pdf
四、丰富的第三方库:加速产品开发的“武器库”
NuttX的强大不仅在于内核,更在于其开放的生态支持。开发者可直接集成以下第三方库,快速实现复杂功能:
-
工业通信协议和电机控制算法库
-
CANOpen:提供完整的CANOpen协议栈,支持工业设备(如PLC、伺服驱动器)的实时通信。
-
Modbus:集成Modbus TCP/RTU库,简化工业传感器和控制器接入。
-
FOC:集成电机FOC控制算法。
-
-
图形与用户界面
- LVGL(Light and Versatile Graphics Library):轻量级嵌入式GUI库,支持触摸屏和动画效果,适用于智能家居面板、医疗设备界面。
- NxWidgets:In order to better support NuttX based platforms, a special graphical userinterface has been created called NXWidgets. NXWidgets is written in C++ and integrates seamlessly with the NuttX NX graphics subsystem in order to provide graphic objects, or “widgets,” in the NX Graphics Subsystem。
-
Cairo:Cairo 是一个开源的 2D 图形库,为软件开发者提供了一种矢量图形基础的、设备无关的 API,可以在 Linux、Windows、macOS 等多种操作系统上运行,使得开发者能够在不同平台上使用相同的 API 来进行图形绘制,提高了开发效率和代码的可移植性。
这个是作者在基于NuttX提供的标准POSIX API的基础上进行的移植,可以运行于Microchip SAMA5D2(Cortex-A5 Core) MPU上,支持NEON加速和标准的framebuffer接口,同时使用libplanes来实现对多图层显示控制。另外NuttX本身支持touch input,方便支持触摸屏输入接口。
-
GUILite:是一款轻量级、跨平台的 GUI 库,旨在为嵌入式设备等提供高效、灵活的用户界面解决方案。
这个也是作者在基于NuttX提供的标准framebuffer驱动上进行的移植。
-
C++支持与高性能计算
- STL嵌入式移植:提供受限环境下的C++标准库支持。
- Eigen:线性代数库,用于电机控制、机器学习的矩阵运算加速。
-
嵌入式数据库
- SQLite:支持轻量级SQL数据库,适用于数据采集设备的本地存储管理。
当时作者个人在2018年的时候做了SQLite第一次移植到NuttX,不过是基于Studio7下进行的,而且只运行在Microchip SAMV71-XULT开发板上,没有进一步将移植做进一步的推广,后来将这个移植分享给同为NuttX爱好者的Alan Carvalho de Assis,并由Alan完成最后的移植和提交工作。在这里要谢谢Alan的工作。
-
机器学习算法
- YOLO:YOLO 是 “You Only Look Once” 的缩写,是一种实时物体检测算法,在计算机视觉领域具有重要地位。
- NNABLA:NNabla 是由索尼公司开发的一个深度学习框架,旨在用于研究、开发和生产环境。
-
支持多种解释型的编程语言
- LUA:是一种轻量级、高效的脚本语言。
- Python:一种高级、通用、解释型的编程语言。
- MicroPython:是Python 3语言的精简高效实现,专为微控制器和受限环境设计。
- QuickJS:一款轻量级、高性能的 JavaScript 引擎。
-
丰富的网络工具
- COAP:
- MQTT:
- IPERF:
- FTP:
-
多种Bootloader的支持
- MCUboot:
- Minimal bootloader:
- NuttX bootloader:
MCUboot使用案例
分别烧录添加MCUboot支持的nuttx.bin文件和升级支持的update.agent.bin文件,然后用python3创建一个http server,最后在agent端执行升级命令。
五、NuttX RTOS 与其他RTOS的对比
特性 | NuttX | FreeRTOS | Zephyr | RT-Thread |
---|---|---|---|---|
架构设计 | 类Linux风格,支持完整POSIX/ANSI API | 极简内核,无标准API强制要求 | 模块化设计,强调可配置性 | 分层架构,支持动态模块加载 |
POSIX兼容性 | 完全兼容(文件、线程、信号等) | 部分兼容(需第三方库) | 部分兼容(受限API) | 部分兼容(需组件扩展) |
资源占用 | 2KB RAM(最小配置)~数MB(全功能) | 0.5KB RAM(最小配置) | 4KB RAM(最小配置) | 3KB RAM(最小配置) |
支持的处理器架构 | ARM、RISC-V、x86、MIPS、Xtensa等 20+种 | ARM、RISC-V、MSP430等 10+种 | ARM、RISC-V、x86等 15+种 | ARM、RISC-V、MIPS等 10+种 |
文件系统 | 内置FAT、NFS、ROMFS、PROCFS等 原生支持 | 需第三方库(如FreeRTOS+FAT) | 支持FAT、LittleFS(需配置) | 支持FAT、YAFFS(需组件扩展) |
网络协议栈 | 完整TCP/IPv4/v6、BSD Socket、HTTP、MQTT | 需第三方库(如lwIP) | 内置lwIP、支持CoAP、MQTT | 内置lwIP、支持LwM2M、WebSocket |
开发体验 | 类Linux开发(Shell、VFS、动态加载模块) | 需深度定制,依赖裸机编程习惯 | 强依赖设备树(DTS)配置 | 提供类似Linux的API(如POSIX) |
生态与社区 | Apache基金会支持,企业级应用案例广泛 | 商业支持多,社区资源碎片化 | Linux基金会主导,标准化程度高 | 中国开发者主导,本土生态活跃 |
实时性 | 硬实时(优先级抢占、微秒级中断延迟) | 硬实时 | 硬实时 | 硬实时 |
NuttX开箱即用组件一览
组件类别 | 支持的功能与协议 |
---|---|
文件系统 | FAT12/16/32、NFS、ROMFS、PROCFS、BINFS、SPIFFS(闪存文件系统) |
网络协议栈 | TCP/IPv4/v6、UDP、ICMP、ARP、BSD Socket、HTTP(S)、MQTT、Telnet、FTP、TFTP、802.15.4 |
USB协议栈 | USB Host/Device、HID、CDC、MSC(大容量存储)、RNDIS(网络设备) |
图形与GUI | LVGL(嵌入式GUI库)、NuttX原生图形框架(支持触摸、多图层渲染) |
数据库 | SQLite(轻量级SQL数据库)、FlatBuffers(高效序列化库) |
脚本语言 | MicroPython(嵌入式Python解释器)、Lua(需扩展) |
工业通信协议 | CANOpen、Modbus、RS485、I2C、SPI、UART |
安全与加密 | AES、SHA-1/256、TLS/SSL(mbedTLS集成)、安全启动支持 |
多核与异构计算 | OpenAMP(多核通信框架)、对称多处理(SMP)支持 |
系统工具 | NuttShell(交互式Shell)、ps、top、mount等Linux风格工具 |
其他中间件 | 音视频编解码(JPEG、PCM)、电机控制(PID算法)、AI推理(TensorFlow Lite Micro) |
六、为什么选择NuttX?
场景 | NuttX的优势体现 |
---|---|
复杂嵌入式设备 | 文件系统+网络+GUI一站式支持,适合智能家居网关、工业HMI |
Linux迁移项目 | POSIX兼容性允许直接复用Linux应用代码,降低移植成本 |
多核异构系统 | OpenAMP框架简化ARM+FPGA或Cortex-A+Cortex-M协同开发 |
快速原型验证 | 内置组件(如SQLite、LVGL)加速功能开发,无需从零造轮子 |
企业级产品 | Apache 2.0协议允许闭源修改,适合商业化部署 |
七、总结
NuttX通过 类Linux的完整性 和 嵌入式实时性的结合,填补了传统RTOS与Linux之间的空白。对于需要复杂功能(如网络、GUI)但受限于资源的场景,NuttX是更高效的解决方案。其开箱即用的特性尤其适合追求开发速度的团队,开发者可专注于业务逻辑而非底层适配。
很多芯片公司的产品对NuttX的适配都做的非常的好,希望大家能够在上面解锁更多有意思的项目。
八、补充篇 - 基于NuttX的各种开源项目
github.com/lupyuen/pinephone-nuttx
相关文章:

开源嵌入式实时操作系统NuttX介绍
一、NuttX RTOS的发展历程:从个人项目到Apache顶级开源项目 NuttX 是一款轻量级、可扩展的实时操作系统(RTOS),其发展历程堪称开源社区的经典案例。 起源与初创(2003-2007) NuttX 由 Gregory Nutt 于2003…...

阿里云服务器部署项目笔记 实操 centos7.9
阿里云服务器部署项目笔记 实操 centos7.9 springboot vue elementUImysqlredis 相关的redis,mysql,nginx镜像,jdk 通过网盘分享的文件:docker镜像 链接: https://pan.baidu.com/s/15VwcWBP4Jy07xADuvylgQw?pwdm2g9 提取码: m2g9 配置环境 连接云服务器 安装…...

Java-实现PDF合同模板填写内容并导出PDF文件
可用于公司用户合同导出pdf文件 效果图 一、导入所需要jar包 <!--生成PDF--><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.11</version></dependency><dependency&…...

Docker安装Grafana数据可视化平台
介绍 Grafana是一个开源的监控和数据可视化平台,主要用于展示和分析时间序列数据。提供功能强大且灵活的数据可视化和监控工具,适用于多种场景,它广泛应用于DevOps、IT运维、物联网(IoT)和业务分析等领域。 Grafana的主…...
MyBatis-Plus 自动填充功能
MyBatis-Plus(MP) 提供了一个非常强大的功能——自动填充功能。该功能可以在执行插入或更新操作时,自动为某些字段赋值,免去手动设置这些字段的麻烦。常见的应用场景包括 创建时间 和 更新时间 字段的自动填充,帮助开发…...

解决redis lettuce连接池经常出现连接拒绝(Connection refused)问题
一.软件环境 windows10、11系统、springboot2.x、redis 6 7 linux(centos)系统没有出现这问题,如果你是linux系统碰到的,本文也有一定大参考价值。 根本思路就是:tcp/ip连接的保活(keepalive)。 二.问题描述 在spr…...

武汉大学生命科学学院与谱度众合(武汉)生命科技有限公司举行校企联培座谈会
2025年2月21日下午,武汉大学生命科学学院与谱度众合(武汉)生命科技有限公司(以下简称“谱度众合”)在学院学术厅举行校企联培专业学位研究生合作交流会。武汉大学生命科学学院副院长刘星教授、生命科学学院周宇教授、产…...
4.网络技术与应用
一、计算机网络基础 1. 网络基本原理 通信模型: OSI七层模型: 物理层(传输比特流,如网线、光纤)数据链路层(MAC地址,交换机)网络层(IP地址,路由器࿰…...
Kafka 主题 retention.ms 配置修改及深度问题排查指南
文章目录 Kafka 主题 retention.ms 配置修改及深度问题排查指南版本背景查看 Kafka 主题当前状态修改 retention.ms 配置的正确方式为什么不能使用 kafka-topics.sh?使用 kafka-configs.sh 动态更新配置 深入解析 retention 配置retention.ms 与 retention.bytes 的…...

React实现无缝滚动轮播图
实现效果: 由于是演示代码,我是直接写在了App.tsx里面在 文件位置如下: App.tsx代码如下: import { useState, useEffect, useCallback, useRef } from "react"; import { ImageContainer } from "./view/ImageC…...

deepseek+mermaid【自动生成流程图】
成果: 第一步打开deepseek官网(或百度版(更快一点)): 百度AI搜索 - 办公学习一站解决 第二步,生成对应的Mermaid流程图: 丢给deepseek代码,或题目要求 生成mermaid代码 第三步将代码复制到me…...

分布式锁的简单实现
1. 什么是分布式锁? 在分布式系统中,也会涉及到多个节点访问同一个公共资源的情况,和 Java 中多线程的锁不一样,由于分布式系统中涉及到多个进程多个主机,所以说 Java 中 synchronized 就不合适了。 2. 分布式锁的简…...

C语言(19)----------->函数(2)
本文介绍了C语言的return语句及其它在C语言函数中的作用,以及介绍了二维数组和一维数组传参时的一些注意事项和使用数组传参时的方法。 若没有学习过C语言的一维数组和二维数组,建议参考如下文章: C语言(15)--------…...

动态扩缩容引发的JVM堆内存震荡:从原理到实践的GC调优指南
目录 一、典型案例:系统发布后的GC雪崩事件 (一)故障现象 1. 刚刚启动时 GC 次数较多 2. 堆内存锯齿状波动 3. GC日志特征:Allocation Failure (二)问题定位 二、原理深度解析:JVM内存弹…...
为何在用户注销时使用 location.href 而非 Vue Router 的 router.push
在开发 Web 应用时,用户注销功能的设计看似简单,但背后隐藏着对状态管理、安全性和用户体验的深层考量。以下将详细探讨为何许多项目在注销跳转时选择 location.href(强制刷新页面)而非 Vue Router 的 router.push(单页…...

开源工具推荐:Uptime Kuma监控
1. 概述 Github:louislam/uptime-kuma: A fancy self-hosted monitoring tool Uptime Kuma is an easy-to-use self-hosted monitoring tool. Uptime Kuma 是一款开源的监控工具,可以帮助你实时监测网站或服务的状态,并在发生故障时及时通…...

《基于Selenium的论坛系统自动化测试实战报告》
一、项目背景与技术选型 项目简介 目标系统:论坛系统 核心功能:用户注册/登录、会话框发送信息、好友列表、信息发送 技术栈:html Springboot MySQL数据库 为什么选择Selenium 支持多浏览器兼容性测试(Chrome/Firefox/Edge&…...
深入解析SQL Server高级SQL技巧
SQL Server 是一种功能强大的关系型数据库管理系统,广泛应用于各种数据驱动的应用程序中。在开发过程中,掌握一些高级SQL技巧,不仅能提高查询性能,还能优化开发效率。这篇文章将全面深入地探讨SQL Server中的一些高级技巧…...
分布式中间件:环境准备
在当今数字化的时代,分布式系统已经成为了开发领域的主流。分布式中间件在其中扮演着至关重要的角色,它能够帮助我们更好地处理高并发、高可用等复杂的业务场景。在这个系列的博客中,我将带大家深入学习分布式中间件的相关知识,主…...

c# winform程序 vs2022 打包生成安装包
最近,利用c# winform程序该客户开发一套进销存管理系统,项目在部署前,需要生成安装包,以便部署在客户电脑上面。总结步骤如下: 1、在打包之前 (VS中需要包括Microsoft visual studio installer projects扩展项目)&…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
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…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...