卓易通:鸿蒙Next系统的蜜糖还是毒药?
哈喽,我是老刘
最近很多人都在问鸿蒙next系统新上线的卓易通和出境易两款应用。
老刘分析了一下这个软件的一些细节,觉得还是蛮有意思的,我觉得可以从使用体验、底层原理和对鸿蒙生态的影响这三个角度来分析一下。
使用体验
性能
看到了一些测评,特别是有人直接就跑分的👍
总体来说从跑分来看性能是鸿蒙原生的93%,基本是容器的平均水平,性能损失不大。
但是其它方面的表现就比较糟糕了。
内存
这个Android运行时的容器本身运行需要8G左右内存。
所以没有16G内存的丐版手机,就不要想运行什么大程序了。
功耗
不少网友评价手机容易发烫,就是功耗高的表现。
其实这也很好理解,在一个系统上持续运行另一个系统的容器,同时又想做到性能没有大幅损失,就只能通过持续的高功耗来弥补了。
同时要注意,高内存占用和高功耗不仅仅影响容器内运行的Android应用,也会对原生应用造成影响。
原生应用的可用内存减少,cpu持续被容器占用,会出现使用时比较卡顿甚至异常等现象。
当然手机续航也会大幅下降。
用户体验
也有不少用户反馈bug较多。
我想这一方面和容器本身的兼容性有关,另一方面也和内存、功耗的问题有关。
在高功耗、内存吃紧的情况下很多手机App都会出现一些问题。
总体来说使用体验是能用,但是不好用。
换句话说就是比较适合临时应个急,作为日常使用不推荐,除了bug还会造成续航的下降。
底层原理
前面我们提到整体的性能损失不大,由此也可验证不是采用的虚拟机方案。
但是其实这种技术方案也不完全算是很多人说的容器技术,我的理解是类似WSL2这样的介于容器和虚拟机之间的一种轻量级虚拟技术。
接下来我们把几种在一个系统上运行另一个系统应用的方案对比看一下就比较清晰了。
虚拟机
虚拟机是通过在系统中模拟一个完整的硬件环境来运行目标系统或应用程序。
假设是使用虚拟机来运行Android应用,那就是如下的结构。
运行Android应用时,虚拟机将完整的Android系统部署在虚拟的手机硬件之上,通过动态翻译将指令映射到鸿蒙系统的底层架构。
我们先来看一下一个普通Android App的运行架构
如果在一个虚拟机里面运行,则整体架构如下:
从架构上就可以看出来,虚拟机的优缺点都很明显。
优势
- 强隔离性:虚拟机通过独立的运行环境与宿主系统隔离,可以提供更高的安全性。
- 兼容性强:能够在宿主系统上原生支持几乎所有的Android应用,无需对应用进行修改。
劣势
- 性能开销:由于需要模拟硬件和运行时环境,虚拟机通常会带来较高的资源占用和性能损耗。
- 启动时间较长:虚拟机初始化过程复杂,启动速度相对较慢。
但是在卓易通这种场景中,我们不需要虚拟出一套不同的手机硬件,因为这样的开销太大了。
能否让虚拟系统和宿主系统共用一套硬件呢?
这种方案也是有的,就是轻量级虚拟化技术。
轻量级虚拟化
这种技术方案的典型代表是微软的Linux子系统,下面简称为WSL2。
简单来说,WSL2 在 Windows 上运行了一个 Linux 内核,但它不虚拟硬件。
WSL2 利用虚拟化技术(如 Hyper-V)提供内核隔离,同时通过与 Windows 系统的深度集成,消除了传统虚拟机与宿主系统之间的隔阂。例如,文件系统操作、网络共享和进程调用的性能和用户体验更加接近原生应用。
架构示意图如下:
它具有如下特点:
- 虚拟化但非硬件仿真:
- 使用轻量虚拟化运行 Linux 内核。
- 不模拟硬件,而是直接利用宿主机的硬件资源。
- 高效的系统调用桥接:
- Linux 应用直接调用 Linux 内核,而 WSL2 的内核通过微软的接口与 Windows 通信。
- 比传统虚拟机更高效,部分性能接近原生运行。
- 用户体验类似容器:
- 提供快速启动、轻量运行的体验。
- 与 Windows 文件系统无缝交互,支持共享资源。
API兼容层
轻量级虚拟化方案的性能虽然比虚拟机要高很多,但是仍然有中间商。
Hyper-V向上提供的仍然是虚拟的cpu和内存,并且Linux内核本身也会占用大量的cpu和内存资源。
那能否直接在宿主运行时上运行另一个系统的应用呢?
这种方案也是有的。
典型的代表就是Linux上的Wine,可以直接在Linux上运行windows的exe程序。
Wine(Wine Is Not an Emulator)是一个兼容层,它允许在 Linux、macOS 或其他 Unix-like 系统上运行 Windows 程序。
它通过直接将 Windows API 调用转换为对应平台的本地系统调用,从而让 Windows 应用程序能够在非 Windows 系统上原生运行。
架构如下:
Wine 的优点
- 较高的性能:
- 无虚拟化开销:Wine 直接将 Windows API 调用转换为宿主操作系统的调用,因此它没有虚拟机或容器那样的额外性能开销。这使得 Wine 运行 Windows 应用程序时通常具有接近原生 Windows 系统的性能。
- 运行效率:由于没有模拟硬件或操作系统,Wine 的效率通常比虚拟机(如 VMware 或 VirtualBox)和 WSL2 更高。
- 较小的资源消耗:
- 低资源占用:Wine 不需要像虚拟机那样模拟整个硬件环境,也不需要运行完整的操作系统。因此,它消耗的资源(如 CPU 和内存)相对较少,特别适用于资源有限的系统。
- 启动速度快:Wine 启动 Windows 应用程序的速度比虚拟机或 WSL2 要快,因为它不需要启动一个完整的虚拟操作系统。
Wine的缺点
- 兼容性问题:
- 并非所有 Windows 应用程序都兼容:Wine 并不是完美的 Windows 兼容层,并非所有 Windows 应用程序都能顺利运行。尽管 Wine 对许多应用有良好的兼容性,但一些复杂的应用(尤其是需要底层硬件访问的程序,如一些游戏或专业软件)可能无法正常工作。
- 有限的驱动和 API 支持:Wine 并不完全实现 Windows 的所有 API,它仅支持大多数常见的 Windows 调用。对于一些高级功能或特殊硬件支持(如 DirectX 或某些图形加速功能),Wine 的支持可能不足。
- 图形和多媒体支持较弱:
- 图形性能问题:尽管 Wine 支持 DirectX 和 OpenGL 的映射,但与 Windows 原生运行时相比,图形性能可能较差,尤其是在图形密集型应用程序(如 3D 游戏、图形设计软件等)上。Wine 的 DirectX 到 OpenGL 转换可能会影响渲染性能。
- 有限的硬件加速支持:Wine 不能直接访问硬件加速功能(如 GPU 加速),因此在需要高度图形渲染的应用程序中,它的表现可能不如 Windows 原生环境。
卓易通的方案
前面介绍了目前主流的跨平台运行App的方案,那么本文的主角卓易通采用的是哪一种呢?
卓易通采用了华为自家的iSulad容器。
事实上卓易通技术方案和前面介绍的WSL2比较类似。
可以看到,因为鸿蒙内核兼容Linux ABI(应用程序二进制接口),而Android内核又是基于Linux内核修改的。
所以可以直接在鸿蒙内核上跑一个定制的Android 运行时。
当然这里没有完整的Android内核功能,所以前面说的一些兼容bug也有可能是这个原因导致的。
可能很多不是从事Android开发的同学对这个运行时没有什么概念,来看下面这幅图:
图中用红色框起来的部分都是本文提到的Android运行时的内容。
或者我们可以这么理解,一个Android App能运行起来,这里面的大部分内容都需要。
所以也就能理解,为啥只是把卓易通跑起来就需要大约8G的内存了吧?
而这里面有很多东西是需要常驻后台,实时响应用户及APP请求的,这也是为什么卓易通会造成持续的功耗和发热。
前面我们介绍了想在一个系统上运行另一个系统的应用都有哪些方案。
并且基于此介绍了卓易通的技术方案的特点。
相信到这里大家对卓易通到底是啥东西有一定的了解了。
那么接下来我们来看看推出卓易通和出境易两款应用,通过虚拟化方案兼容Android生态后对鸿蒙生态会有哪些可能的影响?
蜜糖还是毒药?
妥协
鸿蒙目前声称有1.5万应用。
这些应用相对于其对应的Android版本来说,有多少比例的功能看看微信就大概能知道。
而即便不考虑功能的覆盖率,1.5万的数量对于用户来说还是太少了,完全无法支撑日常的使用。
下图是2023年的数据,这个数据中还不包含大量没有上架应用商店的App。
以我自己为例,老刘手机上安装了很多开源或者开发工具配套App,这些应用大多都没有上架应用商店。
这里面的原因就不多说了😮💨
总之想支撑大量用户日常使用,没有足够基数的应用数量是不行的。
所以兼容Android应用,让运行鸿蒙 next系统的手机至少能满足日常的使用,就是一个不得不做的妥协。
副作用
本来对于公司或者团队来说,现在的形式不缩减人手就不错了,还要额外增加一个鸿蒙开发的成本?
除非可以看到明确的收益,比如足够大的用户数量,否则是没有动力去开发的。
现在有了卓易通可能开发的动力就更小了。
这让我想起来当年黑莓手机也能兼容Android应用,最后自身生态也没有发展起来。
这里还不得不提一个迷之操作:
纯血鸿蒙上架的应用卓易通里面无法安装,而出境易则只能安装白名单内的应用。
相当于我好不容易开发了一个鸿蒙版App,但是因为人手不足功能一时不全,现在用户还没法用我的Android版。
那我干脆就不开发鸿蒙版好了,这样用户至少还能用一下完整功能的版本。
所以这个决策就给人一种不得不妥协又放不开的感觉。
鸿蒙生态的未来
老刘作为一个在一线的开发者,我做过架构师也带团队,所以我一直以来都很关注成本问题。
当前的形式下,很多公司的客户端团队Android和ios都只剩一个人了。
即使还保留建制的团队,再增加一个鸿蒙开发组也很难。
所以想要让鸿蒙生态快速增长,最有效的办法就是大力发展Flutter这样的跨平台框架在鸿蒙上的兼容性。
如果一个团队、一套代码可以同时开发Android、iOS和鸿蒙三套系统,并且都能提供原生级的用户体验,那是不是前面的问题都可以有效的解决呢?
目前据我所知有不少基于Flutter鸿蒙定制版本的应用已经上架了。
这里也希望基于鸿蒙系统的Flutter生态能快速健全起来。
总结
本文介绍了纯血鸿蒙版本卓易通和出境易两款应用中运行Android App的体验和运行原理。
同时分析了在这个虚拟环境下运行Android应用对于鸿蒙生态的一些看法。
个人观点Flutter这样的跨平台框架才是鸿蒙生态快速增长的关键。
如果看到这里的同学有学习Flutter的兴趣,欢迎联系老刘,我们互相学习。
点击免费领老刘整理的《Flutter开发手册》,覆盖90%应用开发场景。
可以作为Flutter学习的知识地图。
覆盖90%开发场景的《Flutter开发手册》https://mp.weixin.qq.com/s?__biz=MzkxMDMzNTM0Mw==&mid=2247483665&idx=1&sn=56aec9504da3ffad5797e703c12c51f6&chksm=c12c4d11f65bc40767956e534bd4b6fa71cbc2b8f8980294b6db7582672809c966e13cbbed25#rd
相关文章:
卓易通:鸿蒙Next系统的蜜糖还是毒药?
哈喽,我是老刘 最近很多人都在问鸿蒙next系统新上线的卓易通和出境易两款应用。 老刘分析了一下这个软件的一些细节,觉得还是蛮有意思的,我觉得可以从使用体验、底层原理和对鸿蒙生态的影响这三个角度来分析一下。 使用体验 性能 看到了一些测…...
Android:展锐T760平台camera PDAF调试
一、平台PDAF流程 目前展锐平台主要支持Shield PD Sensor、Dual PD Sensor 1、Shield PD Sensor Type1相位差和信心度结果直接从Sensor输出,不经过平台算法库。 Type2Sensor端抽取PD信息, 放在一块buffer输出, PDAF算法库算出相位差和信心度。 Type3Sensor端直接输出将带有…...
泷羽Sec学习笔记-zmap搭建炮台
zmap搭建炮台 zmap扫描环境:kali-linux 先更新软件库 sudo apt update 下载zmap sudo apt install zmap 开始扫描(需要root权限) sudo zmap -p 80 -o raw_ips.txt 代码解析: sudo:以超级用户(管理员)权限运行…...
web遇到的安全漏洞
最近项目又在做安全漏扫,记录下遇到的常见的web安全问题 越权 漏洞介绍 攻击者可以在授权状态下,通过修改数据包的参数,操作超出现有权限操作的功能点。举例 修改密码时,可以通过修改名称参数,修改任意用户密码。 任…...
Starfish 因子开发管理平台快速上手:如何完成策略编写与回测
DolphinDB 开发的因子开发管理平台 Starfish 围绕量化投研的因子、策略开发阶段设计,为用户提供了一个从数据管理、因子研究到策略回测的完整解决方案。 因子平台的回测引擎提供了多个关键的事件函数,涵盖策略初始化、每日盘前和盘后回调、逐笔、快照和…...
Oracle 数据库中,UNION ALL创建视图的使用详解
目录 UNION ALL 的特点 UNION ALL 的作用 1. 合并结果集 2. 保留重复行 3. 提高性能 UNION ALL 的使用场景 1. 日志或数据拼接 2. 区分数据来源 3. 解决分区表查询 注意事项 在创建视图中的作用 场景 1:合并多个表的数据到视图 表结构 目标 SQL 实现…...
无名信号量和条件变量
1.使用无名信号量实现春夏秋冬的输出 #include <myhead.h> sem_t sem1,sem2,sem3,sem4; void *fun1() {while(1){sem_wait(&sem1);sleep(1);printf("春\n");sem_post(&sem2);} } void *fun2() {while(1){sem_wait(&sem2);sleep(1);printf("夏…...
之前使用vue-element-admin框架开发的项目无法启动,可能是这个原因
最近运行之前的项目,发现无法正常启动,可能有以下几种情况: 一、版本问题 报错: this[kHandle] new _Hash(algorithm, xofLen); Error: error:0308010C:digital 因为在 node V17 版本发布了 OpenSSL3.0 对算法…...
JDK的配置
目录 第一步,配置JAVA_HOME. 第二步,进入JDK的bin目录,然后复制路径。 第三步,配置CLASSPATH. 第四步,检验是否配置成功 安装好JDK后,配置三个环境变量 第一步,配置JAVA_HOME. 先找到JDK…...
【Linux系列】Linux 系统中查看目录权限
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
开启数字化时代心理服务新篇章:专属线上心理咨询服务小程序
在当今快节奏的社会中,心理健康问题日益受到人们的关注。然而,传统的心理咨询模式往往受限于时间和地点,使得许多人在寻求心理帮助时感到不便。与此同时,心理课程的传播也面临着诸多挑战,如何高效地触达目标客户群体&a…...
[Unity] Text文本首行缩进两个字符
Text文本首行缩进两个字符的方法比较简单。通过代码把"\u3000\u3000"加到文本字符串前面即可。 比如: 效果: 代码: TMPtext1.text "\u3000\u3000" "选择动作类型:";...
探索 OpenTofu:开源基础设施即代码工具
引言 在现代云计算和 DevOps 实践中,基础设施即代码(IaC)已经成为不可或缺的一部分。它使得基础设施的管理更加自动化、可重复和可维护。HashiCorp 的 Terraform 是这一领域的领先工具,但随着时间的推移,开源社区也开始关注其许可证的变更。OpenTofu 作为 Terraform 的一…...
2024首届世界酒中国菜国际地理标志产品美食文化节成功举办篇章
2024首届世界酒中国菜国际地理标志产品美食文化节成功举办,开启美食文化交流新篇章 近日,首届世界酒中国菜国际地理标志产品美食文化节在中国国际地理标志大厦成功举办,这场为期三天的美食文化盛会吸引了来自世界各地的美食爱好者、行业专家…...
宽字节注入
尽管现在呼吁所有的程序都使用unicode编码,所有的网站都使用utf-8编码,来一个统一的国际规范。但仍然有很多,包括国内及国外(特别是非英语国家)的一些cms,仍然使用着自己国家的一套编码,比如gbk…...
H5 scss 移动端的样式适配
在移动端样式的scss文件中,出现了这些变量 env() 与 constant() 设置安全区域,是css里IOS11新增的属性,webkit的css函数,用于设定安全区域与边界的距离,有4个预定义变量: safe-area-inset-left: 安全区域距…...
240004基于Jamva+ssm+maven+mysql的房屋租赁系统的设计与实现
基于ssmmavenmysql的房屋租赁系统的设计与实现 1.项目描述2.运行环境3.项目截图4.源码获取 1.项目描述 该项目在原有的基础上进行了优化,包括新增了注册功能,房屋模糊查询功能,管理员和用户信息管理等功能,以及对网站界面进行了优…...
Word2Vec 模型 PyTorch 实现并复现论文中的数据集
详细注解链接:https://www.orzzz.net/directory/codes/Word2Vec/index.html 欢迎咨询!...
《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(一)
《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(一) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Lin…...
使用matlab对矩阵进行分块
1. 前言 由于matlab内存限制,导致无法处理较大尺寸的矩阵; 2. 解决思路 读取原始大尺寸矩阵,分块后处理,及时删除中间过程文件,只保留分块处理后的最终结果,最后合并结果文件,减少内存占用。 …...
MongoDB(上)
MongoDB 基础 MongoDB 是什么? MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统,由 C 编写的。MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂…...
超详细的pycharm+anaconda搭建python虚拟环境
(一)pycharm安装 1. 下载 (1)从官网下载 ,一般来说选择社区版就够用了。我这里选择2024.1.6的windows版本Other Versions - PyCharmGet past releases and previous versions of PyCharm.https://www.jetbrains.com/…...
yarn修改缓存位置
查看缓存位置 以下三个命令分别为:bin是yarn存储命令的二进制文件,global存储全局node_modules ,cache存储用下下载缓存,查看本机目前的目录: 查看bin目录命令:yarn global bin 查看global目录命令&…...
单元测试知识总结
我们希望每段代码都是自测试的,每次改动之后,都能自动发现对现有功能的影响。 1 测试要求 在对软件单元进行动态测试之前,应对软件单元的源代码进行静态测试; 应建立测试软件单元的环境,如数据准备、桩模块、模拟器…...
光谱相机
光谱相机是一种能够同时获取目标物体的空间图像信息和光谱信息的成像设备。 1、工作原理 光谱相机通过光学系统将目标物体的光聚焦到探测器上,在探测器前设置分光元件,如光栅、棱镜或滤光片等,将光按不同波长分解成多个光谱通道,…...
账号下的用户列表表格分析
好的,这是您提供的 el-table 组件中所有列的字段信息,以表格形式展示: 列标题 (label)字段属性 (prop)对齐方式 (align)宽度 (width)是否可排序 (sortable)说明IDidcenter100否管理员的唯一标识符头像avatarcenter90否管理员的头像 URL 或路…...
软件开发中 Bug 为什么不能彻底消除
在软件开发中,Bug无法彻底消除的原因主要包括:软件复杂度高、人员认知与沟通受限、需求和环境不断变化、工具与测试覆盖不足、经济与时间成本制约。其中“需求和环境不断变化”尤为关键,因为在实际开发中,业务逻辑随着市场与用户反…...
Flutter 中的 Flexible 与 Expanded 的介绍、区别与使用
在 Flutter 中,布局是构建用户界面的重要部分。Flexible 和 Expanded 是两个常用的布局小部件,它们都用于控制子小部件在父容器中的空间分配。虽然它们有相似之处,但在使用上有一些关键的区别。本文将介绍这两个小部件的基本概念、区别、参数…...
从零开始学习 sg200x 多核开发之 sophpi 编译生成 fip.bin 流程梳理
本文主要介绍 sophpi 编译生成 fip.bin 流程。 1、编译前准备 sophpi 的基本编译流程如下: $ source build/cvisetup.sh $ defconfig sg2002_wevb_riscv64_sd $ clean_all $ build_all $ pack_burn_image注: 需要在 bash 下运行clean_all 非必要可以不…...
通过一个例子学习回溯算法:从方法论到实际应用
回溯算法:从方法论到实际应用 回溯算法(Backtracking)是一种通过穷举法寻找问题所有解的算法,它的核心思想是逐步构建解空间树,在每个步骤中判断当前解是否合法。如果不合法,就“回溯”到上一步࿰…...
google 的guava 学习 基本工具类
Guava 是 Google 开发的一个 Java 核心库,它提供了一系列工具类,用于简化 Java 编程中的常见任务。以下是 Preconditions 和 Verify 两个工具类的使用示例: Preconditions 类 Preconditions 类提供了一组静态方法,用于在代码中插…...
【Linux金典面试题(上)】41道Linux金典面试问题+详细解答,包含基本操作、系统维护、网络配置、脚本编程等问题。
大家好,我是摇光~,用大白话讲解所有你难懂的知识点 之前写了一篇关于 python 的面试题,感觉大家都很需要,所以打算出一个面试专栏。 【数据分析岗】Python金典面试题 这个专栏主要针对面试大数据岗位、数据分析岗位、数据运维等…...
SpringBoot【九】mybatis-plus之自定义sql零基础教学!
一、前言🔥 环境说明:Windows10 Idea2021.3.2 Jdk1.8 SpringBoot 2.3.1.RELEASE mybatis-plus的基本使用,前两期基本讲的差不多,够日常使用,但是有的小伙伴可能就会抱怨了,若是遇到业务逻辑比较复杂的sq…...
CTF 攻防世界 Web: FlatScience write-up
题目名称-FlatScience 网址 index 目录中没有发现提示信息,链接会跳转到论文。 目前没有发现有用信息,尝试目录扫描。 目录扫描 注意到存在 robots.txt 和 login.php。 访问 robots.txt 这里表明还存在 admin.php admin.php 分析 在这里尝试一些 sql…...
【记录49】vue2 vue-office在线预览 docx、pdf、excel文档
vue2 在线预览 docx、pdf、excel文档 docx npm install vue-office/docx vue-demi0.14.6 指定版本 npm install vue-office/docx vue-demi <template><VueOfficeDocx :src"pdf" style"height: 100vh;" rendere"rendereHandler" error&…...
机器学习中的 Transformer 简介(第 1 部分)
目录 一、说明 二、为什么是 Transformer? 三、什么是 Transformer? 3.1 译者的类比 四、编码器部分 4.1 、从文本输入到输入嵌入 4.2 词嵌入 4.2 N倍编码器段 4.4 多头注意力机制 4.5 添加残差和层归一化 4.6 添加残差和层归一化 五、总结 一、说明 西如…...
宝塔-docker拉取宝塔镜像,并运行宝塔镜像
宝塔-拉取宝塔镜像,并运行镜像 第1步:查询 docker search btpanel/baota此docker镜像由堡塔安全官方发布,镜像版本为宝塔面板9.2.0正式版和9.0.0_lts 稳定版,镜像会随着宝塔面板更新。 目前支持x86_64和arm架构可供下载使用 版本…...
【从零开始入门unity游戏开发之——C#篇12】新的引用类型——数组array
文章目录 一、数组(array)(一维数组)1、声明数组2、初始化数组3、访问数组元素4 、修改数组元素5、获取数组的长度6、遍历数组使用 for 循环:使用 foreach 循环: 7、数组方法排序:逆序ÿ…...
人工智能在数字人的技术与应用
在人工智能领域,数字人技术正逐渐从科幻小说走向现实。数字人,也称为虚拟助手或虚拟形象,是通过AI技术模拟人类行为、语言和情感的数字化存在。本文将深入探讨数字人技术的核心原理、最新进展以及在不同领域的应用案例,为专业人士…...
【机器人】Graspness 端到端 抓取点估计 | 论文解读
在复杂场景中实现抓取检测,Graspness是一种端到端的方法; 输入点云数据,输出抓取角度、抓取深度、夹具宽度等信息。 开源地址:GitHub - rhett-chen/graspness_implementation: My implementation of Graspnet Graspness. 论文地…...
服务器Docker OOM RSS高问题排查思路
优质博文:IT-BLOG-CN 防走弯路为防止走弯路,强烈建议先仔细阅读以下加粗内容: 如果你的应用是因为公司最近降成本调小实例物理内存才出现docker oom,而之前从来没有出现过,那么大概率是堆内存太大导致,这种…...
动态导出word文件支持转pdf
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、功能说明二、使用步骤1.controller2.工具类 DocumentUtil 导出样式 前言 提示:这里可以添加本文要记录的大概内容: 例如ÿ…...
【文档搜索引擎】在内存中构造出索引结构(下)
文章目录 4.保存到磁盘中为什么要保存在磁盘中怎么保存操作步骤1. 前期准备2. 主要操作 5. 将磁盘中的数据加载到内存中Parser 类完整源码Index 类完整源码 4.保存到磁盘中 为什么要保存在磁盘中 索引本来是存储在内存中的,为什么要将其保存在硬盘中? …...
旅游资源系统|Java|SSM|VUE| 前后端分离
【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…...
如何用细节提升用户体验?
前端给用户反馈是提升用户体验的重要部分,根据场景选择不同的方式可以有效地提升产品的易用性和用户满意度。以下是常见的方法: 1. 视觉反馈 用户执行了某些操作后,需要即时确认操作结果。例如:按钮点击、数据提交、页面加载等。…...
容器设计模式:Sidecar
文章目录 容器设计模式:Sidecar 模式1. 什么是 Sidecar 模式?2. Sidecar 模式的原理2.1 工作机制2.2 常见用途 3. Sidecar 模式示例示例:日志收集 4. Sidecar 模式的架构图图例: 5. Sidecar 模式的优点6. Sidecar 模式的局限性7. …...
深入剖析MyBatis的架构原理
架构设计 简要画出 MyBatis 的架构图 >> Mybatis 的功能架构分为哪三层? API 接口层 提供给外部使用的接口 API,开发人员通过这些本地 API 来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。MyBatis 和数据库的…...
深入C语言文件操作:从库函数到系统调用
引言 文件操作是编程中不可或缺的一部分,尤其在C语言中,文件操作不仅是处理数据的基本手段,也是连接程序与外部世界的重要桥梁。C语言提供了丰富的库函数来处理文件,如 fopen、fclose、fread、fwrite 等。然而,这些库…...
【Linux】shell脚本二
2、接收用户的参数 shell脚本已经内设了用于接收用户输入参数的变量,变量之间可以使用空格隔开。 如:./test.sh one two three four $0:对应的是当前shell脚本程序的名称,即test.sh$#:对应的是总共有几个参数&#…...
从万维网到人工智能:改变生活的11项技术里程碑
1984 年 1 月 24 日,苹果公司推出了 Macintosh 128K,从此永远改变了个人电脑的面貌。 史蒂夫・乔布斯(Steve Jobs)这款小巧且用户友好的电脑向全世界引入了图形用户界面,标志着个人技术发展历程中的一个关键时刻。 从…...