鸿蒙操作系统简介
华为鸿蒙系统(HUAWEI HarmonyOS),是华为公司于2019年8月9日在东莞举行的华为开发者大会(HDC.2019)上正式发布的面向全场景的分布式操作系统,可以创造一个超级虚拟终端互联的世界,将人、设备、场景有机地联系在一起,将消费者在全场景生活中接触的多种智能终端,实现极速发现、极速连接、硬件互助、资源共享,用合适的设备提供场景体验。
2019年8月9日,华为在东莞举行华为开发者大会,正式发布操作系统鸿蒙OS。2020年9月10日,华为鸿蒙系统升级至HarmonyOS 2.0。2021年12月17日,鸿蒙HarmonyOS 2提前完成所有既定产品的正式版本上线,并且已有上百款华为、荣耀设备升级到了鸿蒙HarmonyOS 2正式版。2022年7月27日,华为发布鸿蒙HarmonyOS 3系统。2023年8月4日下午,在2023华为开发者大会上,HarmonyOS 4正式发布。2024年1月18日,华为发布原生鸿蒙操作系统星河版。2024年10月22日,华为原生鸿蒙系统HarmonyOS NEXT 5.0发布,这是中国首个实现全栈自研的操作系统,标志着中国在操作系统领域取得突破性进展。
2021年9月23日,华为官宣鸿蒙系统升级用户已经突破1.2亿 ,10月22日,搭载鸿蒙OS的设备数量已达1.5亿台。2022年11月4日,搭载HarmonyOS的华为设备已达3.2亿。截至2024年10月20日,搭载HarmonyOS的鸿蒙生态设备已超过10亿台,鸿蒙生态已有超15000个应用及元服务完成上架,覆盖办公、社交、娱乐等18个垂直领域。
HarmonyOS 1.0
在2019年的开发者大会上,华为发布了EMUI 10,同时也宣告了鸿蒙1.0的诞生,华为的全场景理念又向前推进了一步。2019年8月9号,华为正式发布的HarmonyOS 1.0,该系统率先部署在智慧屏上,此时的鸿蒙系统只搭载在家用电器上,尚未搭载导手机系统中,但华为消费业务CEO余承东在发布会上宣布鸿蒙将进行开源。由此可以看出华为对于手机系统的重心已经开始由EMUI转移到鸿蒙系统上了。
HarmonyOS 2.0
与鸿蒙1.0版本相比,鸿蒙2.0在分布式软总线、分布式数据管理、分布式安全等分布式能力上进行了升级,同时发布了自适应的UX(用户体验)框架,让开发者能够非常简单且快速地开发鸿蒙应用程序。
鸿蒙操作系统是一款面向全场景分布式操作系统。鸿蒙操作系统不同于现有的Android、iOS、Windows、Linux等操作系统,它设计的初衷是解决在5G万物互联时代,各个系统间的连接问题。鸿蒙操作系统面向的是1+8+N的全场景设备,能够根据不同内存级别的设备进行弹性组装和适配,并且实现跨设备交互信息。其中,1指的是手机;8代表车机、音箱、耳机、手表/手环、平板、智慧屏、PC、AR/VR;N泛指其他IoT设备。
HarmonyOS 2.0是基于Linux系统来开发自研操作系统的。这样有两大好处:一是可以很好地兼容安卓系统的App,毕竟安卓系统是基于Linux系统来开发的,这样在生态上的问题就解决了很大一部分了。
HarmonyOS 2.0系统整体遵从分层设计,如图1-11所示,从下向上依次为内核层、系统服务层、框架层和应用层。在多设备部署场景下,支持根据实际需求裁剪某些非必要的子系统、功能或者模块。
内核层
HarmonyOS 2.0内核层由鸿蒙微内核、Linux内核、Lite OS组成,未来将发展为完全的鸿蒙微内核架构。
HarmonyOS 2.0采用多内核设计,支持针对不同资源受限设备选用不同的OS内核。内核抽象层(KAL,Kernel Abstract Layer)通过屏蔽多内核差异,对上层提供基础的内核能力,包括进程/线程管理、内存管理、文件系统、网络管理和外设管理等。
系统服务层系统
服务层是HarmonyOS 2.0的核心能力集合,通过框架层对应用程序提供服务。该层包含以下几部分。(1)系统基本能力子系统集:为分布式应用在HarmonyOS多设备上的运行、调度、迁移等操作提供了基础能力,由分布式软总线、分布式数据管理、分布式任务调度、公共基础库、多模输入、图形、安全、AI等子系统组成。(2)基础软件服务子系统集:为HarmonyOS提供公共的、通用的软件服务,由事件通知、电话、多媒体、DFX、MSDP(组播源发现协议)&DV等子系统组成。(3)增强软件服务子系统集:为HarmonyOS提供针对不同设备的、差异化的能力增强型软件服务,由智慧屏专有业务、穿戴专有业务、IoT专有业务等子系统组成。(4)硬件服务子系统集:为HarmonyOS提供硬件服务,由位置服务、生物特征识别、穿戴专有硬件服务、IoT专有硬件服务等子系统组成。
框架层
框架层为HarmonyOS 2.0的应用程序提供了Java、C、C++、JavaScript等多语言的用户程序框架和Ability框架,如图1-13所示,以及各种软硬件服务对外开放的多语言框架API;同时为采用HarmonyOS的设备提供了C、C++、JavaScript等多语言的框架API,不同设备支持的API与系统的组件化裁剪程度相关。
ACE
ACE全称为Ability Cross-platform Environment,是鸿蒙面向元能力(Ability)开发的跨平台运行环境。ACE是为华为鸿蒙操作系统定制设计的一套针对全场景环境的跨平台应用开发框架。ACE支持目前两种主流语言:Java和JavaScript。未来将支持华为自己的开发语言“仓颉”。
可以把这些IoT终端设备分为富设备和轻设备,对于富设备开发鸿蒙提供了基于Java、C++语言的开发框架,对于一些内存有限,功能有限的轻设备则提供了基于JavaScript的开发框架,这样可以让一些低端硬件配置的IoT设备运行鸿蒙应用程序。
ACE支持的两种UI框架
鸿蒙跨平台运行时(ACE)为Java开发者和JavaScript开发者提供了一站式的开发环境。
1.基于Java的应用开发框架(ACE Java UI)
鸿蒙的应用开发可以基于Java语言+XML的方式进行开发,此方式和安卓类似,如果开发者熟悉Java语言或者Android开发,那么使用此方式可以很快进行应用开发。ACE Java UI框架的架构图如图3-2所示。
2.基于JavaScript的应用开发框架(ACE JavaScript UI)
鸿蒙开发同时还提供了JavaScript形式的开发。JavaScript的语法规则基本遵循ES6的语法规范。如果是前端开发人员,则可以使用HTML+CSS+JavaScript的形式进行应用的开发,但是对于后端一些服务能力,目前只能使用Java语言进行开发,所以对于JavaScript的开发者,依然需要Java语言的辅助。ACE JavaScript UI框架的架构图如图3-3所示。
ACE开发中的核心概念
在学习ACE开发框架前,需要了解ACE中的一些核心概念。
Ability和Slice
Ability是HarmonyOS开发的核心,首先了解什么是Ability,我们用生活中的例子来做一个类比,Ability就好像是一个画板,初始什么都没有,一片空白,我们可以找一张画纸进行绘画,画完的画纸夹在画板上,画板上就会有我们创作的图画了。HarmonyOS中的Ability其实就相当于画板,它用来承载画纸,那么画纸又是什么?标题中还有一个Slice,它就相当于画纸,我们写应用的UI,写完后通过Slice加载布局,就相当于在画纸上绘画,完成后把画纸放在画板上进行展示。
将对应的概念引申到程序中,我们有一个Ability(画板)用来向用户展示新闻,同时这个Ability拥有两个Slice(画纸),一个用来展示新闻标题,另一个用来展示新闻详情。那么我们就需要在这两个Slice中分别画上新闻的标题和详情,然后通过单击或其他交互方式来切换两个Slice,相当于给画板换另一张画纸。
Ability分类
有了上述概念,我们基本知道Ability能做些什么了,但是还要具体了解一下这个核心组件,在HarmonyOS中,Ability可以分为两类,一类叫FA(Feature Ability),另一类叫作PA(Particle Ability),这两类Ability最直观的区别是FA有界面,可以和用户交互,而PA无界面,它提供一些应用运行需要的能力,例如读取数据。这两类Ability在创建的时候都有相应的模板。
Ability的模板种类。
(1)对于FA类型的Ability,Page类型的模板是其唯一的模板类型,这种类型的模板提供了和用户交互的能力。
(2)对于PA类型的Ability,它有三类模板。
● Service Ability:用于提供后台运行任务的能力。
● Data Ability:用于对外部提供统一的数据访问抽象。
● FormAbility:是卡片Ability,是一种界面展示形式。
FA模型的生命周期
在所有Ability中,PageAbility因为具有界面,也是应用的交互入口,因此生命周期更加复杂。PageAbility的生命周期回调如图2-2所示。其他类型Ability的生命周期可参考PageAbility生命周期去除前后台切换以及onShow的部分进行理解。开发者可以在app.ets中重写生命周期函数,在对应的生命周期函数内处理应用相应逻辑。
FA模型的进程线程模型
应用独享独立进程,Ability独享独立线程,应用进程在Ability第一次启动时创建,并为启动的Ability创建线程,应用启动后再启动应用内其他Ability,会为每个Ability创建相应的线程。每个Ability绑定一个独立的JSRuntime实例,因此Ability之间是隔离的,如图2-3所示。
应用层
应用层包括系统应用和第三方非系统应用。HarmonyOS 2.0的应用由一个或多个FA (Feature Ability)或PA(Particle Ability)组成。其中,FA有UI界面,其提供与用户交互的能力,而PA则无UI界面,提供后台运行任务的能力及统一的数据访问抽象。基于FA/PA开发的应用,能够实现特定的业务功能,支持跨设备调度与分发,为用户提供一致、高效的应用体验,如图1-14所示。
鸿蒙应用包结构
鸿蒙应用软件包以App Pack(Application Package)形式发布,它是由一个或多个HAP (HarmonyOS Ability Package)及描述每个HAP属性的pack.info组成。HAP是Ability的部署包,HarmonyOS应用代码围绕Ability组件展开。一个HAP是由代码、资源、第三方库及应用配置文件组成的模块包,可分为entry和feature两种模块类型,如图3-4所示。
entry:应用的主模块。在一个App中,对于同一设备类型必须有且只有一个entry类型的HAP,可独立安装运行。
feature:应用的动态特性模块。一个App可以包含一个或多个feature类型的HAP,也可以不含。只有包含Ability的HAP才能够独立运行。
HarmonyOS 3.0
HarmonyOS 3.1全新推出了应用开发Stage模型,并在ArkTS语言、应用程序框架、Web、ArkUI等子系统能力方面有所更新或增强。
HarmonyOS 3.1开放的功能包括:
· Ability框架新增Stage开发模型,包含Stage模型生命周期管理、调度、回调、上下文获取、鉴权等。同时增强了应用的运行管理能力。
· ArkUI开发框架增强了声明式Canvas/XComponent组件能力,增强了组件布局能力及状态管理能力,优化了部分组件的易用性。
· 应用包管理新增查询应用、Ability和ExtensionAbility相关属性的接口。
· 公共基础类库新增支持Buffer二进制读写。
· Web服务新增支持文档类Web应用的文档预览和基础编辑功能,以及Cookie的管理和存储管理。
· 图形图像新增支持YUV、WebP图片编解码等能力;新增Native Vsync能力,支持自绘制引擎自主控制渲染节奏。
· 媒体服务新增相机配置与预览功能。
· 窗口服务新增Stage模型下窗口相关接口,增强了窗口旋转能力,增强了避让区域查询能力。· 全球化服务新增支持时区列表、音译、电话号码归属地等国际化增强能力。
· 公共事件基础能力增强,commonEvent模块变更为commonEventManager。
· 资源管理服务新增资源获取的同步接口,新增基于名称查询资源值的接口,新增number、float资源类型查询接口,新增Stage模型资源查询方式。
· 输入法服务新增输入法光标方向常量。
应用模型
HarmonyOS应用模型的构成要素如下。
· 应用组件:应用组件是应用的基本组成单位,是应用的运行入口。用户启动、使用和退出应用的过程中,应用组件会在不同的状态间切换,这些状态称为应用组件的生命周期。应用组件提供生命周期的回调函数,开发者通过应用组件的生命周期回调感知应用的状态变化。应用开发者在编写应用时,首先需要编写应用组件,同时还需要编写应用组件的生命周期回调函数,并在应用配置文件中配置相关信息。这样,操作系统在运行期间可以通过配置文件创建应用组件的实例,并调度它的生命周期回调函数,从而执行开发者的代码。
· 应用进程模型:应用进程模型定义应用进程的创建和销毁方式,以及进程间的通信方式。
· 应用线程模型:应用线程模型定义应用进程内线程的创建和销毁方式、主线程和UI线程的创建方式、线程间的通信方式。
· 应用任务管理模型:应用任务管理模型定义任务(Mission)的创建和销毁方式,以及任务与组件间的关系。HarmonyOS应用任务管理由系统应用负责,第三方应用无须关注。
· 应用配置文件:应用配置文件中包含应用配置信息、应用组件信息、权限信息、开发者自定义信息等,这些信息在编译构建、分发和运行阶段分别提供给编译工具、应用市场和操作系统使用。
截至目前,在HarmonyOS中,Ability框架模型结构具有以下两种形态。
· FA模型:API 8及更早版本的应用程序只能使用FA模型进行开发。
· Stage模型:从API 9开始,Ability框架引入并支持使用Stage模型进行开发,也是目前HarmonyOS所推荐的开发方式。FA模型和Stage模型的工程目录结构存在差异,Stage模型目前只支持使用ArkTS语言进行开发。
Stage模型介绍
Stage 模型:是为了解决FA模型无法解决的开发场景问题,方便开发者更加方便地开发出分布式环境下的复杂应用。自 API9 新增的模型。是日后长期演进的模型。
在该模型中,由于提供了AbilityStage、WindowStage等类作为应用组件和Window窗口的“舞台”,因此称这种应用模型为Stage模型。
Stage模型将Ability分为PageAbility和ExtensionAbility两大类,其中ExtensionAbility又被扩展为ServiceExtensionAbility、FormExtensionAbility、DataShareExtensionAbility等一系列ExtensionAbility,以便满足更多的使用场景。
Stage模型的设计思想
1 为复杂应用而设计Stage模型简化了应用复杂度:
· 多个应用组件共享同一个ArkTS引擎(运行ArkTS语言的虚拟机)实例,应用组件之间可以方便地共享对象和状态,同时减少复杂应用运行对内存的占用。
· 采用面向对象的开发方式,使得复杂的应用代码可读性高、易维护性好、可扩展性强。
2 支持多设备和多窗口形态Stage模型应用组件管理和窗口管理在架构层面解耦:
· 便于系统对应用组件进行裁剪(无屏设备可裁剪窗口)。
· 便于系统扩展窗口形态。
· 在多设备(如桌面设备和移动设备)上,应用组件可使用同一套生命周期。
3 平衡应用能力和系统管控成本Stage模型重新定义了应用能力的边界,平衡了应用能力和系统管控成本。
· 提供特定场景(如卡片、输入法)的应用组件,以便满足更多的使用场景。
· 规范化后台进程管理:为保障用户体验,Stage模型对后台应用进程进行了有序治理,应用程序不能随意驻留在后台,同时应用后台行为受到严格管理,防止恶意应用行为。
系统定义了四类后台任务:
Stage模型的Ability生命周期
在Ability的使用过程中,会有多种生命周期状态。掌握Ability的生命周期对于应用的开发非常重要。为了实现多设备形态上的裁剪和多窗口的可扩展性,系统对组件管理和窗口管理进行了解耦。Ability的生命周期包括Create、Foreground、Background、Destroy四个状态,WindowStageCreate和WindowStageDestroy为窗口管理器(WindowStage)在Ability中管理UI界面功能的两个生命周期回调,从而实现Ability与窗口之间的弱耦合,如图2-4所示。
Stage模型的Ability启动模式
Ability的启动模式是指Ability实例在启动时的不同呈现状态。针对不同的业务场景,系统提供了3种启动模式:
· singleton(单实例模式)。
· standard(标准实例模式)。
· specified(指定实例模式)。
1 singleton启动模式
singleton是默认情况下的启动模式。每次调用startAbility()方法时,如果应用进程中该类型的Ability实例已经存在,则复用系统中的Ability实例。系统中只存在唯一一个该Ability实例,即在最近任务列表中只存在一个该类型的Ability实例。此时,应用的Ability实例已创建,当再次调用startAbility()方法启动该Ability实例时,只会进入该Ability的onNewWant()回调,不会进入其onCreate()和onWindowStageCreate()生命周期回调。如果需要使用singleton启动模式,将module.json5配置文件中的"launchType"字段配置为"singleton''即可。
2 standard启动模式
在standard启动模式下,每次调用startAbility()方法时,都会在应用进程中创建一个新的该类型的Ability实例,即在最近任务列表中可以看到有多个该类型的Ability实例。这种情况下,可以将Ability配置为standard。如果需要使用standard启动模式,将module.json5配置文件中的"launchType"字段配置为"standard"即可。
3 specified启动模式
在specified启动模式下,在Ability实例创建之前,允许开发者为该实例创建一个唯一的字符串Key,创建的Ability实例绑定Key之后,后续每次调用startAbility()方法时,都会询问应用使用哪个Key对应的Ability实例来响应startAbility请求。运行时由Ability内部业务决定是否创建多个实例,如果匹配有该Ability实例的Key,则直接拉起与之绑定的Ability实例,否则创建一个新的Ability实例。例如,用户在应用中重复打开同一个文档时,启动的均是最近任务列表中的同一个任务,以及在应用中重复新建文档时,启动的均是最近任务列表中的新任务。这种情况下,可以将Ability配置为specified。当再次调用startAbility()方法启动该Ability实例,且AbilityStage的onAcceptWant()回调匹配到一个已创建的Ability实例时,再次启动该Ability,只会进入该Ability的onNewWant()回调,不会进入其onCreate()和onWindowStageCreate()生命周期回调。如果需要使用specified启动模式,将module.json5配置文件的"launchType"字段配置为"specified"即可。
ExtensionAbility机制
不同于页面展示的Ability,ExtensionAbility提供的是一种受限的运行环境。ExtensionAbility组件具有如下特点:
· 运行在独立于主进程的单独进程中,与主进程无IPC(Inter-Process Communication,进程间通信),但共享一个存储沙箱。
· 独立的Context提供基于相应业务场景的API能力。
· 由系统触发创建,应用不能直接创建。
· ExtensionAbility和进程的生命周期受系统管理。
ArkUI开发框架
基于ArkTS的声明式开发范式的方舟开发框架(ArkUI)是一套开发极简、高性能、跨设备应用的UI开发框架,支持开发者高效地构建跨设备应用UI界面。
ArkTS编程语言
HarmonyOS提供了支持多种开发语言的API,供开发者进行应用开发,支持的开发语言包括ArkTS、JS(JavaScript)、C/C++、Java。ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS基于TypeScript(简称TS)语言扩展而来,是TS的超集。这也是ArkTS的原名叫eTS的原因,它是extend TypeScript的简写。ArkTS继承了TS的所有特性,并且ArkTS在TS基础上还扩展了声明式UI能力,让开发者以更简洁、更自然的方式开发高性能应用。
HarmonyOS 4.0
升级内容
新系统为手机 / 平板增加了一个全新功能“实况窗”,为手表添加了“弦月窗”。该功能类似苹果 iOS 中的实时活动,可以在屏幕左上角、锁屏界面实时显示应用的信息,并且可在胶囊和卡片之间切换。
在新系统中,用户可以通过 AI 抠图识别主体,搭配多种艺术背景;结合杂志化设计,让照片变成壁纸;设置全景天气壁纸,将自然天气装进手机,实时感知天气变化;HarmonyOS 4 还带来更生动的 Emoji 表情。
通知中心
鸿蒙 HarmonyOS 4 采用了全新的通知中心,可“置顶”关键信息。
效率工具
超级中转站支持更多应用,双指长按轻松提取文本、图片并拖入中转站;
超级桌面拓展更多场景,不仅支持手游流转智能座舱屏幕,也能支持无人机航拍画面流转至智能座舱;
演示批注功能让 HUAWEI M-Pencil 秒变白板笔,共享内容可圈可点可标注。
AI功能
鸿蒙 HarmonyOS 4 对小艺语音助手带来了 AI 大模型升级。据官方介绍,小艺的手机月活用户已达 2 亿。AI 大模型赋能的 HarmonyOS 4 全新小艺,号称在智慧交互、高效生产力和个性化服务三个方向持续增强。据发布会演示,小艺支持生成复杂场景、快速摘要、文字创作、自然对话、看图说话、图片二创、随口记事提醒、场景化服务组合等。
系统优化
鸿蒙 HarmonyOS 4 打造了全新的“方舟引擎”,包含图形、多媒体、内存、调度、存储、低功耗 6 大引擎,号称性能提升 20%,续航增加 30 分钟、相机启动速度提升 57%、图片加载更快、手机动画效果更自然(折叠动效、可中途打断等)。
安全
华为鸿蒙 HarmonyOS 4 对应用风险进行了更多的管控,比如风险应用安装自动管控、运行时主动拦截,并最小化授予风险应用权限(给空数据),限制敏感信息访问;应用跟踪管理,用户可选择是否允许应用跟踪在其他应用和网站上的活动。
HarmonyOS Next(5.0)
也称HarmonyOS星河版。HarmonyOS NEXT剔除了Linux内核与AOSP代码,彻底“摆脱安卓”,仅支持HarmonyOS内核与应用。
从HarmonyOS NEXT Developer Preview1(API 11)版本开始,HarmonyOS SDK以Kit维度提供丰富、完备的开放能力,涵盖应用框架、系统、媒体、图形、应用服务、AI六大领域,例如:
应用框架相关Kit开放能力:Ability Kit(程序框架服务)、ArkUI(方舟UI框架)等。
系统相关Kit开放能力:Universal Keystore Kit(密钥管理服务)、Network Kit(网络服务)等。
媒体相关Kit开放能力:Audio Kit(音频服务)、Media Library Kit(媒体文件管理服务)等。
图形相关Kit开放能力:ArkGraphics 2D(方舟2D图形服务)、Graphics Accelerate Kit(图形加速服务)等。
应用服务相关Kit开放能力:Game Service Kit(游戏服务)、Location Kit(位置服务)等。
AI相关Kit开放能力:Intents Kit(意图框架服务)、HiAI Foundation Kit(HiAI Foundation服务)等。
后续能力的使用等,就主要以引用Kit工具箱的形式。
参考
柳伟卫《鸿蒙HarmonyOS应用开发入门》
徐礼文《鸿蒙操作系统开发入门经典》
百度百科
相关文章:
鸿蒙操作系统简介
华为鸿蒙系统(HUAWEI HarmonyOS),是华为公司于2019年8月9日在东莞举行的华为开发者大会(HDC.2019)上正式发布的面向全场景的分布式操作系统,可以创造一个超级虚拟终端互联的世界,将人、设备、场…...
LabVIEW起落架震台检测
在现代飞机制造与维护过程中,起落架的性能测试是保障飞机安全的重要环节。通过LabVIEW开发的起落架小落震台检测系统,通过模拟飞机着陆过程,准确捕捉起落架在着陆时承受的各种动力学特性和应力响应,有效提升起落架设计的精度与可靠…...
git remote -v(--verbose)显示你的 Git 仓库配置的远程仓库的详细信息
git remote -v 是一个 Git 命令,用于显示你的 Git 仓库配置的远程仓库的详细信息。 当你执行 git remote -v 命令时,你会看到类似以下的输出: origin https://github.com/your-username/your-repo.git (fetch) origin https://github.com…...
Java基础知识(四) -- 面向对象(中)
1.包 1.3.1 包的作用 (1)可以避免类重名:有了包之后,类的全名称就变为:包.类名【便于使用】(2)分类组织管理众多的类【便于管理类】(3)可以控制某些类型或成员的可见范…...
RAG开发中,如何用Milvus 2.5 BM25算法实现混合搜索
01. 背景 混合搜索(Hybrid Search)作为RAG应用中Retrieve重要的一环,通常指的是将向量搜索与基于关键词的搜索(全文检索)相结合,并使用RRF算法合并、并重排两种不同检索的结果,最终来提高数据的召回率。全文检索与语义…...
RadiAnt DICOM - 基本主题 :从 PACS 服务器打开研究
正版序列号获取:https://r-g.io/42ZopE RadiAnt DICOM Viewer PACS 客户端功能允许您从 PACS 主机(图片存档和通信系统)搜索和下载研究。 在开始之前,您需要确保您的 PACS 服务器和 RadiAnt 已正确配置。有关配置说明,…...
使用 CFD 加强水资源管理:全面概述
探索 CFD(计算流体动力学)在增强保护人类健康的土木和水利工程实践方面的重大贡献。 挑战 水资源管理是指规划、开发、分配和管理水资源最佳利用的做法。它包括广泛的活动,旨在确保水得到有效和可持续的利用,以满足各种需求&…...
AMS1117芯片驱动电路·降压芯片的驱动电路详解
编写不易,仅供学习,请勿搬运,感谢理解 AMS1117常见封装 很常用的一种LDO降压芯片,LDO(Low Dropout Regulator)降压芯片是线性稳压器,这种IC因为内部集成的不是开关电路,只能将输入与输出的电压差值通过内部…...
贪心算法 part01
class Solution { public:int maxSubArray(vector<int>& nums) {int result INT32_MIN;int count 0;for (int i 0; i < nums.size(); i) {count nums[i];if (count > result) { // 取区间累计的最大值(相当于不断确定最大子序终止位置ÿ…...
新能源汽车充电需求攀升,智慧移动充电服务有哪些实际应用场景?
在新能源汽车行业迅猛发展的今天,智慧充电桩作为支持这一变革的关键基础设施,正在多个实际应用场景中发挥着重要作用。从公共停车场到高速公路服务区,从企业园区到住宅小区,智慧充电桩不仅提供了便捷的充电服务,还通过…...
随机森林算法原理
随机森林算法原理 算法流程随机森林的生成随机森林的预测 算法总结随机森林的优点随机森林的缺点 算法流程 随机森林的生成 输入训练数据 D,样本个数为 m ,待学习的决策树数量为 T。 对于 t 1,2,…,T,从 D 中有放回地采样 m 次,…...
java中sha256和md5某个字符串实例代码
在Java中,可以使用 java.security.MessageDigest 类来计算字符串的 SHA-256 和 MD5 哈希值。以下是如何为给定的字符串生成这两种哈希值的实例代码。 生成SHA-256和MD5哈希值的示例代码 Java 深色版本 import java.security.MessageDigest; import java.security.N…...
thinkphp8自带分页bootstrap
tp8引用的是bootstrap3.4.1这个版本; 前端结构: <ul class"pagination"><li><a href"/index.php?page4"></a></li><li><a href"/index.php?page1">1</a></li>…...
C++算法第九天
本篇文章我们继续学习c算法 目录 第一题 题目链接 题目展示 代码原理 暴力解法 二分解法 代码编写 第二题 题目链接 题目展示 代码原理 代码编写 重点回顾 朴素二分 非朴素二分 重点一 重点二 重点三 第一题 题目链接 153. 寻找旋转排序数组中的最小值 - 力…...
ASRPRO学习笔记一之语音模型位置和语音替换
一、语音替换的步骤 1、扬声器录音 打开GoldWave,点击工具栏中的蓝色控制属性按钮,点击设备,选择扬声器,点击ok。打开电脑上的网易云音乐,点击红色的录制按钮,开始录制音乐,在网易云音乐上点击播放音乐,录…...
QT编译opencv
一.QT5.12编译 1.QT环境 QT5.12 Qt Creator 12.0.2 2.OpenCV文件 因为QT5.12版本qt最后支持到2021.12月,所以这里选择的opencv版本为2021.4月发布的opencv-3.4.16版本 官网下载地址:https://opencv.org/releases/ 最新版本:opencv-3.4.16.…...
[笔记]关于Qt的nativeEvent事件无法接收window消息的Bug
1.nativeEvent事件无法接收window消息 此处不是nativeEvent不能接收,是possmessage一定要写对发送的软件名称,这个名称在Qt中是主界面类的名称,就是主界面UI的名称,而不是rc文件中定义的名称。 所以在FindWindow函数获取目标窗口…...
基于深度学习的猫狗识别系统【深度学习课设】
🏆 作者简介:席万里 ⚡ 个人网站:https://dahua.bloggo.chat/ ✍️ 一名后端开发小趴菜,同时略懂Vue与React前端技术,也了解一点微信小程序开发。 🍻 对计算机充满兴趣,愿意并且希望学习更多的技…...
Java性能调优 - JVM性能监测及调优
JVM 内存模型概述 堆 堆是JVM内存中最大的一块内存空间,该内存被所有线程共享,几乎所有对象和数组都被分配到了堆内存中。堆被划分为新生代和老年代,新生代又被进一步划分为Eden和Survivor区,最后Survivor由From Survivor和To Su…...
[代码随想录21二叉树]二叉树的修改和改造,修剪二叉树,将有序数组转为二叉搜索树
前言 二叉树章节最后的题目了,就是对搜索二叉树的改造, 题目链接 669. 修剪二叉搜索树 - 力扣(LeetCode) 108. 将有序数组转换为二叉搜索树 - 力扣(LeetCode) 一、修剪二叉搜索树 思路:等会…...
C# OpenCV机器视觉:图像平滑
在一个寒冷的冬日,阿强窝在家里的沙发上,裹着厚厚的毛毯,手里捧着一杯热巧克力。他的朋友们约他一起去滑雪,但阿强却更喜欢待在温暖的家中,享受这份宁静。突然,他的手机响了,是朋友们发来的滑雪…...
Dubbo 3.x源码(26)—Dubbo服务引用源码(9)应用级服务发现订阅refreshServiceDiscoveryInvoker
基于Dubbo 3.1,详细介绍了Dubbo服务的发布与引用的源码。 此前我们学习了MigrationRuleHandler这个处理器,它用于通过动态更改规则来控制迁移行为。MigrationRuleListener的onrefer方法是Dubbo2.x 接口级服务发现与Dubbo3.x应用级服务发现之间迁移的关键…...
java client http请求 返回数据 实时循环监听 url 中资源是否生成
1、php 中 执行 exec 调用操作系统 命令行 执行 以下 java 代码 生成 的jar 2、php 执行命令是 以上1 需要命令行 输入 参数 taskid 3、实现实时监听 MP3 url 是否生成 4、 package com.example.filedemo.controller;import java.io.BufferedReader; import java.io.InputStre…...
ONES 功能上新|ONES Copilot、ONES Wiki 新功能一览
ONES Copilot 可基于工作项的标题、描述、属性信息,对工作项产生的动态和评论生成总结。 针对不同类型的工作项,总结输出的内容有对应的侧重点。 应用场景: 在一些流程步骤复杂、上下游参与成员角色丰富的场景中,工作项动态往往会…...
【自适应】postcss-pxtorem适配Web端页面
在进行页面开发时,自适应设计是一个关键的考虑因素。为了实现这一点,postcss-pxtorem是一个非常有用的工具,它可以将CSS中的px单位转换为rem单位,从而实现基于根元素字体大小的自适应布局。下面介绍一下在项目中如何引入并配置pos…...
BOE(京东方)“向新2025”年终媒体智享会首站落地上海 六大维度创新开启产业发展新篇章
12月17日,BOE(京东方)以“向新2025”为主题的年终媒体智享会在上海启动。正值BOE(京东方)新三十年的开局之年,活动全面回顾了2024年BOE(京东方)在各领域所取得的领先成果,深度解读了六大维度的“向新”发展格局,同时详细剖析了BOE(京东方)在智能制造领域的领先实践。BOE(京东方…...
Moretl安全日志采集工具
永久免费: 至Gitee下载 使用教程: Moretl使用说明 使用咨询: 用途 定时全量或增量采集工控机,电脑文件或日志. 优势 开箱即用: 解压直接运行.不需额外下载.管理设备: 后台统一管理客户端.无人值守: 客户端自启动,自更新.稳定安全: 架构简单,兼容性好,通过授权控制访问. 架…...
LabVIEW农机自主导航监控系统
随着现代农业技术的快速发展,自主导航农机的需求日益增加,提高作业效率和减少劳动成本成为农业现代化的关键目标。本文介绍了一个基于LabVIEW的农机自主导航监控系统的开发案例,该系统通过先进的传感器与控制技术,实现农机在田间作…...
ChatGPT重大更新:新增实时搜索和高级语音
12月17日消息,据报道,OpenAI开启了第八天技术分享直播,对ChatGPT搜索功能进行了大量更新。 此次ChatGPT新增的功能亮点纷呈。其中,实时搜索功能尤为引人注目。OpenAI对搜索算法进行了深度优化,使得用户提出问题后&…...
爬虫基础学习
爬虫概念与工作原理 爬虫是什么:爬虫(Web Scraping)是自动化地访问网站并提取数据的技术。它模拟用户浏览器的行为,通过HTTP请求访问网页,解析HTML文档并提取有用信息。 爬虫的基本工作流程: 发送HTTP请求…...
一般行业安全管理人员考试题库分享
1.在高速运转的机械飞轮外部安装防护罩,属于(B)安全技术措施。 A.限制能量 B.隔离 C.故障设计 D.设置薄弱环节 2.生产经营单位的(B)是本单位安全生产的第一责任人,对落实本单位安全生产主体责任全面负责,具体履行安全生产管理职责。 A.全员 B…...
递归问题(c++)
递归设计思路 数列递归 : 如果一个数列的项与项之间存在关联性,那么可以使用递归实现 ; 原理 : 如果一个函数可以求A(n),那么该函数就可以求A(n-1),就形成了递归调用 ; 注意: 一般起始项是不需要求解的,是已知条件 这就是一个典型…...
企业数字化转型规划“秘籍”全解析
一、规划前奏:明确目标与洞察现状 (一)描绘数字化转型愿景 数字化转型愿景是工程设计总承包企业未来发展的蓝图,是企业数字化征程的指引。它不仅涉及技术更新,更是企业战略、运营模式和组织文化的深度重塑。企业需确保…...
达梦8-达梦数据的示例用户和表
1、示例库说明: 创建达梦数据的示例用户和表,导入测试数据。 在完成达梦数据库的安装之后,在/opt/dmdbms/samples/instance_script目录下有用于创建示例用户的SQL文件。samples目录前的路径根据实际安装情况进行修改,本文将达梦…...
day08-别名-重定向-去重排序等
1.重复用touch命令创建同一份文件,会修改文件的时间戳。 alias命令: 别名 查看已有别名:alias [rootoldboy ~]# alias alias cpcp -i alias egrepegrep --colorauto alias fgrepfgrep --colorauto alias grepgrep --colorauto alias l.ls…...
如何在 .NET Core 中轻松实现异步编程并提升性能
目录 初识异步编程 与多线程关系 异步编程操作 初识异步编程 异步编程:是指在执行某些任务时程序可以在等待某个操作完成的过程中继续执行其他任务,而不是阻塞当前线程,这在处理I/O密集型操作(如文件读取、数据库查询、网络请求等)时尤为重…...
makefile文件
简介: 自动化编译:只需要一个make命令,整个工程自动编译 提高编译效率:再次编译时,只编译修改的文件(查看时间戳,根据修改文件的时间判断文件是否被修改) 基本语法: …...
MybatisPlus使用LambdaQueryWrapper更新时 int默认值问题
问题: User user new User();user.setBalance(1000);QueryWrapper<User> queryWrapper new QueryWrapper<>();queryWrapper.eq("username","Jack");userMapper.update(user, queryWrapper);通过用户名,更新金额&…...
泷羽sec学习打卡-brupsuite7搭建IP炮台
声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都 与本人无关,切莫逾越法律红线,否则后果自负 关于brupsuite的那些事儿-Brup-IP炮台搭建 搭建炮台服务端安装zmap1、更新系统和安装基础依赖ÿ…...
WPF系列一:窗口设置无边框
WindowStyle 设置:WindowStyle"None",窗口无法拖拽,但可纵向和横向拉伸 <Window x:Class"WPFDemo.MainWindow.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x&quo…...
《C++与 Armadillo:线性代数助力人工智能算法简化之路》
在人工智能领域,线性代数运算可谓是构建各类模型与算法的基石。从神经网络中的矩阵乘法、向量运算,到数据处理中的特征分解、奇异值分解等,无一不依赖高效且精准的线性代数计算。而 C作为一种强大且高效的编程语言,在人工智能开发…...
【新界面】基于卷积神经网络的垃圾分类(Matlab)
基于CNN的垃圾识别与分类GUI【新界面】 有需要可直接联系我,基本都在在线,能秒回!可加我看演示视频,不懂可以远程教学 1.此项目设计包括两份完整的源代码,有GUI界面的代码和无GUI界面系统的代码。 (以下部…...
阿尔茨海默症数据集,使用yolo,voc,coco格式对2013张原始图片进行标注,可识别轻微,中等和正常的症状
阿尔茨海默症数据集,使用yolo,voc,coco格式对2013张原始图片进行标注,可识别轻微,中等,严重和正常的症状 数据集分割 训练组100% 2013图片 有效集% 0图片 测试集…...
评估二分类模型性能之AUC-ROC 曲线
AUC-ROC 曲线 是评估二分类模型性能的重要工具。它结合了 受试者工作特性曲线 (Receiver Operating Characteristic, ROC) 和 曲线下面积 (Area Under the Curve, AUC),全面衡量分类器在不同阈值下的表现。 概念解释 1. ROC 曲线 ROC 曲线展示了分类器在不同阈值下…...
睡岗和玩手机数据集,4653张原始图,支持YOLO,VOC XML,COCO JSON格式的标注
睡岗和玩手机数据集,4653张原始图,支持YOLO,VOC XML,COCO JSON格式的标注 数据集分割 训练组70% 3257图片 有效集20% 931图片 测试集10% 465图片 预处理 没有采用任何预处…...
景联文科技:精准语音标注,驱动语音技术新发展
在人工智能迅速发展的今天,语音技术的应用已经渗透到我们生活的方方面面。从智能音箱、语音助手到自动语音识别系统,高质量的语音数据是这些应用成功的关键。景联文科技作为领先的AI数据服务提供商,专注于为客户提供高精度、高效的语音标注服…...
Linux 查看目录命令 ls 详细介绍
Linux 和 Unix 系统中 ls 命令是用于列出目录内容。用户可以查看指定目录下的文件和子目录,还可以获取有关这些文件和子目录的详细信息。 基本语法: ls [选项] [目录]如果不指定目录,ls 将列出当前工作目录下的内容。 01、-a 或 --all ls…...
Flux Tools 结构简析
Flux Tools 结构简析 BFL 这次一共发布了 Canny、Depth、Redux、Fill 四个 Tools 模型系列,分别对应我们熟悉的 ControlNets、Image Variation(IP Adapter)和 Inpainting 三种图片条件控制方法。虽然实现功能是相同的,但是其具体…...
从零开始:PHP基础教程系列-第13篇:构建简单的Web应用
从零开始:PHP基础教程系列 第13篇:构建简单的Web应用 在本篇文章中,我们将学习如何使用PHP构建一个简单的Web应用。这个应用将实现用户注册和登录功能,并使用PDO与MySQL数据库进行交互。我们将逐步实现这个应用的基本功能。 一…...
文件夹属性变0字节:全面解析与恢复指南
一、文件夹属性变0字节现象概述 在日常使用电脑的过程中,我们可能会遇到文件夹属性突然变为0字节的情况。这意味着文件夹中的文件列表或元数据被某种方式清空或损坏,导致系统无法正确读取文件夹的内容。当您尝试打开此类文件夹时,通常会收到…...