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

【Harmony】端云一体化(云函数)

一、云函数的概述

1、什么是云函数

  • 官方解释

云函数是一项Serverless计算服务,提供FaaS(Function as a Service)能力,一方面云函数将开发测试的对象聚焦到函数级别,可以帮助您大幅简化应用开发与运维相关的事务,另一方面您可以通过在应用中集成云函数SDK,便捷操作云数据库、云存储等,提升业务功能构建的便利性。云函数可以根据函数的实际流量对函数进行弹性伸缩,您无需对服务器资源进行管理,解决了开发者运维管理的难题。

  • 通俗理解

云函数是一种无需管理服务器的计算服务,可以让你只专注于编写函数代码,不需要处理服务器的复杂管理。通过云函数,你可以轻松连接云数据库和云存储,方便地构建应用功能。而且,它会根据你应用的访问量自动调整资源,不用你手动管理服务器资源,让你更专注于开发应用本身。

补充:什么是Serverless?

Serverless 是一种无需管理服务器和运行环境的计算服务。你可以把它想象成一种按需的云计算资源,就像打开水龙头就有水一样,你只需要调用API,云服务就会为你分配所需的计算资源,而无需提前准备服务器或部署应用。Serverless服务实现了计算资源的按需分配,简化了应用的部署和维护,使得开发者可以更加专注于业务逻辑的开发。

2、云函数作用

  • 简化开发与运维

    云函数提供了高效可靠的函数开发与运行框架,替开发者完全解决传统应用开发与运维中的诸多复杂事务(如服务器配置与管理、代码部署、负载均衡、弹性伸缩、高可用保证等等),您只需聚焦业务逻辑、开发并上传函数代码,即可构建高可用、可伸缩的Serverless应用。

  • 扩展周边服务

    云函数作为Serverless的核心与枢纽,支持方便连接和扩展周边云服务能力,您可以像拼搭积木一样自由便捷地组织各项服务来实现业务逻辑。

3、云函数工作原理

在这里插入图片描述

该图片展示了鸿蒙端云一体化的工作原理。从左到右,上到下,我们可以看到以下主要组件和它们之间的关系:
  1. 开发云函数:这表示开发者可以在本地或云端环境中编写和部署函数。这些函数可以通过SDK(软件开发工具包)被集成到各种应用程序中,如移动端、桌面端等。

  2. 函数仓库:这是一个存储和管理函数的地方,开发者可以将他们编写的函数上传到这里。

  3. 触发器类型:当特定事件发生时,会触发函数的执行。例如,可以通过HTTP请求、消息队列、定时器等方式触发函数。

  4. 云函数:这是运行在云端的服务,可以自动伸缩以应对高并发请求。开发者发布的函数会被部署到云函数上,供全球用户访问。

  5. 函数运行平台:这是一个为函数提供运行环境的平台,包括认证服务、云数据库和HTTP网关等功能。

  6. 函数A、B、C:这些都是开发者发布的具体函数,每个函数都可以有自己的功能和用途。

  7. HTTP网关:这是一个对外接口,允许外部客户端通过HTTP协议调用函数。

整个流程如下:开发者首先在本地或云端环境中开发函数,然后将其上传到函数仓库。之后,这些函数可以通过不同的触发器类型被触发,并在云函数上执行。执行结果可以通过函数运行平台的API返回给调用者。
鸿蒙端云一体化的这种架构使得开发者可以更专注于函数的开发,而无需关心底层的基础设施。同时,它也提供了高度的可扩展性和灵活性,使应用能够轻松应对各种业务需求的变化。

二、云函数开发准备

1、创建项目(如果已创建直接进入第二步)

1)登录,点击“我的项目”。

AGC平台地址
在这里插入图片描述

如果大家第一次点击我的项目,会出现以下同意协议,后续出现类似的,同意或者确定。

2)在项目页面中点击“添加项目”。

3)在“创建项目”页面中输入项目名称后 ,点击“创建并继续”。

说明:

点击“创建并继续”后,如果系统提示“您所在团队创建的项目数已经达到上限,请清理不需要的项目”,请进入“我的项目”,点击需要删除的项目卡片,点击“项目设置”页面下方的“删除项目”清理多余的项目。

2、添加应用(已经添加直接进入第三步)

如果已经创建了项目,可以使用已经创建的项目,如果不想使用已经创建的项目,则可以自己重新按照上一个小节创建AGC项目

  1. 若项目中没有应用,在“项目设置”页面中点击“添加应用”。

    若项目中已有应用,展开顶部应用列表框,点击“添加应用”。

    添加应用页面设置参数

    第一步:选择APP(HarmonyOS)

在这里插入图片描述

