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

鸿蒙应用开发从入门到实战(五):ArkUI概述

大家好,我是潘Sir,持续分享IT技术,帮你少走弯路。《鸿蒙应用开发从入门到项目实战》系列文章持续更新中,陆续更新AI+编程、企业级项目实战等原创内容、欢迎关注!

一、HarmonyOS应用开发相关概念

​ 在具体开发鸿蒙应用之前,需要先了解有关HarmonyOS应用的一些基本概念:UI框架的简单说明、应用模型的基本概念。

1.1 UI框架

​ HarmonyOS提供了一套UI开发框架,即方舟开发框架(ArkUI框架)。方舟开发框架可为开发者提供应用UI开发所必需的能力,比如多种组件、布局计算、动画能力、UI交互、绘制等。

​ 方舟开发框架针对不同目的和技术背景的开发者提供了两种开发范式,分别是基于ArkTS的声明式开发范式(简称“声明式开发范式”)和兼容JS的类Web开发范式(简称“类Web开发范式”)。以下是两种开发范式的简单对比。

开发范式名称 语言生态 UI更新方式 适用场景 适用人群
声明式开发范式 ArkTS语言 数据驱动更新 复杂度较大、团队合作度较高的程序 移动系统应用开发人员、系统应用开发人员
类Web开发范式 JS语言 数据驱动更新 界面较为简单的程序应用和卡片 Web前端开发人

1.2 应用模型

​ 应用模型是HarmonyOS为开发者提供的应用程序所需能力的抽象提炼,它提供了应用程序必备的组件和运行机制。有了应用模型,开发者可以基于一套统一的模型进行应用开发,使应用开发更简单、高效。

​ 随着系统的演进发展,HarmonyOS先后提供了两种应用模型:

  • FA(Feature Ability)模型: HarmonyOS API 7开始支持的模型,已经不再主推。

  • Stage模型: HarmonyOS API 9开始新增的模型,是目前主推且会长期演进的模型。在该模型中,由于提供了AbilityStage、WindowStage等类作为应用组件和Window窗口的“舞台”,因此称这种应用模型为Stage模型。

    了解鸿蒙应用开发相关概念后,接下来进入UI的开发。

二、UI开发概述

​ 方舟开发框架(简称ArkUI)为HarmonyOS应用的UI开发提供了完整的基础设施,包括简洁的UI语法、丰富的UI功能(组件、布局、动画以及交互事件),以及实时界面预览工具等,可以支持开发者进行可视化界面开发。

1.1 基本概念

UI

​ 即用户界面。开发者可以将应用的用户界面设计为多个功能页面,每个页面进行单独的文件管理,并通过页面路由API完成页面间的调度管理如跳转、回退等操作,以实现应用内的功能解耦。
组件

​ UI构建与显示的最小单位,如列表、网格、按钮、单选框、进度条、文本等。开发者通过多种组件的组合,构建出满足自身应用诉求的完整界面。

1.2 两种开发范式

​ 针对不同的应用场景及技术背景,方舟开发框架提供了两种开发范式,分别是:基于ArkTS的声明式开发范式(检简称”声明式开发范式“)和兼容JS的类Web开发范式(简称”类Web开发范式“ )。

  • 声明式开发范式

    采用基于TypeScript声明式UI语法扩展而来的ArkTS语言,从组件、动画和状态管理三个维度提供UI绘制能力。

  • 类Web开发范式

    采用经典的HML、CSS、JavaScript三段式开发方式,即使用HML标签文件搭建布局、使用CSS文件描述样式、使用JavaScript文件处理逻辑。该范式更符合于Web前端开发者的使用习惯,便于快速将已有的Web应用改造成方舟开发框架应用。

在开发一款新应用时,推荐采用声明式开发范式来构建UI,主要基于以下几点考虑:

  • 开发效率:声明式开发范式更接近自然语义的编程方式,开发者可以直观地描述UI,无需关心如何实现UI绘制和渲染,开发高效简洁。

  • 应用性能:如下图方舟开发框架示意图所示,两种开发范式的UI后端引擎和语言运行时是共用的,但是相比类Web开发范式,声明式开发范式无需JS框架进行页面DOM管理,渲染更新链路更为精简,占用内存更少,应用性能更佳。

