Kite 单表基础 CRUD 全解,Java&Kotlin 一行代码搞定数据库操作

上一篇我们完成了 KiteSpring Boot 快速集成,并用select()实现了全表查询,今天作为功能篇的开篇,我们吃透 Kite 最核心、最常用的单表基础 CRUD 能力—— 新增、更新、删除、全表查询、单条查询、数量查询、分页查询,这是所有 ORM 框架的核心基础能力,也是开发者每天用得最多的功能。

Kite 框架的 BaseMapper 提供了数据库表的基础 CRUD 操作方法。

插入操作

  • insert(entity): 将单个实体插入数据库表中。
  • insertSelective(entity): 插入单个实体到数据库表,仅插入非空字段。
  • batchInsert(list): 批量插入实体到数据库表。
  • batchInsertSelective(list): 批量插入实体到数据库表,仅插入非空字段。
  • batchInsert(list, batchSize): 批量插入实体到数据库表,可指定批次大小。
  • batchInsertSelective(list, batchSize): 批量插入实体到数据库表,可指定批次大小,仅插入非空字段。
当未指定batchSize参数时,默认批次大小为1000。

删除操作

  • delete(entity): 根据条件实体删除单个实体。
  • deleteById(id): 根据主键删除单个实体。
  • deleteByIds(ids): 根据主键批量删除实体。
  • deleteWrapper(): 根据指定条件删除单个实体。
  • deleteWrapper(deleteWrapper): 根据指定条件删除单个实体。

更新操作

  • update(entity): 根据主键更新单个实体。
  • update(entity, conditionEntity): 根据指定条件更新单个实体。
  • updateSelective(entity): 根据主键更新单个实体,仅更新非空字段。
  • updateSelective(entity, conditionEntity): 根据指定条件更新单个实体,仅更新非空字段。
  • updateWrapper(): 根据指定条件更新单个实体。
  • updateWrapper(updateWrapper): 根据指定条件更新单个实体。
  • batchUpdate(list): 批量更新实体到数据库表。
  • batchUpdate(list, conditionEntity): 批量更新实体到数据库表,根据指定条件。
  • batchUpdateSelective(list): 批量更新实体到数据库表,仅更新非空字段。
  • batchUpdateSelective(list, conditionEntity): 批量更新实体到数据库表,根据指定条件,仅更新非空字段。
  • batchUpdate(list, batchSize): 批量更新实体到数据库表,可指定批次大小。
  • batchUpdateSelective(list, batchSize): 批量更新实体到数据库表,可指定批次大小,仅更新非空字段。
  • batchUpdate(list, conditionEntity, batchSize): 批量更新实体到数据库表,根据指定条件,可指定批次大小。
  • batchUpdateSelective(list, conditionEntity, batchSize): 批量更新实体到数据库表,根据指定条件,可指定批次大小,仅更新非空字段。

基础查询

  • select(): 查询所有实体。
  • select(orderBy): 查询所有实体,并指定排序。
  • select(orderBys): 查询所有实体,并指定多个排序。
  • select(entity): 查询所有实体,使用指定的条件实体。
  • select(entity, orderBy): 查询所有实体,使用指定的条件实体和排序。
  • select(entity, orderBys): 查询所有实体,使用指定的条件实体和多个排序。
  • queryWrapper(): 查询所有实体,使用指定的查询包装器。
  • queryWrapper(queryWrapper): 查询所有实体,使用指定的查询包装器。

查询单个

  • selectById(id): 根据 ID 查询单个实体。
  • selectOneWrapper(queryWrapper): 查询单个实体,使用指定的查询包装器。

查询数量

  • count(): 查询所有实体的数量。
  • count(entity): 查询满足条件实体的数量。
  • countWrapper(): 查询所有实体的数量,使用指定的计数包装器。
  • countWrapper(countWrapper): 查询满足条件实体的数量,使用指定的计数包装器。

分页查询

  • paginate(pageNumber, pageSize): 分页查询所有实体,指定页码和每页大小。
  • paginate(pageNumber, pageSize, orderBy): 分页查询所有实体,指定页码、每页大小和排序。
  • paginate(pageNumber, pageSize, orderBys): 分页查询所有实体,指定页码、每页大小和多个排序。
  • paginate(pageNumber, pageSize, entity): 分页查询实体,指定页码、每页大小和条件实体。
  • paginate(pageNumber, pageSize, entity, orderBy): 分页查询实体,指定页码、每页大小、条件实体和排序。
  • paginate(pageNumber, pageSize, entity, orderBys): 分页查询实体,指定页码、每页大小、条件实体和多个排序。
  • paginate(request): 分页查询实体,使用指定的请求。
  • paginate(request, orderBy): 分页查询实体,使用指定的请求和排序。
  • paginate(request, orderBys): 分页查询实体,使用指定的请求和多个排序。
  • paginate(request, entity): 分页查询实体,使用指定的请求和条件实体。
  • paginate(request, entity, orderBy): 分页查询实体,使用指定的请求、条件实体和排序。
  • paginate(request, entity, orderBys): 分页查询实体,使用指定的请求、条件实体和多个排序。

文档与社区

官方文档

详细的使用文档请参考:

源码

Kite 的源码托管在 GitHub 和 Gitee 上,您可以在以下地址查看和贡献:

总结

Kite 是一个功能强大、易于使用的 ORM 框架,它通过全自动映射和简洁的 API,大大简化了数据库操作的开发工作。无论是在 Kotlin 项目还是 Java 项目中,都能提供高效、便捷的数据库访问体验。

如果您正在寻找一个轻量级、高性能的 ORM 框架,Kite 绝对值得一试!

chatgpt 给出的答案:
这个问题太有意思了,属于平行世界编程史 🤯
我们可以假设一个前提:所有语言同时诞生、硬件与理论也差不多成熟,没有历史包袱,那“流行”基本只由 表达力 + 工程效率 + 性能 + 生态适配度 决定,而不是“先来后到”。

我按领域来推演,会比按语言本身更有画面感。

1️⃣ 系统 / 操作系统 / 高性能基础设施

最可能胜出:Rust

原因:

性能 ≈ C/C++

内存安全是刚需(没人会“自愿”写 UAF )

并发模型现代、可靠

零成本抽象在平行世界会被当作理所当然

👉 在“没有历史负担”的世界里:

C 不会有机会统治

“手动管理内存”会被视为一种反人类设计

结果:

Linux = Rust

数据库内核 / 网络库 / 存储引擎 = Rust

嵌入式高端部分 = Rust

C/C++:存在,但地位≈“汇编 + 特殊场景”

2️⃣ 后端服务 / Web / 分布式系统

大概率赢家:Go + Rust (双雄)

Go 为什么还会赢?

极简语法 → 工程效率爆炸

goroutine = 天生适合 IO / RPC / 微服务

编译快、部署简单

在平行世界里:

没有 Java 的历史优势

JVM 的“启动慢 + 复杂”会直接被嫌弃

常见分工:

业务后端 / 微服务:Go

核心服务 / 高并发 / 底层组件:Rust

👉 你现在学的 Go + Protobuf + WebSocket 这套,在这个世界里是“默认标准解”。

3️⃣ Web 前端 / UI / 跨平台

TypeScript 几乎是必然统治者

原因非常直接:

JS 是动态弱类型,如果没历史包袱 → 不可能被选

TS = 类型 + 动态生态 + 跨平台

在这个世界里:

浏览器直接原生支持 TS (不是“编译成 JS”)

React / Vue 依然存在,但更“工程化”

补充赢家:

Rust + WASM:高性能 Web 模块

Swift / Kotlin:客户端 UI

4️⃣ 桌面 / 移动端
移动端

Swift:iOS

Kotlin:Android

如果没有历史:

Java 不会存在于 Android

Objective-C 会直接被淘汰

跨平台

Flutter ( Dart )或 Kotlin Multiplatform

Dart 会比现在强很多(因为没有“半路出家”的问题)

5️⃣ 数据科学 / AI / 机器学习

Python 仍然会赢,但…更“正经”

现实世界 Python 赢靠的是:

简单

库多

能“凑合用”

平行世界里:

Python 会从一开始就是强类型 / 更快的解释器

或者被 Julia 分走一半江山

结果可能是:

研究 / 数学 / 高性能计算:Julia

工程化 AI / 数据管道:Python (改良版)

6️⃣ 游戏开发

Rust + C# 双线

引擎内核:Rust

游戏逻辑:C#

C++?
👉 会被认为“太容易写炸”,只在极端性能场景用。

7️⃣ 脚本 / 运维 / 自动化

Go + Python (脚本化版本)

Shell 这种东西大概率不存在

运维脚本直接是:

小工具:Go

快速自动化:Python

作为正在学 Linux / Shell / 运维方向 的你,其实已经在接近“平行世界答案”了 😄

8️⃣ 如果用一张表总结
| 领域 | 平行世界主流 |
| --------- | -------------- |
| 操作系统 / 底层 | Rust |
| 后端 / 微服务 | Go / Rust |
| Web 前端 |TypeScript |
| 移动端 | Swift / Kotlin |
| 数据 / AI | Python / Julia |
| 游戏 | Rust / C# |
| 运维 / 自动化 | Go / Python |