第2步:选择APPID进行参数设置,点击下一步

在这里插入图片描述

下一步选择,项目,这里是默认的就好,因为我是通过项目来创建应用的,直接点击确认

在这里插入图片描述

说明:

如果提示“包名已存在,请更换包名”,您需要检查下您是否已经创建相同包名的应用,如果有,请勿重复创建。如果您未创建,请联系华为技术支持人员进行处理。

3、开通服务

  1. 登录AppGallery Connect,点击“我的项目”。
  2. 在项目列表中点击需要开通云函数的项目。
    3. 在左侧导航栏选择“云开发(Serverless)> 云函数”,进入云函数页面,点击“立即开通”。

在这里插入图片描述

三、开发云函数(服务端编写+客户端调用)

1、案例01:简单计算案例

需求:实现用于计算两个数的值 之和的云函数

在这里插入图片描述

实现思路

1、服务器端创建云函数

2、服务器端测试云函数是否正常运行通过

3、编写客户端的代码来调用云函数

4、运行测试

实现步骤

第一步:服务器端创建云函数

新建一个函数名名为fun0901的函数名

点击创建

在这里插入图片描述

函数配置、点击下一步

在这里插入图片描述

触发器的选择,这里默认就够了

在这里插入图片描述

编辑函数代码

在这里插入图片描述

放大以后,编写代码,默认模版,我们可以在里面进行编辑,圈红的地方都不要动

在这里插入图片描述

编辑函数代码,函数的功能就是获取两个数,然后再进行相加,然后将相加的结果返回,代码编辑好了以后,缩小编辑区域,进入下一步

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

第二步:测试

完成以后,点击测试,运行函数

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

第三步:客户端调用
(1)创建项目

注意bundle name要和云侧项目的包名一致

(2)下载sdk配置文件 agconnect-services.json

将下载的json文件复制到src/main/resources/rawfile目录中

(3)配置oh-package.json5

entry\oh-package.json5

鸿蒙操作系统中的oh-package.json5文件是用于配置鸿蒙应用的元数据文件,类似于Node.js中的package.json。这个文件定义了鸿蒙应用的名称、版本、描述、主要入口文件、作者、许可证以及依赖关系等信息。json5是JSON的一个扩展,它允许在文件中使用注释和更为宽松的语法。记得点sync

  "dependencies": {"@hw-agconnect/crypto-ohos": "^1.0.10","@hw-agconnect/function-ohos": "^1.0.10","@hw-agconnect/auth-ohos": "^1.0.10","@hw-agconnect/cloudstorage-ohos": "^1.0.10","@hw-agconnect/api-ohos": "^1.0.10","@hw-agconnect/base-ohos": "^1.0.10","@hw-agconnect/core-ohos": "^1.0.10","@hw-agconnect/credential-ohos": "^1.0.10","@ohos/agconnect-auth-component": "^1.0.5","@hw-agconnect/auth-component": "^1.0.0","@hw-agconnect/cloud": "^1.0.0","@hw-agconnect/hmcore": "^1.0.0","long": "5.2.1"}
(4)加入网络权限

src/main/module.json5

 "requestPermissions": [{"name": 'ohos.permission.INTERNET'}],
(5)修改.so文件的加载顺序

entry/build-profile.json5