1方舟开发框架示意图

图 方舟开发框架示意图
  • 发展趋势:声明式开发范式后续会作为主推的开发范式持续演进,为开发者提供更丰富、更强大的能力。

1.3 不同应用类型支持的开发范式

​ 根据所选用HarmonyOS应用模型(Stage模型、FA模型)和页面形态(应用或服务的普通页面、卡片)的不同,对应支持的UI开发范式也有所差异,详见下表。

表 支持的UI开发范式
应用模型 页面形态 支持的UI开发范式
Stage模型(推荐) 应用或服务的页面 声明式开发范式(推荐)
卡片 声明式开发范式(推荐)类Web开发范式
FA模型 应用或服务的页面 声明式开发范式类Web开发范式
卡片 类Web开发范式

三、基于ArkTS的声明式开发范式

​ 基于ArkTS的声明式开发范式的方舟开发框架是一套开发极简、高性能、支持跨设备的UI开发框架,提供了构建HarmonyOS应用UI所必需的能力,主要包括:

  • ArkTS
    ArkTS是HarmonyOS优选的主力应用开发语言,围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展。扩展能力包含声明式UI描述、自定义组件、动态扩展UI元素、状态管理和渲染控制。状态管理作为基于ArkTS的声明式开发范式的特色,通过功能不同的装饰器给开发者提供了清晰的页面更新渲染流程和管道。状态管理包括UI组件状态和应用程序状态,两者协作可以使开发者完整地构建整个应用的数据更新和UI渲染。
  • 布局

    布局是UI的必要元素,它定义了组件在界面中的位置。ArkUI框架提供了多种布局方式,除了基础的线性布局、层叠布局、弹性布局、相对布局、栅格布局外,也提供了相对复杂的列表、宫格、轮播。

  • 组件

    组件是UI的必要元素,形成了在界面中的样子,由框架直接提供的称为系统组件,由开发者定义的称为自定义组件。系统内置组件包括按钮、单选框、进度条、文本等。开发者可以通过链式调用的方式设置系统内置组件的渲染效果。开发者可以将系统内置组件组合为自定义组件,通过这种方式将页面组件化为一个个独立的UI单元,实现页面不同单元的独立创建、开发和复用,具有更强的工程性。

  • 页面路由和组件导航

    应用可能包含多个页面,可通过页面路由实现页面间的跳转。一个页面内可能存在组件间的导航如典型的分栏,可通过导航组件实现组件间的导航。

  • 图形

    方舟开发框架提供了多种类型图片的显示能力和多种自定义绘制的能力,以满足开发者的自定义绘图需求,支持绘制形状、填充颜色、绘制文本、变形与裁剪、嵌入图片等。

  • 动画

    动画是UI的重要元素之一。优秀的动画设计能够极大地提升用户体验,框架提供了丰富的动画能力,除了组件内置动画效果外,还包括属性动画、显式动画、自定义转场动画以及动画API等,开发者可以通过封装的物理模型或者调用动画能力API来实现自定义动画轨迹。

  • 交互事件

    交互事件是UI和用户交互的必要元素。方舟开发框架提供了多种交互事件,除了触摸事件、鼠标事件、键盘按键事件、焦点事件等通用事件外,还包括基于通用事件进行进一步识别的手势事件。手势事件有单一手势如点击手势、长按手势、拖动手势、捏合手势、旋转手势、滑动手势,以及通过单一手势事件进行组合的组合手势事件。

2.1 特点

  • 开发效率高,开发体验好

    • 代码简洁:通过接近自然语义的方式描述UI,不必关心框架如何实现UI绘制和渲染。
    • 数据驱动UI变化:让开发者更专注自身业务逻辑的处理。当UI发生变化时,开发者无需编写在不同的UI之间进行切换的UI代码, 开发人员仅需要编写引起界面变化的数据,具体UI如何变化交给框架。
    • 开发体验好:界面也是代码,让开发者的编程体验得到提升。
  • 性能优越

    • 声明式UI前端和UI后端分层:UI后端采用C++语言构建,提供对应前端的基础组件、布局、动效、交互事件、组件状态管理和渲染管线。
    • 语言编译器和运行时的优化:统一字节码、高效FFI-Foreign Function Interface、AOT-Ahead Of Time、引擎极小化、类型优化等。
  • 生态容易快速推进

    能够借力主流语言生态快速推进,语言相对中立友好,有相应的标准组织可以逐步演进。

