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

Taro on Harmony :助力业务高效开发纯血鸿蒙应用

背景

纯血鸿蒙逐渐成为全球第三大操作系统,业界也掀起了适配鸿蒙原生的浪潮,用户迁移趋势明显,京东作为国民应用,为鸿蒙用户提供完整的购物体验至关重要。





去年 9 月,京东 APP 纯血鸿蒙 在鸿蒙应用商城正式上线,APP 中核心购物链路,如首页、搜索、商详、购物车、订单、结算和我京等页面,都是通过 Taro on Harmony 方案进行开发,并且一上线就获得了华为的 S 级应用认证。

Taro 介绍

Taro 是由京东发起并维护的开放式跨端跨框架解决方案,支持以 Web 的开发范式来实现小程序、H5、原生 APP 的跨端统一开发,从 18 年开源至今,在 GitHub 已累计获得 36,000+ Stars。





在过去的一年中,Taro 完成了鸿蒙适配方案的开发,Taro on Harmony 方案支持开发者使用 React DSL 来快速开发高性能原生鸿蒙应用,让 Taro 具备了一份代码同时跨鸿蒙、小程序、H5、React Native 多端的能力,可以让开发者以熟悉的方式来开发鸿蒙应用,大幅降低鸿蒙开发门槛,并且存量的 Taro 业务也能快速转成鸿蒙原生应用,可以节约大量研发成本。

Taro on Harmony 适配方案的演进

基于 ArkTS 的初始版本

Taro 适配鸿蒙方案经过了多个版本的演进迭代,最初版本我们采用的是对接到鸿蒙原生 ArkTS 语言的方式来实现,这和 Taro 适配微信小程序的方案类似,都是通过模拟浏览器 DOM/BOM 环境,然后运行 React 代码构建出虚拟 DOM 树,再将虚拟 DOM 树以递归遍历的方式构建出宿主环境(小程序/鸿蒙)的渲染节点树,从而实现页面渲染。





但这个方案的缺陷非常明显,那就是在 ArkTS 之上再桥接一层转换,导致性能相比原生存在一定差异,并且这个差异几乎没有办法可以抹平。

基于 C API 的全新版本

恰逢此时,鸿蒙为了方便三方框架与应用接入鸿蒙生态,在官方开发语言 ArkTS 之外,开放了更底层 C API 能力,提供了 C++ 层的 UI 节点创建、属性设置等能力(类似于 C++ 版本的 DOM),三方框架和应用可以基于 C API 构建高性能的解决方案和应用。





C API 就是 Taro 想要的能力,与 Taro 的架构完美契合,Taro React 构建出来的虚拟 DOM 树可以通过 C API 直接去创建原生 UI 节点,省去了很多流程环节,并且可以将我们大部分的渲染管线处理沉到 C++ 中去,获得飞跃式的性能提升,所以基于 C API 我们首先设计并开发了单线程架构版本。

单线程架构版本

单线程架构版本的示意图如下,整个渲染过程均在主线程实现,业务代码在 ArkVM 中执行获得虚拟 DOM 树,同时读取样式数据,通过 React Reconciler ,在构建虚拟树时会调用 NAPI 在 C++ 侧构建出对应的 Element Tree,同时也会进行样式数据的解析处理,从而构建出 CSSOM 对象,Element Tree 和 CSSOM 对象会进行匹配从而构建出带有样式的 Render Tree,在这一步也会同时创建 yoga 节点,进行布局计算,最后会再基于布局计算的结果生成 C API 的 ArkNode Tree,从而实现上屏渲染。





目前京东鸿蒙 APP 中首页、搜推、我京、核心购物流程均是使用 Taro 单线程版本进行开发,性能和稳定性位于第一梯队。





多线程架构版本

单线程版本上线之后,我们也发现了单线程架构的不足,① 从业务代码的执行到渲染流程的处理都发生在主线程上,这导致了主线程的过载,使得应用无法及时响应用户的操作,从而引发了用户体验上的卡顿,随着业务逻辑的增加和复杂性的提升,这种卡顿现象会越发明显;② 在单线程架构下,代码都是需要内置到应用包里,这样就无法实现业务代码的动态下发更新。

