ReactNative进阶(五十九):存量 react-native 项目适配 HarmonyOS NEXT
文章目录
- 一、前言
- 二、ohos_react_native
- 2.1 Fabric
- 2.2 TurboModule
- 2.2.1 ArkTSTurboModule
- 2.2.2 cxxTurboModule:
- 三、拓展阅读
一、前言
2024年10月22日19:00,华为在深圳举办“原生鸿蒙之夜暨华为全场景新品发布会”,主题为“星河璀璨,共见鸿蒙”。本次活动上,华为正式发布“纯血鸿蒙”系统HarmonyOS 5.0
(即HarmonyOS NEXT
),据华为常务董事、终端BG董事长余承东透露,该系统是鸿蒙诞生以来的最大一次升级。
值得注意的是,HarmonyOS 5.0
是我国首个国产移动操作系统,也是继苹果iOS和安卓系统后,全球第三大移动操作系统。
为保证存量APP功能在鸿蒙NEXT系统可以正常使用,需保证基于RN框架开发的存量APP功能适配鸿蒙NEXT。
二、ohos_react_native
跨平台开发框架层面,除了 Flutter
支持鸿蒙外,React Native
社区支持的 ohos_react_native
也终于在 OpenHarmony-SIG 对外开源,并且和 Flutter
不同在于,本次开源的版本是基于 React Native 0.72.5
。
ohos_react_native
基于 0.72.5
,也就是距离 0.76 New Architecture Default
虽然还有几个版本之差,但是它确确实实支持 New Architecture
里的大部分能力,例如 “Interop Layers”
(毕竟官服强制新架构,迁移第三方算支持 IL
),和最新版本相比,也就是不支持 Bridgeless Mode
和 Suspense & Transitions
而已。
这也是和 Flutter
鸿蒙版的最大不同之处,基于 React Native 0.72.5
的 ohos_react_native
可以使用 New Architecture
里的大部分支持,而 Flutter
目前还未兼容至 Impeller
。
可以看到,ohos_react_native
在 React Native
新架构基础上进行了鸿蒙化适配,也就是类似 JSI
、Fabric
、TurboModule
、CodeGen
和 Hermes Engine
的能力,在 OpenHarmony
版本都得到了保留支持,并且通过原生平台的 API 进行了适配。
例如,在 OpenHarmony
适配层会接收 React Common
传过来的数据,对接原生的代码,调用 ArkUI
的原生组件与 API,核心主要是包括了两个部分: TurboModule
与 Fabric
。
2.1 Fabric
Fabric
是 React Native
新架构下的渲染系统,取代了原本的 UI Manager
, 接收 React Native
传过来的组件信息,处理后发送给原生 OS,由 OS 完成页面的渲染。
目前主流的移动端跨平台技术方案大体可以分为三类,
- 使用原生内置浏览器加载
HTML5
的Hybrid
技术方案,采用此种方案的主要有Cordova
、Ionic
和微信小程序;- 使用
JavaScript
语言进行开发,然后使用原生组件进行渲染,采用此方案的主要有React Native
、Weex
和轻快应用;- 使用自带的渲染引擎和自带的原生组件来实现跨平台,采用此种方案的主要是
Flutter
。
ohos_react_native
一开始是直接用 N-API
的,在经历早期将控件转化为 ArkUI
控件的效果“不尽如人意”之后,ohos_react_native
直接使用 XComponent
对接到 ArkUI
的后端接口进行渲染,从而缩短了流程,提高了组件渲染效率,也就是大家常说的 C-API
。
ohos_react_native
在文档中表示,C-API
的性能收益包括以下的几个部分:
- C 端最小化、无跨语言的组件创建和属性设置;
- 无跨语言前的数据格式转换,不需要将
string
,enum
等数据类型转换为object
,可以在 CPP 侧直接使用对应的数据进行处理; - 可以进行属性 Diff,避免重复设置,降低了属性设置的开销。
Taro 也曾在他们的文章中表示过,因此在
ArkTS
版本中,在CSS
的解析和属性应用阶段占用了过多的时间,在CAPI
版本进行了CSSOM
模块的架构升级后,带来了明显的性能提升。
这里的实现主要依赖 XComponent
完成,XComponent
在 ArkUI
上主要提供用于图形绘制和媒体数据写入的 Surface
,XComponent
负责将其嵌入到视图中,支持应用自定义 Surface
位置和大小,需要 API 10
,并且在 API 12
开始支持在元服务中使用。
也就是 XComponent
类似一个 Surface
的存在,一般情况下用于相机预览或者视频播放,需要支持 EGL/OpenGLES
等相关的应用场景。
从 ohos_react_native
提供的资料可以看到,类似直接越过 ArkUI
前端,利用后端 XComponent
的渲染能力实现很眼熟?其实就类似于 Flutter
上的实现。
不严谨的说,之前鸿蒙 RN 是把 React Component
映射成 Widget
,那么 C-API
版本的鸿蒙 RN 则是利用 JSI
把 React Component
直接在 C++
层映射成 RenderingObject
。
所以在基于ArkUI C-API
的适配方案中,rootView
是一个 XComponent
,用于占位,并挂载 C-API
的组件。
另外,在目前的 C-API
中组件中是支持渲染 ArkTS
组件,但是仅支持叶子节点如 Image
,不支持容器节点 如Stack
等,也就是 C-API
组件一般情况下是可以和 ArkTS
叶子组件混合开发。
总的来说,ohos_react_native
的后续路线都是 C-API
,并且三方库后续也只基于 RN C-API
架构演进,例如第三方库中所有的非叶子节点(容器型)库都需要进行了 C-API
化适配,如 react-native-safe-area-context
、react-native-linear-gradient
和 react-native-svg
等,这是适配鸿蒙时需要格外注意的。
目前
ohos_react_native
的 NPM 公仓坐标是@react-native-oh-tpl
,官服一共准备迁移 300 多个
package ,截止到目前已经迁移了 70 多个迁移的包。
2.2 TurboModule
TurboModule
是 React Native
中用于 JS 和原生代码进行交互的模块,而 Turbo Modules
里 JS 将能够持有这些模块的引用,所以 JS 代码可以仅在需要时才加载对应模块,这样可以将显着缩短 RN 应用的启动时间。
在目前 ohos_react_native
里,根据是否依赖 HarmonyOS系统相关的能力,可以分为 cxxTurboModule
和 ArkTSTurboModule
。
2.2.1 ArkTSTurboModule
ArkTSTurboModule
为 React Native
提供了调用 ArkTS
原生 API 的方法,可以分为同步与异步两种。
ArkTSTurboModule
依赖 NAPI
进行原生代码与 CPP 侧的通信,包括 JS 与 C 之间的类型转换,同步和异步调用的实现等。
2.2.2 cxxTurboModule:
cxxTurboModule
主要提供的是不需要系统参与的能力,例如 NativeAnimatedTurboModule
主要提供了数据计算的相关能力。
cxxTurboModule
不依赖于系统的原生 API,为了提高相互通信的效率,一般是在 cpp 侧实现,这样可以减少 native 与 cpp 之间的通信次数,提高性能。
从官方提供这部分内容看,目前 ohos_react_native
在 TurboModule
和 react native
还是存在一定差别,至少不会是类似 0.73
的完全 Bridgeless Mode
模式。
同样,TurboModule
支持使用 Codegen
生成原生代码 ,这里采用的是 react-native codegen-harmony
的相关脚本支持,同时在 CMakeLists.txt
中会添加新增的胶水代码文件,需要在 CMake
文件中把Codegen
生成的文件分别使用 add_library
和 target_include_directories
添加到编译构建的任务中,生成对应 so
。这里也可以看到 C-API
的"“影子”"。
三、拓展阅读
- ohos_react_native
相关文章:
ReactNative进阶(五十九):存量 react-native 项目适配 HarmonyOS NEXT
文章目录 一、前言二、ohos_react_native2.1 Fabric2.2 TurboModule2.2.1 ArkTSTurboModule2.2.2 cxxTurboModule: 三、拓展阅读 一、前言 2024年10月22日19:00,华为在深圳举办“原生鸿蒙之夜暨华为全场景新品发布会”,主题为“星河璀璨&…...
[x86 ubuntu22.04]进入S4失败
目录 1 问题描述 2 解决过程 2.1 查看内核日志 2.2 新建一个交换分区 2.3 指定交换分区的位置 1 问题描述 CPU:G6900E OS:ubuntu22.04 Kernel:6.8.0-49-generic 使用“echo disk > /sys/power/state”命令进入 S4,但是无法…...
Java面试题-MySQL数据库
文章目录 1.事务1.事务的特性 ACID2.并发事务问题3.undo log 和redo log的区别?4.事务的隔离性是如何保证的呢?解释一下MVCC? 2.索引1.如何定位慢查询?2.explain3.了解过索引吗?索引的底层数据结构B树和B树对比4.什么是…...
为什么Vue的data属性是函数而不是对象
Vue中data属性设计为函数而非对象的原因是解决组件复用时的数据隔离问题。确保每个实例维护独立的数据副本,避免数据共享导致的状态污染。 而根实例因为只会被创建一次(不会被复用),所以可以直接用对象,不会有这个问题。 组件一般都会被多个实…...
网络工程师 (26)TCP/IP体系结构
一、层次 四层: 网络接口层:TCP/IP协议的最底层,负责网络层与硬件设备间的联系。该层协议非常多,包括逻辑链路和媒体访问控制,负责与物理传输的连接媒介打交道,主要功能是接收数据报,并把接收到…...
MySQL部署基于二进制日志文件位置的主从复制集群
MySQL主从复制介绍 MySQL 主从复制(Master-Slave Replication) 作为一种经典的数据库复制方案,被广泛应用于企业生产环境,尤其是在提升数据库性能、实现数据备份和分布式扩展方面具有重要作用。 官方文档:https://de…...
【系统设计】Spring、SpringMVC 与 Spring Boot 技术选型指南:人群、场景与实战建议
在 Java 开发领域,Spring 生态的技术选型直接影响项目的开发效率、维护成本和长期扩展性。然而,面对 Spring、SpringMVC 和 Spring Boot 这三个紧密关联的框架,开发者常常陷入纠结:该从何入手?如何根据团队能力和业务需…...
【CAPL实战】LIN调度表操作
文章目录 前言1、linChangeSchedTable切换调度表2、linStartScheduler开启调度表3、linStopScheduler停止调度表 前言 在LIN调度表Schedule Table文章中,详细介绍了LIN调度表的信息,那么如何在CAPL脚本测试中进行LIN调度表的操作呢? 1、linC…...
「vue3-element-admin」告别 vite-plugin-svg-icons!用 @unocss/preset-icons 加载本地 SVG 图标
🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 🌺 仓库主页: GitCode︱ Gitee ︱ Github 💖 欢迎点赞 👍 收藏 ⭐评论 …...
[图文]课程讲解片段-Fowler分析模式的剖析和实现01
解说: GJJ-004-1,分析模式高阶Fowler分析模式的剖析和实现,这个课是针对Martin Fowler的《分析模式》那本书里面的模式来讲解,对里面的模式来剖析,然后用代码来实现。 做到这一步的,我们这个是世界上独…...
element-plus el-tree-select 修改 value 字段
element-plus el-tree-select 修改 value 字段 ,不显示label 需要注意两个地方: <el-tree-select v-model"value" :data"data" multiple :render-after-expand"false" show-checkbox style"width: 240px" …...
软件测评实验室CNAS认证能力验证什么时机做?如何查询能力验证相关信息?
能力验证是软件测评实验室申请CNAS认证前必须要做的一类质量活动。CNAS软件测评实验室初次认可和扩大认可范围时,申请认可的每个子领域应至少参加过一次相关领域的能力验证且获得满意结果。通过认定认可后,只要存在可获得的能力验证,不同类目…...
Spring Boot 3.4 中 MockMvcTester 的新特性解析
引言 在 Spring Boot 3.4 版本中,引入了一个全新的 MockMvcTester 类,使 MockMvc 测试可以直接支持 AssertJ 断言。本文将深入探讨这一新特性,分析它如何优化 MockMvc 测试并提升测试的可读性。 Spring MVC 示例 为了演示 MockMvcTester 的…...
网安加·百家讲坛 | 刘志诚:以业务为中心的网络安全挑战与机遇
作者简介:刘志诚,乐信集团信息安全中心总监、OWASP广东区域负责人、网安加社区特聘专家。专注于企业数字化过程中网络空间安全风险治理,对大数据、人工智能、区块链等新技术在金融风险治理领域的应用,以及新技术带来的技术风险治理…...
配置 VS Code 调试 ROS Python 脚本:完整步骤
在 Ubuntu 系统上使用 ROS 和 VS Code 进行 Python 开发时,可能会遇到一些环境配置的问题,特别是当需要加载 ROS 环境变量以及确保正确使用 Python 3 环境时。以下是如何配置 launch.json 和 tasks.json 来确保 VS Code 调试环境能够正确加载 ROS 和 Pyt…...
HTTP4种方法(GET、POST、 PUT和DELETE)
一、GET 和 POST 1. GET方法 特点: 用途:用于从服务器获取数据。 参数传递方式:参数会附加在URL后面,以 keyvalue的形式,通过查询字符串传递,例如: http://example.com/page?nameJohn&…...
AnythingLLM开发者接口API测试
《Win10OllamaAnythingLLMDeepSeek构建本地多人访问知识库》见上一篇文章,本文在上篇基础上进行。 1.生成本地API 密钥 2.打开API测试页面(http://localhost:3001/api/docs/) 就可以在页面测试API了 2.测试获取用户接口(/v1/admin/users) 3…...
CSS定位简介
目录 一、静态定位(Static Positioning) 二、相对定位(Relative Positioning) 三、绝对定位(Absolute Positioning) 四、固定定位(Fixed Positioning) 五、黏性定位(…...
CentOS服务器部署Docker+Jenkins持续集成环境
一、准备工作 一台运行 CentOS 的服务器,确保有足够的磁盘空间、内存资源,并且网络连接稳定。建议使用 CentOS 7 或更高版本,本文以 CentOS 7 为例进行讲解。 拥有服务器的 root 权限,因为后续安装软件包、配置环境等操作需要较…...
React受控组件的核心原理与实战精要
在 React 中,受控组件(Controlled Component) 是一种重要的模式,用于通过组件的状态来管理表单元素的值。这种模式不仅确保了数据的一致性和可预测性,还便于与其他功能(如验证和格式化)集成。本…...
基于python多线程多进程爬虫的maa作业站技能使用分析
基于python多线程多进程爬虫的maa作业站技能使用分析 技能使用分析 多线程(8核) import json import multiprocessing import requests from multiprocessing.dummy import Pooldef maa(st):url "https://prts.maa.plus/copilot/get/"m …...
Android studio怎么创建assets目录
在Android Studio中创建assets文件夹是一个简单的步骤,通常用于存储不需要编译的资源文件,如文本文件、图片、音频等 main文件夹,邮件new->folder-assets folder...
解锁 DeepSeek 模型高效部署密码:蓝耘平台全解析
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
【Spring相关知识】Spring应用如何优雅使用消息队列
文章目录 概述**核心概念****使用场景****快速入门**1. 添加依赖2. 配置 Binder3. 定义消息通道4. 发送和接收消息5. 运行应用 **高级特性****优点****适用场景** 概述 Spring Cloud Stream 是一个用于构建消息驱动微服务的框架,它基于 Spring Boot 和 Spring Inte…...
2025牛客寒假算法基础集训营4(补题)
C Tokitsukaze and Balance String (hard) 一道规律题。赛时以为是难的算法题,就没去碰了,实际上把几种情况列出来后可能就会发现,只有首尾相同的字符串才是平衡的。 首先我们容易发现,连续的1或者0是多余的,因为他们…...
.net一些知识点5
1.dot Net带out的参数如何使用 string name;//假设这个参数带out TestMethod(1,out name);//一定要有out 方法体中,一定要有out参数的赋值,并且能输出 2.参数的传递方式有哪些 a.值传递 b.引用传递 ref c.输出传递 out 3.设计模式知道哪些 3.us…...
基于Servlet简易学生信息管理系统
本次设计的学生信息管理系统,能提供以下功能: (1) 输入入学生信息并保存 (2) 显示所有学生信息 (3) 查询学生信息 (4) 修改学生信息并保存 (…...
IDEA编写SpringBoot项目时使用Lombok报错“找不到符号”的原因和解决
目录 概述|背景 报错解析 解决方法 IDEA配置解决 Pom配置插件解决 概述|背景 报错发生背景:在SpringBoot项目中引入Lombok依赖并使用后出现"找不到符号"的问题。 本文讨论在上述背景下发生的报错原因和解决办法,如果仅为了解决BUG不论原…...
JVM图文入门
往期推荐 【已解决】redisCache注解失效,没写cacheConfig_com.howbuy.cachemanagement.client.redisclient#incr-CSDN博客 【已解决】OSS配置问题_keyuewenhua.oss-cn-beijing.aliyuncs-CSDN博客 【排坑】云服务器docker部署前后端分离项目域名解析OSS-CSDN博客 微服…...
【算法】动态规划专题⑨ —— 二维费用背包问题 python
目录 前置知识进入正题实战演练 前置知识 【算法】动态规划专题⑤ —— 0-1背包问题 滚动数组优化 python 进入正题 二维费用背包问题 方法思路 二维费用背包问题在传统背包问题的基础上增加了第二个维度的限制(如重量)。 每个物品具有两种费用&#x…...
链表专题-02
链表专题 /*** 链表的节点* param <E>*/ public class ListNode<E> {public E element;public ListNode<E> next;public ListNode() {}public ListNode(E element) {this.element element;}public ListNode(E element, ListNode<E> next) {this.eleme…...
亚远景-精通ASPICE:专业咨询助力汽车软件开发高效合规
在竞争日益激烈的汽车行业,软件开发已成为决定成败的关键因素。ASPICE(汽车软件过程改进和能力确定) 作为行业公认的软件开发框架,为汽车制造商和供应商提供了实现高效、合规开发的路线图。 然而,ASPICE 的实施并非易…...
HALCON 数据结构
目录 1. HALCON基本数据分类 1.1 图像相关数据 1.1.1 Image(图片) 1.1.2 Region(区域) 1.1.3 XLD(轮廓) 1.2 控制类数据 1.2.1 基本控制数据类型 1.2.2 handle(句柄) 2. 数组与字典 2.1 数组类型及特点 2.1.1 Iconic数组(Objects) 2.1.2 Control数组(Tu…...
动手写ORM框架 - GeeORM第一天 database/sql 基础
文章目录 1 初识 SQLite2 database/sql 标准库3 实现一个简单的 log 库4 核心结构 Session本文是7天用Go从零实现ORM框架GeeORM的第一篇。介绍了 SQLite 的基础操作(连接数据库,创建表、增删记录等)。使用 Go 语言标准库 database/sql 连接并操作 SQLite 数据库,并简单封装…...
ubuntu conda运行kivy时报“No matching FB config found”
错误描述:本人使用ubuntu自带的python环境运行kivy是没有问题的,就是在使用conda时发生了错误,去网上寻找报错原因,却一直没有头绪(这个问题有诸多问题导致的,不敢说用我的这个方法100%能好) 1…...
SSM开发(十一) mybatis关联关系多表查询(嵌套查询,举例说明)
目录 一、背景介绍 二、一对一查询(嵌套查询) 三、一对多查询(嵌套查询) 四、嵌套查询效率评估 注:关联查询则是指在一个查询中涉及到多个表的联合查询 一、背景介绍 当对数据库的操作涉及到多张表,这在面向对象语言如Java中就涉及到了对象与对象之间的关联关系。针对多…...
【AIGC】冷启动数据与多阶段训练在 DeepSeek 中的作用
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯冷启动数据的作用冷启动数据设计 💯多阶段训练的作用阶段 1:冷启动微调阶段 2:推理导向强化学习(RL࿰…...
Spring(26) spring-security-oauth2 官方表结构解析
目录 一、什么是 spring-security-oauth2?二、spring-security-oauth2 的表结构2.1 oauth_client_details 客户端详细信息表2.2 oauth_access_token 认证授权Token记录表2.3 oauth_refresh_token 刷新授权Token记录表2.4 oauth_code 授权Code记录表 一、什么是 spri…...
WPS如何接入DeepSeek(通过JS宏调用)
WPS如何接入DeepSeek 一、文本扩写二、校对三、翻译 本文介绍如何通过 WPS JS宏调用 DeepSeek 大模型,实现自动化文本扩写、校对和翻译等功能。 一、文本扩写 1、随便打开一个word文档,点击工具栏“工具”。 2、点击“开发工具”。 3、点击“查看代码”…...
项目的虚拟环境的搭建与pytorch依赖的下载
文章目录 配置环境 pytorch的使用需要安装对应的cuda 在PyTorch中使用CUDA, pytorch与cuda不同版本对应安装指南,查看CUDA版本,安装对应版本pytorch 【超详细教程】2024最新Pytorch安装教程(同时讲解安装CPU和GPU版本) 配置环境…...
[每周一更]-(第133期):Go中MapReduce架构思想的使用场景
文章目录 **MapReduce 工作流程**Go 中使用 MapReduce 的实现方式:**Go MapReduce 的特点****哪些场景适合使用 MapReduce?**使用场景1. 数据聚合2. 数据过滤3. 数据排序4. 数据转换5. 数据去重6. 数据分组7. 数据统计8.**统计文本中单词出现次数****代码…...
C 移位运算符
宏定义 #define GET_BIT(n) ((1 << (n))) 用于生成一个整数,该整数在第 n 位上是 1,其余位都是 0。这个宏通常用于位操作,比如设置、清除或检查某个特定位置的标志位。 1 << (n):这是位移操作符。它将数字 1 左移 n …...
redis高级数据结构布隆过滤器
文章目录 背景什么是布隆过滤器Redis 中的布隆过滤器布隆过滤器使用注意事项实现原理空间占用估计 背景 我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,它每次推荐时要去重,去掉那些已经看过的内容。问题来了,新闻…...
活动预告 |【Part1】Microsoft 安全在线技术公开课:安全性、合规性和身份基础知识
课程介绍 通过参加“Microsoft 安全在线技术公开课:安全性、合规性和身份基础知识”活动提升你的技能。在本次免费的介绍性活动中,你将获得所需的安全技能和培训,以创造影响力并利用机会推动职业发展。你将了解安全性、合规性和身份的基础知识…...
基于DeepSeek模型的思维导图智能系统
基于DeepSeek模型的思维导图智能系统 摘 要:本文研究了Prompt技术在自然语言处理(NLP)中的应用,重点探讨了其在用户输入语言转换任务中的作用。基于DeepSeek模型,文章通过设计不同的Prompt并结合API调用,…...
【玩转 Postman 接口测试与开发2_019】第15章:利用 Postman 初探 API 性能测试(含实战截图)
《API Testing and Development with Postman》最新第二版封面 文章目录 第十五章 API 接口性能测试1 性能负载的类型2 Postman 负载配置3 Postman 性能测试实战3.1 Fixed 型负载下的性能测试3.2 基于数据驱动的 Postman 接口性能测试 4 性能测试的注意事项 写在前面 终于来到了…...
使用 Three.js 实现炫酷的除夕烟花特效
1,前言 在除夕夜,璀璨的烟花点亮夜空,为节日增添了浓厚的喜庆氛围。在 Web 端,我们可以使用 Three.js 来模拟这种美轮美奂的烟花特效,让网页也能展现绚丽的节日气息。本文将介绍如何利用 Three.js 及其着色器技术&…...
【Redis keys命令有什么问题?】
Redis keys命令有什么问题? 性能问题实际使用中的限制替代方案示例讲解Redis keys命令的问题示例替代方案:使用SCAN命令Java代码示例性能问题 时间复杂度:keys命令的时间复杂度是O(n),其中n是Redis中键的总数。这意味着,当Redis中存储的键数量非常大时,执行keys命令会遍历…...
STC51案例操作
案例 1:LED 闪烁 功能描述:通过操作 P1 口寄存器,让连接在 P1.0 引脚的 LED 以一定间隔闪烁。 #include <reg51.h>// 延时函数 void delay(unsigned int time) {unsigned int i, j;for (i 0; i < time; i)for (j 0; j < 123; …...
顺丰数据分析(数据挖掘)面试题及参考答案
你觉得数据分析人员必备的技能有哪些? 数据分析人员需具备多方面技能,以应对复杂的数据处理与解读工作。 数据处理能力:这是基础且关键的技能。数据常以杂乱、不完整的形式存在,需通过清洗,去除重复、错误及缺失值数据,确保数据质量。例如,在电商销售数据中,可能存在价…...