2.2 整体架构

2声明式开发范式整体架构

声明式开发范式整体架构
  • 声明式UI前端

    提供了UI开发范式的基础语言规范,并提供内置的UI组件、布局和动画,提供了多种状态管理机制,为应用开发者提供一系列接口支持。

  • 语言运行时

    选用方舟语言运行时,提供了针对UI范式语法的解析能力、跨语言调用支持的能力和TS语言高性能运行环境。

  • 声明式UI后端引擎

    后端引擎提供了兼容不同开发范式的UI渲染管线,提供多种基础组件、布局计算、动效、交互事件,提供了状态管理和绘制能力。

  • 渲染引擎

    提供了高效的绘制能力,将渲染管线收集的渲染指令,绘制到屏幕的能力。

  • 平台适配层

    提供了对系统平台的抽象接口,具备接入不同系统的能力,如系统渲染管线、生命周期调度等。

2.3 开发流程

​ 通过构建一个简单的具有页面跳转/返回功能的应用(如下图所示),快速了解工程目录的主要文件,熟悉HarmonyOS应用开发流程。

3ui开发案例

本例演示使用Stage模型构建ArkTS应用,如果使用FA模型请参考官网。当前主推Stage模型,所以FA模型不再演示。

2.3.1 创建ArkTS工程

前面章节一演示创建过第一个HarmonyOS应用,按相同方法创建项目:

(1)若首次打开DevEco Studio,请点击Create Project创建工程。如果已经打开了一个工程,请在菜单栏选择File > New > Create Project来创建一个新工程。

(2)选择Application应用开发(本文以应用开发为例,Atomic Service对应为元服务开发),选择模板“Empty Ability”,点击Next进行下一步配置。

4创建项目

(3)进入配置工程界面,Compile SDK选择“3.1.0(API 9)”,Model 选择“Stage”,其他参数保持默认设置即可。

5配置项目

支持使用ArkTS低代码开方式。

低代码开发方式具有丰富的UI界面编辑功能,通过可视化界面开发方式快速构建布局,可有效降低开发者的上手成本并提升开发者构建UI界面的效率。

如需使用低代码开发方式,请打开上图中的Enable Super Visual开关。

(4) 点击Finish,工具会自动生成示例代码和相关资源,等待工程创建完成。

6stage模型目录结构

ArkTS工程目录结构(Stage模型)

目录含义解释

  • AppScope > app.json5:应用的全局配置信息。

  • entry:HarmonyOS工程模块,编译构建生成一个HAP包。

    • src > main > ets:用于存放ArkTS源码。
    • src > main > ets > entryability:应用/服务的入口。
    • src > main > ets > pages:应用/服务包含的页面。
    • src > main > resources:用于存放应用/服务所用到的资源文件,如图形、多媒体、字符串、布局文件等。
    • src > main > module.json5:Stage模型模块配置文件。主要包含HAP包的配置信息、应用/服务在具体设备上的配置信息以及应用/服务的全局配置信息。
    • build-profile.json5:当前的模块信息、编译信息配置项,包括buildOption、targets配置等。其中targets中可配置当前运行环境,默认为HarmonyOS。
    • hvigorfile.ts:模块级编译构建任务脚本,开发者可以自定义相关任务和代码实现。
  • oh_modules:用于存放三方库依赖信息。

  • build-profile.json5:应用级配置信息,包括签名、产品配置等。

  • hvigorfile.ts:应用级编译构建任务脚本。

2.3.2 构建第一个页面

(1)默认界面使用文本组件

工程同步完成后,在“Project”窗口,点击“entry > src > main > ets > pages”,打开“Index.ets”文件,可以看到页面由Text组件组成。“Index.ets”文件的示例如下:

// Index.ets
@Entry
@Component
struct Index {@State message: string = 'Hello World'build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)}.width('100%')}.height('100%')}
}