所以,为了解决以上问题,进一步提升应用性能,和应对未来更多业务场景需求的可能性,我们实现了多线程架构。





相较于单线程架构,多线程架构将整个业务代码执行和渲染的过程拆分到了三个线程,每个线程各司其职,让任务的执行更加合理,不会造成主线程的堵塞,这样的架构主要带来三个好处。

1.业务逻辑不再堵塞主流程,完全剥离到了单独的线程执行,之前容易出现卡顿、甚至 APP Freeze 的页面基本不再有问题,例如商详接入之后滑动页面变得更加流畅;

2.动画执行和渲染不再卡顿,动画的执行交由 Background 线程管控,不再和 JS 线程有冲突问题,动画支持满帧渲染;

3.支持动态化的能力,在性能上可以与原生相媲美,同时还能支持动态下发,支持更新远端 JS 资源来实现 APP 内容的更新,让业务具备快速验证和免发版的能力。

目前多线程版本正在我们的业务中进行试点接入,很快就会正式上线。

Taro on Harmony 方案特性

丰富的能力支持

常用组件和 API 支持

在 C-API 版本的 Taro For Harmony 中,我们不仅完整支持了 React 18+,另外支持了 View、Text、Image、Video 等近 33 个 Taro 组件,对于常用的 API,如 getSystemInfo、getStorage 等也是在 C-API 版本中得到了完整的支持,而且针对逻辑较为复杂的 API 如:createSelectorQuery 以及 createIntersectionObserver,我们将这些 API 在 C++ 侧进行了重新的实现,大幅提升了他们的执行性能。

常用样式支持

在 C-API 版本中,我们对支持了大部分常见的 CSS 能力:

•支持常见的 CSS 样式和布局,支持 flex、伪类和伪元素

•支持常见的 CSS 定位,绝对定位、fixed 定位

•支持常见的 CSS 选择器和媒体查询

•支持常见的 CSS 单位,比如 vh、vw 以及计算属性 calc

•支持 CSS 变量以及安全区域等预定义变量

同时,我们参考浏览器 CSSOM 的实现方式,在 C++ 实现了一套 CSSOM 逻辑,里面包含了样式解析、样式匹配、样式合成和应用整个链路的样式处理逻辑。





另外,Taro 引入了 Yoga 布局引擎来计算渲染节点的位置和大小,最大程度保证 Taro 构建出来的鸿蒙应用中渲染样式和 W3C 规范的一致性。





媲美原生 ArkTS 的高性能

运行时逻辑下沉至 C++

在 C-API 的版本中,我们将 ArkVM 层的 Taro 运行时内容削减到极致的薄,将 TaroElement 的大部分内容都下沉到了 C++ 侧,并在 ArkVM 层取消了他们之间父子关系的绑定,极大地提升了 TaroElement 相关逻辑的性能。





另一方面,在 C++ 侧 Taro 会指令式地调用 ArkUI 在 C++ 侧提供的 API,来高效地创建节点、设置属性、绑定事件以及绘制上屏。

提供长列表组件应对长列表场景

Taro 还针对长列表场景针对性地提供了长列表类型组件,并对长列表类型组件进行了优化,提供了懒加载、预加载和节点复用等功能,有效地解决大数据量下的性能问题,提高应用的流畅度和用户体验。





支持 C API 混合原生的渲染模式

Taro 的组件和 API 是以小程序作为基准来进行设计的,因此在实际的鸿蒙应用开发过程中,会出现部分所需的组件和 API 在 Taro 中不存在的情况,因为针对这种情况,在 C-API 版本中,Taro 提供了原生混合开发的能力,支持将原生页面或者原生组件混合编译到 Taro 鸿蒙项目中,支持 Taro 组件和鸿蒙原生组件在页面上的混合使用。





总结

Taro 鸿蒙方案基于鸿蒙 CAPI 进行构建,实现了将 React DSL 直接对接到 C++ 侧来运行整体渲染管线,从而实现了与原生齐平的渲染性能,同时 Taro 鸿蒙方案是多线程架构的方案,在应用渲染性能、操作响应时延上都在业界做到极致,并且 Taro 鸿蒙方案支持动态更新,是行业首创且经过大规模 APP 应用场景验证的开发框架,综合性能、生态以及开发体验来讲,毫无疑问已经成为了开发鸿蒙应用的最佳框架选型之一。