...
"buildOption": {//配置筛选har依赖.so资源文件的过滤规则"napiLibFilterOption": {//按照.so文件的优先级顺序,打包最高优先级的.so文件"pickFirsts": ["**/1.so"],//按照.so文件的优先级顺序,打包最低优先级的.so 文件"pickLasts": ["**/2.so"],//排除的.so文件"excludes": ["**/3.so"],//允许当.so重名冲突时,使用高优先级的.so文件覆盖低优先级的.so文件"enableOverride": true,}}
...
(6)entryAbility初始化
import { initialize } from '@hw-agconnect/hmcore';
import json from '../../resources/rawfile/agconnect-services.json'
...async onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {try {await initialize(this.context, json);console.info('hmlog-->','AGConnectSuccessed!')} catch (e) {console.error('hmlog-->','AGConnectError', JSON.stringify(e))}}
(7) 客户端调用
import cloud from '@hw-agconnect/cloud'
import { FunctionResult } from '@hw-agconnect/function-ohos'@Entry
@Component
struct Demo01 {@State a:number=0 //加数1@State b:number=0 //加数2@State c:number=0 //结果build() {Column({space:30}){Text("客户端调用云函数(案例一:简单案例)")Row({space:15}){TextInput({text:""+this.a}).width(80).onChange(val=>this.a=parseInt(val))Text("+")TextInput({text:""+this.b}).width(80).onChange(val=>this.b=parseInt(val))Text("=")Text(this.c+"")}.width("100%")Button("计算").width("60%").onClick(()=>{this.callFun()})}.width("100%").padding(30)}//点击计算按钮的的时候调用云函数async callFun(){//一般情况下肯定是需要看看输入是否为空,格式对不对//以上我们假设做过了//调用云函数//函数名//version 函数的版本 默认版本就是$latestlet res:FunctionResult=await cloud.callFunction({name:"fun0901",version:'$latest',params:{"num1":this.a,"num2":this.b}})// this.c = res.getValue()// console.log(JSON.stringify(res.getValue())) //{"result":121}this.c =  res.getValue().resultconsole.log(this.c+"<====")}
}

在这里插入图片描述

2、案例02:根据输入的年,获取这个年的生肖

在这里插入图片描述

实现思路

1、服务器端创建云函数

2、服务器端测试云函数是否正常运行通过

3、编写客户端的代码来调用云函数

4、运行测试

实现步骤

第一步:服务器端创建云函数

新建一个函数名名为fun0902的函数名,其他操作和上面案例01一致(参考上面),函数内容如下

// handler.js is a demo for handler function.
let myHandler = function(event, context, callback, logger) {let res = new context.HTTPResponse({"simple": "example"}, {"res-type": "simple example","faas-content-type": "json"}, "application/json", "200");//声明一个变量year,用于接受传递过来的参数let year;//如果body中有数据,那就是客户端调用传递过来的参数if(event.body){//获取传递过来的参数year = JSON.parse(event.body).year}else{//如果是服务端调用当前的函数,那就直接通过event.year获取year = event.year}//将year对12求余//function isNumber(input){logger.info(parseInt(input).toString())if(parseInt(input).toString()=='NaN'){return false}else{return true}}//自己封装的方法function animal(inputyear){let shengxiao ="" //这个变量用于保存具体的生效if(!isNumber(inputyear)){shengxiao="please input a number"}else{let yu=year%12switch(yu){case 0: shengxiao='猴'breakcase 1: shengxiao='鸡'breakcase 2: shengxiao='狗'breakcase 3: shengxiao='猪'breakcase 4: shengxiao='鼠'breakcase 5: shengxiao='牛'breakcase 6: shengxiao='虎'breakcase 7: shengxiao='兔'breakcase 8: shengxiao='龙'breakcase 9: shengxiao='蛇'breakcase 10: shengxiao='马'breakcase 11: shengxiao='羊'break}}return shengxiao;}//给调用者响应res.body = {result:animal(year)}// send responsecallback(res);
};module.exports.myHandler = myHandler;
客户端调用
import cloud from '@hw-agconnect/cloud'@Entry
@Component
struct Demo02 {//用于存放年@State num:number=0@State shengxiao:string = "" //用于查询生效的结果build() {Column({space:15}){Text("客户端调用云函数(案例二:复杂点的示例)")TextInput().onChange(val=>this.num=Number(val))Button("查询生效").width("100%").onClick(()=>{this.getShengXiao()})Text("生肖:"+this.shengxiao)}.width("100%").height("100%").padding(30)}async getShengXiao(){try {let rs = await cloud.callFunction({name:"fun0902",version:"$latest",params:{year:this.num}})this.shengxiao = rs.getValue().result}catch (e) {console.log("====>error:",JSON.stringify(e))}}
}

四、开发云函数(使用端云一体化的方式)

案例01:简单的计算案例

1、创建项目、选择CloudDev,然后点击下一步

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

云侧项目,找到云函数(cloudfunctions)右击,new Cloud Function在这里插入图片描述

在这里插入图片描述

创建好了的默认内容

右击函数,执行run在这里插入图片描述

dev中,将函数测试好了没有问题,后续再传到云端

在这里插入图片描述

到此云侧函数创建好了,但是还没有实现具体的功能,要实现具体的功能,写代码调试,最后再上传到 云侧就可以

在dev中书写的云侧的代码,并测试成功

let myHandler = async function (event, context, callback, logger) {logger.info(event);// do something herelet num1:number = 0let num2:number = 0//如果是客户端调用if(event.body){let _body = JSON.parse(event.body)num1 = _body.num1num2 = _body.num2}else{//如果是服务器端调用就执行这个num1 = event.num1num2 = event.num2}let sum =  num1+num2callback({code: 0,desc: "Success.",body:{result:sum}});
};export { myHandler };

在这里插入图片描述

下一步就将我们的在一体化项目中创建的云函数发布的云服务上去

在这里插入图片描述

上传到云函数成功了。

在这里插入图片描述

在这里插入图片描述

客户端,调用云函数

客户端可以使用这个端云一体化的项目(端侧)调用云函数,端侧项目没有rawfile目录,需要自己创建。另外还需配置依赖so文件加载顺序。。。。都需要再做

节约时间,我个人直接使用原来的不是端云一体化的项目进行访问了,这个功能和前面一样。

import cloud from '@hw-agconnect/cloud'
import { FunctionResult } from '@hw-agconnect/function-ohos'@Entry
@Component
struct Demo03 {@State a:number=0 //加数1@State b:number=0 //加数2@State c:number=0 //结果build() {Column({space:30}){Text("客户端调用云函数(端云一体化创建的云函数)")Row({space:15}){TextInput({text:""+this.a}).width(80).onChange(val=>{this.a=Number(val) //针对""转换为0 但是parseInt 针对空字符转成NaN})Text("+")TextInput({text:""+this.b}).width(80).onChange(val=>this.b=Number(val))Text("=")Text(this.c+"")}.width("100%")Button("计算").width("60%").onClick(()=>{this.callFun()})}.width("100%").padding(30)}//点击计算按钮的的时候调用云函数async callFun(){//一般情况下肯定是需要看看输入是否为空,格式对不对//以上我们假设做过了//调用云函数//函数名//version 函数的版本 默认版本就是$latestlet res:FunctionResult=await cloud.callFunction({name:"fun0903",version:'$latest',params:{"num1":this.a,"num2":this.b}})// this.c = res.getValue()// console.log(JSON.stringify(res.getValue())) //{"result":121}console.log("====>",JSON.stringify(res.getValue())) //注意端云一体化云函数返回的内容this.c = res.getValue().body.result}
}

案例02:输入数值获取生效案例

1、云开发本地开发云函数

let myHandler = async function (event, context, callback, logger) {/*** 根据输入的一个年份 获取生效* @param input 输入的年份*/function getZodiac(input){let mo:number = input%12let zodiac=""switch (mo){case 0:zodiac="猴"breakcase 1:zodiac="鸡"breakcase 2:zodiac="狗"breakcase 3:zodiac="猪"breakcase 4:zodiac="鼠"breakcase 5:zodiac="牛"breakcase 6:zodiac="虎"breakcase 7:zodiac="兔"breakcase 8:zodiac="龙"breakcase 9:zodiac="蛇"breakcase 10:zodiac="马"breakcase 11:zodiac="羊"breakdefault :zodiac="请输入数值"break}return zodiac}let yearif(event.body){year=JSON.parse(event.body).year}else{year=event.year}//如果year的类型是字符串类型的话 返回请输入数字if(typeof(year)=='string'){callback({result:"对不起请输入数字"});}else{//否则就正常返回生肖的内容callback({result:getZodiac(year)})}
};export { myHandler };

2、端侧调用发布到云侧的代码

import cloud from '@hw-agconnect/cloud'@Entry
@Component
struct Demo04 {//用于存放年@State num:number=0@State shengxiao:string = "" //用于查询生效的结果build() {Column({space:15}){Text("客户端调用云函数2(端云一体化上传的)")TextInput().onChange(val=>{if(Number(val).toString()=="NaN"){this.num = -1}else{this.num = Number(val)}})Button("查询生效").width("100%").onClick(()=>{this.getShengXiao()})Text("生肖:"+this.shengxiao)}.width("100%").height("100%").padding(30)}async getShengXiao(){try {let rs = await cloud.callFunction({name:"fun0904",version:"$latest",params:{year:this.num}})this.shengxiao = rs.getValue().result}catch (e) {console.log("====>error:",JSON.stringify(e))}}
}

相关文章:

【Harmony】端云一体化(云函数)

一、云函数的概述 1、什么是云函数 官方解释 云函数是一项Serverless计算服务&#xff0c;提供FaaS&#xff08;Function as a Service&#xff09;能力&#xff0c;一方面云函数将开发测试的对象聚焦到函数级别&#xff0c;可以帮助您大幅简化应用开发与运维相关的事务&…...

利用大模型和聚类算法找出 Excel 文件中重复或相似度高的数据,并使用 FastAPI 进行封装的详细方案

以下是一个利用大模型和聚类算法找出 Excel 文件中重复或相似度高的数据,并使用 FastAPI 进行封装的详细方案: 方案流程 数据读取:从 Excel 文件中读取数据。文本向量化:使用大模型将文本数据转换为向量表示。聚类分析:运用聚类算法对向量进行分组,将相似度高的数据归为…...

通过远程桌面连接wsl2中安装的ubuntu24.04

要介绍的这种方式其实跟直接用wsl来执行命令差不多&#xff0c;是在终端去操作ubuntu。WSL2 默认只提供命令行界面&#xff0c;本文安装xrdp后通过windows远程桌面连接过去。 1、更新软件包列表 sudo apt update 确保你的软件包列表是最新的&#xff0c;否则可能找不到某些包…...

对接和使用国内稳定无水印的 Suno API

随着 AI 的应用日益广泛&#xff0c;各种 AI 程序已经融入我们的日常生活。从最早的写作&#xff0c;到医疗、教育&#xff0c;如今甚至扩展到了音乐领域。 Suno 是一个专注于高质量 AI 歌曲和音乐创作的平台。用户只需输入简单的文本提示词&#xff0c;便可以按照流派风格和歌…...

LeetCode算法题(Go语言实现)_38

我将按照您提供的文档结构为您整理二叉树最近公共祖先&#xff08;LCA&#xff09;问题的解决方案&#xff1a; 一、代码实现 type TreeNode struct {Val intLeft *TreeNodeRight *TreeNode }func lowestCommonAncestor(root, p, q *TreeNode) *TreeNode {if root nil ||…...

Linux学习笔记 1

1.发展史 略...... 2.xshell的使用方法 2.1登录 ssh root公网地址 输入密码&#xff0c;用 uname -r 指令来鉴定是否登录成功。之后就可以进行命令行操作了。 alt enter 全屏、退出 设置多用户指令&#xff0c;新建用户 adduser 名字 passwd 密码 销毁用户&#xf…...

微信小程序跳4

formatMillisecondsTime: function(milliseconds, formatStr) { // 创建一个新的Date对象&#xff0c;传入毫秒值 const date new Date(milliseconds); // 获取年月日时分秒&#xff0c;并确保它们都是两位数 const year date.getFullYear(); const month (date.getMonth() …...

STM32单片机入门学习——第31节: [10-1] I2C通信协议

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难&#xff0c;但我还是想去做&#xff01; 本文写于&#xff1a;2025.04.10 STM32开发板学习——第31节: [10-1] I2C通信协议 前言开发板说明引用解答和科普一…...

OpenCV 图形API(24)图像滤波-----双边滤波函数bilateralFilter()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 应用双边滤波到图像。 该函数对输入图像应用双边滤波&#xff0c;如 http://www.dai.ed.ac.uk/CVonline/LOCAL_COPIES/MANDUCHI1/Bilateral_Fil…...

【图像处理基石】什么是影调?并用python实现一个哈苏色彩影调

影调是摄影语言的核心&#xff0c;通过控制明暗、虚实与色彩&#xff0c;可精准传达创作意图。实际选择需结合主题情感、光线条件及画面结构&#xff0c;灵活运用高调、低调或冷暖色调&#xff0c;以强化视觉表现力。 一、影调的定义 影调指画面中明暗、虚实、色彩的层次与对比…...

融智学三大定律:打开人机协同智慧大门的钥匙

...

MySQL行列转换

创建一个sc表并插入数据 方法一: select distinct uid, (select score from sc where s.uiduid and course语文)语文, (select score from sc where s.uiduid and course数学)数学, (select score from sc where s.uiduid and course英语)英语 from sc s; 方法二: select * fro…...

cookie和session哪个生成的时间早

Cookie 和 Session 的出现时间都可以追溯到 Web 开发的早期阶段&#xff0c;但它们的生成顺序在实际应用中通常是先生成 Session&#xff0c;然后通过 Cookie 来存储 Session ID。 详细解释&#xff1a; Session 的生成过程 • 用户请求服务器&#xff1a; • 用户首次访问网…...

sh脚本删除指定后缀.txt的文件,保留6个月的数据

1、linux下脚本删除指定后缀.txt和.path的文件&#xff0c;保留6个月的数据&#xff1a; 下面代码内容&#xff1a; #!/bin/bash # 指定要删除文件的路径列表 paths("/data/fail")# 获取当前系统日期6个月之前的日期 six_months_ago$(date -d "-6 months"…...

嵌入式Linux按键监控模块详解:实现设备重启与长按检测

嵌入式Linux按键监控模块详解&#xff1a;实现设备重启与长按检测 在嵌入式Linux设备开发中&#xff0c;物理按键仍然是用户与设备交互的重要方式。本文将分享一个轻量级但功能完整的按键监控模块&#xff0c;它可以精确识别按键的短按和长按事件&#xff0c;并执行对应操作如…...

[错误经验 坑]关于UDP服务器和客户端通信使用的recvfrom的输出型参数len没有被初始化导致的问题

[错误经验 坑]关于UDP服务器和客户端通信使用的recvfrom的输出型参数len没有被初始化导致的问题 水墨不写bug 文章目录 一、困惑&#xff1a;二、解答&#xff1a;&#xff08;1&#xff09;函数原型1. int sockfd2. void *buf3. size_t len4. int flags5. struct sockaddr *sr…...

KaiwuDB:面向AIoT场景的多模融合数据库,赋能企业数字化转型

引言 在万物互联的AIoT时代&#xff0c;企业面临着海量时序数据处理、多模数据融合和实时分析等挑战。KaiwuDB应运而生&#xff0c;作为一款面向AIoT场景的分布式、多模融合、支持原生AI的数据库产品&#xff0c;为企业提供了一站式数据管理解决方案。 产品概述 KaiwuDB是一…...

Web3 的云基础设施正在成型,Polkadot 2.0 用三项技术改写“上链成本”

在Web3基础设施内卷加剧的今天&#xff0c;“如何以更低成本、更大灵活性部署一条高性能应用链”正成为开发者们最关心的问题。而刚刚走出“技术慢热”误区的Polkadot&#xff0c;正在用一套名为 Polkadot 2.0 的架构升级方案&#xff0c;重新定义这一问题的解法。 这套升级最…...

Elasticsearch 学习规划

Elasticsearch 学习规划 明确学习目标与动机 场景化需求分析 - **S**&#xff1a;掌握Elasticsearch架构体系&#xff0c;熟练使用Elasticsearch 进行数据分析,Elasticsearch结合java 项目落地案例 - **M**&#xff1a;搜索和Elasticsearch相关GitHub项目 - **A**&#xff1a;每…...

OpenHarmony如何编译安装系统应用(以settings设置为例)

开发环境 1.OpenHarmony 2.DevEco Studio 3 .Full Sdk 实现步骤 1.获取设置应用源码 https://gitee.com/openharmony/applications_settings/tree/OpenHarmony-v5.0.0-Release/ 2,使用 DevEco Studio 和 Full SDK对系统应用进行签名,默认工程是未配置签名的状态,所构建…...

手撕 STL 之—— list

目录 引言 1, list_node类及其构造函数 2, list类的创建 3, list基本功能函数 3_1&#xff0c; 构造函数 3_2&#xff0c;push_back 3_3&#xff0c;push_front 3_4&#xff0c; pop_back 3_5&#xff0c;pop_front 4&#xff0c;迭代器 (重点) 4_1&#xff0c;如何设…...

Med-R1论文阅读理解

论文介绍 这篇论文介绍了一个名为 Med-R1 的新方法&#xff0c;用于提升多模态视觉语言模型&#xff08;VLM&#xff09;在医学图像理解和推理任务中的泛化能力和可解释性。下面是对整篇论文的简洁总结&#xff1a; ⸻ &#x1f9e0; 核心思想 • 当前医学 VLM 多依赖于监督…...

微服务相关

1.SpringCloud有哪些常用组件&#xff1f;分别是什么作用&#xff1f; 注册中心&#xff1a;nacos 负载均衡&#xff1a;rabbion/LoadBalancer 网关&#xff1a;gateway 服务熔断&#xff1a;sential 服务调用&#xff1a;Feign 2.服务注册发现的基本流程是怎样的&#x…...

Linux vagrant 导入Centos到virtualbox

前言 vagrant 导入centos 虚拟机 前提要求 安装 virtualbox 和vagrant<vagrant-disksize> (Linux 方式 Windows 方式) 创建一键部署centos 虚拟机 /opt/vagrant 安装目录/opt/VirtualBox 安装目录/opt/centos8/Vagrantfile &#xff08;可配置网络IP&#xff0c;内存…...

Spring Boot MongoDB 分页工具类封装 (新手指南)

Spring Boot MongoDB 分页工具类封装 (新手指南) 目录 引言&#xff1a;为何需要分页工具类&#xff1f;工具类一&#xff1a;PaginationUtils - 简化 Pageable 创建 设计目标代码实现 (PaginationUtils.java)如何使用 PaginationUtils 工具类二&#xff1a;PageResponse<…...

第七章 指针

2024-04 2023-10 A 2023-04 2022-10 2022-04 2021-10 2021-04 2020-10 2020-04...

20年AB1解码java

P8706 [蓝桥杯 2020 省 AB1] 解码 - 洛谷 详细代码如下&#xff1a; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner innew Scanner(System.in); // 接收输入的字符串char [] c in.next().toCharArray(); // 接收 还原的字符…...

《Java实战:密码加密算法实现与代码解析》

文章目录 一、需求背景二、代码逐模块解析1. 主程序入口2. 密码输入模块3. 加密处理模块4. 结果拼接模块 三、完整代码示例四、运行示例五、优化方向&#xff08;下篇预告&#xff09; 一、需求背景 实现一个4位数字密码的简单加密系统&#xff0c;规则如下&#xff1a; 输入…...

AllData数据中台升级发布 | 支持K8S数据平台2.0版本

&#x1f525;&#x1f525; AllData大数据产品是可定义数据中台&#xff0c;以数据平台为底座&#xff0c;以数据中台为桥梁&#xff0c;以机器学习平台为中层框架&#xff0c;以大模型应用为上游产品&#xff0c;提供全链路数字化解决方案。 ✨杭州奥零数据科技官网&#xf…...

Jupyter notebook使用技巧

一、打开指定文件夹 在快捷方式目标中&#xff0c;使用如下代码 anaconda3\python.exe anaconda3\cwp.py anaconda3 anaconda3\python.exe anaconda3\Scripts\jupyter-notebook-script.py --notebook-dirD:\code\python...

6.3es新特性web worker

Web Worker 是 HTML5 提供的多线程技术&#xff0c;允许在浏览器后台创建独立线程执行 JavaScript 代码&#xff0c;解决主线程因耗时任务导致的 界面卡顿 问题。 核心特性 线程隔离&#xff1a;Worker 线程无法直接操作 DOM 或访问 window 对象通信机制&#xff1a;通过 pos…...

基于 OpenHarmony 5.0 的星闪轻量型设备应用开发——Ch3 设备驱动开发

写在前面&#xff1a;本篇是系列文章《基于 OpenHarmony 5.0 的星闪轻量型设备应用开发》的第 3 章。本篇从 GPIO、PWM、I2C、UART 以及 ADC 等方面对基于 OpenHarmony 5.0 的 WS63 设备驱动开发进行了详细的介绍。本篇的篇幅较长&#xff0c;建议先收藏再阅读。 3.1 OpenHarmo…...

iphone各个机型尺寸

以下是苹果&#xff08;Apple&#xff09;历代 iPhone 机型 的屏幕尺寸、分辨率及其他关键参数汇总&#xff08;截至 2023年10月&#xff0c;数据基于官方发布信息&#xff09;&#xff1a; 一、标准屏 iPhone&#xff08;非Pro系列&#xff09; 机型屏幕尺寸&#xff08;英寸…...

OfficePlus去掉PDF文件右键菜单里的PDF转换

今天在吾爱破解论坛看到一个求助帖&#xff0c;说是OfficePlus&#xff0c;安装后&#xff0c;PDF文件的右键菜单里多了PDF转换&#xff0c;想去掉&#xff0c;不知道怎么弄。底下的回复基本都是百度复制或者AI搜索出的答案&#xff0c;大致就是找注册表里CLASSID下的菜单栏相关…...

Linux驱动开发进阶(七)- DRM驱动程序设计

文章目录 1、前言2、DRAM(KMS、GEM)2.1、KMS2.2、GEM 3、DRM3.1、驱动结构体3.2、设备结构体3.3、DRM驱动注册3.4、DRM模式设置3.4.1、plane初始化3.4.2、crtc初始化3.4.3、encoder初始化3.4.4、connect初始化 4、示例说明5、DRM Simple Display框架6、DRM热插拔7、DRM中的plan…...

Parasoft C++Test软件单元测试_条件宏和断言宏使用方法的详细介绍

系列文章目录 Parasoft C++Test软件静态分析:操作指南(编码规范、质量度量)、常见问题及处理 Parasoft C++Test软件单元测试:操作指南、实例讲解、常见问题及处理 Parasoft C++Test软件集成测试:操作指南、实例讲解、常见问题及处理 进阶扩展:自动生成静态分析文档、自动…...

vue辅助工具(vue系列二)

目录 第一章、安装周边库1.1&#xff09;状态管理&#xff1a;Pinia1.2&#xff09;路由管理&#xff1a;Router1.3&#xff09;HTTP 客户端&#xff1a;Axios1.4&#xff09;UI 组件库&#xff1a;Element 第二章、下载Vue插件并安装2.1&#xff09;安装开发者工具2.1.1&#…...

WPF 五子棋项目文档

WPF 五子棋项目文档 1. 项目概述 本项目是一个使用 Windows Presentation Foundation (WPF) 技术栈和 C# 语言实现的桌面版五子棋&#xff08;Gomoku&#xff09;游戏。它遵循 MVVM&#xff08;Model-View-ViewModel&#xff09;设计模式&#xff0c;旨在提供一个结构清晰、可…...

UniApp 实现兼容 H5 和小程序的拖拽排序组件

如何使用 UniApp 实现一个兼容 H5 和小程序的 九宫格拖拽排序组件&#xff0c;实现思路和关键步骤。 一、实现目标 支持拖动菜单项改变顺序拖拽过程实时预览移动位置拖拽松开后自动吸附回网格兼容 H5 和小程序平台 二、功能结构拆解以及完整代码 完整代码&#xff1a; <…...

谷歌推出统一安全平台-一个平台实现跨云网端主动防护

&#x1f44b; 今天要给大家带来一个超级棒的消息&#xff01;谷歌云推出了全新的“谷歌统一安全平台”&#xff0c;感觉我们的网络安全问题有救啦&#xff01;&#x1f604; 随着企业基础设施变得越来越复杂&#xff0c;保护它们也变得越来越难。攻击面不断扩大&#xff0c;安…...

众趣科技丨沉浸式 VR 体验,助力酒店民宿数字化营销宣传

随着旅游季的到来&#xff0c;各地的旅游景区开始“摩拳擦掌”推出各种活动&#xff0c;吸引更多游客来此游玩。 自去年以来&#xff0c;冰雪游热度持续上升&#xff0c;尤其是对于满心期待的南方游客来说&#xff0c;哈尔滨仍是冰雪旅游的热门目的地。据美团数据显示&#xff…...

DAY05:【pytorch】图像预处理

1、torchvision 功能&#xff1a;计算视觉工具包 torchvision.transforms&#xff1a;常用的图像预处理方法torchvision.datasets&#xff1a;常用数据集的 dataset 实战&#xff0c;MINIST&#xff0c;CIFAR-10&#xff0c;ImageNet等torchvision.model&#xff1a;常用的模…...

真实企业级K8S故障案例:ETCD集群断电恢复与数据保障实践

背景描述 某跨境电商平台生产环境使用Kubernetes&#xff08;v1.23.17&#xff09;管理500微服务。某日机房突发市电中断&#xff0c;UPS未能及时接管导致&#xff1a; 3节点ETCD集群&#xff08;v3.5.4&#xff09;全部异常掉电 Control-Plane节点无法启动api-server 业务P…...

rbd块设备的id修改

背景 看到有这个需求&#xff0c;具体碰到什么场景了不太清楚&#xff0c;之前做过rbd的重构的研究&#xff0c;既然能重构&#xff0c;那么修改应该是比重构还要简单一点的&#xff0c;我们具体看下怎么操作 数据结构分析 rbd的元数据信息 [rootlab104 ~]# rbd create tes…...

WP最主题专业的wordpress主题开发

WP最主题&#xff08;wpzui.com&#xff09; WP最主题是一个提供高品质WordPress主题的平台。它注重主题的设计和功能&#xff0c;旨在为用户提供美观且实用的主题选择。其主题通常具有良好的用户体验、丰富的自定义选项以及优化的性能&#xff0c;能够满足不同类型的网站搭建…...

HomeAssistant本地化部署结合内网穿透打造跨网络智能家居中枢

文章目录 前言1. 添加镜像源2. 部署HomeAssistant3. HA系统初始化配置4. HA系统添加智能设备4.1 添加已发现的设备4.2 添加HACS插件安装设备 5. 安装cpolar内网穿透5.1 配置HA公网地址 6. 配置固定公网地址 推荐 ​ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂…...

# 实时人脸性别与年龄识别:基于OpenCV与深度学习模型的实现

实时人脸性别与年龄识别&#xff1a;基于OpenCV与深度学习模型的实现 在当今数字化时代&#xff0c;计算机视觉技术正以前所未有的速度改变着我们的生活与工作方式。其中&#xff0c;人脸检测与分析作为计算机视觉领域的重要分支&#xff0c;已广泛应用于安防监控、智能交互、…...

SAP-ABAP:SAP的Open SQL和Native SQL详细对比

在SAP ABAP开发中,Open SQL和Native SQL是两种操作数据库的方式,它们的核心区别在于可移植性、功能范围及底层实现机制。以下是详细对比: 1. Open SQL:深入解析 1.1 核心特性 数据库抽象层 Open SQL 由 SAP 内核的 Database Interface (DBI) 转换为目标数据库的 SQL(如 …...

基于大模型构建金融客服的技术调研

OpenAI-SB api接口 https://openai-sb.com/ ChatGPT与Knowledge Graph (知识图谱)分享交流 https://www.bilibili.com/video/BV1bo4y1w72m/?spm_id_from333.337.search-card.all.click&vd_source569ef4f891360f2119ace98abae09f3f 《要研究的方向和准备》 https://ww…...

Python设计模式:命令模式

1. 什么是命令模式&#xff1f; 命令模式是一种行为设计模式&#xff0c;它将请求封装为一个对象&#xff0c;从而使您能够使用不同的请求、队列或日志请求&#xff0c;以及支持可撤销操作。 命令模式的核心思想是将请求的发送者与请求的接收者解耦&#xff0c;使得两者之间的…...