HarmonyOS元服务开发实战—端云一体化开发
还记得我第一次接触arkui还是在22年的9月份,当时arkui还在一个比较初试的阶段。时隔一年再见方舟框架,它已经发生了令人瞩目的变化,不得不说华为方舟框架在更新迭代的速度已经遥遥领先。新的功能和性能优化让这个框架更加强大和灵活,为开发者提供了更多的工具和可能性。让我们一起探索这些激动人心的变化,看看它如何重新定义了移动应用开发的标准。
本文我将从元服务、ArkTS语言以及DevEco Studio开发工具的端云一体化开发和低代码开发等方面来详细撰写本文带大家实战体验学习!
一.再识 DevEco Studio开发工具
下载地址:HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者
在过去的一年里,DevEco Studio经历了一系列的升级和改进。当我再了解它时,我发现DevEco Studio更新了俩个十分惊艳的功能——端云一体化开发和低代码开发功能。
1.1 HarmonyOS低代码开发
HarmonyOS低代码,有丰富的UI界面编辑功能,例如基于图形化的自由拖拽、数据的参数化配置等,通过可视化界面开发方式快速构建布局,可有效降低用户的时间成本和提升用户构建UI界面的效率。(注:DevEco Studio V2.2 Beta1及更高版本中支持)我们来一起体验一下:
1.没有安装DevEco Studio的用户,需要去官网安装一下DevEco Studio。
2.创建一个新的项目如下:

3.启用超级视觉(低代码开发)如下,名称需要英文即可创建项目,我这里用了我的CSDN(一见已难忘)名作为演示。

4.等待项目成功创建,下载安装必要依赖,成功创建项目如下:

我们观察上部的index.ets,他的代码现在是这样的:
@Entry
@Component
struct Index {@State message: string = '这里是一见已难忘低代码'/*** In low-code mode, do not add anything to the build function, as it will be* overwritten by the content generated by the .visual file in the build phase.*/build() {}
}
5.然后我们对其继续一个可视化的拖拽组件:很容易就完成了一个简单的页面。

6.点击生成我们这个页面的代码:

7.然后我们就得到了这个页面的样式代码了,是不是很简单快捷。
@Entry
@Component
struct Index {@State message: string = '这里是一见已难忘低代码'build() {Column() {Image("")Column() {Button("这是一个按钮").width("180vp").height("80vp").offset({ x: "4.35vp", y: "438.04vp" }).opacity(0.92).enabled(true)Text(`${this.message}`).width("300vp").height("60vp").offset({ x: "-6.39vp", y: "252.76vp" }).textAlign(TextAlign.Center).fontSize("25fp").fontWeight(FontWeight.Bold)DatePicker().width("200vp").height("200vp").offset({ x: "10.1vp", y: "-14.97vp" })} .width("100%").height("100%").offset({ x: "0vp", y: "11.95vp" }).justifyContent(FlexAlign.Center)} .width("100%").height("100%")}
}
1.2 HarmonyOS端云一体化开发
端云一体化开发是DevEco Studio的一个新特性,它允许开发者在本地和云端之间无缝地开发和调试应用程序。通过端云一体化开发,开发者可以更加高效地使用云计算资源,同时也可以在本地快速测试和调试代码。让我们一起体验一下端云一体化开发的魅力。
端云一体化开发基本流程如下:
创建云函数->调试云函数->云函数与应用程序的通信
1.创建云函数:在DevEco Studio中,开发者可以轻松地创建和管理云函数。云函数是一段运行在云端的代码,它可以与应用程序进行通信,执行一些需要在云端完成的任务。通过创建云函数,开发者可以利用云计算的强大能力,同时也可以在本地快速测试和调试代码。
2.调试云函数:在DevEco Studio中,开发者可以使用调试器来调试云函数。调试器允许开发者在本地模拟云函数的运行环境,并在代码中加入断点来进行调试。这使得开发者可以更加轻松地发现和解决问题,提高了开发效率。
3.云函数与应用程序的通信:在端云一体化开发中,云函数与应用程序之间的通信是非常重要的。DevEco Studio提供了一些工具来帮助开发者实现这种通信。例如,开发者可以使用HTTP或WebSocket协议来与云函数进行通信,也可以使用华为提供的云服务SDK来进行更高级的通信操作。这些工具使得开发者可以更加轻松地实现云函数与应用程序之间的交互,提高了开发效率。
端云一体化开发相比大家在学习生涯中都有听说,下面就是 HarmonyOS端云一体化开发相比传统开发的优势,大家对比观看就可以发现其优势巨大。集成端云一体化组件后,进行简单配置即可向应用用户提供登录、支付等多种功能。