目前,我们也仍然在不断完善着鸿蒙的适配方案,目前在渲染性能提升方面我们正在进行 React C++ 化的探索,整体进展也已经处于验证和测试阶段,同时也在进行自研布局引擎的探索,在进一步提升渲染性能的同时,为业务提供更丰富的样式写法支持;此外,在开发效率提升方面,我们也正在进行开发调试工具的探索开发,为业务提供热重载、源码定位、断点调试、元素审查等能力,提升效率和开发体验。

在近期,我们会将已经在京东鸿蒙 APP 久经考验的单线程架构版本开源出来,为开源社区贡献一份力量,为鸿蒙应用生态的丰富注入强大的动力。

相关文章:

Taro on Harmony :助力业务高效开发纯血鸿蒙应用

背景 纯血鸿蒙逐渐成为全球第三大操作系统,业界也掀起了适配鸿蒙原生的浪潮,用户迁移趋势明显,京东作为国民应用,为鸿蒙用户提供完整的购物体验至关重要。   去年 9 月,京东 AP…...

Java基础——排序算法

排序算法不管是考试、面试、还是日常开发中都是一个特别高频的点。下面对八种排序算法做简单的介绍。 1. 冒泡排序(Bubble Sort) 原理:相邻元素比较,每一轮将最大元素“冒泡”到末尾。 示例数组:[5, 3, 8, 1, 2] pub…...

【操作系统原理07】输入/输出系统

文章目录 零.大纲一.I/O设备的概念和分类0.大纲1.什么是I/O设备2.I/O分类 二.I/O控制器0.大纲1.I/O设备的电子部件(I/O控制器)2.IO控制器组成3.内存映像I/O VS 寄存器独立编址 三.I/O控制方式0.大纲与总结1.程序直接控制方式(1) 操…...

IM云端搜索全面升级,独家能力拓展更多“社交连接”玩法

在这个数字时代,网络让信息传递前所未有的便捷,但同时,海量数据堆积也让内容检索变得像大海捞针。尤其是在我们日常工作生活中最常用的即时通信软件中,信息的快速查找和精准定位正变得越来越重要。 但传统的本地搜索功能受限于设…...

汽车产业链主表及类别表设计

(提前设计,备用) 一、汽车产业链类别表(industry_chain_category) 设计要点 1、核心字段:定义产业链分类(如零部件、整车制造、销售服务等) 2、主键约束:自增ID作为唯一标…...

有效的字母异位词

recorded&#xff1a;用于统计或抵消字符出现次数。 class Solution { public:bool isAnagram(string s, string t) {int record[26]{0};for(int i0;i<s.size();i){record[s[i]-a];}for(int i0;i<t.size();i){record[t[i]-a]--;}for(int i0;i<26;i){if(record[i]!0){…...

汽车网络安全 -- 理解暴露面、攻击面和攻击向量

1.暴露面是攻击面的子集 举个例子&#xff0c;房子都有门、窗户&#xff0c;这些窗户、门不管是否打开&#xff0c;都可能被小偷利用进入到房内&#xff0c;因此这些门窗可能是潜在的漏洞&#xff0c;所以称之为攻击面(Attack Surface)。 小偷经过长期观察&#xff0c;发现家…...

C++异步利器:全面理解 std::packaged_task

在现代 C&#xff08;C11及以后&#xff09;中&#xff0c;并发与异步编程是不可回避的重要技能。我们常常希望把某些计算任务扔给后台线程去处理&#xff0c;同时又能优雅地获取任务结果。 这时候&#xff0c;std::packaged_task 就是一个非常强大的工具。 本文将带你深入理解…...

Animate 中HTMLCanvas 画布下的鼠标事件列表(DOM 鼠标)