(2) 添加按钮

在默认页面基础上,我们添加一个Button组件,作为按钮响应用户点击,从而实现跳转到另一个页面。“Index.ets”文件的示例如下:

// Index.ets
@Entry
@Component
struct Index {@State message: string = 'Hello World'build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)// 添加按钮,以响应用户点击Button() {Text('Next').fontSize(30).fontWeight(FontWeight.Bold)}.type(ButtonType.Capsule).margin({top: 20}).backgroundColor('#0D9FFB').width('40%').height('5%')}.width('100%')}.height('100%')}
}

(3) 在编辑窗口右上角的侧边工具栏,点击Previewer,打开预览器。第一个页面效果如下图所示:

7第一个界面

2.4.3 构建第二个页面

(1)新建第二个页面文件。在“Project”窗口,打开“entry > src > main > ets ”,右键点击“pages”文件夹,选择“New > ArkTS File”,命名为“Second”,点击“Finish”。可以看到文件目录结构如下:

8新建第二个界面

也可以在右键点击“pages”文件夹时,选择“New > Page”,则无需手动配置相关页面路由。

(2) 配置第二个页面的路由。在“Project”窗口,打开“entry > src > main > resources > base > profile”,在main_pages.json文件中的“src”下配置第二个页面的路由“pages/Second”。示例如下:

{"src": ["pages/Index","pages/Second"]
}

(3) 添加文本及按钮

参照第一个页面,在第二个页面添加Text组件、Button组件等,并设置其样式。“Second.ets”文件的示例如下:

// Second.ets
@Entry
@Component
struct Second {@State message: string = 'Hi there'build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)Button() {Text('Back').fontSize(25).fontWeight(FontWeight.Bold)}.type(ButtonType.Capsule).margin({top: 20}).backgroundColor('#0D9FFB').width('40%').height('5%')}.width('100%')}.height('100%')}
}

2.4.4 实现页面间的跳转

页面间的导航可以通过页面路由router来实现。页面路由router根据页面url找到目标页面,从而实现跳转。使用页面路由请导入router模块。

(1)第一个页面跳转到第二个页面

在第一个页面中,跳转按钮绑定onClick事件,点击按钮时跳转到第二页。“Index.ets”文件的示例如下:

// Index.ets
// 导入页面路由模块
import router from '@ohos.router';@Entry
@Component
struct Index {@State message: string = 'Hello World'build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)// 添加按钮,以响应用户点击Button() {Text('Next').fontSize(30).fontWeight(FontWeight.Bold)}.type(ButtonType.Capsule).margin({top: 20}).backgroundColor('#0D9FFB').width('40%').height('5%')// 跳转按钮绑定onClick事件,点击时跳转到第二页.onClick(() => {console.info(`Succeeded in clicking the 'Next' button.`)// 跳转到第二页router.pushUrl({ url: 'pages/Second' }).then(() => {console.info('Succeeded in jumping to the second page.')}).catch((err) => {console.error(`Failed to jump to the second page.Code is ${err.code}, message is ${err.message}`)})})}.width('100%')}.height('100%')}
}

(2) 第二个页面返回到第一个页面

在第二个页面中,返回按钮绑定onClick事件,点击按钮时返回到第一页。“Second.ets”文件的示例如下:

// Second.ets
// 导入页面路由模块
import router from '@ohos.router';@Entry
@Component
struct Second {@State message: string = 'Hi there'build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)Button() {Text('Back').fontSize(25).fontWeight(FontWeight.Bold)}.type(ButtonType.Capsule).margin({top: 20}).backgroundColor('#0D9FFB').width('40%').height('5%')// 返回按钮绑定onClick事件,点击按钮时返回到第一页.onClick(() => {console.info(`Succeeded in clicking the 'Back' button.`)try {// 返回第一页router.back()console.info('Succeeded in returning to the first page.')} catch (err) {console.error(`Failed to return to the first page.Code is ${err.code}, message is ${err.message}`)}})}.width('100%')}.height('100%')}
}

(3) 打开“Index.ets”文件,点击预览器中的”Refresh“刷新按钮进行刷新。效果如下图所示

3ui开发案例