视频会议系统全解析:从技术底层到实战优化,打造高效远程协作体验
在远程协作成为日常的今天,视频会议已从临时应急的沟通工具,进化为企业降本增效、个人高效对接的核心支撑。无论是几人的小团队远程对接,还是上千人的跨国大型研讨会,一套稳定清晰、低延迟的视频会议系统,直接影响着沟通效率与协作质量。本文将从技术底层架构、核心功能选型、实战优化技巧三个维度,深度拆解视频会议的专业知识,帮助技术从业者和企业管理者实现更高效的远程沟通。
视频会议系统的底层技术架构解析
视频会议系统的本质,是音视频数据从采集、预处理、编码、传输、解码到终端渲染的全链路闭环,再搭配会议控制信令和数据共享等辅助模块,构成完整的会议生态。

  1. 音视频采集与预处理:源头质量把控
    采集环节是视频会议的起点,核心设备包括摄像头、麦克风及终端采集芯片。摄像头负责捕捉图像帧,麦克风拾取音频信号,而预处理则是提升音视频质量的关键步骤:
    视频预处理:运用自动对焦、白平衡校准、降噪去雾等算法优化画面清晰度;通过人像识别与追踪技术,自动聚焦发言人画面,避免会议场景杂乱。
    音频预处理:采用回声消除(AEC)、噪声抑制(NS)、自动增益控制(AGC)三大核心算法,解决远程通话中的回声干扰、环境杂音、音量不稳定等问题,保障语音清晰可辨。
  2. 音视频编码与解码:平衡质量与带宽
    未经压缩的音视频数据体积庞大,直接传输会占用极高带宽导致延迟飙升。编码(压缩)与解码(解压)技术是解决这一矛盾的核心:
    主流编码标准:视频编码以H.264/AVC、H.265/HEVC、VP9、AV1为主流,其中H.265相比H.264可节省50%带宽,AV1更适合超高清视频场景;音频编码常用AAC、OPUS格式,OPUS兼具低延迟与高音质,是实时语音通话的首选。
    自适应码率技术:系统会根据网络带宽动态调整编码码率与分辨率,网络拥堵时自动降低画质保障流畅性,网络恢复后再提升质量,实现质量与流畅的平衡。
  3. 实时传输与网络优化:保障低延迟
    音视频数据的传输依赖实时传输协议(RTP)封装数据,搭配实时传输控制协议(RTCP)监控传输质量,而网络优化是降低延迟、减少卡顿的关键:
    传输协议选择:公网环境下UDP协议因无连接、低延迟特性成为首选,但需通过丢包重传、前向纠错(FEC)等技术弥补其不可靠性;网络不稳定时部分系统会切换为TCP协议,以可靠性换取稳定性。
    网络优化技术:通过边缘计算节点部署,让用户就近接入服务器缩短传输链路;利用拥塞控制算法实时监测网络状态,调整数据发送速率避免拥塞,提升视频会议的稳定性。
  4. 终端渲染与交互呈现:提升用户体验
    解码后的音视频数据最终在终端设备完成渲染显示,同时搭配会议控制界面实现画面布局切换、音量调节、参会者管理等交互操作。部分高端视频会议系统还支持多屏显示、虚拟背景、美颜滤镜等功能,进一步提升会议体验。
    视频会议系统核心功能选型要点
    不同场景对视频会议系统的需求差异显著,企业与个人在选型时需重点关注核心功能,避免盲目追求“全功能”造成资源浪费。
  5. 基础沟通功能:稳定清晰是核心
    多人音视频通话:支持的最大参会人数是核心指标。10人以内的小型团队协作,轻量级视频会议系统即可满足;大型企业年会或行业峰会,则需选择支持千人级并发的专业平台。
    屏幕共享与标注:这是远程协作的核心功能,需关注共享时的画质损失、延迟情况,以及是否支持多人实时标注、文件同步演示,尤其适合远程培训、方案评审场景。
    会议录制与回放:录制功能需支持本地与云端存储,回放时应清晰还原会议内容;部分视频会议系统还支持自动生成会议纪要,提升复盘效率。
  6. 协作增效功能:打破远程沟通壁垒
    虚拟背景与智能降噪:虚拟背景可避免参会环境杂乱,提升会议专业性;智能降噪能过滤键盘敲击声、环境杂音,保障语音清晰,适合居家办公场景。
    实时字幕与翻译:多语言实时字幕、同声传译功能是跨国视频会议的必备选项,可有效解决语言障碍,提升信息传递效率。
    文档协作与投票:支持会议中实时上传文档、多人在线编辑,搭配投票问卷功能快速收集意见,适合远程决策场景。
  7. 管理控制功能:安全秩序有保障
    参会权限管理:支持密码登录、邀请链接、企业通讯录白名单等入会方式,防止无关人员闯入;会议主持人可对参会者进行静音、踢出、权限分配等操作,维持会议秩序。
    数据安全保障:需关注系统是否采用端到端加密技术,数据传输与存储是否符合国家信息安全标准,尤其是涉及商业机密的视频会议,数据安全是底线要求。
    视频会议实战优化技巧:告别卡顿与延迟
    即使使用高端视频会议系统,若忽略细节也可能出现卡顿、杂音等问题。以下实战技巧可有效提升会议体验。
  8. 网络环境优化:流畅的基础
    优先选择有线网络:相比无线WiFi,有线网络受干扰更少,能提供更稳定的带宽和更低的延迟,是保障视频会议流畅的基础。
    关闭后台占用带宽程序:会议前关闭视频播放、文件下载、云同步等后台程序,避免带宽被抢占,保障音视频数据传输优先级。
    选择最优节点接入:进入视频会议后,手动切换接入服务器节点,选择延迟最低的节点,提升通话流畅性。
  9. 设备与环境优化:提升音视频质量
    麦克风与摄像头摆放:麦克风应距离发言人30-50厘米,避免距离过近导致声音失真;摄像头应与发言人视线平齐,背景尽量简洁,减少视觉干扰。
    避免回声与杂音:佩戴耳机可有效避免扬声器声音被麦克风拾取,消除回声;选择安静的参会环境,关闭空调、风扇等噪音源,提升语音清晰度。
    调整设备参数:网络不稳定时降低视频分辨率保障流畅;开启“硬件加速”功能,利用显卡提升解码效率,减少终端卡顿。
  10. 会议流程优化:提升协作效率
    会前充分准备:提前发送视频会议邀请,明确主题、议程与参会人员;共享相关文件让参会者提前熟悉内容,减少会议中的无效沟通。
    控制会议节奏:设定每个议题的时间,避免跑题;指定主持人引导讨论,确保会议高效进行。
    通过对视频会议系统的技术底层、功能选型和实战优化的全面解析,相信无论是技术人员还是企业管理者,都能更好地理解和运用视频会议工具,提升远程协作效率,适应数字化时代的沟通需求。

如题,正在购买二手 mbp 作为第三台笔记本(前两台分别是 dell 的 1265u 高端商务本/8845h 的普通核显笔记本)。正在二手市场犹豫是选 24g+512g 的 m4pro 还是 36g+1t 的 m3pro (差价 1000 )。对存储空间不太敏感,有大量的硬盘可以用作外接。
机器主要应用场景应该是 vscode 和偶尔的 ios 开发+时不时拿出去开会+时不时剪剪视频,但是我会开大量的浏览器窗口不关(强度没有特别大 以前 win 用 32g 也行),应该不会有重度使用场景(家里有 epyc 服务器)
想听听各位的建议,谢谢
然后 监管机可以碰吗(?)看着感觉是问题不大,听听各位的建议

赶着节前的时间点,老板们更加催手下人进度,每次开会只会问什么时候做完,年前能不能做完。设计稿子都没准备好,直接问能不能就拿着设计师的初稿去做技术评审。每天忙的昨天干了啥都忘了,事情真的要赶着放假前做完吗?

iQOO 推出旗舰性能手机 15 Ultra

2 月 4 日,iQOO 品牌发布性能 Ultra 旗舰手机 iQOO 15 Ultra。该机面向游戏玩家与创作者,在性能、操控、直播与外观四个方向进行强化,并推出 2077(黑)与 2049(银)两款配色。

iQOO 15 Ultra 搭载第五代骁龙 8 至尊版 SoC,配合 LPDDR5X Ultra Pro 与 UFS 4.1,最高提供 24GB+1TB 的存储组合。散热采用定制冰穹风冷系统,结合风道与超大面积 VC,并搭载自研电竞芯片 Q3,可实现全场景光线追踪、2K 原画超分、120FPS 超帧等。屏幕为 2K 三星珠峰屏,支持 1 到 144Hz 动态刷新,最高亮度 8000nits,并通过杜比视界认证。

操控方面,iQOO 15 Ultra 采用系统级超感操控体系,包含超感肩键、陀螺仪与触控,并首发战锤 MAX 双轴振感马达,搭配双扬声器与杜比全景声。电池为 7400mAh 蓝海大电池,支持 IP68 与 IP69 防尘防水,并配备 Wi-Fi 7、超声波 3D 指纹以及覆盖含 N79 在内的 31 个 5G 频段等配置。

影像方面,该机后置为 5000 万像素三摄组合,前置 3200 万像素,主摄与潜望长焦支持 CIPA 4.5 级防抖,并搭载 NICE 3.0 影像算法与 Magic2.0 画质还原引擎。价格方面,16GB+256GB 首销优惠价 5499 元(2 月 4 日到 2 月 12 日),16GB+512GB 5999 元,另有 16GB+1TB 6999 元与 24GB+1TB 7699 元版本。来源

产品外观及核心参数图,图片来自新闻源


xAI 推出 Grok Imagine 1.0

2 月 2 日,xAI 团队宣布推出视频生成工具 Grok Imagine 1.0,并称其为该产品是 x AI 的「迄今最大升级」。xAI 表示,新版本已开始更广泛推送,用户可通过 grok.com 的 Imagine 页面体验。

Grok Imagine 1.0 是 xAI 的音视频生成大模型,目前支持生成最长 10 秒、最高 720p 分辨率的短影片,并「显著提升」音频能力,强调可生成更丰富的语音与配乐效果。 来源


阿里千问发布 Qwen3-Coder-Next

阿里巴巴千问于 2 月 4 日宣布推出 Qwen3-Coder-Next,一款专为编码代理与本地开发打造的开放权重的语言模型。该模型基于 Qwen3-Next-80B-A3B-Base 构建,采用混合注意力与 MoE 的新架构;通过大规模可执行任务合成、环境交互与强化学习进行智能体训练,在显著降低推理成本的同时,获得了强大的编程与智能体能力。目前该模型已经在 ModelScopeHugging Face 发布。来源


Apple 提醒用户升级 Home App

近日,Apple 公司向 Apple Home 用户发出提醒,用户需在 2026 年 2 月 10 日前完成 Home app 的升级。未完成升级的用户可能会遇到智能配件与自动化场景运行异常的问题,甚至会在该 app 中完全无法访问自己的智能家居设备。

此外,未升级用户将无法使用扫地机器人支持等全新功能,也无法获取重要的安全补丁与性能优化更新。

升级方法为,打开 Home app,点击右上角的三点图标进入家庭设置然后点击软件更新——立即更新,按照屏幕提示操作即可。来源


微软将停售 OneDrive 独立商业订阅

2 月 3 日,微软公司在更新的支持文档中确认,其计划移除 OneDrive for Business 和 SharePoint Online 的独立低价订阅服务(Plan 1 和 Plan 2)。这些套餐内并不包含 Word、Excel 和 PowerPoint 等核心办公组件,但对于预算有限且仅需特定功能的用户极具吸引力。

微软计划在 2026 年 5 月正式停止向新客户销售上述独立产品,6 月关闭现有用户的续订功能。现有订阅的「生命周期结束」(End-of-Life)为 2027 年 1 月,微软计划于 2029 年 12 月彻底停止对这些产品的所有技术支持,届时相关服务将完全下线。来源


Adobe 取消停用 Animate 计划

经过多方反对之后,Adobe 公司于 2 月 4 日在一份常见问题解答中表示,原计划彻底停用的 Animate 将进入维护模式。Animate 仍会获得持续的安全更新与漏洞修复,新老用户均可继续使用,但软件将不再推出新功能。来源


少数派的近期动态

  • 少数派年度征文来了,古法手搓大战人工智能,你会是哪条赛道的大赢家?参与一下
  • 我们正在优化并改进新的首页版式,如果你在使用过程中发现了任何问题或者有改进建议,请通过反馈表单告知我们。首页反馈收集
  • 将设计装进耳朵:少数派×飞傲联名 CD 机盖板设计大赛已经开始啦。了解详情
  • 没什么用,但就是好玩:盘点或恶搞或无聊的「神经病」应用。看看都有啥

你可能错过的好文章

> 下载 少数派 2.0 客户端、关注 少数派公众号,解锁全新阅读体验 📰