在 JavaScript 和 ‌Adobe Animate&#xff08;CreateJS&#xff09;‌ 中&#xff0c;常用的鼠标交互事件可分为两大类&#xff1a;‌基础 DOM 事件‌ 和 ‌CreateJS 扩展事件‌12。以下是完整分类&#xff1a; 一、基础 DOM 鼠标事件 事件名触发场景冒泡特性click鼠标左键单…...

RagFlow文档切块提升

1.RagFlow切块介绍 2.复现优化 2.1 General 通用分块 def parser_text(self, txt, blockSize512, overlapSize0, delimiter"\n!?;。&#xff1b;&#xff01;&#xff1f;"):文本分割sentences self.split_text_by_period_qh(txt, delimiter, blockSizeblockSize)…...

音频转base64

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>音频转Base64</title><style>.containe…...

蓝桥杯 11. 打印大X

打印大X 原题目链接 题目描述 小明希望用星号拼凑&#xff0c;打印出一个大 X&#xff0c;他要求能够控制笔画的宽度和整个字的高度。 为了便于比对空格&#xff0c;所有的空白位置都以句点符 . 来代替。 输入描述 输入两个整数 m 和 n&#xff0c;表示笔画的宽度和 X 的高…...

页面需要重加载才能显示的问题修改

1.问题描述&#xff1a;跳转页面后&#xff0c;只有点击重新加载后才会显示内容 经过测试后&#xff1a; / 跳转详情 const goToDetail (bookId) > { router.push({ path: /classic-detail, query: { book_id: bookId } }) } 执行完以上代码后&#xff0c;页面从classics…...

On the Biology of a Large Language Model——Claude团队的模型理解文章【论文阅读笔记】其二——数学计算部分

这篇内容的源博文是 On the Biology of a Large Language Model 这是Anthropic&#xff0c;也就是Claude的团队的一遍技术博客。他的主要内容是用一种改良版的稀疏编码器来解释LLM在inference过程中内部语义特征的激活模式。因为原文太长&#xff0c;我把原文分成了几份来写阅读…...

Python语言基础知识详解:标识符与变量

Python语言基础知识详解&#xff1a;标识符与变量 一、标识符&#xff08;Identifiers&#xff09; 定义 标识符是用于命名变量、函数、类、模块或其他对象的名称。它是代码中对实体的唯一标识。 1. 标识符的命名规则 Python的标识符需遵循以下规则&#xff1a; 允许的字符 由…...

google chrome 中 fcitx5 候选框不跟随光标

我的电脑&#xff1a;ubuntu22.04&#xff0c;窗口系统&#xff1a;wayland 2025/4/26 号更新的谷歌浏览器 今天打开浏览器发现输入法的候选框固定在左上角不动了&#xff0c;一番折腾&#xff0c;发现解决办法如下&#xff1a; 在搜索框中输入 about:flags搜索 wayland&#…...

深入浅出提示词工程(结合 DeepSeek)

提示词工程 Prompt 即提示、指令&#xff0c;所以提示工程也叫「指令工程」 用户输入的问题称为 Prompt&#xff0c;本文主要探讨 System Prompt&#xff08;我将其翻译成「系统预设」&#xff09; 使用 Prompt 的目的 直接提问 如「我该学 Vue 还是 React&#xff1f;」&…...

OpenVLA:大语言模型用于机器人操控的经典开源作品

TL;DR 2024 年斯坦福大学提出的 OpenVLA&#xff0c;基于大语言模型实现机器人操控&#xff0c;代码完全开源。 Paper Notes Name&#xff1a;OpenVLA: An Open-Source Vision-Language-Action ModelURL&#xff1a;https://openvla.github.io/作者&#xff1a;斯坦福&#…...

数值分析、数值代数之追赶法

数值分析、数值代数之追赶法 MATLAB 中&#xff0c;diag 函数用法追赶法推导过程代码运行过程 MATLAB 中&#xff0c;diag 函数用法 在 MATLAB 中&#xff0c;diag 函数用于处理矩阵的对角线元素或创建对角矩阵。以下是其常见的用法&#xff1a; 1.提取矩阵的对角线元素 2.创…...

深入浅出JVM - Java架构师面试实战