除了采用预览方式外,还可以按前面章节讲解的通过模拟器或真机进行调试。

《鸿蒙应用开发从入门到项目实战》系列文章持续更新中,陆续更新AI+编程、企业级项目实战等原创内容,防止迷路,欢迎关注!

相关文章:

鸿蒙应用开发从入门到实战(五):ArkUI概述

HarmonyOS提供了一套UI开发框架,即方舟开发框架(ArkUI框架)。方舟开发框架可为开发者提供应用UI开发所必需的能力,比如多种组件、布局计算、动画能力、UI交互、绘制等。​ 大家好,我是潘Sir,持续分享IT技术,帮你少走弯路。《鸿蒙应用开发从入门到项目实战》系列文章持…...

好用的跨网文件安全交换系统:守护企业数据流转的核心屏障!

在数字化时代,企业数据跨网流转需求日益频繁,然而内网与外网的隔离、多安全域的划分,让文件传输面临效率与安全的双重挑战。传统方式如U盘拷贝易导致病毒传播和数据泄露,FTP等工具缺乏合规审计能力,难以满足企业对数据安全的高要求。因此一款好用的跨网文件安全交换系统,…...

SIM笔记

SIM组成 金属触点 + 塑料基板 + 芯片模块(封装在透明的环养树脂)+ 极细小的内部电路金属触点 C1: 输送电力(5V/3V/1.8/); C5:接地 形成回路; C3: 提供时钟信号; C2:复位信号触点; C7:数据传输; C4、C8: 预留 芯片模块 如何上网qq:505645074...

2025第五届“长城杯”网络安全大赛暨京津冀蒙网络安全技能竞赛 WP Web全

文曲签学 首先随便输入一个指令尝试,发现提示输入help查看帮助输入help,发现有list命令查看笔记和read命令读取笔记list查看笔记列表,发现HINT,read查看关注公众号后提示写的很明确了,目录穿越加双写绕过拿到flag EZ_upload 随便上传一个文件,跳转至upload.php查看源码 &…...

FTP替代工具哪个产品好,高效安全之选

内容概要 在探讨FTP替代工具哪个产品好时,我们不得不先概览一下当前的市场情况。随着企业对数据传输效率和安全性要求的日益提升,FTP这一传统工具已难以满足需求。市场上涌现出众多FTP替代产品,其中Ftrans SFT文件安全传输系统‌备受瞩目。本文将从高效传输速度和数据安全性…...

c++之内存对齐模板类aligned_storage

始于c++11,c++23弃用 aligned_storage 是 C++ 标准库中用于管理对齐内存的模板类,定义在 <type_traits> 头文件中。它通过模板参数指定内存大小和对齐方式,提供未初始化的内存区域,适用于需要精确控制内存布局的场景。核心功能 ‌内存对齐管理‌:通过模板参数设置…...

ABC 423先慢慢改吧题解