下面我们就来一起体验一下端云一体化开发吧。
1.我们到DevEco Studio 创建一个新的工程,点击Template Market ,里面有很多的云端模板,我们下载一个到本地环境里使用。

2.填写配置工程的基本信息如下:

3.我们点击下一步,但是由于我们是第一次接触,我们必然是没有对应的云端的对应配置内容。我们需要到官网注册配置。
官网地址:AppGallery Connect (huawei.com)

4.创建项目名称为:Harmony-myapplication(这是我的案例名称,按照华为包命名规范自行起名即可)。
配置数据处理位置等相关配置好之后,点击开通即可。

5.创建应用
填写对应的参数要求,并且添加到刚刚创建的项目中去。

完成上面该有的配置之后,我们再返回到 DevEco Studio,就可以看到我们刚刚创建的。

点击finsh之后我们创建项目,耐心等待配置和自动下载所需资源包即可。
6.我们的设置SDK也是无需手动配置的,我们的云端一体化创建会帮我们自动的创建好所需的文件和配置,为我们节省了大量的步骤,这里要给我们的系统点一个赞。

7.我们现在在previewer里就可以看到我们最新的代码样式了。如下图所示:

1.2.1 登录组件集成使用
集成端云一体化组件后,只需进行简单配置即可向应用用户提供登录、支付等众多功能。这是我们的端云一体化开发模式的一大特点:
1.首先要保证我们项目里的oh-package.json5里有登录的依赖:
"@ohos/agconnect-auth-component": "^1.0.5"