深入浅出JVM - Java架构师面试实战 本文通过模拟一位拥有十年Java研发经验的资深架构师马架构与面试官之间的对话&#xff0c;深入探讨了JVM的核心知识点。涵盖内存结构、垃圾回收算法、垃圾回收器、内存调优工具及参数配置等关键领域。 第一轮提问 面试官&#xff1a; 马架…...

Qt网络数据解析方法总结

在Qt中解析网络数据通常涉及接收原始字节流&#xff0c;并将其转换为有意义的应用层数据。以下是详细步骤和示例&#xff1a; 1. 网络数据接收 使用QTcpSocket或QUdpSocket接收数据&#xff0c;通过readyRead()信号触发读取&#xff1a; // 创建TCP Socket并连接信号 QTcpSo…...

[AHOI2001] 质数和分解

import java.util.*;public class Main {static int[] ss new int[201];public static void main(String[] args) {Scanner sc new Scanner(System.in);while (sc.hasNextInt()) { int n sc.nextInt();int num 0; // 记录质数个数int[] dp new int[201];dp[0] 1;for (in…...

说一下Drop与delete区别

在数据库操作里&#xff0c;DROP与DELETE是两个重要且功能不同的命令&#xff0c;以下为你详细介绍二者的区别&#xff1a; 功能层面 DROP&#xff1a;此命令用于删除数据库、表、视图、索引等数据库对象。一旦执行&#xff0c;数据库对象就会被彻底删除&#xff0c;其定义和…...

基于云原生架构的后端微服务治理实战指南

一、引言&#xff1a;为什么在云原生时代更需要微服务治理&#xff1f; 在单体应用时代&#xff0c;开发和部署虽然简单&#xff0c;但随着系统规模的扩大&#xff0c;单体架构的维护成本急剧上升&#xff0c;部署频率受限&#xff0c;模块之间相互影响&#xff0c;最终导致系…...

后端响应巨量数据,如何优化性能?

WebSocket流式传输 fetch虚拟滚动 &#xff08;渲染性能提升&#xff0c;一次性记载固定条数&#xff09;分片滚动 fetch流式传输 async function streamData(url) {unction streamOutput(msg) {// 发送 POST 请求fetch(url, {method:"POST",body:JSON.stringify({ …...

《代码整洁之道》第4章 注释 - 笔记

注释的恰当用法是弥补代码表达意图时遭遇的失败&#xff0c;良好的代码&#xff0c;让读者看代码就能明白含义。 代码在变动&#xff0c;在演化。注释并不总是随之变动。不准确的注释比没有注释要坏的多。注释算的上是一种没办法去除的恶。 注释不能美化代码 与其花时间编写…...

闭包与装饰器(python)

此 Python 代码借助闭包构建了计算对数的函数。闭包指的是一个函数与其所引用的外部变量共同构成的一个整体。借助闭包&#xff0c;我们能够创建具有特定行为的函数&#xff0c;并且这些函数可以记住其创建时的环境。 代码详细分析 导入模块 python import math 导入 math …...

学成在线网页

技术&#xff1a;h5css&#xff0c;静态页面 主页&#xff1a; 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0&quo…...

AI测试工具Testim——告别自动化测试维护难题

随着人工智能技术的快速发展&#xff0c;AI测试工具正在成为提升软件研发效能的关键。每款AI的特性各有差异&#xff0c;今天&#xff0c;我们就给大家介绍一款专注于Web和移动应用的端到端的AI测试工具--Testim。 Testim的简介 官网地址&#xff1a;https://www.testim.io/ 简…...

【C++详解】C++入门(二)引用、内联函数、nullptr宏

文章目录 一、引用引用的概念和定义引用的功能引用的特性const引用const用法回顾权限的放大缩小const引用的功能 指针和引用的关系 二、内联函数三、nullptr补充结构体指针变量类型重定义 一、引用 引用的概念和定义 C祖师爷为了优化在部分场景中使用指针会出现的效率较低和比…...

8、HTTPD服务--CGI机制

目录 1、测试PHP页面 2、安装php软件 一、CGI机制介绍 1、测试PHP页面 [rootlocalhost ~]# cat /mp3/test1.php AAAAAAAAAAAAA <?phpphpinfo(); ?> 2、安装php软件 # yum install -y php # systemctl restart httpd php实际上是作为httpd的功能模块存在的 [r…...

层级时间轮的 Golang 实现原理与实践

一、引言 在高并发服务中&#xff0c;延时任务的管理是一个常见且重要的需求。比如 HTTP 请求超时、心跳检测、订单超时未支付提醒等场景&#xff0c;传统的 Timer 或 Heap 实现会带来 O(log n) 的复杂度&#xff0c;难以支撑百万级别的定时任务。 论文《Hashed and Hierarch…...

人类社会的第四阶段

本书的主旨是探讨一场新的权力革命&#xff0c;它将以20世纪民族国家的毁灭为代价&#xff0c; 解放出个体。创新&#xff0c;以前所未有的方式改变了暴力的逻辑&#xff0c;并且正在革新未来的 边界。如果我们的推论是正确的&#xff0c;你们正站在一场有史以来最宏大的革命的…...

Golang | Builder模式

Builder模式是一种创建型设计模式&#xff0c;用于分步骤构建复杂对象&#xff0c;尤其适用于构造过程复杂或需要多个配置选项的场景。将对象的构造过程与其表示分离&#xff0c;通过分步骤和链式调用的方式灵活创建对象&#xff0c;避免构造函数的参数爆炸&#xff0c;提升代码…...

C#本地使用离线ocr库识别图片中文本,工具包PaddleOCRSharp

C#本地使用离线ocr库识别图片文本&#xff0c;工具包PaddleOCRSharp PaddleOCRSharp介绍 项目地址&#xff1a;https://github.com/raoyutian/PaddleOCRSharp PaddleOCRSharp 是一个.NET版本OCR可离线使用类库。项目核心组件PaddleOCR.dll目前已经支持C\C、.NET、Python、Go…...

Flutter 在 Dart 3.8 开始支持 Null-Aware Elements 语法,自动识别集合里的空元素

近日&#xff0c;在 Dart 3.8 的 changelog 里正式提交了 Null-Aware Elements 语法&#xff0c;该语法糖可以用于在 List、Set、Map 等集合中处理可能为 null 的元素或键值对&#xff0c;简化显式检查 null 的场景&#xff1a; /之前 var listWithoutNullAwareElements [if …...

3、Linux操作系统下,linux的技术手册使用(man)

linux系统内置技术手册&#xff0c;方便开发人员查阅Linux相关指令&#xff0c;提升开发效率 man即是manual的前三个字母&#xff0c;有时候遇事不决&#xff0c;问个人&#xff08;man&#xff09; 其在线网址为&#xff1a;man 还有man网站的作者写的书&#xff0c;可以下…...

Python 自动化办公:Excel 数据处理的“秘密武器”

引言 在日常的 IT 办公场景里&#xff0c;Excel 是数据处理与分析的 “常胜将军”。无论是财务人员整理账目、销售团队统计业绩&#xff0c;还是运营人员分析用户数据&#xff0c;Excel 都发挥着关键作用。但面对海量数据&#xff0c;手动操作 Excel 不仅效率低下&#xff0c;还…...

通过数据增强打造抗噪音多模态大模型

下载前面 想象一下,你正在一个嘈杂的咖啡馆里,想让身边的AI助手帮你预定一张电影票。或者,你在熙熙攘攘的街道上,需要语音导航带你找到目的地。在这些真实的场景中,语音交互面临着一个巨大的挑战——噪音。 背景噪音、他人说话声、设备本身的电流声……这些无处不在的干…...

Node.js API 安全的主要策略:最佳实践

了解 Node.js API 安全性 保护 Node.js API 的安全需要了解潜在的漏洞并采取措施来缓解这些漏洞。这类 API 通常遇到的常见威胁包括: SQL 注入**:**操纵用户输入以针对数据库执行恶意 SQL 代码。跨站点脚本**(XSS):**将恶意脚本注入其他用户查看的网页。跨站请求伪造**(CSR…...

如何删除Google Chrome中的所有历史记录【一键清除】

谷歌浏览器记录了用户访问过的网站。这方便了查找&#xff0c;但有时也需要清理。删除所有历史记录很简单&#xff0c;只要按照以下步骤操作。 1. 打开谷歌浏览器 首先要启动谷歌浏览器。点击右上角的三个点&#xff0c;进入主菜单。 2. 进入历史记录界面 在菜单中找到“历史…...

计算机三大主流操作系统的前世今生 - Linux|macOS|Windows

全文目录 1 引言2 起源之路2.1 Linux 起源2.2 macOS 起源2.3 Windows 起源 3 综合解析3.1 Linux系统综合解析3.1.1 系统定义与核心架构3.1.2 发展历程3.1.3 核心特点3.1.4 主流发行版3.1.5 应用场景 3.2 macOS系统综合解析3.2.1 系统定义与核心架构3.2.2 发展历程3.2.3 核心特点…...

大数据学习栈记——Hive4.0.1安装

本文介绍大数据技术中数据仓库Hive的安装配置&#xff0c;版本&#xff1a;Hive4.0.1&#xff0c;Ubuntu24.04。 Hive简介 Hive由 Facebook 开源用于解决海量结构化日志的数据统计工具。 Hive是基于Hadoop的一个数据仓库工具&#xff0c;可以将结构化的数据文件映射为一张数据…...

8.Excel:数据验证和下拉列表

一 数据验证 1.作用 限制用户输入单元格的值。 补充&#xff1a;数据验证要先设置验证才会起作用&#xff0c;对于已经填写完成的表格来说&#xff0c;可以快速找到不符合的数值。 选中整列&#xff0c;然后设置数据验证。 然后圈释无效数据&#xff0c;不符合的会被圈出来 2.如…...

【机器学习-线性回归-4】线性回归中的最优解:从数学原理到实践应用

在机器学习的世界里&#xff0c;线性回归就像是一把瑞士军刀——简单却功能强大。无论是预测房价、分析销售趋势&#xff0c;还是研究变量间的相关性&#xff0c;线性回归都是数据科学家首选的入门算法。但你是否曾好奇过&#xff0c;这个看似简单的算法背后&#xff0c;是如何…...

《代码整洁之道》全书归纳

如果要把这本书最关键、最核心、被反复提及和强调的重点提炼出来&#xff0c;那就是&#xff1a; 可读性高于一切&#xff1a; 你的代码是给人读的&#xff0c;让它像一篇清晰的文章一样易于理解。表达意图是关键。短小、单一&#xff1a; 函数要短小&#xff0c;类要短小&…...

项目代码生成工具

代码生成工具 文章目录 代码生成工具提取公共类domainbodtoentityvoBean基类 代码生成工厂连接配置模版1、基础类基类Entity添加DTO类分页查询DTO基础查询DTO修改DTO视图VO 2、controller2、service接口3、service实现类4、Mapper接口5、Mapper的xml文件 提取公共类 比方说每个…...

【机器学习驱动的智能化电池管理技术与应用】

在人工智能与电池管理技术融合的背景下&#xff0c;电池科技的研究和应用正迅速发展&#xff0c;创新解决方案层出不穷。从电池性能的精确评估到复杂电池系统的智能监控&#xff0c;从数据驱动的故障诊断到电池寿命的预测优化&#xff0c;人工智能技术正以其强大的数据处理能力…...

【MySQL 】MySQL 安装自记录全程-详细 (mysql-installer-community-8.0.42.0.msi)

看了一些别人的文章&#xff0c;其实还有些困惑&#xff0c;根据不少都有一些跟我遇到的不太一样&#xff0c;记录一下自己的安装过程 MySQL 安装&#xff08;Windows&#xff09; 下载 MySQL 安装包 MySQL数据库官网链接 MySQL &#xff08;MySQL的https://www.mysql.com/ …...

构建事件驱动的云原生后端系统 —— 从设计到实践

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:为什么需要事件驱动架构? 在现代互联网应用中,系统规模越来越大,功能模块越来越复杂,用户行为越来越不可预测。 传统的同步调用、强耦合的后端架构,面对大规模并发、高频变化、复杂交…...