被模拟题狙击了,数组越界为啥不爆 RE 啊啊啊啊 整场白打,这是真导管了 C - Lock All Doors 想了半天是不是被边界情况卡了,鼓捣半天写了一堆等价的东西,屋檐了 记得检查数组大小 D - Long Waiting 可以维护一个小根堆来判断已经进入餐厅的客人离开的顺序,再记一个人数 \(s…...

汇聚层交换机的替换要考虑到的因素

背景: 当汇聚层交换机的流量端口承受不住现有流量,需要替换交换机实现业务正常工作。 考虑因素:现有网络架构:先梳理清现有网络架构,为后续工作打下坚实的基础。需要考虑业务需求、结构层次(汇聚层、接入层、核心层)、未来需求等; 交换机选型:硬件方面需要考虑适配性,…...

git 常见使用

取消git commit git reset --soft HEAD~1 文件名 取消git add git reset HEAD 文件名 强制分支B覆盖分支A git checkout A git reset --hard origin/B git push -f origin A...

python UV 包管理工具安装

安裝 uv uv 本身並不需要 Python,所以不建議用 pip 或是 pipx 安裝,這樣都會跟特定的 Python 環境綁在一起,Windows 上就直接透過 PowerSehll 安裝即可: powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | scoop 安裝:scoop install u…...

什么是网络分区

目录背景和价值一、先搞懂:什么是Redis场景下的“网络分区”?二、同一交换机下,Redis主从发生网络分区的5个常见原因1. 节点自身的“网络硬件故障”2. 节点到交换机的“链路故障”3. 交换机自身的“功能故障”4. “网络风暴/拥堵”导致的“暂时性分区”5. 防火墙/安全软件的…...

完整教程:《驾驭云原生复杂性:隐性Bug的全链路防御体系构建》

完整教程:《驾驭云原生复杂性:隐性Bug的全链路防御体系构建》pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New&quo…...

从机器的角度来说ECS为何性能好

ECS的写法,让数据的命中变高了,从而提高了CPU的使用数据的性能,因为ECS的数据是连续,批量的 而OOP的写法,数据是没有组织的,数据比较离散,要去多个cache里面去找,命中率低...

人生最幸福的时刻也就几个瞬间

1...

网络流笔记

流网络:有向图,有两个特殊点:源点,汇点。每条边有个流量。(不考虑反向边)我们可以假设流网络中不存在自环,即对于任意的节点 \(v\),\((v,v) /∈E\)。 我们同样可以假设流网络中不存在重边,即对于任意的节点 \(u\), \(v\),如果 \((u,v)∈E\), 那么 \((v,u) /∈ E\)。…...

实用指南:经典动态规划题解

实用指南:经典动态规划题解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-si…...

2025杭电多校(2)

F https://acm.hdu.edu.cn/showproblem.php?pid=7996 题意 有两场比赛,统计对于每个 \(i\) ,有多少个人排在 \(i\) 的前面,需要去重。 思路 第一思路是统计每个位置 \(i\) 前面有多少人数,发现有个小容斥在这里,两场比赛排名前的总人数减去两场都在排名前的人数。 用树状…...

latex 打印生僻字

默认的字体格式很难打出生僻字. 我们可以使用ctex的其他字体. 首先要知道有哪些字体, 参考: https://www.cnblogs.com/wodedow/p/13845213.html. 比如我们要使用字体名称为AR PL KaitiM GB, 我们需要在usepackage区域加入下面的代码 \setCJKfamilyfont{font01}{AR PL KaitiM GB…...

CSP-S 2025 游记(The Last CSP ver.)

【洛谷专栏】。 前言 前作:CSP-S 2024 游记。 上一篇文章:2025 年南京大学计算机学科体验专题营 游记。 停课最早的一次,但是没有去年写的早,不过小问题。 与文化课告别的不突然,但仍有些不舍吧。也许未来不会再担任化学课代表了,化学老师真的对我很好(可怜。如果不是现…...

电机ADC采集

正点原直流有刷驱动板的硬件解说_直流有刷电机电流检测电路-CSDN博客电平移位电路设计(常用于将双极性的宽动态范围信号变成单极性窄动态范围的信号供ADC采集)-CSDN博客运放实现交流信号的放大与平移-CSDN博客...

道德经

1.道可道,非常道。名可名,非常名。无名天地之始;有名万物之母。2.天下皆知美之为美,斯恶已。皆知善之为善,斯不善已。3.有无相生,难易相成,长短相形,高下相盈,音声相和,前后相随。恒也。4.不尚贤,使民不争;不贵难得之货,使民不为盗;不见可欲,使民心不乱。是以圣…...

TokenFlow: Unified Image Tokenizer for Multimodal Understanding and Generation - jack

https://github.com/ByteVisionLab/TokenFlow https://arxiv.org/abs/2412.03069...

digitalworld.local: TORMENT - 实践

digitalworld.local: TORMENT - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important;…...

8.25-9.2周报六

1111...

Go by Example(3.Variables)

package mainimport "fmt"func main() {var a = "initial"fmt.Println(a)var b, c int = 1, 2fmt.Println(b, c)var d = truefmt.Println(d)var e intfmt.Println(e)f := "apple"fmt.Println(f) }运行结果: $ go run variables.go initial 1 2 …...

小程序分包方法

1、 图片上云 2、 删除不用的代码、函数和文件 3、 只有子包需要的接口移到子包中 4、 代码复用。效果不明显,实现两个页面复用一个大组件,可减少10kB大小 5、 还未实践见到效果的备选方案:把node_modules、uni_modules(在微信开发者工具的依赖分析看项目依赖这两个目录中的…...

9.3-9.10周报七

111111...

pyinstaller打包整个文件文件夹和相关exe,三方库

#打包目的:完全脱离环境,只copy hello.exe去其他机器就可以完美运行#打包命令: pyinstaller --onefile .\xxx\hello.py --hidden-import "tkinter" --hidden-import=glob --hidden-import=lxml --add-data ".\xxx\*;." --distpath output_dir --add-…...

学习心得

初次接触Hadoop时,我被其庞大的生态系统所震撼 学习过程中,我最大的感悟是理论与实践的结合至关重要。单纯阅读MapReduce的原理或HDFS的架构设计,总感觉隔着一层迷雾。直到亲手搭建环境、编写第一个WordCount程序,看到分布式计算如何将大任务拆解到多个节点并行处理,那种豁…...

Web前端入门第 87 问:JavaScript 中 setInterval 和 setTimeout 细节

setInterval 和 setTimeout 两者都是用于控制 JS 函数延迟执行,但是在执行机制和用途上还是有点儿差异。 虽然说两者功能上有区别,但在使用上却可以相互模拟各自的功能,大胆的猜测下:也许浏览器内核底层都是同一个方法,只是上层封装出的两个语法糖而已。 语法 两者在语法上…...

基于Python+Vue开发的农产品商城管理系统源码+运行

项目简介该项目是基于Python+Vue开发的农产品商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的农产品商城管理系统项目,大学生可以在实践中学…...

多人多次并发

在测试行业一年多,接触到多人多次并发首先创建线程组在JMeter中添加线程组,设置线程数、Ramp-Up时间和循环次数,然后添加HTTP请求:配置目标服务器的IP、端口和路径,模拟用户的具体操作。通过CSV Data Set Config加载用户数据,实现动态参数化。 查看结果树收集测试数据。合…...

B. Alternating Current

https://codeforces.com/problemset/problem/343/B 题意:给定两根线,告诉你每个节点的两根线的上下位置,问两根线能否无损解开 思路:如果连续的一段一个都在另一个上面或者下面,那么这一段就可以回到他本身的位置。根据这个思路,可以将问题转化为消消乐问题,只要有连续的…...

虚拟电厂运行机制

虚拟电厂(VPP)对电力资源的调节是其最核心、最精妙的功能。它本质上扮演着一个“全能电力调度员”的角色,但其调度对象不再是几个大电厂,而是成千上万个分散的、类型各异的分布式资源。 1. 察:全面感知与实时监测 这是调节的基础。虚拟电厂通过安装在各类终端资源上的智能…...

创建我第一个带记忆能力的langchain机器人

以下内容由AI对话生成带记忆的聊天机器人实现 下面是完整的代码实现,包含详细注释: # chatbot_with_memory.py import os from langchain_openai import ChatOpenAI from langchain.memory import ConversationBufferMemory from langchain.chains import ConversationChain …...

Reinforcing Image Generation with Collaborative Semantic-level and Token-level CoT - jack

https://arxiv.org/pdf/2505.00703 https://github.com/CaraJ7/T2I-R1...

GitHub超 30000+ star , 超强大的开源项目Supervision

Roboflow 的 Supervision 项目已于近期突破 30,000 个 GitHub Stars,是视觉工程师常用的辅助库,让你告别重复造轮子。 Supervision 是 Roboflow 出品、基于 MIT 协议的开源库,用于解决视觉项目中常见的可视化、跟踪、计数、格式转换等需求。可与 YOLO、Detectron2、Transfor…...

深入解析:【JavaEE】网络原理初识

深入解析:【JavaEE】网络原理初识pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; f…...

Office文档投毒技术:SHVE中的会话劫持视觉利用新突破

本文深入解析SHVE工具如何通过Office文档投毒技术,利用XSS漏洞和用户对可信网站的信任,在文档下载过程中自动注入恶意宏,实现隐蔽的攻击载荷交付,揭示了现代网络攻击中技术利用与心理信任结合的新型威胁模式。Office文档投毒在SHVE中的应用 大家好!我们带来了会话劫持视觉…...

爬虫逆向--Day22Day23--核心实战案例【荔枝网】【WASM学习】

案例地址链接:https://gdtv.cn/channels/2 案例爬取链接:https://gdtv-api.gdtv.cn/api/channel/v1/news?beginScore=0&channelId=246&pageSize=11 一、入口定位 首先当我们拿到网站,并且找到我们需要爬取的目标url以后,我们首先复制url到【https://curlconverter…...

简洁美观!一款值得 Star 的 Java 博客项目!

OneBlog —— 一个简洁美观、功能强大并且自适应的 Java 博客。基于 SpringBoot + Bootstrap 开发,支持移动端自适应,配有完备的前台和后台管理功能。大家好,我是 Java陈序员。 今天,给大家介绍一个简洁美观的开源 Java 博客系统。关注微信公众号:【Java陈序员】,获取开源…...

数据结构与算法-33.图-加权有向图最短路径

一、加权有向图 1、加权有向图 边的表示 代码实现 2、加权有向图的实现 二、最短路径 1、定义及性质 2、API设计 3、松弛技术4、Dijkstra算法实现 测试以上仅供参考,如有疑问,留言联系...

白子的情人节礼物

新题崭新出炉题面背景 我永远喜欢砂狼白子! ----MyShiroko 白子最近有点烦恼,因为她敏锐的嗅觉闻到了星野前辈身上有老师的味道。(详见《一日一星野》) 在多次询问星野无果的情况下,她打算直接去夏莱找老师问个清楚。 不过最近情人节快到了,白子决定拿着一些礼物,所以她…...

白子的情人节礼物 题解

咕咕点击查看代码 #include<bits/stdc++.h> #define int long long #define Blue_Archive return 0 #define con putchar( ) #define ent putchar(\n) using namespace std; constexpr int N = 5e5 + 7; constexpr int M = 8e5 + 7; constexpr int INF = 1e18;int n; in…...

Ubuntu上进行Zookeeper集群部署

Ubuntu系统上Zookeeper集群部署安装目录1.zookeeper下载2.zookeeper安装与使用3.zookeeper启动4.zookeeper是什么?为什么要用它?为什么不用Hbase自带的? 1.zookeeper下载 版本无特别要求,一般最新稳定版即可。 这里给出3.8.4的下载链接。(点击即可直接下载) zookeeper官网…...

The Landscape of Agentic Reinforcement Learning综述 - jack

The Landscape of Agentic Reinforcement__Learning for LLMs.pdf https://medium.com/data-science-in-your-pocket/the-landscape-of-agentic-reinforcement-learning-for-llms-a-survey-ed96182d3ed1...

A Survey of Reinforcement Learning for Large Reasoning Models - jack

https://arxiv.org/abs/2509.08827 https://huggingface.co/papers/2509.08827...

r-nacos支持mcp,内置mcp server支持让注册到r-nacos的普通http接口通过r-nacos直接转化成mcp服务对外提供服务。

r-nacos支持mcp,内置mcp server与接口转发;支持让注册到r-nacos的普通http接口通过r-nacos直接转化成mcp服务对外提供服务。r-nacos支持mcp,内置mcp server与接口转发;支持让注册到r-nacos的普通http接口通过r-nacos直接转化成mcp服务对外提供服务。 适用场景 如果你有一个…...

MacOS下微信小程序抓包教程

前言 换mac了,折腾一天抓包,终于成功抓上了。 BurpSuite下载: https://www.52pojie.cn/thread-2005151-1-1.html proifier下载:https://www.proxifier.com/ proifier注册机:https://github.com/y9nhjy/Proxifier-Keygen 一、安装proifier 先正常安装proifier本体,打开注册…...

nvm – nodejs版本管理工具

下载 Releases coreybutler/nvm-windows nvm-setup.exe nvm list available #查看可安装版本 如果报错Could not retrieve https://nodejs.org/dist/index.json: Get "https://nodejs.org/dist/index.json": dial tcp xxx.2x.xx.xxx:xxx: i/o timeoutnvm proxy http…...