> 实用、好用的 正版软件,少数派为你呈现 🚀

    因为飞牛出事了,要重装一遍,这次打算装在企业级硬盘看看耗电。
    PM963 固态,直插 M2 接口,在 Nas 的待机功耗要 3~6WW (可能激活了 Nvme 接口会耗电更多不然不可能待机那么多电)
    我以为只有 2-3w ,

    结果一看卧槽,居然待机有 6W ,不可思议。
    原来把系统装在企业级 sata 固态 SM843t (还是 OEM 低速版本)上。
    ~~~~~~~~~~~~~~~
    测试如下:
    1sata 固态飞牛系统盘,功耗是 23w
    1sata 固态飞牛系统盘+5 块机械硬盘(休眠后),功耗是 27w
    1 块 M2 固态 PM963 1TB+ 1sata 固态+5 块机械硬盘(休眠后),功耗是 33w
    ————————————————
    [我的结论:
    1.激活 Nvme 接口会耗电!
    因为我使用了 PCIE ASPM ,L1 休眠模式,没 M2 直接就可以完全休眠了。
    2.企业级 Nvme 固态可能无法过多的休眠+大量钽电容保证断电不丢数据,
    所以导致功耗增加更为严重。]

    前端开发者常常面临这样的困境:Vue项目需要使用React生态的优秀组件,或者React项目想引入Vue的优雅解决方案。过去,这几乎意味着需要完全重写或寻找笨重的替代方案。

    今天介绍的Veaury将彻底改变这一局面。这是一个专门设计用于在Vue和React之间实现无缝互操作的工具库。

    核心问题与挑战

    在实际开发中,跨框架组件复用面临诸多挑战:

    1. 上下文隔离:Vue和React有各自独立的上下文系统,数据传递困难
    2. 生命周期不匹配:两个框架的生命周期模型完全不同
    3. 事件系统差异:Vue使用自定义事件,React使用合成事件
    4. 渲染机制不同:Vue基于模板,React基于JSX

    Veaury的技术实现原理

    Veaury通过高阶组件(HOC)的方式,在两种框架之间搭建桥梁。其核心思路是:

    // 简化版实现原理示意
    function createCrossFrameworkWrapper(OriginalComponent, targetFramework) {
      return function Wrapper(props, context) {
        // 处理props转换
        const convertedProps = convertProps(props, targetFramework);
        
        // 处理上下文传递
        const frameworkContext = adaptContext(context, targetFramework);
        
        // 根据目标框架选择渲染方式
        if (targetFramework === 'vue') {
          return renderAsVue(OriginalComponent, convertedProps, frameworkContext);
        } else {
          return renderAsReact(OriginalComponent, convertedProps, frameworkContext);
        }
      };
    }

    主要特性

    1. 完整的Vue 3支持

    • 支持Composition API和Options API
    • 支持Teleport、Suspense等Vue 3特性
    • 完整的响应式系统集成

    2. 双向上下文共享

    // React组件可以访问Vue的provide/inject
    // Vue组件可以访问React的Context
    const SharedComponent = ({ theme }) => {
      // theme可以来自Vue的provide或React的Context
      return <div className={`theme-${theme}`}>共享主题</div>;
    };

    3. 纯模式(Pure Mode)

    消除包装器带来的额外DOM元素,保持组件树的整洁:

    // 使用纯模式包装
    const PureReactComponent = applyPureReactInVue(ReactComponent);
    // 渲染结果没有额外的div包裹

    4. 生命周期映射

    Veaury智能地映射两个框架的生命周期:

    Vue 生命周期React 等效
    onMounteduseEffect(() => {}, [])
    onUpdateduseEffect(() => {})
    onUnmounteduseEffect(() => () => {})

    实际应用示例

    场景一:在Vue项目中使用React组件

    <template>
      <div>
        <h2>Vue组件主体</h2>
        <!-- 直接使用React组件 -->
        <ReactDataTable :data="tableData" @row-click="handleRowClick" />
      </div>
    </template>
    
    <script setup>
    import { ref } from 'vue';
    import { applyPureReactInVue } from 'veaury';
    import ReactDataTable from './ReactDataTable.jsx';
    
    // 将React组件转换为Vue可用的组件
    const ReactDataTable = applyPureReactInVue(ReactDataTable);
    
    const tableData = ref([
      { id: 1, name: '项目A', value: 100 },
      { id: 2, name: '项目B', value: 200 }
    ]);
    
    const handleRowClick = (rowData) => {
      console.log('行点击事件:', rowData);
      // 处理来自React组件的事件
    };
    </script>

    场景二:在React项目中使用Vue组件

    import React, { useState } from 'react';
    import { applyVueInReact } from 'veaury';
    import VueRichEditor from './VueRichEditor.vue';
    
    const RichEditor = applyVueInReact(VueRichEditor);
    
    function App() {
      const [content, setContent] = useState('');
      const [isDarkMode, setIsDarkMode] = useState(false);
    
      const handleContentChange = (newContent) => {
        setContent(newContent);
        // 处理来自Vue组件的事件
      };
    
      return (
        <div className={isDarkMode ? 'dark-theme' : 'light-theme'}>
          <h1>React应用中的Vue富文本编辑器</h1>
          <RichEditor
            modelValue={content}
            onUpdate:modelValue={handleContentChange}
            darkMode={isDarkMode}
            v-slots={{
              toolbar: () => <div>自定义工具栏</div>
            }}
          />
          <button onClick={() => setIsDarkMode(!isDarkMode)}>
            切换主题
          </button>
        </div>
      );
    }

    性能考虑

    Veaury在性能方面做了大量优化:

    1. 最小化重渲染:通过精细的响应式侦听,避免不必要的重新渲染
    2. 内存效率:合理管理组件实例,避免内存泄漏
    3. 构建优化:支持Tree-shaking,只引入需要的功能

    性能对比示例:

    // 传统iframe方案 vs Veaury方案
    // iframe:独立的DOM、样式和上下文,开销大
    // Veaury:共享同一DOM,轻量级包装,性能接近原生

    企业级应用实践

    案例:低代码平台集成

    某低代码平台使用Veaury实现插件系统:

    • 核心框架:Vue 3 + TypeScript
    • 插件生态:支持React和Vue两种插件
    • 实现效果:开发者可使用任意框架开发插件

    案例:微前端架构

    在微前端场景中,Veaury帮助不同技术栈的子应用共享组件:

    // 主应用(Vue)使用子应用(React)的组件库
    import { applyPureReactInVue } from 'veaury';
    import ReactDesignSystem from 'team-react-ds';
    
    // 在Vue主应用中直接使用React设计系统
    const VueWrappedButton = applyPureReactInVue(ReactDesignSystem.Button);
    const VueWrappedModal = applyPureReactInVue(ReactDesignSystem.Modal);

    配置与构建

    Vite配置示例

    // vite.config.js
    import { defineConfig } from 'vite';
    import vue from '@vitejs/plugin-vue';
    import veauryVitePlugins from 'veaury/vite';
    
    export default defineConfig({
      plugins: [
        veauryVitePlugins({
          type: 'vue', // 或 'react',根据主框架选择
          vueOptions: {
            reactivityTransform: true // 启用响应式语法糖
          }
        })
      ],
      optimizeDeps: {
        include: ['veaury']
      }
    });

    Webpack配置要点

    // webpack.config.js
    module.exports = {
      module: {
        rules: [
          {
            test: /\.vue$/,
            use: 'vue-loader'
          },
          {
            test: /\.jsx$/,
            use: 'babel-loader',
            options: {
              presets: ['@babel/preset-react']
            }
          }
        ]
      }
    };

    局限性说明

    尽管Veaury功能强大,但仍有一些限制:

    1. 部分高级特性:某些框架特定的高级特性可能不完全支持
    2. 开发体验:调试时需要了解两种框架
    3. 学习成本:团队需要同时熟悉Vue和React

    总结

    对于需要在Vue和React之间搭建桥梁的项目,Veaury提供了一个成熟、稳定的解决方案。无论是新项目技术选型,还是老项目现代化改造,都值得考虑这一工具。

    技术栈不应成为创新的约束,而应是实现目标的工具。 Veaury正是这一理念的实践,让开发者能够专注于创造价值,而不是被框架之争所困扰。

    本文由mdnice多平台发布

    第四章 开发环境搭建

    在上一章中,我们已经初步了解了 ESP32 系列芯片(如 ESP32-P4和 ESP-IDF开发框架的相关知识)。接下来,我们将进入实践部分,逐步搭建适合 ESP32-P4 开发的工作环境。无论您是初学者,还是有一定开发经验,本章节都会帮助您从搭建环境、命令式开发再到IDE集成开发环境搭建,确保顺利开启基于 ESP32-P4 的项目开发。
    本章分为如下几个小节:
    4.1 搭建ESP-IDF环境
    4.2 IDF前端工具
    4.3 搭建集成开发环境

    4.1 搭建ESP-IDF环境

    在前面章节中,笔者已经讲解了ESP32的开发可以在Windows、Linux和Mac系统上进行。本书的开发环境是在Windows平台上搭建的,因此对于Linux和Mac系统的开发环境搭建,读者需要自行查找相关资料。
    搭建ESP-IDF环境有两种方式:离线安装和在线安装。在此,笔者强烈推荐使用离线安装包。尽管安装速度可能稍慢,但离线安装能够大幅提高成功率,避免网络问题带来的安装失败风险。相比之下,在线安装包需要稳定的网络连接,如果网络状况不佳,可能会导致安装中断或失败。不过,在线安装的优势在于可以获取最新的ESP-IDF版本,通常适用于芯片发布前的调试阶段。这样,读者可以根据自己的需求选择合适的安装方式。

    4.1.1 离线安装ESP-IDF

    注意:笔者将 ESP-IDF 安装在 D:\Soft_APP\Espressif 路径下,因此以下示例将基于该路径进行操作说明。
    离线安装包可以在 ESP-IDF Windows 安装下载中心(https://dl.espressif.com/dl/esp-idf/)下载,或通过正点原子提供的资料A盘 路径找到。具体路径为:6,软件资料1. 软件1,IDF开发工具esp-idf-tools-setup-offline-5.4.exe,可以获取 v5.4 离线安装包,如下图所示。

    图4.1.1.1 下载v5.4离线安装包
    注意:本书籍中的所有例程示例均使用此版本的 ESP-IDF。如果使用其他版本编译本书籍中的例程示例时出现错误或效果未能如预期,请务必切换回本书籍推荐的ESP-IDF 版本,以确保所有例程能正常编译和运行。
    下载成功后,在安装程序上单击右键选择<以管理员身份运行>运行安装包,如下图所示:

    图4.1.1.2 以管理员身份运行安装包
    打开安装程序后选择简体中文安装,如下图所示。

    图4.1.1.3 选择安装语言
    点击“确定”后进入安装许可协议页面,如下图所示。请勾选“我同意此协议”选项,并点击“下一步”。

    图4.1.1.4 勾选“我同意此协议”选项
    点击下一步后,会跳出安装前系统检查页面,如下图所示。

    图4.1.1.5 安装前系统检查
    安装程序会检查你当前系统有没有打开“长路径支持”,因为GNU编译器产生的编译文件会有非常深的目录结构,如果不支持长路径,编译可能出现文件不存在,目录不存在等奇怪的错误。这里单击应用修复按钮,可以修复这个问题。在弹出的确认对话框中,选择“是”,开始修复(若上图中的“应用修复”按钮失效,证明系统已经启用长路径功能,我们直接下一步即可)。如下图所示。

    图4.1.1.6 启用长路径
    如果修复不成功,通常是由于安装软件时未使用管理员权限运行。在这种情况下,可以手动修改注册表来启用长路径支持。具体操作是:按下快捷键“Win + R”打开“运行”对话框,输入“regedit”并按回车进入注册表编辑器。接着,找到HKLM_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled项目,将LongPathsEnabled 的DWORD数值修改为1。这样可以解决长路径问题,确保安装顺利完成。如下图所示。

    图4.1.1.7 手动启用长路径
    图4.1.1.7 提示修复完成后,点击“下一步”进入配置安装路径,如下图所示。

    图4.1.1.8 配置安装路径
    安装程序默认的安装位置为 C:\Espressif,但笔者将其安装在 D盘,因为安装过程中可能会占用数十GB的存储空间。因此,建议用户选择其他磁盘分区作为安装路径。注意:安装路径必须为全英文路径,切勿使用任何包含中文字符的路径,否则会导致 ESP-IDF 环境搭建失败。
    设置安装路径后,点击 “下一步” 进入 确认安装组件界面。在该界面中,我们选择 “全部安装”,然后再次点击 “下一步”,开始安装ESP-IDF开发环境。
    ESP-IDF安装成功后会出现如下图页面。

    图4.1.1.9 ESP-IDF安装成功
    上图中的选项 1 和 2 用于测试环境安装是否成功,选项 3 则是将 ESP-IDF 工具链加入杀毒软件的排除项,以加快编译速度。我们勾选所有选项后,点击 “Finish” 按钮。此时,桌面会自动弹出两个命令终端图标:“ESP-IDF 5.4 CMD”和“ESP-IDF 5.4 PowerShell”。其中,PowerShell 终端功能更强大,适合执行复杂任务或管理复杂环境的用户;CMD 终端则更适合基础的命令行操作和简单脚本执行。用户可以根据需求和偏好选择使用合适的工具,如下图所示。

    图4.1.1.10 PowerShell和CMD终端
    上图中,如果两个终端均提示“idf.py build”命令,则初步证明安装成功。在这两个终端下,我们可以采用命令形式进行配置、编译、链接和构建项目,这与在Linux中的开发方式颇为相似。在4.2小节中,将详细讲解ESP-IDF常用的命令。
    下图为ESP-IDF安装成功后的文件结构。

    图4.1.1.11 espressif工具目录
    上图中的文件介绍,笔者已在 3.2 小节中展示过,这里不再详细说明。图中的 frameworks 文件夹保存了我们之前安装的 ESP-IDF 源代码。
    为了让系统能够找到和识别ESP-IDF的相关工具和库,从而能够顺利地进行编译、构建和调试ESP32或其他Espressif芯片的项目,我们必须设置ESP-IDF的环境变量,设置方法如下:
    按照此过程(此电脑属性高级系统环境变量)打开,如下图所示。

    图4.1.1.12 添加IDF_PATH环境变量
    如果 ESP-IDF 库安装成功,系统会自动为我们添加 IDF_TOOLS_PATH 和 IDF_COMPONENT_STORAGE_URL 环境变量。安装完成后,系统还会自动安装 Espressif-IDE,这是一款专为乐鑫 SoC 芯片开发的集成开发环境。由于该软件在国内发布时间较短,且国内开发者多倾向于使用 VS Code IDE 进行开发,因此本教程的示例主要基于 VS Code IDE 展开。然而,正点原子也致力于推广 Espressif-IDE,因此我们决定额外编写一份关于 Espressif-IDE 使用的教程,以帮助国内开发者更好地熟悉并使用这一强大的开发工具(请参阅《Espressif-IDE 集成开发环境使用指南》)。
    至此,ESP-IDF 离线安装已经完成。接下来,笔者将为大家介绍如何进行 ESP-IDF 的在线安装,有需要的读者请参考接下来的内容。

    4.1.2 在线安装ESP-IDF(方法一)

    在 VSCode 的 ESP-IDF 插件中,可以通过在线方式安装 ESP-IDF 软件开发库。关于 VSCode 和 ESP-IDF 插件的下载与安装过程,请参考本章节的 4.3 小节。接下来,我们将详细介绍通过 ESP-IDF 插件在线安装 ESP-IDF 软件开发库的具体步骤,流程如下:
    1,按下快捷键“F1”或“Ctrl + Shift + P”打开“显示所有命令”界面。然后,在搜索框中输入“Configure ESP-IDF”,并从下拉菜单中选择此选项,进入 ESP-IDF 配置界面,如下图所示。

    图4.1.2.1 配置ESP-IDF扩展
    回车后,将进入配置 ESP-IDF 插件的界面,如下图所示。

    图4.1.2.2 进入ESP-IDF插件配置界面
    在上图中,点击 “ADVANCED”选项,然后选择下载服务器和下载版本,如下图所示。

    图4.1.2.3 在线安装v5.4版本IDF
    2,点击“Configure Tools”选项下载与安装,如下图所示。

    图4.1.2.4 ESP-IDF下载与安装
    在上图中,完成步骤1至3后,流程顺利运行并成功完成,接下来将进入下图所示的界面。

    图4.1.2.5 安装ESP-IDF成功
    如上图所示,v5.4版本的ESP-IDF安装已成功完成。此时,您可以在VSCode左下角切换到v5.4版本的ESP-IDF,具体操作如下面的图示所示。

    图4.1.2.6 切换IDF版本¬¬¬
    3,设置环境变量,如下图所示。

    图4.1.2.7 设置IDF环境变量

    4.1.3 在线安装ESP-IDF(方法二)

    相比离线安装,在线安装 ESP-IDF 更具挑战,主要是因为在线安装依赖于稳定的网络连接,否则可能会导致安装失败。接下来,笔者将手把手教大家如何进行在线安装 ESP-IDF。
    首先,我们需要从 GitHub 或 Gitee 平台查找所需的 ESP-IDF 版本。下图展示了在 GitHub 平台上查看 ESP-IDF 分支版本的方法。

    图4.1.3.1 查看ESP-IDF版本
    在这里,笔者选择了 release/v5.4 分支的 ESP-IDF 版本。接下来,在 Git 终端中输入以下命令,拉取该版本的 ESP-IDF(或者使用国内服务器git clone -b release/v5.4 https://gitee.com/EspressifSystems/esp-idf.git)。

    图4.1.3.2 拉取ESP-IDF V5.4版本的源代码
    在上图中,笔者将 ESP-IDF 源代码拉取到了 D:\Soft_APP\Espressif\frameworks路径下(离线安装ESP-IDF源代码存储的位置),方便使用多个IDF版本开发。接着,在 Git 终端中输入以下命令,进入 esp-idf 目录。随后,输入以下命令更新 ESP-IDF 源代码中的子模块,如下图所示。

    图4.1.3.3 更新子模块
    注意:全部子模块必须更新完成,否则在线安装将会失败。在更新子模块的过程中,请确保网络连接稳定,以避免出现中断或错误。
    为了让读者避免繁琐的在线SDK下载过程,笔者已经为大家预先下载了v5.4.0和v5.5.0版本的ESP-IDF。您可以在 A盘6 软件资料1 软件4,IDF软件开发工具包目录下找到这两个版本的开发工具包。只需解压缩文件即可免去从GitHub下载的步骤。例如我们将4,IDF软件开发工具包目录下esp-idf_v5.4.0.zip压缩包解压到D:\Soft_APP\ESP_IDF\Espressif\frameworks目录下,该目录是离线IDF成功后生成的目录,它是用来存储IDF软件开发工具包的地方。
    然后在ESP-IDF Windows 安装下载中下载网页下下载在线安装工具,用来安装release/v5.4 分支的 ESP-IDF 版本,如下图所示。

    图4.1.3.4 下载在线安装工具
    以<管理员身份运行>在线安装工具,如下图所示。

    图4.1.3.5 运行在线安装工具
    进入安装语言页面,这里我们选择“简体中文”,并点击“确定”按钮,如下所示。

    图4.1.3.6 选择安装语言
    点击“确定”后进入安装许可协议页面,如下图所示。请勾选“我同意此协议”选项,并点击“下一步”。

    图4.1.3.7 勾选“我同意此协议”选项
    点击下一步后,会跳出安装前系统检查页面,如下图所示。

    图4.1.3.8 安装前系统检查
    上图中的“应用修复”按钮失效,证明系统已经启用长路径功能,我们直接下一步即可。如下图所示。

    图4.1.3.9 下载或使用ESP-IDF
    这里我们选择“使用现有的ESP-IDF目录”也就是我们前面下载的release/v5.4版本的Esp-IDF源代码,然后点击“浏览”选项配置ESP-IDF路径。如下图所示。

    图4.1.3.10 配置选择现有的ESP-IDF
    点击“下一步”进入ESP-IDF Tools工具安装,如下图所示。

    图4.1.3.11 ESP-IDF Tools安装路径配置
    上图的安装路径与离线安装的Tools路径是一致的。然后点击“下一步”进入选择组件安装页面,如下图所示。

    图4.1.3.12 选择安装组件
    点击“下一步”按钮,进入准备安装页面,如下图所示。

    图4.1.3.13 准备安装
    此时,我们点击“安装”按钮,就可以安装release/v5.4版本的ESP-IDF了,如下图所示。

    图4.1.3.14 ESP-IDF Tools安装完成
    此时点击“完成”按钮,系统自动弹出“ESP-IDF 5.4 CMD”和“ESP-IDF 5.4 PowerShell”终端,如下图所示。

    图4.1.3.15 PowerShell和CMD终端
    上图中,如果两个终端均提示“idf.py build”命令,则初步证明安装成功。在这两个终端下,我们可以采用命令形式进行配置、编译、链接和构建项目,这与在Linux中的开发方式颇为相似。在4.2小节中,将详细讲解ESP-IDF常用的命令。

    4.1.4 安装USB虚拟串口驱动

    ESP32-P4的USB串口可以用于程序下载和与ESP监控器的交互。通过USB连接DNESP32P4开发板后,您可以在项目文件夹中执行特定命令,使用像idf.py这样的工具编译并下载程序到开发板上。正点原子的DNESP32P4开发板通过CH343P芯片进行串口信号转换,从而实现与PC的通信。CH343P芯片将ESP32- P4的串口信号转换为USB信号,并通过USB接口连接到PC。
    为了在电脑上实现与ESP32-P4的通信,需要安装CH343P芯片的驱动程序。您可以访问沁恒的官方网站(https://www.wch.cn/)下载该驱动程序,或者在6,软件资料1,软件CH343P驱动文件夹下找到CH343P的驱动安装程序,如下图所示。

    图4.1.4.1 CH343P驱动安装程序
    打开CH343P驱动安装程序后,点击安装程序中的“安装”按钮,若提示“驱动安装成功”,则说明CH343P驱动已经安装成功了,如下图所示。

    图4.1.4.2 CH343P驱动安装成功
    安装完CH343P驱动后,使用跳线帽将正点原子DNESP32P4开发板的底板P6和核心板P3排针的1&3和2&4接上,如下图所示。

    图4.1.4.3 连接USB-UART0
    接下来,使用USB线将开发板UART接口与PC的USB端口相连接即可。此时,PC端的设备管理器中查看到CH343P虚拟出的串口,如下图所示。

    图4.1.4.4 PC端显示的虚拟串口
    从上图可以看出,CH343P虚拟出的串口被PC分配了COM60的端口号。这个端口号用于串口调试助手等上位机确定与之通信的串口端。需要注意的是,当CH343P与不同的PC连接,甚至是与同一台PC的不同USB端口连接后,虚拟出的串口被PC分配到的端口号可能是不同的,例如COM4或COM5。读者可以根据设备管理器中端口设备的名称来判断具体是哪个端口号。如果同时连接了多个CH343P系列的芯片,则需要逐个测试端口号。安装完USB虚拟串口驱动后,就可以使用串口调试助手,如MobaXterm软件,与板卡通过串口进行通信了。

    4.1.5 如何在PC系统上的CMD和PowerShell终端运行IDF命令

    在PC系统上的CMD和PowerShell终端运行IDF(Espressif IoT Development Framework)命令,主要涉及到配置ESP-IDF环境以及使用相应的命令。以下是在CMD和PowerShell中运行IDF命令的详细步骤:
    1,打开IDF CMD终端,并输入“echo %path%”命令获取IDF相关路径

    图4.1.5.1 获取IDF相关安装路径
    上图中,我们把输出的地址直到红色圈圈为止,进行拷贝到path环境变量当中。
    2,打开系统环境变量path,然后使用编辑文本的方式添加这些变量值。

    图4.1.5.2 添加环境变量
    注意:添加环境变量时候,必须首尾添加“;”逗号以表示添加结束。添加完成后,我们就可以在CMD或者PowerShell终端运行IDF命令了。

    为了方便大家及时获取各大主流论坛通知,主要通知内容板块为:交易,技术,资源分享,薅羊毛等!
    目前对接站点如下:

    1. Linux Do
    2. V2EX
    3. NodeSeek
      4.持续增加...
      机器人会自动抓取新的内容,推送至飞书群里,有需要的前往羚羊公子博客,首页置顶文章中获取群聊二维码!
      https://lygzblog.cn/463.html

    羚羊公子博客

    • ⭐⭐⭐⭐⭐文字说明较少,但表达到位,视觉交互用心,贴近 UI 布局图(减少了一堆下游岗位的沟通成本)
    • ⭐⭐⭐⭐文字说明多,原型简单无交互,但逻辑清晰、表达有边界,歧义少,细节量化到位
    • ⭐⭐⭐文字说明多,原型简单无交互,主流程及格,但局部表达混乱,经常没有量化细节,歧义多,需求边界不齐率较高。
    • ⭐文字说明少,原型简单无交互,流程和细节都混乱,东凑西凑的。
    • 一坨💩
    个人现状:

    现在公司产品画的原型处于第三点(个人评价),原型经常一堆文字,但是阅读起来,很难受,比如:

    1.面对复杂需求时,一个页面堆了一堆文字,把所有相关需求都写在同个页面,不把需求拆分多点,分多个画布页说明讲解;

    2.同一个需求点,这边说明一点,那边写一点,甚至文字说明一些,原型页面图片上说明一些

    3.表达歧义,这点个人觉得就是细节量化不足或者逻辑混乱导致的;

    4.需求边界考虑不足,导致有时要频繁改动,特别是有历史设计负债或者复杂需求时

    5.拿来主义:从其他地方复制过来、或者干脆用 ai 生成,粘贴一坨,把问题交给下游岗位,慢慢咀嚼莫名其妙的“需求说明”。

    6.口头改动,经常没写进原型,后期有问题时,复盘很难受。

    ...

    不过这个见仁见智,不排除是开发理解能力不足的问题(哈哈,比如我🤡);纯属讨论工作槽点,大家尽情讨论,但尽量别制造产品跟其他岗位之间的对立哈;

    谢谢大家回复。

    有个女同事之前一直脾气不算太好,我每次听到她声音时,不是和同事因为接口吵架,就是因为业务问题在拌嘴,永远皱着眉头,额头中间隐约呈现出一个“川”字形。

    后来她回家生孩子去了,最近回来上班之后,我惊奇的发现她似乎变了一个人;再也没有听到她和同事争辩,和谁说话都是温温柔柔,眉头挥之不去的川字也消失不见。

    如果她是解决了心中的什么事情导致心情很好,那我由衷的为她祝福;如果是生育、激素的影响,那我觉得这也太可怕了。

    前言

    2026 年,语音交互技术已经从简单的"命令-响应"模式,发展到融合 AI 大模型的自然对话阶段。在产品开发过程中,开发者面临着越来越多的选择:

    • 离线语音 vs 在线语音,如何平衡?
    • 传统命令词 vs AI 大模型,哪个更适合我的产品?
    • 单一功能 vs 多模态融合,产品定位如何选择?

    本文基于 SmartPi 平台的完整产品矩阵,结合真实开发案例,系统性地分析 2026 年语音产品开发的技术趋势和选型策略。

    一、2026 年语音产品技术趋势

    1.1 三大技术路线

    技术路线特点适用场景代表模组
    纯离线方案无需联网,响应快,隐私安全智能家电、照明、玩具SU-03T、CI-03T、SU-13T
    离在线混合离线唤醒 + 在线 AI,兼顾响应与智能智能音箱、中控屏JX-A7T、JX-17T
    纯在线方案依托大模型,对话能力强教育机器人、陪护设备云端语音服务

    1.2 产品形态演进

    2024年以前:
    ┌─────────────────────────────────────┐
    │ 唤醒词 → 命令词 → 固定动作           │
    │ "打开台灯" → GPIO高电平 → 灯亮     │
    └─────────────────────────────────────┘
    ​
    2025年:
    ┌─────────────────────────────────────┐
    │ 唤醒词 → 自然说 → 条件判断 → 动作    │
    │ "把灯调暗一点" → 变量-10 → PWM调节  │
    └─────────────────────────────────────┘
    ​
    2026年:
    ┌─────────────────────────────────────┐
    │ 免唤醒/声纹 → AI对话 → 多模态响应   │
    │ "我回来了" → 识别用户 → 场景联动   │
    └─────────────────────────────────────┘

    二、产品选型决策矩阵

    2.1 按应用场景选型

    应用场景推荐方案核心模组关键特性
    智能照明纯离线SU-03T/CI-03T低成本、快速响应
    智能风扇纯离线SU-13T多档位(150 条命令)
    智能中控离在线混合JX-A7T屏幕显示 +AI 对话
    智能门锁低功耗离线SU-21T/SU-23T超低功耗、电池供电
    教育机器人在线 AIJX-17T大模型对话能力
    蓝牙音箱蓝牙 + 离线SU-63T/JX-B5C音乐 + 语音双模

    2.2 按成本敏感度选型

    成本敏感度排序(从低到高):
    ​
    SU-03T < CI-03T < SU-13T < SU-21T/22T < CI-73T < SU-32T < JX-A7T < SU-63T < CI-95C < JX-17T
    ​
    价格区间参考(仅供参考,以实际询价为准):
    - ¥5以下:SU-03T系列(入门级)
    - ¥5-10:CI-03T、SU-13T、SU-21T(中端)
    - ¥10-20:CI-73T、SU-32T、JX-A7T(高端)
    - ¥20以上:CI-95C、JX-17T(旗舰)

    2.3 按功能需求选型

    功能需求最少词条数推荐模组备选方案
    基础开关控制10-20 条SU-03TCI-03T
    多档位调节50-100 条SU-13TCI-33T
    复杂场景控制100-300 条CI-73TSU-32T
    声纹识别50 条 + 声纹CI-95CJX-A7T
    声源定位50 条 + 定位CI-33T(带晶振)SU-32T

    三、2026 年新增技术特性

    3.1 免唤醒模式

    传统模式

    用户:"你好小美,打开台灯"
    设备:检测唤醒词 → 识别命令 → 执行动作
    响应时间:约1-2秒

    免唤醒模式

    用户:"打开台灯"
    设备:直接识别命令 → 执行动作
    响应时间:约0.5秒

    适用场景

    • 需要快速响应的产品(如智能灯控面板)
    • 固定位置、近距离使用
    • 噪声相对较低的环境

    3.2 AI 大模型集成

    JX-A7T 和 JX-17T 模组支持离在线混合架构:

    ┌─────────────────────────────────────────────────────────┐
    │                 AI大模型集成架构                          │
    ├─────────────────────────────────────────────────────────┤
    │                                                         │
    │  本地处理                    云端处理                    │
    │  ┌──────────┐              ┌──────────┐                │
    │  │ 离线唤醒  │ ──快速────►  │ AI大模型  │                │
    │  │ 离线命令  │              │ 对话理解  │                │
    │  │ 常用控制  │              │ 知识库    │                │
    │  └──────────┘              └──────────┘                │
    │       │                          │                      │
    │       └────────── 数据同步 ──────┘                      │
    │                                                         │
    └─────────────────────────────────────────────────────────┘

    优势

    • 离线功能保证基础可用性
    • AI 能力提供更好的对话体验
    • 网络故障时降级为纯离线模式

    3.3 外接屏幕支持

    随着用户对可视化交互的需求增加,2026 年更多产品开始集成屏幕显示:
    显示内容类型

    • 设备状态(在线/离线、音量、模式)
    • 对话内容(识别结果、回复语)
    • 传感器数据(温湿度、光照)
    • 时间日期、天气信息

    技术方案

    • 小尺寸 OLED:I2C 接口,适用于 SU-32T 等模组
    • 外部 MCU 驱动:UART 通信,适用于复杂显示需求
    • 一体化模组:即将推出的带屏幕模组

    四、典型产品开发案例

    案例 1:智能照明产品

    需求描述

    • 语音控制开关
    • 亮度调节(多档位)
    • 调光色温切换(双色温产品)
    • 手机 APP 控制

    选型方案

    功能模块技术选择原因
    语音识别SU-03T成本低,基础控制足够
    PWM 调光2 路 PWM亮度 + 色温独立控制
    联网功能JX-12FWiFi+BLE 双模,支持 APP 控制
    供电5V 直流市电转换

    配置要点

    命令词配置:
      - 打开/关闭灯:基础开关
      - 调亮/调暗:变量±10,PWM输出
      - 最亮/最暗:变量边界值
      - 暖光/冷光/白光:色温PWM切换
    ​
    变量定义:
      - brightness: 0-100(亮度百分比)
      - colortemp: 0/1/2(色温模式)

    案例 2:智能门锁产品

    需求描述

    • 语音密码开锁
    • 声纹识别验证
    • 超低功耗(电池供电)
    • 离线工作

    选型方案

    功能模块技术选择原因
    语音识别SU-23T超低功耗(1-3mA)
    声纹识别CI-95C高可靠性声纹验证
    供电4 节 AA 电池低功耗设计延长续航
    唤醒方式语音 + 触摸双触发降低误唤醒

    功耗优化策略

    低功耗配置:
      - 深度休眠唤醒阈值:中
      - 进入休眠时间:5秒
      - 语音唤醒灵敏度:中
      - 触摸触发:GPIO输入(低功耗)
    ​
    预期续航:
      - 待机电流:~2mA
      - 工作电流:~50mA(短暂)
      - 每日使用20次:约6个月续航

    案例 3:智能中控屏产品

    需求描述

    • 屏幕显示设备状态
    • AI 对话能力
    • 多设备联动控制
    • 离在线混合工作

    选型方案

    功能模块技术选择原因
    语音识别JX-A7T离在线混合,AI 支持
    屏幕显示外部 MCU 驱动UART 通信,复杂显示
    联网功能JX-A7T 内置 WiFi支持云端控制
    AI 能力智能体平台知识库 + 设备控制

    系统架构

    ┌─────────────────────────────────────────────────────────┐
    │                  中控屏系统架构                          │
    ├─────────────────────────────────────────────────────────┤
    │                                                         │
    │  ┌────────────┐    UART    ┌────────────┐              │
    │  │  JX-A7T    │ ◄─────────► │  屏幕MCU   │              │
    │  │  语音模组   │            │  (显示驱动) │              │
    │  └────────────┘            └──────┬─────┘              │
    │       │                           │                     │
    │       │ WiFi                    │ SPI/I2C              │
    │       ▼                           ▼                     │
    │  ┌────────────┐            ┌────────────┐              │
    │  │  云端服务   │            │   TFT屏幕   │              │
    │  │  (AI大模型) │            │   (2.4寸)   │              │
    │  └────────────┘            └────────────┘              │
    │                                                         │
    └─────────────────────────────────────────────────────────┘

    五、开发趋势与最佳实践

    5.1 模块化设计理念

    2026 年的产品开发越来越强调模块化:

    传统开发模式:
    需求 → 硬件设计 → 固件开发 → 调试 → 量产
           └────────────────┘ 一次性投入
    ​
    模块化开发模式:
    ┌─────────────────────────────────────┐
    │ 通用模块 + 定制化配置                 │
    ├─────────────────────────────────────┤
    │ • 语音识别模块(标准件)             │
    │ • 控制逻辑模块(平台配置)           │
    │ • 业务逻辑模块(自定义)             │
    │ • 外设驱动模块(标准接口)           │
    └─────────────────────────────────────┘

    5.2 快速原型开发

    工具链选择

    开发阶段推荐工具优势
    概念验证Mixly 图形化编程零代码,快速验证
    固件配置智能公元平台在线配置,实时生成
    调试优化串口日志 + 平台调试可视化分析
    量产准备固件继承 + 版本管理批量一致性

    5.3 测试与验证

    完整的测试流程

    1. 单元测试
       ├─ 语音识别率测试(各命令词)
       ├─ 功能响应测试(GPIO/UART输出)
       └─ 稳定性测试(长时间运行)
    ​
    2. 集成测试
       ├─ 多设备联动测试
       ├─ 网络连接测试(在线方案)
       └─ 异常恢复测试(断网重启)
    ​
    3. 用户体验测试
       ├─ 响应时间测试
       ├─ 误唤醒率测试
       └─ 声纹识别准确率测试

    六、常见问题与解决方案

    Q1:纯离线方案还能满足 2026 年的用户需求吗?

    A:可以,但需要明确产品定位。

    • 适用场景:单一功能产品(照明、风扇、门锁)
    • 优势:响应快、无需网络、隐私安全、成本低
    • 局限:对话能力有限,需要预先设计所有命令

    建议:对于明确控制类产品,纯离线仍然是首选方案。

    Q2:什么时候需要考虑 AI 大模型?

    A:当产品需要以下能力时:

    • 自然语言理解(非固定命令词)
    • 多轮对话能力
    • 知识问答功能
    • 复杂推理能力

    成本考虑:AI 大模型方案成本是纯离线的 2-3 倍,需要评估目标用户群体的付费意愿。

    Q3:如何平衡功能丰富度和开发成本?

    A:采用渐进式开发策略:

    阶段1:基础版(MVP)
    ├─ 纯离线方案
    ├─ 核心功能(开关、档位)
    └─ 快速上市验证市场
    ​
    阶段2:增强版
    ├─ 保留离线基础
    ├─ 增加自然说、条件判断
    └─ 提升用户体验
    ​
    阶段3:旗舰版
    ├─ 离在线混合
    ├─ AI大模型对话
    └─ 多模态交互

    Q4:电池供电产品如何选择模组?

    A:重点关注功耗参数:

    模组待机电流唤醒电流适用场景
    SU-21T/22T\~1mA\~20mA遥控器、门锁
    SU-23T\~1-3mA\~30mA电池供电设备
    SU-03T\~10mA\~50mA市电供电设备
    JX-A7T\~55mA\~300mA需要充电的设备

    续航估算公式

    续航天数 = 电池容量(mAh) / (待机电流×待机时间占比 + 工作电流×工作时间占比) × 24
    ​
    示例:4节AA电池(2000mAh×4=8000mAh)
    - 待机电流:2mA
    - 每日使用:20次×3秒×50mA=8.33mAh
    - 每日总消耗:2mA×24h + 8.33mAh ≈ 56.33mAh
    - 续航:8000/56.33 ≈ 142天

    七、总结与展望

    2026 年选型建议

    产品类型首选方案次选方案
    智能照明SU-03TCI-03T
    智能风扇SU-13TCI-73T
    智能门锁SU-23TSU-21T
    智能中控JX-A7TSU-32T
    教育机器人JX-17TJX-A7T
    蓝牙音箱JX-B5CSU-63T

    未来技术趋势

    1. 边缘 AI 能力增强:更多模组将内置轻量级大模型
    2. 多模态融合:语音 + 视觉 + 触控的融合交互
    3. 更低功耗:新一代芯片将功耗降低至亚毫瓦级别
    4. 标准化接口:MCP 等标准化协议促进生态互联

    参考资源

    素材来源:SmartPi 官方文档 + 技术交流群真实案例 + 行业趋势分析

    关键词:语音产品、选型指南、技术趋势、离线语音、AI 大模型、2026 年趋势、产品开发
    适用模组:SU-03T、CI-03T、SU-13T、SU-21T、SU-23T、CI-73T、SU-32T、JX-A7T、JX-17T、SU-63T、CI-95C、JX-B5C

    一、为什么 Agent Skill 突然火了?

    你是不是也有过这样的崩溃时刻?

    • 每次让 Claude 写代码,都要重复粘贴 请使用我们的代码规范:驼峰命名、2空格缩进、必须写单元测试 ——像极了每天入职新公司;
    • 好不容易调教好的 Prompt 换个项目就完全失效,之前的调教经验归零;
    • 团队里每个人给 AI 的指令不一样,导致输出的内容一会儿像资深架构师,一会儿像刚毕业的新手。

    这些问题的根源,其实是 AI专业能力无法沉淀。直到 2025 年 10 月 Anthropic 推出 Agent Skill(又名 Claude Code Skill)正是为解决这些问题而生。这不仅是 Claude 的新功能,更是一个 开放的跨平台标准,目前已被 OpenAICursorTrae 等主流工具跟进支持。

    本文将带你从 是什么怎么用在实际工作中,彻底掌握这个比 Prompt 更高级、比 MCP 更易用的 AI 编程神器。

     

    二、到底什么是 Agent Skill?

    用最通俗的比喻:Agent SkillAI入职手册 + 工具箱

    想象你招了一位天才实习生 Claude 他智商极高但不懂你们公司的业务。传统的做法是每次布置任务都口头交代一遍 PromptAgent Skill 则是给他一本完整的标准作业程序 SOP

    • 📋 入职手册(SKILL.md):包含岗位描述、工作流程、注意事项
    • 🧰 工具箱(Scripts):处理特定任务的脚本和代码
    • 📚 参考资料(References):行业规范、模板素材、API文档

    技术本质:Agent Skill 是一个标准化的文件夹结构,核心必须包含 SKILL.md 文件(YAML元数据 + Markdown说明),可选包含脚本、模板等资源文件。

    my-skill/            # 技能包根目录
    ├── SKILL.md         # 📄 核心文件:元数据 + 工作流指令(必须)
    ├── scripts/         # 🔧 可选:自动化脚本(Python/Bash)
    ├── references/      # 📖 可选:专业文档、API手册、FAQ
    └── assets/          # 🎨 可选:模板、示例、静态资源

    AI 检测到相关任务时,会自动 翻开 对应的手册,严格按照既定流程执行,无需你每次都重复交代。

     

    三、Skill工作原理

    Skill 最精妙的设计,是它的 渐进式加载机制 —— 就像你查字典,先看目录,再翻对应章节,最后查附录,不会一上来就把整本书塞进脑子里。

    3.1. 三层加载:用最少的 Token 做最多的事

    加载层级内容类型加载时机作用
    L1元数据(名片)Agent 启动时自动加载让AI知道“有什么技能可用”
    L2说明文档(正文)匹配用户需求时加载教AI“具体怎么做”
    L3资源文件(脚本 / 模板)执行中按需加载提供“工具/素材支持”

    3.2. 四步执行流程

    1. 🎯 意图匹配:AI 扫描所有 Skill 的元数据,找到最匹配当前任务的技能
    2. 📖 读取指南:加载对应 SKILL.md,掌握执行步骤、检查点、输出规范
    3. 🔧 按需执行:调用 scripts/ 中的脚本,查询 references/ 中的资料
    4. ✅ 反馈结果:按模板输出成果,或询问缺失信息

     

    四、现有技术的对比

    4.1. Agent Skill vs Prompt

    维度普通 PromptAgent Skill
    性质临时指令,用完即走标准化流程,永久复用
    加载方式每次全量输入按需渐进加载
    稳定性依赖模型"记忆",易漂移固化检查点,强制执行
    管理分散在聊天记录里文件化、版本可控
    共享复制粘贴,易丢失格式整包分享,开箱即用
    一句话总结:Prompt 是 口头交代,Skills 是书面 SOP + 工具箱

    4.2. Agent Skill vs 多 Agent 架构

    维度多 Agent 架构Agent Skill
    复杂度重量级,需要架构设计轻量级,单个文件夹即可
    适用场景复杂并行任务(如研究+写作+审核同时进行)单领域深度任务(如专业代码审查)
    资源消耗高,需调度多个 Agent 实例低,单 Agent 内能力切换
    启动成本需要搭建 Agent 框架零成本,复制文件夹即可
    关系体系级解决方案单元级能力模块,可被多 Agent 调用

    4.3. Agent Skill vs MCP

    维度MCPAgent Skill
    定位连接协议:AI 与外部系统的"USB 接口"执行标准:AI 做事的"操作手册"
    解决的问题能不能连(访问数据库、API、文件系统)怎么做(流程、规范、最佳实践)
    技术形态需要运行 MCP Server(TypeScript/Python)静态文件夹(Markdown + 脚本)
    加载时机启动时建立连接按需渐进加载
    关系互补:MCP 提供“工具”Skills 提供“使用指南”
    MCP 让 AI 能连上数据库,Skill 教 AI 怎么按你们公司的规范查数据、生成报表、处理异常。两者配合,AI 才能真正成为"懂行的专家"。

     

    五、创建你的第一个 Agent Skill

    下面用 会议纪要整理助手 为例,从零创建一个 Skill

    场景:开会录音转文字后,需要整理成结构化会议纪要。不同会议类型(周会/项目复盘/客户沟通)需要不同的整理模板。

    5.1. 创建 Skill 文件夹结构

    新建一个名为 meeting-minutes 的文件夹,总体的文件结构如下:

    /meeting-minutes/
    ├── SKILL.md                    # L1:技能元数据,L2:内容
    ├── references/                 # L3:按会议类型按需加载
    │   ├── weekly-rule.md          # 周会模板
    │   ├── retro-rule.md           # 复盘模板
    │   └── client-rule.md          # 客户沟通模板

    5.2. SKILL.md(核心文件)

    5.2.1. 元数据

    SKILL.md 文件最开头以上下两个 --- 作为元数据标识

    ---
    name: meeting-minutes
    description: 办公室通用会议纪要整理助手,支持周会/项目复盘会/客户沟通会三类场景,自动识别会议类型,按需加载对应会议规则,智能提取关键信息,输出结构化纪要。
    ---

    5.2.2. SKILL内容

    5.3. 编写模块化配置references

    通过文件分离,AI每次只读取当前任务所需的规则,避免 Context 污染

    5.4. 测试你的 Skill(以 Trae 为例)

    Trae 作为国内的 AI IDE 已原生支持 Agent Skills

    • 官网:https://www.trae.cn/
    • 下载并安装 TRAE IDE

    5.4.1. 导入Skill

    1. 创建一个文件夹,例如 my_skills
    2. 使用 TRAE IDE 打开这个文件夹
    3. meeting-minutes 文件夹复制到 my_skills/.trae/skills/ 目录下

    5.4.2. 输入提示词

    需要切换为 SOLO 模式,然后在对话框输入以下提示词:

    帮我生成周会会议纪要
    
    原始文本:
    小明:用户模块我搞完了,已经提测。
    小红:接口文档我还没弄,我负责写,周五前给出来。
    张三:测试环境那个问题搞不定,需要运维老陈帮忙看看。
    李四:下周我打算开始订单模块,周三前出个技术方案看看。
    王五:数据库设计谁review一下?
    小明:我来吧,不过得明天才有空。

    5.4.3. 执行Skill

    5.4.4. 最终输出以下内容

     

    六、本文Skill下载地址

    本文案例 会议纪要整理助手 Skill 的下载地址如下:

    • Gitee地址:

    https://gitee.com/zlt2000/my-agent-skill/tree/master/meeting-minutes

    • Github地址:

    https://github.com/zlt2000/my-agent-skill/tree/master/meeting-minutes

    在实际使用过程中本文 Skill 还可以进行以下迭代优化:

    1. references 里扩展更多的 会议类型 模板;
    2. script 文件夹写 Python 脚本,实现输出内容 导出word文档 或者 同步给飞书

     

    七、总结

    Agent Skills 的正式发布,标志着 AI 协作从 提示词工程 正式迈入 技能工程 的全新范式。它将人类专家的经验、标准化流程与行业最佳实践,封装成 AI 可理解、可执行、可复用的数字资产。

    核心价值优势:

    1. 降本增效: 通过渐进式披露、按需加载机制,大幅减少 Token 消耗,同时让 AI 聚焦核心任务,推理效率与执行稳定性同步提升;
    2. 跨平台互通: 作为开放标准,实现 “一次构建、多端复用”,Skill 可无缝适配 Claude、Cursor、Trae、Copilot 等主流平台,打破工具壁垒;
    3. Skill 市场: 构建起类似 VS Code 插件市场的 Skill 生态,官方与社区共同打造技能商店,让专业能力可分享、可迭代、可规模化应用。

    本文由mdnice多平台发布

    ** [应用简介] **

    易饭票”是一款专为文员、办公室行政人员、学校及各类机构打造的极简票券设计工具。
    从此打印饭票不再需要找文印店,只需要利用传统的打印机即可制作饭票。

    针对传统排版中的痛点,彻底解决了“在 Word 里拉框子画线”以及繁琐的“邮件合并”操作。通过智能化的拼版系统和自动化工具,让您只需专注于设计,剩下的工作全部交给“易饭票”。

    ** [开源] **

    在线演示:https://mealtkt.langhub.top/
    源代码右键自取

    ** [为什么选择易饭票?] **

    • 告别 Word 排版苦恼: 不再需要手动绘制表格、调整边距。我们的系统支持自动计算间距、一键生成裁剪线,让排版变得像填空一样简单。
    • 内置自动化序列号: 无需复杂的邮件合并。点击“添加序列号”功能,系统可自动为您生成连续编号,轻松实现一票一号,提升票券管理效率。
    • 一键智能拼版: 您只需设计一张“母版”,通过设置行数、列数和打印总量,系统即可自动在 A4/A3 等标准纸张上进行高密度拼版,最大化利用每一张纸。

    ** [核心功能] **

    • 全功能编辑器: 支持普通文本、艺术环形文字、基础几何图形(矩形、圆形、星形等)及图片 Logo 上传。
    • 标准/自定义规格: 预设 A3 、A4 、A5 、16 开等多种纸张,并支持完全自定义尺寸及纵横向调整。
    • 专业层级管理: 提供图层置顶/置底、精确对齐(左对齐、居中、分布等)功能,确保设计成果整齐严谨。
    • 高清导出打印: 支持直接打印或导出为 PDF ,确保生产出的票券线条清晰、文字锐利。
    • 工程化保存: 支持导出 .fpt 工程文件,方便下次活动直接修改日期或面值重复使用。

    ** [适用场景] **

    • 公司/单位: 制作员工餐票、午餐券、加班饭票。
    • 活动策划: 制作入场券、抽奖券、代金券。
    • 校园/机构: 制作临时临时票据、体验课券。

    [背景概述]
    IT 技术岗,工作 7 年。平时都在协调、组织,写材料。“带了”几个同事干活。
    但是本身是技术岗,非管理岗。以为自己主动在帮领导分忧。
    一年过去了,隔壁和我类似的同事升管理岗、拿了优秀。但是我还是虚线。
    领导从来不主动谈这些事情,但是隔壁的领导是主动谈并且给选择。

    [疑问]
    感觉干纯技术岗位更舒服,不用为“组织协调”、和很多人打交道费尽心思。
    在通向所谓“技术管理”岗位上,反而留给自己的时间更少,技术难以沉淀,都在帮组织解决问题、帮同事解决问题、尝试让同事更强,反而自己技术成长有限。
    另外,管理岗是不是更不好跳槽?技术岗相对更容易跳槽?

    大家有遇到类似的情况吗,怎么看待职场这样的变化?

    2026 年最值得使用的 7 款 PHP 管理后台框架推荐

    搭建企业级 PHP 后台管理系统,选择一款合适的 Laravel admin 框架至关重要。PHP 作为 Web 开发领域最成熟的语言之一,拥有众多优秀的后台管理框架。Laravel 框架凭借优雅的语法和完善的生态,已成为 GitHub 上 stars 最高的 PHP 框架,围绕它诞生了大量优质的 PHP 后台框架。

    本文将从开发效率、灵活性、学习成本三个维度,为你推荐 2026 年最值得使用的 7 款 PHP admin 后台管理系统。无论你是需要快速搭建企业后台、开发 SaaS 平台,还是构建电商管理系统,都能找到适合的 Laravel 后台管理解决方案。

    PHP 后台管理框架选型指南

    在选择 PHP 管理后台框架之前,需要先明确项目需求。不同类型的 Laravel admin 框架适用于不同场景,选错框架可能导致后期开发成本大幅增加。下面按抽象程度从低到高,介绍三种主流的 PHP 后台框架类型:

    脚手架型

    脚手架型框架通过命令行自动生成 Model、Controller、路由和基础 CRUD 代码。优势是灵活性高,生成的代码完全可控;劣势是后期维护需要手动修改生成的代码。

    CRUD 接口型

    CRUD 接口型框架提供一套完整的后台管理组件,开发者只需定义资源配置即可自动生成管理界面。代码量相对较少,但遇到复杂业务逻辑时需要额外扩展。本文推荐的 Laravel Nova、CatchAdmin、Filament、Backpack、Orchid 都属于这种类型。这类 PHP 后台管理系统在灵活性和开发效率之间取得了良好平衡,是目前最主流的选择。

    可视化编程

    可视化编程型框架抽象程度最高,通过拖拽或配置即可生成后台界面。部署快速,对编程能力要求较低,但灵活性也相对受限。Voyager 和 QuickAdminPanel 属于这种类型。

    2026 年 7 款 PHP 后台管理框架详解

    以下按推荐顺序介绍 7 款主流的 Laravel admin 后台管理框架,涵盖付费和开源方案,适用于从个人项目到企业级应用的各种场景。

    Laravel Nova - 官方出品的标杆之作

    Laravel Nova 是 Laravel 框架作者 Taylor Otwell 亲自打造的官方后台管理系统。作为官方产品,Nova 在架构设计和性能优化上都达到了极高水准。

    Nova 采用 Vue.js 构建前端,提供了资源管理、搜索过滤、图表统计、自定义操作等开箱即用的功能。扩展生态非常完善,几乎每天都有新的扩展包在 Nova Packages 上线。

    优势:

    • 官方维护,更新及时,与 Laravel 版本同步
    • 性能优化到极致,大数据量下表现稳定
    • 扩展生态丰富,覆盖各种业务场景

    劣势:

    • 付费产品,小团队可能有成本压力
    • 源码不开放,深度定制受限

    适用场景: 商业项目、对稳定性要求高的企业级应用。

    CatchAdmin - 企业级前后端分离方案

    CatchAdmin 是一款基于 Laravel 12.x 和 Vue 3 + Element Plus 的企业级前后端分离后台管理系统。它充分利用 PHP 8+ 特性,采用现代化架构设计,是目前最受欢迎的开源 Laravel admin 框架之一。

    对于需要搭建企业级 PHP 后台管理系统的团队来说,CatchAdmin 提供了开箱即用的完整解决方案。它不仅仅是一个 Laravel 后台框架,更是一套经过生产验证的企业级开发脚手架。

    CatchAdmin 的核心优势在于模块化设计。每个业务模块拥有独立的控制器、路由、模型和数据表,模块之间完全解耦。这种架构让团队可以并行开发不同模块,后期维护也更加轻松。

    核心功能
    • 用户管理: 用户增删改查、密码重置、不同用户可配置不同首页和功能模块
    • 部门管理: 多级组织架构配置,树形结构展示,支持层级调整
    • 角色权限: 树结构角色体系,支持菜单权限、按钮级权限、数据权限三级管控
    • 菜单管理: 可视化配置系统菜单、路由与按钮资源,前后端权限一致
    • 代码生成: 一键生成前后端代码(PHP、Vue)及数据库迁移文件,直接生成到模块
    • 文件上传: 支持本地、七牛云、阿里云、腾讯云等多种存储方式
    • 日志系统: 操作日志、登录日志完整记录,支持多维检索
    • 插件系统: 插件即 Composer 包,深度融入 Composer 生态
    # 快速安装,五分钟即可构建
    composer create catchadmin/catchadmin
    cd catchadmin
    php artisan catch:install

    CatchAdmin 还支持 Vue 即时渲染,前端代码修改后无需编译即可生效,大幅提升开发调试效率。

    优势:

    • 现代化架构,基于 Laravel 12.x + Vue 3 + Element Plus
    • 模块化设计,业务模块完全独立,支持按需加载
    • 一键代码生成,前后端代码 + 数据库迁移一步到位
    • RBAC 权限系统完善,支持部门数据隔离和 API 接口权限验证
    • 中文文档详尽,社区活跃,持续更新

    劣势:

    • 需要同时掌握 Vue 和 Laravel
    • 专业版部分高级功能需付费

    适用场景: 企业后台管理、SaaS 平台、电商后台、CRM/OA 等企业应用、中大型项目。

    Filament - 社区最火的后起之秀

    Filament 是 2021 年发布的 Laravel admin 框架,近两年在社区的热度持续攀升,已成为 Laravel 生态中最受欢迎的开源后台框架之一。

    Filament 基于 Livewire 和 Alpine.js 构建,采用 Tailwind CSS 设计。它不仅仅是一个后台管理框架,还包含表单构建器、表格构建器、通知系统等独立组件,可以单独使用。

    // Filament 资源定义示例
    use Filament\Resources\Resource;
    
    class PostResource extends Resource
    {
        protected static ?string $model = Post::class;
    
        public static function form(Form $form): Form
        {
            return $form->schema([
                TextInput::make('title')->required(),
                RichEditor::make('content'),
                Select::make('status')->options([
                    'draft' => '草稿',
                    'published' => '已发布',
                ]),
            ]);
        }
    }

    优势:

    • 完全开源,社区贡献活跃
    • 基于 Livewire,无需编写 JavaScript
    • 组件丰富,UI 设计现代
    • 文档详尽,学习曲线平缓

    劣势:

    • Livewire 机制对实时性要求高的场景可能不适用
    • 相比 Nova,生态成熟度稍逊

    适用场景: 开源项目、个人项目、中小型企业项目。

    Backpack - 灵活与效率的平衡

    Backpack 自 2016 年发布以来,一直保持稳定更新。它提供了一套完整的 CRUD 组件和丰富的字段类型,同时还有可视化开发工具 Backpack DevTools。

    Backpack 的文档写得非常详尽,配有视频教程,学习成本较低。它的设计哲学是「约定优于配置」,大部分场景下只需简单配置即可完成开发。

    优势:

    • 文档优秀,有视频教程
    • 字段类型丰富,覆盖常见需求
    • DevTools 支持可视化开发
    • 主题可定制

    劣势:

    • 商业项目需要付费
    • 前端基于 jQuery,技术栈相对传统

    适用场景: 快速原型开发、对文档要求高的团队。

    Orchid - 开源社区的优秀选择

    Orchid 由俄罗斯开发者 Alexandr Chernyaev 创建,是一个功能完善的 Laravel 后台管理框架。它内置了表单构建器、表格过滤器、排序、搜索等功能,细节处理得非常到位。

    Orchid 的亮点在于它的 Screen 概念,将页面逻辑封装在 Screen 类中,代码组织清晰。同时,Orchid 拥有活跃的开源社区和大量的赞助者,保证了项目的持续发展。

    // Orchid Screen 示例
    use Orchid\Screen\Screen;
    
    class PostListScreen extends Screen
    {
        public function query(): array
        {
            return [
                'posts' => Post::paginate(),
            ];
        }
    
        public function layout(): array
        {
            return [
                PostListLayout::class,
            ];
        }
    }

    优势:

    • 完全开源,社区活跃
    • Screen 架构清晰,便于维护
    • 权限系统完善
    • 支持多语言

    劣势:

    • 学习曲线相对较陡
    • 中文资源较少

    适用场景: 开源项目、需要精细权限控制的系统。

    Voyager - 可视化管理的先驱

    Voyager 与其他 Laravel admin 有所不同,它可以根据数据库表自动创建 BREAD(Browse、Read、Edit、Add、Delete)界面,无需编写代码。

    Voyager 内置了媒体管理器,支持在 UI 层面管理文件。菜单构建器让你可以直接在页面上拖拽管理菜单结构。对于需要快速搭建后台的项目,Voyager 是一个不错的选择。

    优势:

    • 可视化配置,上手快
    • 内置媒体管理器
    • 菜单构建器直观易用
    • 社区成熟,文档清晰

    劣势:

    • 灵活性受限,复杂业务场景难以满足
    • 前端基于 Blade,定制成本较高

    适用场景: 快速原型、内容管理系统、对灵活性要求不高的项目。

    QuickAdminPanel - 在线生成定制代码

    QuickAdminPanel 的理念就是「快」。整个开发流程在线完成:在官网配置 admin 面板,选择需要的模块,点击下载,获得定制代码,部署到服务器。

    这种模式特别适合需求明确、不需要太多灵活性的项目。生成的代码基于 Laravel 标准结构,后期也可以手动修改。

    优势:

    • 在线配置,无需本地环境
    • 生成的代码规范,可二次开发
    • 模块丰富,覆盖常见需求

    劣势:

    • 付费订阅模式
    • 复杂逻辑需要手动编写

    适用场景: 快速启动项目、外包项目、MVP 开发。

    PHP 管理后台框架对比

    以下表格从价格、技术栈、学习曲线、灵活性、前后端分离五个维度对比 7 款 Laravel admin 后台管理框架:

    框架价格技术栈学习曲线灵活性前后端分离
    Laravel Nova$99-$299Vue.js
    CatchAdmin免费Vue 3 + Element Plus
    Filament免费Livewire + Alpine.js中高
    Backpack€69+jQuery + Bootstrap
    Orchid免费Laravel Blade中高
    Voyager免费Laravel Blade
    QuickAdminPanel$199/年Laravel 标准

    从表格可以看出,如果你需要一款免费、前后端分离、灵活性高的 PHP 后台管理框架,CatchAdmin 是为数不多同时满足这三个条件的选择。

    如何选择合适的 PHP 后台管理框架

    选择 Laravel admin 后台管理框架需要综合考虑项目规模、团队技术栈、预算等因素:

    • 追求官方稳定和生态: Laravel Nova 是首选,但需要付费
    • 需要前后端分离架构: CatchAdmin 提供了完整的 Vue 3 + Laravel 解决方案,且核心功能免费开源
    • 纯后端开发者: Filament 基于 Livewire,无需编写前端代码
    • 快速原型开发: Voyager 或 QuickAdminPanel 可以快速启动
    • 精细权限控制: Orchid 和 CatchAdmin 都提供了完善的 RBAC 权限系统

    无论选择哪个 Laravel 后台框架,建议先在小项目中试用,评估是否符合团队的开发习惯和项目需求。
    [原文 2026 年最值得使用的 7 款 PHP 管理后台框架推荐
    ](https://catchadmin.com/post/2026-02/php-admin-panel-2026)

    题⽬描述

    输⼊⼀个⻓度为n 的整型数组array ,数组中的⼀个或连续多个整数组成⼀个⼦数组,找到⼀个具有
    最⼤和的连续⼦数组。

    1. ⼦数组是连续的,⽐如[1,3,5,7,9] 的⼦数组有[1,3] , [3,5,7] 等等,但是[1,3,7] 不是⼦数组
    2. 如果存在多个最⼤和的连续⼦数组,那么返回其中⻓度最⻓的,该题数据保证这个最⻓的只存在⼀个
    3. 该题定义的⼦数组的最⼩⻓度为1 ,不存在为空的⼦数组,即不存在[]是某个数组的⼦数组
    4. 返回的数组不计⼊空间复杂度计算

    示例 1
    输⼊:[1,-2,3,10,-4,7,2,-5]
    返回值:[3,10,-4,7,2]
    说明:经分析可知,输⼊数组的⼦数组[3,10,-4,7,2]可以求得最⼤和为18,故返回[3,10,-4,7,2]

    示例 2
    输⼊:[1]
    返回值:[1]

    思路及解答

    暴力枚举

    通过三重循环枚举所有可能的子数组,使用三重循环枚举所有可能的子数组起始和结束位置,计算每个子数组的和

    public class Solution {
        public int[] findMaxSubarray(int[] array) {
            if (array == null || array.length == 0) {
                return new int[0];
            }
            
            int n = array.length;
            int maxSum = Integer.MIN_VALUE;
            int start = 0, end = 0;
            
            // 第一重循环:子数组起始位置
            for (int i = 0; i < n; i++) {
                // 第二重循环:子数组结束位置
                for (int j = i; j < n; j++) {
                    int currentSum = 0;
                    // 第三重循环:计算子数组和
                    for (int k = i; k <= j; k++) {
                        currentSum += array[k];
                    }
                    
                    // 更新最大和及位置(优先选择长度更长的)
                    if (currentSum > maxSum || (currentSum == maxSum && (j - i) > (end - start))) {
                        maxSum = currentSum;
                        start = i;
                        end = j;
                    }
                }
            }
            
            // 构建结果数组
            int[] result = new int[end - start + 1];
            System.arraycopy(array, start, result, 0, result.length);
            return result;
        }
    }
    • 时间复杂度:O(n³),三重循环嵌套
    • 空间复杂度:O(1),除结果外只使用常数空间

    优化枚举法(前缀和思想)

    在暴力法基础上优化,利用前缀和在计算子数组和时复用之前的结果,减少一层循环

    public class Solution {
        public int[] findMaxSubarray(int[] array) {
            if (array == null || array.length == 0) {
                return new int[0];
            }
            
            int n = array.length;
            int maxSum = Integer.MIN_VALUE;
            int start = 0, end = 0;
            
            // 外层循环:子数组起始位置
            for (int i = 0; i < n; i++) {
                int currentSum = 0;
                // 内层循环:从起始位置向后累加
                for (int j = i; j < n; j++) {
                    currentSum += array[j]; // 复用之前计算的结果
                    
                    // 更新最大和(优先选择长度更长的)
                    if (currentSum > maxSum || (currentSum == maxSum && (j - i) > (end - start))) {
                        maxSum = currentSum;
                        start = i;
                        end = j;
                    }
                }
            }
            
            return buildResult(array, start, end);
        }
        
        private int[] buildResult(int[] array, int start, int end) {
            int[] result = new int[end - start + 1];
            System.arraycopy(array, start, result, 0, result.length);
            return result;
        }
    }
    • 时间复杂度:O(n²),减少了一层循环
    • 空间复杂度:O(1),常数级别空间复杂度

    分治法(递归思维)

    采用分治思想,将问题分解为更小的子问题

    将问题分解为左半部分、右半部分和跨越中间的三部分

    即递归求解左右子数组,合并时处理跨越中间的情况

    public class Solution {
        public int[] findMaxSubarray(int[] array) {
            if (array == null || array.length == 0) {
                return new int[0];
            }
            Result result = findMaxSubarrayHelper(array, 0, array.length - 1);
            return buildResult(array, result.start, result.end);
        }
        
        private Result findMaxSubarrayHelper(int[] array, int left, int right) {
            // 基准情况:单个元素
            if (left == right) {
                return new Result(left, right, array[left]);
            }
            
            int mid = left + (right - left) / 2;
            
            // 递归求解左右两部分
            Result leftResult = findMaxSubarrayHelper(array, left, mid);
            Result rightResult = findMaxSubarrayHelper(array, mid + 1, right);
            Result crossResult = findMaxCrossingSubarray(array, left, mid, right);
            
            // 返回三者中的最大值(长度优先)
            return getMaxResult(leftResult, rightResult, crossResult);
        }
        
        private Result findMaxCrossingSubarray(int[] array, int left, int mid, int right) {
            // 向左扩展找最大和
            int leftSum = Integer.MIN_VALUE;
            int sum = 0;
            int maxLeft = mid;
            for (int i = mid; i >= left; i--) {
                sum += array[i];
                if (sum > leftSum) {
                    leftSum = sum;
                    maxLeft = i;
                }
            }
            
            // 向右扩展找最大和
            int rightSum = Integer.MIN_VALUE;
            sum = 0;
            int maxRight = mid + 1;
            for (int i = mid + 1; i <= right; i++) {
                sum += array[i];
                if (sum > rightSum) {
                    rightSum = sum;
                    maxRight = i;
                }
            }
            
            return new Result(maxLeft, maxRight, leftSum + rightSum);
        }
        
        private Result getMaxResult(Result r1, Result r2, Result r3) {
            Result maxResult = r1;
            if (r2.sum > maxResult.sum || (r2.sum == maxResult.sum && (r2.end - r2.start) > (maxResult.end - maxResult.start))) {
                maxResult = r2;
            }
            if (r3.sum > maxResult.sum || (r3.sum == maxResult.sum && (r3.end - r3.start) > (maxResult.end - maxResult.start))) {
                maxResult = r3;
            }
            return maxResult;
        }
        
        private int[] buildResult(int[] array, int start, int end) {
            int[] result = new int[end - start + 1];
            System.arraycopy(array, start, result, 0, result.length);
            return result;
        }
        
        // 辅助类存储子数组结果
        class Result {
            int start, end, sum;
            Result(int s, int e, int sum) {
                this.start = s;
                this.end = e;
                this.sum = sum;
            }
        }
    }
    • 时间复杂度:O(n log n),递归深度为log n,每层处理时间为O(n)
    • 空间复杂度:O(log n),递归调用栈的深度

    动态规划-Kadane算法(最优解)

    遍历数组,维护当前子数组和,根据规则重置或扩展当前子数组

    假设现在有 n 个元素,突然加上⼀个元素,变成 n+1 个元素,对连续⼦数组的最⼤和有什么影响呢?

    我们只需要知道以每⼀个元素结尾的最⼤连续⼦数组,再维护⼀个最⼤的值即可。

    假设数组为num[] ,⽤ dp[i] 表示以下标 i 为终点的最⼤连续⼦数组和,遍历每⼀个新的元素nums[i+1] ,以 num[i+1] 为连续⼦数组的情况只有两种:

    • dp[i] + num[i+1]
    • 只有num[i+1]

    所以以nums[n] 结尾的最⼤连续⼦数组和为: dp[i] = max( dp[i-1] + num[i], num[i])

    在计算的过程中,需要维护⼀个最⼤的值,并且把该连续⼦数组的左边界以及右边界维护好,最后根据维护的区间返回。

    public class Solution85 {
        public int[] FindGreatestSumOfSubArray(int[] array) {
            int[] dp = new int[array.length];
            dp[0] = array[0];
            int maxsum = dp[0];
            int left = 0, right = 0;
            int maxLeft = 0, maxRight = 0;
            for (int i = 1; i < array.length; i++) {
                right++;
                dp[i] = Math.max(dp[i - 1] + array[i], array[i]);
                if (dp[i - 1] + array[i] < array[i]) {
                    left = right;
                }
                // 更新最⼤值以及更新最⼤和的⼦数组的边界
                if (dp[i] > maxsum || dp[i] == maxsum && (right - left + 1) > (maxRight - maxLeft + 1)) {
                    maxsum = dp[i];
                    maxLeft = left;
                    maxRight = right;
                }
            }
            // 保存结果
            int[] res = new int[maxRight - maxLeft + 1];
            for (int i = maxLeft, j = 0; i <= maxRight; i++, j++) {
                res[j] = array[i];
            }
            return res;
        }
    }
    • 时间复杂度:O(n),单次遍历数组
    • 空间复杂度:O(1),只使用常数变量