2.引入组件方法(在页面顶部引入)
import {Login, AuthMode} from "@ohos/agconnect-auth-component";
代码如下:
import Logger from '@ohos.hilog';
import { GoodsList, SearchContainer } from '../../components';
import { GoodModel } from '../../model';
import { Request, RequestType, Triggers } from '../../api';
import { domain, searchText, Constants } from '../../constants';
import {Login, AuthMode} from "@ohos/agconnect-auth-component";
const TAG = new String($r('app.string.Home')).toString();@Component
export struct Home {@State recommendHint: string = searchText;@State searchInput: string = '';@Link token: string;@Link @Watch("onSearchChanged") isSearching: boolean;@State searchResult: Array<GoodModel> = [];private controller: SearchController = new SearchController();onSearchChanged() {Logger.info(domain, TAG, "search state changed " + this.isSearching);}async getSearchResult(keyword) {let params = {"keyword": keyword};let res = await Request.invokeWithToken(Triggers.Commodity, this.token, RequestType.Search, params);//展示搜索列表this.isSearching = true;this.searchResult = res;}build() {Column() {Login({modes: [AuthMode.PASSWORD, AuthMode.PHONE_VERIFY_CODE, AuthMode.MAIL_VERIFY_CODE],onSuccess: (user) => {AlertDialog.show({title: 'authInfo',message: JSON.stringify(user)})}}){Text('Login').decoration({ type: TextDecorationType.Underline });}}.backgroundColor($r('app.color.page_background'))}
}
换成按钮可能会好一点:
Button('Login').fontColor(Color.White);
渲染页面如下:

集成组件代码另附如下:
Column() {Login({modes: [AuthMode.PASSWORD, AuthMode.PHONE_VERIFY_CODE, AuthMode.MAIL_VERIFY_CODE],onSuccess: (user) => {AlertDialog.show({title: 'authInfo',message: JSON.stringify(user)})}}){Text('Login').decoration({ type: TextDecorationType.Underline });}
}
1.2.2 登录组件效果展示
我们在完成上文几处简单的代码配置调用后,就完成了我们的登录组件的撰写,效果还是非常不错的,效果如下:





只有我们实际的操作下来才能感受到他的便利,虽然现在的组件还比较少,但是随着我们框架遥遥领先的迭代速度,我相信在不就的将来,组件库会越来越丰富,到了那个时候鸿蒙开发者的开发应用效率会大幅度的提高。
2.1 探索ArkTS语言的新特性
ArkTS语言也得到了许多更新和改进,它的变化可以说是改头换面的更新,还记得一年前我初始ets(之前ArkTS叫ets)还十分的笨重,很多地方都不完善,相比其他语言(TS,JS)相比会出现很多意想不到的bug,让人摸不着头脑。但是经过一年的迭代更新,其功能现在已经十分强大。让开发者能够更高效地编写和开发应用程序。
比如说:
- 类型推导和类型检查:ArkTS语言现在支持更加智能的类型推导和类型检查。开发者可以更加轻松地编写类型安全的代码,而无需显式地指定每个变量的类型。此外,ArkTS还提供了更加严格的类型检查,以确保开发者在编写代码时遵循正确的类型规则。
- 异步编程:ArkTS语言现在支持更加灵活的异步编程模型。开发者可以使用async/await语法来编写异步代码,使代码更加简洁和易于理解。此外,ArkTS还提供了一些新的异步函数和操作符,使开发者能够更轻松地处理异步任务。
- 模块化编程:ArkTS语言现在支持更加模块化的编程模型。开发者可以将代码划分为多个模块,每个模块都具有独立的作用域和命名空间。这使得代码更加清晰和易于维护,同时也方便了开发者之间的协作。
在使用ArkTS语言开发应用时,状态管理是一个重要的概念。状态管理是指管理应用中的各种状态,包括组件状态、全局状态等。状态管理可以帮助开发者更好地组织和管理应用中的数据,使得应用更加稳定和高效。
ArkTS提供了多维度的状态管理机制,可以在ArkUI开发框架中使用。和UI相关联的数据,不仅可以在组件内使用,还可以在不同组件层级间传递,比如父子组件之间、爷孙组件之间,也可以是应用全局范围内的传递。
2.1.2 ArkTS开发Demo实战:在线状态切换
1.引入组件:
const TAG = new String($r('app.string.Home')).toString();
2.这是一个装饰器,用于标记这个结构(struct)作为一个ArkTS组件。@Link 装饰器用于定义组件的链接属性。在这里,token 是一个字符串类型的链接属性是从外部传入的令牌值。每次点击就会切换boolean的值。
import Logger from '@ohos.hilog';
import { GoodsList, SearchContainer } from '../../components';
import { GoodModel } from '../../model';
import { Request, RequestType, Triggers } from '../../api';
import { domain, searchText, Constants } from '../../constants';
import {Login, AuthMode} from "@ohos/agconnect-auth-component";
const TAG = new String($r('app.string.Home')).toString();@Component
export struct Home {@State isSearching: boolean = false;@Link token: string;build() {Column() {Button('一见已难忘:点击切换状态').fontColor(Color.White).onClick(() => {this.isSearching = !this.isSearching;});Text(`现在的状态: ${this.isSearching ? '上线' : '下线'}`).fontSize(18).margin(20);// Text(`Token: ${this.token || 'N/A'}`)// .fontSize(18)// .margin(20);}.backgroundColor($r('app.color.page_background'))}
}
onClick的作用是切换 isSearching 属性。
效果展示:

点击一见已难忘:点击切换状态 按钮在线状态转换,效果如下:

2.1.3 ArkTS开发Demo实战:粉丝计数器实现
粉丝计数器实现的实现非常简单,我们需要先引入依赖:
const TAG = new String($r('app.string.Home')).toString();
设定变量:
@State clickCount: number = 0;@Link isSearching: boolean;@Link token: string;
具体实现代码如下:
import Logger from '@ohos.hilog';
import { GoodsList, SearchContainer } from '../../components';
import { GoodModel } from '../../model';
import { Request, RequestType, Triggers } from '../../api';
import { domain, searchText, Constants } from '../../constants';
import {Login, AuthMode} from "@ohos/agconnect-auth-component";
const TAG = new String($r('app.string.Home')).toString();@Component
export struct Home {@State clickCount: number = 0;@Link isSearching: boolean;@Link token: string;build() {Column() {Text(`一见已难忘计数器Demo`).fontSize(18).margin(20);Button('增加一个粉丝').fontColor(Color.White).onClick(() => {this.clickCount++;});Button('减少一个粉丝').fontColor(Color.White).onClick(() => {this.clickCount--;});Text(`目前的粉丝量: ${this.clickCount}`).fontSize(18).margin(20);}.backgroundColor($r('app.color.page_background'))}
}
上述代码解释:
@State clickCount: number = 0;: 这是一个带有状态的属性,表示点击计数器的值,初始值为0。@Link isSearching: boolean;: 这是一个链接属性,用于跟踪用户是否正在进行搜索操作,它的类型为布尔值。@Link token: string;: 这是另一个链接属性,用于存储某种令牌或身份验证凭据,它的类型为字符串。build() {...}: 这是一个构建方法,用于创建用户界面元素。它包括一个Column,其中包含一些文本标签和按钮,用于增加或减少点击计数器的值,并显示当前计数器的值。Text(一见已难忘计数器Demo): 这是一个文本元素,显示一个标题。Button('增加一个粉丝')和Button('减少一个粉丝'): 这是两个按钮元素,分别用于增加和减少点击计数器的值。这些按钮具有点击事件处理程序,点击按钮时会更新clickCount属性的值。Text(目前的粉丝量: ${this.clickCount}): 这是另一个文本元素,用于显示当前点击计数器的值。
效果展示:

我们点击增加一个粉丝10次:

我们点击增加一个减少粉丝5次:

2.1.4 ArkTS开发Demo实战:待办事项列表
实例代码如下:
主页面:
import { ToItem } from './ToItem'
@Entry
@Component
struct Index {totalTasks: Array<string> = ["CSDN写文章","完成今日开发任务","撰写工作日报","学习ArkTs","放松休息"]build() {Row() {Column() {Text('一见已难忘的待办').fontSize(28).fontWeight(FontWeight.Bold).margin({top:30,bottom: 20}).width("80%")ForEach(this.totalTasks, (item) => {ToItem({content: item})})}.height("100%").width("100%").backgroundColor("#efefef")}.justifyContent(FlexAlign.End)}
}
上述代码解释:
totalTasks: Array<string> = [...]: 这是一个名为totalTasks的数组,包含了一组字符串,每个字符串代表一个待办事项的文本内容。build() {...}: 这是一个构建方法,用于创建主页面的用户界面元素。它包括一个Row,其中包含一个Column,在Column中,首先有一个文本标题(“一见已难忘的待办”),然后使用ForEach循环迭代totalTasks数组,并为每个待办事项创建一个ToItem组件,并传递相应的内容。Text('一见已难忘的待办'): 这是一个文本元素,显示在页面的顶部,可能是一个标题。ForEach(this.totalTasks, (item) => { ToItem({content: item}) }): 这个循环迭代totalTasks数组中的每个元素,对于每个元素,它创建了一个ToItem组件,并将待办事项的内容传递给组件。
这段代码定义了一个主页面(Index 组件),该页面包含一个标题和一组待办事项,每个待办事项都由 ToItem 组件表示。
ToItem页面:
@Component
export struct ToItem{private content:string;@State isComplete: boolean = false;@Builder labelIcon(icon) {Image(icon).width(20)}build(){Row(){if(this.isComplete){// this.labelIcon($r('app.media.radio_on'))}else {// this.labelIcon($r('app.media.radio_off'))}Text(this.content).fontSize(20).margin({left:15}).opacity(this.isComplete ? 0.4 : 1).decoration({type: this.isComplete ? TextDecorationType.Overline : TextDecorationType.None})}.backgroundColor("#fff").borderRadius(24).padding(25).margin(10).width("93%").onClick(() => {this.isComplete = !this.isComplete})}
}
上述代码解释:
private content: string;: 这是一个私有属性,用于存储待办事项的文本内容。@State isComplete: boolean = false;: 这是一个带有状态的属性,表示待办事项是否已完成。初始值为false,但可以通过用户交互改变。@Builder labelIcon(icon) {...}: 这是一个构建器方法,根据传入的icon参数构建一个图像,并应用一些属性,设置图像的宽度。build() {...}: 这是一个构建方法,用于创建待办事项的用户界面元素。它包括一个Row,其中包含一个图标(具体图标取决于isComplete的值)和文本内容。这个方法还设置了一些样式属性,例如背景颜色、圆角、边距、宽度,并添加了点击事件处理程序,以在用户单击时切换isComplete的值。
这段代码定义了一个用户界面组件,用于显示待办事项的文本和一个可点击的图标,用户可以单击以标记待办事项是否已完成。
效果展示:

点击事件后效果如下:(点击完成的事件置灰表示事件已完成)

3.1 深度体验元服务轻量化、信息外显
3.1.1什么是HarmonyOS元服务?
首先,让我们明确一下HarmonyOS元服务的概念。元服务是一种基于HarmonyOS API的全新服务提供方式,它以鸿蒙万能卡片等多种呈现形态,向用户提供更轻量化的服务。这一概念的核心在于将服务提供的方式变得更加灵活和适应性更强,同时为开发者和用户提供了更好的体验。
3.1.2 Hello World 入门案例
1.在创建之前,我们需要保证自己的应用里有元服务的应用,如没有需要自己进行创建。

2.创建一个元服务项目,如下所示:后续的页面选择arkts,继续创建项目。

3.进入项目如下图所示。

到这里我们需要安装真机,具体步骤较为简单,只需要下载安装即可,可以自行查看网络教程。配置好如下图:

调试运行:菜单选择“File > Project Structure”,选择“Signing Configs”,勾选“Automatically generate signatue”。如果未登录,先点击“Sign In”进行登录。

基本的配置完毕之后,我们点击右上的运行按钮,运行结果如下图:

3.1.3 元服务实战:在线状态切换
在线状态切换代码如下:
@Entry
@Component
struct Index {@State message: string = 'Hello World'@State isSearching: boolean = false;build() {Row() {Column() {Button('一见已难忘:点击切换状态').fontColor(Color.White).onClick(() => {this.isSearching = !this.isSearching;});Text(`现在的状态: ${this.isSearching ? '上线' : '下线'}`).fontSize(18).margin(20);}.width('100%')}.height('100%')}
}
运行到真机如下:

点击状态切换:

3.1.4 元服务实战:粉丝计数器实现
元服务实战:粉丝计数器实现代码实现如下:
@Entry
@Component
struct Index {@State message: string = 'Hello World'@State isSearching: boolean = false;@State clickCount: number = 0;build() {Row() {Column() {Text(`一见已难忘计数器Demo`).fontSize(18).margin(20);Button('增加一个粉丝').fontColor(Color.White).onClick(() => {this.clickCount++;});Button('减少一个粉丝').fontColor(Color.White).onClick(() => {this.clickCount--;});Text(`目前的粉丝量: ${this.clickCount}`).fontSize(18).margin(20);}.width('100%')}.height('100%')}
}
运行到真机如下:
初始粉丝数为0,点击6次增加粉丝数效果如下:

点击3次减少粉丝数效果如下:

3.1.5 元服务实战:待办事项列表
元服务实战待办事项列表代码如下:
import { ToItem } from './ToItem'
@Entry
@Component
struct Index {totalTasks: Array<string> = ["CSDN写文章","完成今日开发任务","撰写工作日报","学习ArkTs","放松休息"]build() {Row() {Column() {Text('一见已难忘的待办').fontSize(28).fontWeight(FontWeight.Bold).margin({top:30,bottom: 20}).width("80%")ForEach(this.totalTasks, (item) => {ToItem({content: item})})}.height("100%").width("100%").backgroundColor("#efefef")}.justifyContent(FlexAlign.End)}
}
ToItem实例代码如下:
@Component
export struct ToItem{private content:string;@State isComplete: boolean = false;@Builder labelIcon(icon) {Image(icon).width(20)}build(){Row(){if(this.isComplete){// this.labelIcon($r('app.media.radio_on'))}else {// this.labelIcon($r('app.media.radio_off'))}Text(this.content).fontSize(20).margin({left:15}).opacity(this.isComplete ? 0.4 : 1).decoration({type: this.isComplete ? TextDecorationType.Overline : TextDecorationType.None})}.backgroundColor("#fff").borderRadius(24).padding(25).margin(10).width("93%").onClick(() => {this.isComplete = !this.isComplete})}
}
运行到真机如下:

点击效果如下:

4.1 总结
我是在2021年10月份第一次接触到ArkUI,时隔一年,感触颇深,本文侧重的撰写了元服务,ArkTS语言,DevEco Studio开发工具等在这一年中的巨大更新和迭代的功能深度体验。
- 元服务:这是HarmonyOS提供的一种新型服务模式,它以鸿蒙万能卡片等多种形态呈现,更加轻量化,便于向用户提供服务。
- ArkTS语言:华为自主研发的一种开发语言,基于TypeScript并与之匹配的ArkUI框架,扩展了声明式UI和状态管理等功能,使开发者能够更简洁、更自然地开发跨端应用。
- DevEco Studio开发工具:该工具支持端云一体化开发和低代码开发。在创建工程时选择云开发模板,可以在DevEco Studio内同时完成HarmonyOS应用/服务的端侧与云侧开发,实现端云一体化协同开发。此外,它还支持低代码开发,具有丰富的UI界面编辑功能,如基于图形化的自由拖拽和数据参数化配置等,遵循HarmonyOS JS开发规范,通过可视化界面开发方式快速构建布局,有效降低用户的时间成本并提升构建UI界面的效率。
在本文,我们深入探讨了HarmonyOS元服务、ArkTS语言和DevEco Studio开发工具。通过这些工具的应用,华为为开发者提供了更便捷、高效的开发体验,为用户提供了更丰富、高质量的应用程序。
HarmonyOS元服务不仅是华为技术的创新,也是整个科技行业的一大进步。它代表了未来智能生活的可能性,使得设备之间的互联变得更加便捷和灵活。这一技术也鼓励了更多的开发者加入到鸿蒙生态系统中,共同构建一个繁荣的生态系统。
华为技术有着遥遥领先的迭代速度和庞大的用户量,我相信HarmonyOS将会发展的越来越快,让我们一起加入,成为一名HarmonyOS开发者吧。无论是开发者还是普通用户,都将受益于这一创新浪潮,走向更加智能化的明天。让我们一起期待并迎接这个美好的未来!
相关文章:
HarmonyOS元服务开发实战—端云一体化开发
还记得我第一次接触arkui还是在22年的9月份,当时arkui还在一个比较初试的阶段。时隔一年再见方舟框架,它已经发生了令人瞩目的变化,不得不说华为方舟框架在更新迭代的速度已经遥遥领先。新的功能和性能优化让这个框架更加强大和灵活ÿ…...
【搭环境】装Python3.8 open3d
先装Python3.8 方法一试了找不到Python3.8的库,所以用方法二装上了。 Python3加入环境变量 更改Python默认指向 open3d需要Python3.6以上,最好用Ubuntu18版本,我用的16版本。。...
【C语言】深入解开指针(四)
🌈write in front :🔍个人主页 : 啊森要自信的主页 ✏️真正相信奇迹的家伙,本身和奇迹一样了不起啊! 欢迎大家关注🔍点赞👍收藏⭐️留言📝>希望看完我的文章对你有小小的帮助&am…...
AMEYA360:瑞萨面向高端工业传感器系统推出高精度模拟前端的32位RX MCU
全球半导体解决方案供应商瑞萨电子(TSE:6723)宣布面向高端工业传感器系统推出一款全新RX产品——RX23E-B,扩展32位微控制器(MCU)产品线。新产品作为广受欢迎的RX产品家族的一员,具有高精度模拟前…...
切面Aspect + 策略模式实现待办提醒功能
1.背景 产品需要实现一个待办提醒功能,就是核心业务发生变更即提醒业务员去处理相关业务。譬如:订单上传了支付凭证,那么就会提醒相关业务员去待办列表操办。 2.表设计 其实表设计主要是两张表sys_todo、sys_todo_detail 一张是待办核心表…...
SAP 调取http的x-www-form-urlencoded形式的接口
一、了解下x-www-form-urlencoded形式对于SAP来说有啥区别 简单来说, 1.raw格式就是标准的json格式:{“Name”:“John Smith”,“Age”: 23} 2.x-www格式是要转化一下的:NameJohnSmith&Age23 字段与字段相互连接要用 & 符…...
thingsboard3.6的mailConfigTemplateController错误
1、bug内容 使用3.6版本的tb代码进行打包生成boot的jar包,在启动的时候会报错mailConfigTemplateController bean初始化找不到文件路径。 Error creating bean with name mailConfigTemplateController defined in URL [jar:file:/D:/yuxinwei/AE/thingsboard/thingsboard-3…...
Go语言中获取IP
简介 在net包中提供了获取所有网卡的ip,一般不会用127.0.0.1,::1这样的本地回环地址,可以过滤掉,如果想要获取当前真正在使用的地址,得通过net.Dail去连一下才知道 获取ip地址 func main() {fmt.Println(getIpv4())fmt.Println…...
【Computer Vision Foundation】全球计算机视觉基金会论文网
计算机视觉基金会(Computer Vision Foundation,简称CVF)是一个致力于推动计算机视觉领域研究和发展的组织。以下是关于计算机视觉基金会的一些基本信息: 成立目的: CVF成立的目的是促进计算机视觉领域的学术研究、技术…...
计网(复习自用)
计算机网络 1.概述 1.1概念 含义 计算机网络:是一个将分散的。具有独立功能的计算机系统,通过通信设备和线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。 简单点说,计算机网络是互联的,自治的计算机集…...
安徽省广德市选择云轴科技ZStack Cloud云平台建设县级智慧城市
信创是数字中国建设的重要组成部分,也是数字经济发展的关键推动力量。作为云基础软件企业,云轴科技ZStack产品矩阵全面覆盖数据中心云基础设施,ZStack信创云首批通过可信云《一云多芯IaaS平台能力要求》先进级,是其中唯一兼容四种…...
【计算思维】蓝桥杯STEMA 科技素养考试真题及解析 6
1、明明买了一个扫地机器人,可以通过以下指令控制机器人运动: F:向前走 10 个单位长度 L:原地左转 90 度 R:原地右转 90 度 机器人初始方向向右,需要按顺序执行以下那条指令,才能打扫完下图中的道路 A、F-L-F-R-F-F-R-F-L-F B、F-R-F-L-F-F…...
nuxt3项目修改端口号
nuxt的默认端口号是3000 一、修改开发环境端口号 方式一:使用环境变量配置,设置(PORT 或 NUXT_PORT) # .env PORT3001 #http://localhost:3001/ NITRO_PORT3001 #http://localhost:3001/ 方式二:nuxt.config.ts里配置…...
c语言中使用openssl对rsa私钥解密
单次加密数据的最大长度(block_len),由RSA秘钥模长RSA_size()和填充模式有关 填充模式:RSA_PKCS1_PADDING, block_lenRSA_size() - 11填充模式:RSA_PKCS1_OAEP_PADDING,block_lenRSA_size() - 4…...
mysql中数据是如何被用B+树查询到的
innoDB是按照页为单位读写的 那页中有很多行数据,是怎么执行查询的呢,首先我们肯定,是以单向列表形式存储的,提高了增删的效率,但是查询效率低。所以实际上对页中的行数据进行了优化,能以二分的方式进行查…...
Redisson 分布式锁的最佳实践
Redisson 分布式锁的最佳实践 第一、添加依赖第二、添加redisson配置类第三、添加测试类测试结果扩展知识redisson锁中lock方法和tryLock方法有什么区别锁续约 注意事项 引言 在现代分布式系统中,处理并发问题是至关重要的。分布式锁是解决这类问题的关键工具之一。…...
ArkTS声明式开发范式
装饰器 用来装饰类、结构体、方法以及变量,赋予其特殊的含义,如上述示例中 Entry 、 Component 、 State 都是装饰器。 Component 表示这是个自定义组件; Entry 则表示这是个入口组件; State 表示组件中的状态变量,…...
史诗级云故障敲响警钟,应用保障不能没有“连续键”!
近日,知名云服务商出现一次史诗级的云故障:全球所有区域/所有服务同时异常,故障持续长达3小时之多,云上众多应用受到极大影响。 如今,在一个充满不确定性和复杂性的数字化时代,哪怕是顶级云服务商亦不能避…...
SSH连接远程服务器报错:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED 解决方法
一.错误描述 报错信息里提示了路径信息/root/.ssh/known_hosts:20 二.解决方案 方法一 输入以下指令: ssh-keygen -R XXX(需要连接远程服务器的ip) 按照我的例子ip:10.165.7.136,会返回以下信息: 重新尝试连接: 输…...
数据库——查询连续的月份
一、GP或PGSQL with recursive t(n) as (select date(2023-01-01) union all select n1 from t where n < now()) select to_char(n, yyyy-mm) as ny from t group by ny order by ny 二、Hive select add_months(FROM_UNIXTIME(unix_timestamp(SUBSTR(start_date, 1, 7…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
