0基础学习鸿蒙开发-HarmonyOS4
一、初识
1. 开发工具
官网 开发-HarmonyOS NEXT鸿蒙应用开发平台-华为开发者联盟
2. ArkTS
二、TypeScript 基本语法
1.变量声明
2. 条件控制
注意
在TypeScrips中·空字符串·数字0、null、undefined 都坡认为是false
其它值则为true
if (num) {// num 非空执行 }
3. 循环迭代
4. 函数
5. 类和接口
6. 模块化开发
三、快速入门
1. 创建项目
2. 结构信息
路由配置地址:
3. 入门案例
@Entry
@Component
struct Index { //自定义组件 --可以复用的UI单元@State message: string = 'Hello World';build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold).fontColor('red').onClick(() => {this.message = '你好世界'})}.width('100%')}.height('100%')}
}
四、ArkUI 基础组件
1. Image 组件
2. Text 组件
3. TextInput 文本输框
- 数值转字符串:
数值.toFixed(0) --保留0位小数
- 字符串转数值:
parseInt(字符串)
4. Button 按钮
5. Slider 滑块
6. Column和Row
1) 主轴
2)交叉轴
7. 案例源码
@Entry
@Component
struct Index { //自定义组件 --可以复用的UI单元@State message: string = 'HarmonyOS';@State imgWidth:number = 250;build() {Column() {// 图片Row() {Image($rawfile('HarmonyOS.jpg')).width(this.imgWidth) //默认单位 vp(虚拟像素).interpolation(ImageInterpolation.High) //处理图片边缘锯齿.borderRadius(20) //边框弧度}.width('100%').height(400).justifyContent(FlexAlign.Center)// 文本提示Row() {Text($r('app.string.width_label')).fontSize(20).fontWeight(FontWeight.Bold)// .toFixed(0) 数值转字符串 保留0位小数TextInput({placeholder:'请输入宽度',text:this.imgWidth.toFixed(0)}).width(250).type(InputType.Number).onChange((value:string) => {// console.log(value)// parseInt 字符转数值this.imgWidth = parseInt(value)})}.width('100%').justifyContent(FlexAlign.SpaceBetween).padding({left:15,right:15})// 分割线Divider().width('91%').color('red')// 按钮Row(){Button('缩小').width(80).fontSize(20).onClick(() => {if (this.imgWidth >= 10) {this.imgWidth -= 10}})Button('放大').width(80).fontSize(20).type(ButtonType.Normal).onClick(() => {if (this.imgWidth <= 300) {this.imgWidth += 10}})}.width('100%').justifyContent(FlexAlign.SpaceEvenly).margin({top:20,bottom:20})// 滑块Slider({min:10,max:310,value:this.imgWidth,step:10,style: SliderStyle.OutSet}).width('90%').borderColor('#36D').trackThickness(7).showTips(true).onChange((value)=> {this.imgWidth = value})}.width('100%').height('100%')}
}
8. 渲染控制
1) ForEach
2) if-else
9. List 列表
List({space:6}){ForEach(this.tasks,(item:Task) => {ListItem() {Row(){Text(item.name).fontSize(20).textAlign(TextAlign.Start).padding({left:10})Checkbox().select(item.finished).onChange((val)=> {// 更新当前任务状态item.finished = val// 更新已完成任务数量// this.finishTask = this.tasks.filter(i=> i.finished).lengththis.handleTaskChange()})}.card().justifyContent(FlexAlign.SpaceBetween)}}) } .width('100%') .layoutWeight(1) //剩下的高度全是我的 .alignListItem(ListItemAlign.Center) //列表居中
class Item {name: stringimage: ResourceStrprice: numberdiscount: numberconstructor(name:string, image:ResourceStr, price: number , discount:number = 0) {this.name = namethis.image = imagethis.price = pricethis.discount = discount}
}@Entry
@Component
struct ItemPage {//商品数据private items:Array<Item> = [new Item('华为mate60',$rawfile('HarmonyOS.jpg'),6999,500),new Item('华为mate60',$rawfile('HarmonyOS.jpg'),6999),new Item('华为mate60',$rawfile('HarmonyOS.jpg'),6999),new Item('华为mate60',$rawfile('HarmonyOS.jpg'),6999),new Item('华为mate60',$rawfile('HarmonyOS.jpg'),6999),new Item('华为mate60',$rawfile('HarmonyOS.jpg'),6999),new Item('华为mate60',$rawfile('HarmonyOS.jpg'),6999),]build() {Column({space:8}) {Row(){Text('商品列表').fontSize(18).fontWeight(FontWeight.Bold)}.width('100%').margin({bottom:20}).height(30)List({space:8}){ForEach(this.items,(item:Item) => {ListItem(){Row() {Column(){Image(item.image).width(100)}Column(){Row(){Text(item.name)}Column(){if (item.discount) {Row(){Text('原价:')Text(item.price.toFixed(0)).decoration({type: TextDecorationType.LineThrough})}Row(){Text('价格:')Text((item.price - item.discount).toFixed(0))}Row(){Text('折扣:')Text(item.discount.toFixed(0))}}else {Row(){Text('价格:')Text(item.price.toFixed(0))}}}}}.margin({left:10,right:10})}})}.width('100%').layoutWeight(1) }}
}
10. 自定义组件
Blank : 将容器剩余空间全部占满
五、状态管理
1. states 装饰器
2. 案例:多任务统计
进度条组件:
Progress({ value:this.finishTask, //当前值total:this.totalTask, //总值type:ProgressType.Ring //样式 --环形 })
堆叠容器:
Stack() {
Progress(...) --盒子1
Row() {...} --盒子2
}![]()
多选框 :
Checkbox(options?: CheckboxOptions)Checkbox().select(item.finished).onChange((val)=> {// 更新当前任务状态item.finished = val// 更新已完成任务数量// this.finishTask = this.tasks.filter(i=> i.finished).lengththis.handleTaskChange()})List 列表项 ListItem 划出样式
swipeAction()
swipeAction({end:this.DeleteBnt(idnex)})
@Builder DeleteBnt(index:number) {Button('删除').backgroundColor('red').onClick( () => {this.tasks.splice(index,1)this.handleTaskChange()}) }
{ 右边划出:划出之后的内容 }
案例源码
// 案例:多任务统计
import { it } from '@ohos/hypium'
@Observed
class Task{static id:number = 1 //任务idname:string = `任务${Task.id++}` //名称finished:boolean = false //是否完成
}// 统一卡片样式
@Styles function card(){.width('95%').padding(20).backgroundColor(Color.White).borderRadius(15).shadow({radius:6,color:'#1F000000',offsetX:2,offsetY:4})
}// 任务完成样式
@Extend(Text) function finishedTask() {.decoration({type:TextDecorationType.LineThrough}).fontColor('#B1B2B1')
}@Entry
@Component
struct PropPage {// 总任务数量@State totalTask: number = 0// 已完成任务数量@State finishTask:number = 0build() {Column({space:10}) {// 1. 任务进度TaskStatistics({finishTask:this.finishTask,totalTask:this.totalTask})// 2.任务列表TaskList({finishTask: $finishTask,totalTask:$totalTask})}.width('100%').height('100%').backgroundColor('#F1F2F3')}}@Component
struct TaskStatistics {@Prop finishTask:number@Prop totalTask:numberbuild() {Row(){Text('任务进度').fontSize(30).fontWeight(FontWeight.Bold)// 堆叠容器Stack() {Progress({ // 进度条value:this.finishTask,total:this.totalTask,type:ProgressType.Ring})Row() {Text(this.finishTask.toString()).fontSize(24).fontColor('#36D')Text('/'+this.totalTask.toString()).fontSize(24)}}}.card().margin({top:20,bottom:10}).justifyContent(FlexAlign.SpaceEvenly)}
}@Component
struct TaskItem {@ObjectLink item:Task;onTaskChange: ()=> void =() => {}build() {Row() {if(this.item.finished){Text(this.item.name).finishedTask()}else{Text(this.item.name).fontSize(20).textAlign(TextAlign.Start).padding({ left: 10 })}Checkbox().select(this.item.finished).onChange((val) => {// 更新当前任务状态this.item.finished = val// 更新已完成任务数量// this.finishTask = this.tasks.filter(i=> i.finished).lengththis.onTaskChange()})}.card().justifyContent(FlexAlign.SpaceBetween)}
}@Component
struct TaskList {// 任务数组@State tasks: Task[] = []@Link totalTask: number// 已完成任务数量@Link finishTask:number@Builder DeleteBnt(index:number) {Button('删除').backgroundColor('red').onClick( () => {this.tasks.splice(index,1)this.handleTaskChange()})}handleTaskChange() {// 更新任务总数this.totalTask = this.tasks.length// 更新已完成任务数量this.finishTask = this.tasks.filter(i=> i.finished).length}build() {Column() {Button('新增任务').width(200).onClick(() => {// 新增任务this.tasks.push(new Task())// 更新任务总数// this.totalTask = this.tasks.lengththis.handleTaskChange()})// 3.任务列表List({ space: 6 }) {ForEach(this.tasks, (item: Task, idnex: number) => {ListItem() {TaskItem({item:item,onTaskChange: this.handleTaskChange.bind(this)})}.swipeAction({ end: this.DeleteBnt(idnex) })})}.width('100%').layoutWeight(1).alignListItem(ListItemAlign.Center) //列表居中}}}
3. @Prop @Link @Provide @Consume 装饰器
1)@Prop @Link
2)@Provide @Consume
@Provide 父组件 传递
@Consume 子组件 获取
不需要传参
、
4. @Observed 和 @ObjectLink
六、页面路由
1. 示例
页面路由配置地址
创建文件为页面是则自动添加路径
2. 案例
案例源码
import router from '@ohos.router'class RouterInfo {
// 页面路径url: string
// 页面标题title: stringconstructor(url:string, title:string) {this.url = urlthis.title = title}
}@Entry
@Component
struct Index {@State message: string = '页面列表'private routers: RouterInfo[] = [new RouterInfo('pages/itemPage','商品列表'),new RouterInfo('pages/PropPage','多任务'),new RouterInfo('pages/ImagePage','图片查看')]@BuilderRouterItem(r: RouterInfo, i: number) {Row(){Text(i.toString()).fontColor(Color.White)Text(r.title).fontColor(Color.White)}.justifyContent(FlexAlign.SpaceBetween).backgroundColor('#36D').padding({left:20,right:20}).borderRadius(20).width('100%').height(50).onClick(() => {// router 跳转router.pushUrl({url:r.url,params:{id:i}},router.RouterMode.Single, //页面跳转模式err => {if (err) {console.log(`跳转失败,errCode:${err.code} errMsg:${err.message}`)}})})}build() {Column(){Text(this.message).fontSize(20).fontWeight(FontWeight.Bold).height(50).fontColor(Color.Pink)List({space:8}) {ForEach(this.routers,(router:RouterInfo,index:number)=>{ListItem() {this.RouterItem(router,(index+1))}})}.layoutWeight(1)}}
}
import router from "@ohos.router"// 定义组件
@Component
export struct Header {private title:ResourceStr = '列表'@State params:object = router.getParams() //拿到传参build() {Row(){Text('<-').onClick(()=> {router.showAlertBeforeBackPage({message:'返回页面'}) //返回前提示router.back() //返回路由})if(this.params) {Text(`${this.params}, ${this.title}`).fontSize(18).fontWeight(FontWeight.Bold)}else {Text(this.title) // 只显示默认标题.fontSize(18).fontWeight(FontWeight.Bold)}}.width('100%').height(30)}
}
3. 总结
七、动画
1. 属性动画和显式动画
1)属性动画
案例:
Image(this.src)
.position({x:this.fishX-20,y:this.fishY-20}) // 定义初始位置
.rotate({angle:this.angle,centerX:"50%",centerY:'50%'}) // 定义动画运动样式
.width(40)
.height(40)
// 添加属性动画
.animation({duration:500}) //动画播放参数{}//修改属性实现动画
Button("v").backgroundColor('#20101010').onClick(()=> {this.fishY += 20})
import { Header } from '../components/CommonComponents'
import router from '@ohos.router';@Entry
@Component
struct AnimationPage {@State fishX: number = 200@State fishY: number = 180// 小鱼角度@State angle:number = 0// 小鱼图片@State src: Resource = $r('app.media.startIcon')// 是否开始游戏@State isBegin: boolean = false;build() {Row() {// Header({title:"小鱼动画"})Stack() { //堆叠容器Button('返回').position({x:0,y:0}).backgroundColor(Color.Pink).onClick(()=> {router.back()}).margin({top:0}).zIndex(1)if(!this.isBegin) {Button('开始游戏').onClick(() => {this.isBegin = true}).margin({left:250})}else{// 小鱼图片Image(this.src).position({x:this.fishX-20,y:this.fishY-20}).rotate({angle:this.angle,centerX:"50%",centerY:'50%'}).width(40).height(40)// 添加属性动画.animation({duration:500})// 操作按钮Row(){Button('<').backgroundColor('#20101010').onClick(()=> {this.fishX -= 20})Column({space:40}) {Button('^').backgroundColor('#20101010').onClick(()=> {this.fishY -= 20})Button("v").backgroundColor('#20101010').onClick(()=> {this.fishY += 20})}Button('>').backgroundColor('#20101010').onClick(()=> {this.fishX += 20})}.height(240).width(240)}}}.height('100%').width('100%')}
}
2)显式动画 *
Image(this.src).position({x:this.fishX-20,y:this.fishY-20}).rotate({angle:this.angle,centerX:"50%",centerY:'50%'}).width(40).height(40)Button('<').backgroundColor('#20101010').onClick(()=> {// this.fishX -= 20 animateTo({duration:500},()=>{this.fishX -= 20})})
2. 组件转场动画
3. 实现摇杆功能
八、Stage 模型
1. 应用配置组件
23-Stage模型-应用配置文件_哔哩哔哩_bilibili
2. UIAbility 生命周期
3. 页面组件生命周期
4. UIAbility的启动模式
修改模式
1)案例:文档跳转
九、网络连接
十、数据持久化
相关文章:
0基础学习鸿蒙开发-HarmonyOS4
一、初识 1. 开发工具 官网 开发-HarmonyOS NEXT鸿蒙应用开发平台-华为开发者联盟 2. ArkTS 二、TypeScript 基本语法 1.变量声明 2. 条件控制 注意 在TypeScrips中 空字符串数字0、null、undefined 都坡认为是false 其它值则为true if (num) {// num 非空执行 } 3. 循环迭…...
原生 IP(Native IP)
目录 一、核心特点 二、原生 IP 的常见应用 三、原生 IP vs. 数据中心 IP 四、如何获取原生 IP? 五、原生 IP 的优缺点 六、实际案例 原生 IP(Native IP) 是指由互联网服务提供商(ISP)直接分配给用户的 IP 地址&…...
python + whisper 读取蓝牙耳机, 转为文字
1. 起因, 目的: 看到别人做了类似的效果。所以自己也想试试看。动手。 2. 先看效果 3. 过程: 我用的是蓝牙耳机,EDIFIER W820NB 先找到声音,设置为 Hands-Free 模式 代码 1 ,查找设备名称, 看看哪个是能用的。 我…...
Prometheus实战教程:k8s平台-使用文件服务发现案例
date: 2025-03-06 tags:- prometheus --- 1查看NODE-IPkubectl get node -o wideNAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIMEk8s-node01 Ready &…...
黄金量化:高频实时的贵金属API
在风云变幻的投资领域,贵金属黄金市场一直备受瞩目。近期,黄金等贵金属报价API,价格走势犹如过山车,引发投资者高度关注。据 iTick 数据显示,截至 2025 年 5 月 6 日 15:30,黄金 TD 价格为 792.97 元 / 克&…...
人工智能在医疗运营编程中的应用综述
引言 随着人工智能技术的迅猛发展,医疗行业正经历一场深刻的变革。人工智能不再仅限于辅助诊断或医学影像分析,而是逐步渗透到医疗运营的各个环节。医疗运营编程作为医院管理的核心,涵盖了从患者入院到出院的全过程管理,包括资源分配、工作流程优化、收入管理、供应链控制等…...
【心海资源】0U攻击工具|一键模仿地址生成+余额归集+靓号生成系统
内容: 这是一款集合多种区块链辅助功能的0U攻击工具,无需部署环境、无需复杂配置,打开即可使用。主要功能包括: 0U攻击模块:模拟常见0U攻击场景,实现交易干扰与诱导。模仿地址生成:快速批量生成…...
Jenkins忘记admin密码后的恢复步骤
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据 总结 前言 提示:这里可以添加本文要记录的大概内容: 时间较长没有使用…...
基于深度学习的智能仓储异常检测系统设计与实现
一、项目场景 该设备主要应用于制造业、物流中心和仓储管理等场景。在制造业生产线上,该系统可用于实时监测产品的码垛状况,确保产品符合安全标准,避免因堆叠不当导致的产品损坏和生产停滞。在物流中心,系统能够监测卸货和入库过…...
安装篇--CentOS 7 虚拟机安装
CentOS 7 作为一个稳定且广泛使用的 Linux 发行版,是学习服务器管理和搭建各种服务(例如 Hadoop 集群)的理想平台。本次教程将教会大家如何在 VMware Workstation 虚拟机软件中一步步安装 CentOS 7 桌面环境。 准备工作: 确保您的…...
【Fifty Project - D23】
今日完成记录 TimePlan完成情况8:30 - 9:30《挪威的森林》√14:00 - 16:00修改大论文√16:00 - 17:30和老板讨论√ 早上在轰隆隆的火车声和时而从窗帘钻进的刺眼阳光中醒来,并没有意识到假期已…...
从零开始学java--集合类(2)
集合类 目录 集合类 Queue 队列的使用: 双端队列(Deque) Map和Set 概念: 模型: Map 常见方法说明: 注意: TreeMap和HashMap的区别: Set 常见方法说明: 注…...
在Star-CCM+中实现UDF并引用场数据和网格数据
在Star-CCM中实现UDF并引用场数据和网格数据 Star-CCM中的用户自定义函数(UDF)允许用户通过Java或C/C编程扩展软件功能。下面我将详细介绍如何实现UDF并引用模拟数据。 1. UDF基础实现方法 1.1 创建UDF的步骤 在Star-CCM中,右键点击"工具" → “用户函…...
WebRTC 服务器之SRS服务器性能优化配置
1.概述 SRS (Simple Realtime Server) 中提供的各种性能优化选项。这些选项允许您针对不同场景优化 SRS,从而在延迟、吞吐量和资源利用率之间取得平衡。有关常规配置的信息,请参阅配置。 1.1 性能提升目标 流媒体服务器的性能通常…...
n8n 中文系列教程_20. n8n高效开发秘诀:单步调试与测试用例实战指南
在n8n低代码开发中,你是否遇到过工作流运行时出错却难以定位问题?或者精心设计的流程在处理新数据时突然崩溃?单步调试和测试用例是解决这些痛点的关键!本文将带你掌握精准调试技巧和高效测试方法,确保你的自动化流程稳…...
手机携号转网查询,一键查看号码是否可转网!
在现代社会,手机已经成为人们生活不可或缺的一部分。随着通讯技术的不断发展,手机用户们也有了更多的选择权利,比如携号转网。那么,如何方便地查询一个手机号是否可以进行携号转网呢?今天,我们就来介绍一款…...
多线程网络编程:粘包问题、多线程/多进程服务器实战与常见问题解析
多线程网络编程:粘包问题、多线程/多进程服务器实战与常见问题解析 一、TCP粘包问题:成因、影响与解决方案 1. 粘包问题本质 TCP是面向流的协议,数据传输时没有明确的消息边界,导致多个消息可能被合并(粘包…...
【ArcGISPro】属性规则--属性联动
新建要素 直接点击【完成】 设置全局ID <...
五一感想:知识产权加速劳动价值!
今天是五一劳动节,祝各位网友劳动节快乐,昨天《中华人民共和国民营经济促进法》通过,普推知产老杨看到其中第三十三条专门就是针对知识产权的,加强对民营经济的原始创新保护。 一个普通的小物件白牌可能就卖1元钱,但是…...
ORACLE EBS 12.1 启用https 简单策略
Oracle EBS 启用https的官方文档是Document 376700.1, Enabling TLS in Oracle E-Business Suite Release 12.1,上面各种配置比较繁琐,我们参照Using Load-Balancers with Oracle E-Business Suite Release 12.0 and 12.1 (Doc ID 380489.1) 这个文档来利…...
Sublime PrettyJson 快捷键
一、进入快捷键编辑页 二、添加格式化、去掉格式化 快捷键 [ { "keys": ["ctrlcommandj"], "command": "pretty_json"}, { "keys": ["ctrlcommandm"], "command": "un_pretty_json"}…...
【计算机网络】TCP为什么可靠?解决了哪些问题?
TCP提供了: 1.可靠传输 2.流量控制 3.拥塞控制 4.连接管理 解决了数据在不可靠IP网络上的传输问题。 下面具体分析这4个方面。 1.可靠性传输: TCP确保数据包在网络传输过程中 不丢失、不重复,并且按顺序到达。 通过确认(ACK)、重传机制以…...
AI服务器的作用都有哪些?
根据网络环境的飞速发展,人工智能技术逐渐入驻到各个行业当中,其中AI服务器则是一种专门用来运行人工智能算法和模型的硬件设备,通常具备高性能计算、大容量存储和并行计算等多种功能,本文就来详细讲解一下AI服务器的作用…...
移动应用开发:自定义 View 处理大量数据的性能与交互优化方案
实现 1 万条数据下流畅滑动与灵敏交互的完美平衡。 一、数据渲染优化:从 1 万条到丝滑体验 (一)视图复用机制 视图复用是提升大量数据渲染性能的关键策略。以一个简单的自定义列表视图为例,我们可以构建如下的复用池管理机制&a…...
在 Ubuntu 下使用 ESP-IDF 通过串口烧录 ESP32
1. 准备工作 (1) 安装 ESP-IDF 环境 确保已完成 ESP-IDF 的安装和配置(参考官方文档): bash 复制 下载 git clone --recursive https://github.com/espressif/esp-idf.git cd esp-idf ./install.sh . ./export.sh (2) 连接开发板 通过…...
探索SQLMesh中的Jinja宏:提升SQL查询的灵活性与复用性
在数据工程和数据分析领域,SQL是不可或缺的工具。随着项目复杂度的增加,如何高效地管理和复用SQL代码成为了一个重要课题。SQLMesh作为一款强大的工具,不仅支持标准的SQL语法,还引入了Jinja模板引擎的宏功能,极大地提升…...
【Linux】Linux中的调度和切换
一、引入基本概念 在任何的分时操作系统中,其调度都是较为公平的调度。在来回顾一下关于优先级为什么会被限制的问题: Linux为什么调整优先级是要受到限制的呢?? 如果不加限制,将自己进程的优先级调整到非常高…...
.NET 通过回调函数执行 Shellcode启动进程
在红队活动往往需要考虑如何在实际环境中绕过防御机制,启动木马进程。今天,我们将深入探讨一种较少被提及但非常有趣的技术——利用 EnumPwrSchemes 函数回调来执行shellcode。 0x01 EnumPwrSchemes函数 EnumPwrSchemes 是 Windows 操作系统中的一个 API 函数,位于 C:\Win…...
快速体验 .NET9 提供的 HybridCache 混合缓存
.NET 9 引入了 HybridCache,这是一个新的高性能、分布式就绪的内存缓存实现,旨在为现代 Web 应用提供更高效的数据缓存机制。它结合了本地缓存(如 IMemoryCache)和分布式缓存(如 Redis、Garnet、SQL Server)…...
使用docker配置Mysql
Docker 命令 下面是一个常用的 Docker 命令,用于启动 MySQL 容器,并将数据挂载到本地目录: docker run -d \--name mysql-server \-e MYSQL_ROOT_PASSWORDyourpassword \-e MYSQL_DATABASEyourdb \-e MYSQL_USERyouruser \-e MYSQL_PASSWOR…...
stm32之输出比较OC和输入捕获IC
目录 1.输出比较OC1.1 简介1.2 PWM简介1.3 输出比较通道1.3.1 通用定时器1.3.2 高级定时器 1.4 PWM基本结构1.6 舵机1.7 直流电机1.7.1 引入:MX1508 芯片1.7.2 TB6612芯片 1.8 结构体和API1.8.1 结构体1.8.2 API1. TIM_OC1Init / TIM_OC2Init / TIM_OC3Init / TIM_O…...
为什么Transformer推理需要做KV缓存
一、我们先来回忆一下在transformer中KV在哪里出现过,都有什么作用? α的计算过程: 这里引入三个向量: 图中的q为Query,用来匹配key值 图中的k为key,用来被Query匹配 图中的Value,是用来被进行加权平均的 由…...
Stream和Collections工具类
Stream流 Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象。这种风格将要处理的元素集合看作一种流,流在管道中传输&am…...
结合Hutool 突增突降检测的算法
在 Hutool 中虽然没有直接提供“突增突降检测”的算法,但可以通过其提供的工具类(如 CollUtil、ArrayDeque、MathUtil 等)结合滑动窗口、差分分析等方法,快速实现突增突降检测逻辑。以下是基于 Hutool 的实现思路和示例代码&#…...
java springboot deepseek流式对话集成示例
1.直接上代码-后端: RestController CrossOrigin(origins "*") public class DeepSeekController {private static final String API_URL "https://api.deepseek.com/v1/chat/completions";private final ObjectMapper objectMapper new Ob…...
技术对暴力的削弱
信息时代的大政治分析:效率对暴力的颠覆 一、工业时代勒索逻辑的终结 工厂罢工的消亡 1930年代通用汽车罢工依赖工厂的物理集中、高资本投入和流水线脆弱性,通过暴力瘫痪生产实现勒索。 信息时代企业分散化、资产虚拟化(如软件公司可携带代码…...
RAG框架搭建(基于Langchain+Ollama生成级RAG 聊天机器人)
目录 一 Ollama安装 Windows 系统安装 验证安装 二 Langchain安装 2.1 先创建一个虚拟环境 2.2 安装最新版 langchain 三 基于 Langchain私有模型,构建一个生成级RAG 聊天机器人 3.1 初始化LLM 3.2 增强生成 3.3生成嵌入 3.4 生成并存储嵌入 一 Ol…...
spring cloud gateway(网关)简介
Spring Cloud Gateway 是一个基于 Spring WebFlux 构建的强大且广泛使用的 API 网关。它负责处理所有进入的请求,并将它们路由到相应的后端服务。 Gateway 的主要作用: 统一的入口点 (Single Entry Point): 它为所有的客户端请求提供了一个…...
webrtc 视频直播
webrtc 是一种开源的音视频通信技术,可以不借助中间媒介建立浏览器点对点(peer-to-peer)连接,实现音视频以及其他数据的传输。webrtc具有平台兼容性,低延迟与高实时的优点。今天主要记录一下webrtc的使用记录ÿ…...
【Elastsearch】如何获取已创建的api keys
在Elasticsearch中,可以通过API获取已创建的API密钥(API keys)。以下是具体步骤和示例: 1.使用GET请求获取API密钥 Elasticsearch提供了GETAPI,用于列出当前用户可以访问的所有API密钥。 请求格式 plaintext GET /_se…...
AI Agent开发第57课-AI用在销售归因分析场景中-用随机森林从0构建自己的“小模型”
开篇 在前一篇《机器学习的基础-线性回归如何应用在商业场景中》里,我们说到了如果我们只是简单的分析和预测一下投入广告费用和销售额增长是否存在必然关系,我们用了线性回归法得到了分析,得到的分析结果极其精准,以及提到了:如果当销售因素是非线性的并且有着额外一些如…...
Elasticsearch知识汇总之ElasticSearch部署
五 ElasticSearch部署 部署Elasticsearch,可以在任何 Linux、MacOS 或 Windows 机器上运行 Elasticsearch。在Docker 容器 中运行 Elasticsearch 。使用Elastic Cloud on Kubernetes 设置和管理 Elasticsearch、Kibana、Elastic Agent 以及 Kubernetes 上的 Elasti…...
高等数学第五章---定积分(§5.4反常积分)
5.4 反常积分 前面我们学习了定积分 ∫ a b f ( x ) d x \int_a^b f(x) d x ∫abf(x)dx,其中积分区间 [ a , b ] [a, b] [a,b] 是有限区间,且被积函数 f ( x ) f(x) f(x) 在 [ a , b ] [a, b] [a,b] 上是连续的(或至多有有限个第一类间…...
UE5 ML机械学习肌肉反应与布料反应
在查找Ai过渡动画的过程中,通过米哈游鹿鸣的展示,了解到的机械学习技术 https://dev.epicgames.com/documentation/zh-cn/unreal-engine/using-the-machine-learning-deformer-in-unreal-engine#%E5%85%88%E5%86%B3%E6%9D%A1%E4%BB%B6 https://dev.epicgames.com/documentati…...
UE5 诺伊腾动捕使用笔记
AxisStudio使用说明 诺伊腾动捕有两个软件,分别是AxisStudio和Axis Post 打开软件后选择"工程" 分为两种工程,一种是PN Studio和PN3,这两个工程对于不同的骨骼方式(也可以修改) 以PNStudio的2.0-Carwheel举例 右侧的数据为你的目标骨骼的尺寸,例如我现在是Metahuma…...
【测试开发】概念篇 - 从理解需求到认识常见开发、测试模型
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
【2025年】基于电脑的jdk1.8通过idea创建springboot2.x版本(非常简洁快速)
【2025年】基于电脑的jdk1.8通过idea创建springboot2.x版本 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是springboot的使用。前后每一小节的内容是存在的有:学习and理解的关联性。【帮帮志系列文章】&…...
在sheel中运行Spark
RDD基本概念 Resilient Distributed Dataset 叫做弹性分布式数据集,是Spark中最基本的数据抽象,是分布式计算的实现载体,代表一个不可变,可分区,里面的元素并行计算的集合。 Dataset: 一个数据集合…...
如何从windows中的cursor打开windows里面的wsl中的项目
解决方法: ✅ 步骤 1:在 Windows 中安装 Cursor 首先,确保你已在 Windows 上安装了 Cursor 编辑器。 安装完成后,打开 Cursor 编辑器。 ✅ 步骤 2:安装并配置 WSL 扩展 为了让 Cursor 与 WSL 集成,需…...
UE5 C++项目实现单例
在 UE5 中,要实现“全局只有一个实例”的单例模式,主要有两种思路:一种是传统 C++ 静态单例,另一种是利用 UE5 提供的Subsystem体系(如 UGameInstanceSubsystem、UWorldSubsystem 等)。下面先给出核心示例代码及对比,随后讨论典型使用场景、优缺点,对常见问题作出诊断并…...