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

Vue学习笔记5(Vue3)

Vue3学习笔记

一、create-vue搭建vue3项目

create-vue是vue官方新的脚手架工具,底层切换到了vite
步骤:

  1. 查看环境条件
    node -v版本需要在16.0及以上
  2. 创建一个vue应用

npm init vue@latest

这一指令会安装并执行create-vue
在这里插入图片描述

二、项目目录和关键文件

  • index.html提供挂载点
  • src/assets图片、样式文件的目录
  • components封装的小组件
  • App.vue中
    template和script位置调换
    template中允许有多个根元素
    使用组件时不需要注册了,引入后直接就可以使用
  • main.js
    基于crate-vue创建实例
    通过mount设置挂载点

三、组合式API

1、setup选项

  1. 执行时机早于beforecreate
  2. setup函数中获取不到this(this是undefined的)
  3. 特点:可以提供数据也可以提供函数,但是都要return才能在模板中应用
    如何化简?<script setup>语法糖简化代码 只需定义不需要reture(语法糖自动帮我们reture)

2、reactive和ref函数

(1)reactive

作用:接收对象类型数据的参数传入并返回一个响应式的对象
核心步骤:

  1. 从vue包中导入reactive函数
  2. <script setup>中执行reactive函数并传入类型为对象的初始值,并使用变量接收返回值
<script setup>import {reactive} from 'vue'const state = reactive({count:100})
</script>
(2)ref

作用:接收简单类型或者对象类型的数据传入并返回一个响应式的对象
核心步骤:

  1. 从vue包中导入ref函数
  2. <script setup>中执行ref函数并传入初始值,使用变量接收ref函数的返回值
    本质:是在原有传入数据的基础上,外层包了一层对象,包成了复杂数据类型,包成复杂类型之后再借助reactive实现的响应式,注意:脚本中访问简单的数值数据,需要通过.value,在template模板中,不需要加.value
    推荐以后声明数据统一使用ref

3、computed(计算属性)

核心步骤:

  1. 导入computed函数
  2. 执行函数在回调参数中
<script setup>import {computed} from 'vue'const computedState = computed(()=>{return 基于响应式数据做计算之后的值})
</script>

4、watch函数

作用:侦听一个或多个数据的变化,数据变化时执行回调函数

(1)侦听单个数据
  1. 导入watch函数
  2. 执行watch函数传入要侦听的响应式数据(ref对象)和回调函数
<script setup>import {watch} from 'vue'const count = ref(0)watch(count,(newValue,oldValue)=>{console.log('count发生了变化')})
</script>
(2)侦听多个数据
<script setup>import {watch} from 'vue'const count = ref(0)watch([count,name],([newCount,newName],[oldCount,oldName])=>{console.log('count发生了变化')})
</script>
(3)immediate立刻执行

一进页面立刻执行一次

<script setup>import {watch} from 'vue'const count = ref(0)watch(count,(newValue,oldValue)=>{console.log('count发生了变化')},{immediate: true})
</script>
(4)deep深度监视

一进页面立刻执行一次

<script setup>import {watch} from 'vue'const count = ref(0)watch(count,(newValue,oldValue)=>{console.log('count发生了变化')},{deep: true})
</script>

默认watch是浅层监视,即
ref(简单类型)可以直接监视,ref(复杂类型)监视不到复杂类型内部数据的变化 除非复杂类型的地址被修改

(5)精确侦听对象的某个属性

精确监听age属性

watch(()=>userInfo.value.age,(newValue,oldValue)=>{console.log(newValue,oldValue)
})

三、生命周期函数

请添加图片描述

四、父子通信

(1)父传子

步骤:1.在父组件中,以给子组件添加属性的方式传值 2.在子组件中,通过props接收(借助编译器宏)
注意:子组件中script由于写了setup。所以无法直接配置props,需要通过编译器宏

const props = defineProps({car:String,money:Number
})
(2)子传父

步骤:1.父组件中给子组件标签通过@绑定事件 2.子组件内部通过emit方法触发事件(借助编译宏)

//App.vue
<script setup>
import SonCom from '@/components/son-com.vue'
import {ref} from 'vue'
const money = ref(100)
const getMoney=()=>{money.value+=10
}
const changeFn=(newMoney)=>{money.value=newMoney
}
</script><template><div><h3>父组件 - {{ money }}<button @click="getMoney">挣钱</button>        子传父1.绑定自定义事件</h3><SonCom car="宝马车" :money="money"        父传子1.给子组件添加属性@changeMoney="changeFn"></SonCom>     子传父4.在父组件中通过@事件名监听</div>
</template>
<style scoped>
</style>//son-com.vue
<script setup>
//由于写了setup,所以无法直接配置props选项
//需要借助编译器宏,接收子组件传递的数据
const props = defineProps({        父传子2.通过编译器宏生成props方法car:String,money:Number
})
const emit = defineEmits(['changeMoney'])        子传父2.通过编译器宏生成emit方法
console.log(props);
const buy=()=>{        子传父3.触发自定义事件,传递参数emit('changeMoney',5)
}
</script><template><!-- 对于props传递过来的数据,模板中可以直接使用 --><div class="son">我是子组件 - {{ car }} - {{ money }}        父传子3.模板中可以直接使用通过props传递过来的数据/props.xxx使用<button @click="buy">花钱</button></div>
</template><style scoped>
.son {border:1px solide black;padding:30px;
}
</style>

五、模版引用

通过ref标识获取真实的dom对象或者组件实例对象
步骤:

  1. 调用ref函数生成一个ref对象
  2. 通过ref标识绑定ref对象到标签
  3. 通过ref对象.value即可访问到绑定的元素(dom必须渲染完)

默认情况下<script setup>语法糖下组件内部的属性和方法是不开放给父组件访问的,可以通过defineExpose编译宏指定哪些属性和方法允许访问

//App.vue
<script setup>
import TestCom from '@/components/test-com.vue'
import {onMounted,ref} from 'vue'
// 模版引用(可以获取dom也可以获取组件)
// 1.调用ref函数,生成一个ref对象
// 2.通过ref标识,进行绑定
// 3.通过ref对象.value即可访问到绑定的元素(必须渲染)
const inp = ref(null)//生命周期钩子,作用是确保dom渲染完
onMounted(()=>{// console.log(inp.value)// inp.value.focus()
})const clickFn = () => {inp.value.focus()
}const testRef = ref(null)//调用ref函数生成一个ref对象
const getCom = () => {console.log(testRef.value.count)testRef.value.sayHi()
}
</script><template><div><input ref='inp' type="text"><button @click="clickFn">点击让输入框聚焦</button></div><!-- 绑定ref对象到标签 --><TestCom ref="testRef"></TestCom><button @click='getCom'>获取组件</button>
</template><style scoped></style>//test-com.vue
<script setup>
const count = 999
const sayHi = () => {console.log('打招呼')
}defineExpose({count,sayHi
})
</script><template><div>我是用于测试的组件-{{ count }}</div>
</template><style scoped></style>

六、provide和inject

作用:顶层组件向任意的底层组件传递数据和方法,实现跨层组件通信
顶层组件通过provide提供数据,底层组件通过inject获取数据

传普通数据步骤:

  1. 通过provide函数提供数据
provide('key',顶层组件中的函数)
  1. inject函数获取数据
const message = inject('key')

传响应式数据步骤:

  1. 通过provide函数提供数据
const count = ref(1000)
provide('count',count)
  1. inject函数获取数据
const count = inject('count')

跨层传递方法
顶层组件可以向底层组件传递方法,底层组件调用方法可向顶层组件传参或修改顶层组件中的数据

//App.vue
const setCount=()=>{count.value++
}
provide('setCount-key',setCount)//bottom-com.vue
const setCount=inject('setCount-key')
//App.vue
<script setup>
import CenterCom from '@/components/center-com.vue'
import { provide,ref } from 'vue'
//1.跨层传递普通数据
provide('theme-color','pink')
//2.跨层传递响应式数据
const count = ref(100)
provide('count',count)setTimeout(() => {count.value=500
}, 2000)//3.跨层级传递函数=>给子孙后代传递可以修改数据的方法
provide('changeCount' , (newCount) => {count.value = newCount
})
</script><template><div><h1>我是顶层组件</h1><CenterCom></CenterCom></div>
</template><style scoped></style>//center-com.vue
<script setup>
import BottomCom from './bottom-com.vue'
</script><template><div><h2>我是中间层组件</h2><BottomCom></BottomCom></div>
</template><style scoped></style>//bottom-com.vue
<script setup>
import {inject} from 'vue'
const themeColor=inject('theme-color')
const count=inject('count')
const changeCount=inject('changeCount')
const clickFn=()=>{changeCount(10000)
}
</script><template><div><h3>我是底层组件-{{ themeColor }}-{{ count }}</h3><button @click="clickFn">更新count</button></div>
</template><style scoped></style>

七、新特性defineOptions宏

可以定义除props、emits、expose、slots之外的任意选项

<script setup>defineOptions({name:'xxx',inheritAttrs:false,...其他更多自定义属性})
</script>

八、新特性defineModel

<Child v-model=''>
等于
<Child :modelValue='' @update:modelValue=''>
//父
const txt = ref('12345')
<MyInput v-model='txt'></MyInput>
//子
const modelValue=defineModel()
<inputtype='text':value="modelValue"@input="e=>modelValue=e.target.value"

九、Pinia

1、介绍

Pinia是Vue的最新的状态管理工具,是Vuex的替代品

  1. 去掉了mutations(有state、actions(既支持同步也支持异步)、getters)
  2. 提供了符合组合式风格的API(和Vue3新语法统一)
  3. 去掉了moduls概念,每一个store都是一个独立的模块
  4. 配合TypeScript更友好

2、添加Pinia到Vue项目

  1. 使用vite创建一个空的vue3项目

npm create vue@latest

  1. 按照官方文档安装pinia到项目中
    • 安装 npm install pinia
    • 导入
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'const pinia = createPinia()
const app = createApp(App)app.use(pinia)
app.mount('#app')

3、Pinia基本语法

//counter.js
import {defineStore} from 'pinia'
//定义store
//defineStore(仓库的唯一标识,()=>{})
export const useCounterStore = defineStore('counter',()=>{    基于useCounterStore函数就可以使用defineStore仓库//声明数据 state-countconst count = ref(0)//声明操作数据的方法action(普通函数)const addCount = () => count.value++//声明基于数据派生的计算属性getters(computed)const double = computed(()=>count.value*2)//声明数据 state-msgconst msg = ref('hello pinia')return {count,addCount,double...msg,}
})
//App.vue
import {useCounterStore} from ''
const counterStore = useCounterStore() //返回一个对象
{{counterStore.count}}-{{counterStore.double}}
<button @click="counterStore.addCount">+</button>

4、action异步实现

//channels.js
import {defineStore} from 'pinia'
export const useChannelStore = defineStore('channel',()=>{//声明数据const channelList = ref([])//声明操作数据的方法const getList = async=>{//支持异步(直接写异步请求)const {data:{data}}=await axios.get('')channelList.value = data.channelsconsole.log(data.channels)}//声明getters相关return{channelList,getList}
})//App.vue
import {useChannelStore} from ''
const channelStore = useChannelStore()
<button @click='channelStore.getList'>获取频道数据</button>
<ul><li v-for='item in channelStore.channelList' :key='item.id'>{{item.name}}</li>
</ul>

5、Pinia-storeToRefs方法

不能直接对store进行解构,会丢失响应式,需要使用storeToRefs方法

import {storeToRefs} from 'Pinia'
const {count,msg}=storeToRefs(counterStore)
action可以直接解构

6、Pinia持久化

https://prazdevs.github.io/pinia-plugin-persistedstate/zh/guide/config.html
作用:操作后会将配置了持久化的数据存入本地,即刷新页面后数据也不会重置

  1. 安装

npm i pinia-plugin-persistedstate

  1. 将插件添加到pinia实例中
import { createPinia } from 'pinia'
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'const pinia = createPinia()
pinia.use(piniaPluginPersistedstate)
  1. 在需要配置pinia持久化的组件中配置
import { defineStore } from 'pinia'
import { ref } from 'vue'export const useStore = defineStore('main',() => {const someState = ref('hello pinia')return { someState }},//在声明并return完后进行配置{persist: true,},
)

指定state中哪些数据需要持久化

import { defineStore } from 'pinia'export const useStore = defineStore('store', {state: () => ({save: {me: 'saved',notMe: 'not-saved',},saveMeToo: 'saved',}),persist: {pick: ['save.me', 'saveMeToo'],},
})

相关文章:

Vue学习笔记5(Vue3)

Vue3学习笔记 一、create-vue搭建vue3项目 create-vue是vue官方新的脚手架工具&#xff0c;底层切换到了vite 步骤&#xff1a; 查看环境条件 node -v版本需要在16.0及以上创建一个vue应用 npm init vuelatest 这一指令会安装并执行create-vue 二、项目目录和关键文件 in…...

VoIP之音视频会议中的混音技术

在VoIP音视频会议中&#xff0c;需要将多路参会方音频流混合成一路音频流再发送给各参会方&#xff0c;以达到参会方可以听到每个与会人声音的目的&#xff0c;这种技术叫混音。 一、混音基础原理 在实际生活中&#xff0c;我们所处的生活和工作环境就是一个自然的混音场&…...

Baklib一站式云平台:全场景赋能企业知识资产激活

内容概要 在数字化浪潮推动下&#xff0c;企业知识资产的高效管理与价值释放成为核心议题。Baklib作为一站式云平台&#xff0c;以全场景赋能为核心定位&#xff0c;通过构建知识中台架构&#xff0c;为企业提供从资源整合到应用落地的闭环解决方案。该平台不仅支持文本、图像…...

基于nuScenes数据集和DeepSeek模型的端到端自动驾驶解决方案

结合DeepSeek模型进行知识蒸馏&#xff0c;以提高模型性能。这需要将nuScenes中的多模态数据&#xff08;如摄像头图像、雷达点云、车辆状态等&#xff09;整合到模型中&#xff0c;同时使用DeepSeek的生成能力进行蒸馏。 接下来&#xff0c;我需要考虑用户可能的背景。用户可能…...

《AI大模型开发笔记》deepseek提示词技巧

为什么你的 AI 助手总是答非所问&#xff1f; 「写篇产品分析」 → 收到一堆不知所云的文字 「做个竞品对比」 → 得到几页没有重点的废话 揭秘&#xff1a;不是 AI 不够聪明&#xff0c;而是你的指令太“高冷”&#xff01; 一、新手进阶&#xff1a; 5 大法则&#xff0c;让…...

学习笔记-人脸识别相关编程基础

通过编程实现人脸识别功能&#xff0c;需要掌握一定的技术基础&#xff0c;包括编程语言、图像处理、机器学习以及相关的库和框架&#xff1a; 1. 编程语言 Python&#xff1a;Python 是实现人脸识别最常用的语言之一&#xff0c;因为它有大量的库和框架支持&#xff0c;如 Op…...

Java发展史

JavaEE的由来 语言的诞生 Java的前身是Oak语言&#xff0c;其目的是搞嵌入式开发开发智能面包机 叮~~~&#x1f35e;&#x1f35e;&#x1f35e; 产品以失败告终 巅峰 网景公司需要网景浏览器打开网页&#xff0c;Oak->Java&#xff0c;进行前端开发&#xff08;相关技…...

SAP-ABAP:SAP中REPORT程序和online程序的区别对比

在SAP中&#xff0c;REPORT程序和Online程序&#xff08;通常指Dialog程序&#xff09;是两种常见的ABAP程序类型&#xff0c;它们在用途、结构和用户交互方式上有显著区别。以下是它们的详细对比&#xff1a; 1. 用途 REPORT程序Online程序主要用于数据查询、报表生成和批量数…...

【第2章:神经网络基础与实现——2.1 前馈神经网络的结构与工作原理】

老铁们好!今天我们要来一场长达两万字的超详细技术探险,我会像拆解乐高积木一样把前馈神经网络(Feedforward Neural Network)的每个零件摆在台面上,用最接地气的方式让你彻底搞懂这个深度学习基石的工作原理。准备好了吗?我们开始吧! 第一章:神经网络的 “乐高积木” 1…...

Pythong 解决Pycharm 运行太慢

Pythong 解决Pycharm 运行太慢 官方给Pycharm自身占用的最大内存设低估了限制,我的Pycharm刚开始默认是256mb。 首先找到自己的Pycharm安装目录 根据合适自己的改 保存&#xff0c;重启Pycharm...

P6792 [SNOI2020] 区间和 Solution

Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1​,a2​,⋯,an​)&#xff0c;有 m m m 个操作分两种&#xff1a; chmax ⁡ ( l , r , v ) \operatorname{chmax}(l,r,v) chmax(l,r,v)&#xff1a;对每个 i ∈ [ l , r ] i \in [l,r] i∈[l,…...

基于ArduPilot开发无人机飞控自动驾驶仪

目录 1、项目参数 2、硬件设计解析 2.1、主控与协处理器架构 2.2、高精度传感器集成 2.3、数据存储与恢复 2.4、电源管理与保护 2.5、通信与接口 本项目基于开源飞行控制固件 ArduPilot 开发&#xff0c;设计并实现了一款高度集成的 自动驾驶仪&#xff0c;可广泛应用于…...

Kotlin Lambda

Kotlin Lambda 在探索Kotlin Lambda之前&#xff0c;我们先回顾下Java中的Lambda表达式&#xff0c;Java 的 Lambda 表达式是 Java 8 引入的一项强大的功能&#xff0c;它使得函数式编程风格的代码更加简洁和易于理解。Lambda 表达式允许你以一种更简洁的方式表示实现接口&…...

UniApp 中制作一个横向滚动工具栏

前言 最近在用 UniApp 开发项目时&#xff0c;需要一个横向滑动的工具栏。常见的工具栏一般都是竖着的&#xff0c;但横向滑动的工具栏不仅能展示更多内容&#xff0c;还能让界面看起来更加丰富。不过很多朋友可能会发现&#xff0c;如何让内容“横着”展示又不变形、能流畅滚…...

Qt的QListWidget样式设置

以下是关于QListWidget样式设置的详细说明&#xff0c;包含常用样式配置和进阶技巧&#xff1a; 1. 基础列表样式 // 设置整体列表容器样式 listWidget->setStyleSheet("QListWidget {"" background-color: #f5f5f5;" // 背景颜色" borde…...

OpenCV 模板匹配

模板匹配算法是一种在目标图像中寻找与模板图像相似区域的方法,模板匹配就是拿一个模板图片在一张比模板图像要大的搜索图像上寻找与模板图像相似的区域,以此来得到目标在搜索图像上的位置,其核心是将模板图像在待搜索图像上从左到右、从上到下依次逐像素平移滑动,每次滑动…...

Vue 3 30天精进之旅:Day 25 - PWA支持

一、引言 在前面的24天中&#xff0c;我们已经深入探讨了Vue 3的许多核心概念和高级特性。今天&#xff0c;我们将进入一个全新的领域——PWA&#xff08;Progressive Web App&#xff09;。PWA是一种现代Web应用程序的开发模式&#xff0c;它结合了Web和原生应用的优点&#…...

arm linux下的中断处理过程。

本文基于ast2600 soc来阐述&#xff0c;内核版本为5.10 1.中断gic初始化 start_kernel() -> init_IRQ() -> irqchip_init() of_irq_init()主要是构建of_intc_desc. 489-514: 从__irqchip_of_table中找到dts node中匹配的of_table(匹配matches->compatible)&#xf…...

Linux上Elasticsearch 集群部署指南

Es 集群部署 Es 集群部署 Es 集群部署 准备好三台服务器。示例使用&#xff1a;110.0.5.141/142/143 1、es用户和用户组创建&#xff0c;使用root账号 groupadd esuseradd -g es es2、将es安装包和ik分词器上传到&#xff1a;/home/es/目录下&#xff08;任意目录都行&#…...

SpringBoot+shardingsphere实现按月分表功能

SpringBootshardingsphere实现按月分表功能 文章目录 前言 ShardingSphere 是一套开源的分布式数据库中间件解决方案&#xff0c;旨在简化数据库分片、读写分离、分布式事务等复杂场景的管理。它由 Apache 软件基金会支持&#xff0c;广泛应用于需要处理大规模数据的系统中 一…...

如何设置 Nginx 连接超时并进行测试(Nginx优化)

&#x1f3e1;作者主页&#xff1a;点击&#xff01; Nginx-从零开始的服务器之旅专栏&#xff1a;点击&#xff01; &#x1f427;Linux高级管理防护和群集专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2025年2月15日14点22分 在高并发场景下&#xff0c;如…...

Python实现AWS Fargate自动化部署系统

一、背景介绍 在现代云原生应用开发中,自动化部署是提高开发效率和保证部署质量的关键。AWS Fargate作为一项无服务器计算引擎,可以让我们专注于应用程序开发而无需管理底层基础设施。本文将详细介绍如何使用Python实现AWS Fargate的完整自动化部署流程。 © ivwdcwso (ID…...

ubuntu20.04声音设置

step1&#xff1a;打开pavucontrol&#xff0c;设置Configuration和Output Devices&#xff0c; 注意需要有HDMI / DisplayPort (plugged in)这个图标。如果没有&#xff0c;就先选择Configuration -> Digital Stereo (HDMI 7) Output (unplugged) (unvailable)&#xff0c;…...

AWS Database Migration Service

AWS Database Migration Service (DMS) 是亚马逊 Web 服务&#xff08;AWS&#xff09;提供的一项服务&#xff0c;旨在帮助用户将数据库迁移到 AWS 云环境中。无论是将现有的数据库迁移到 Amazon RDS&#xff08;关系型数据库服务&#xff09;、Amazon Aurora、Amazon Redshif…...

ROS学习

1.ROS工作空间 存放项目开发相关文件的文件夹&#xff1b; src:代码空间&#xff08;Source Space&#xff09;install:安装空间&#xff08;Install Space&#xff09;build:编译空间&#xff08;Build Space&#xff09;log:日志空间&#xff08;Log Space&#xff09; 2.c…...

【NLP 24、模型训练方式】

你的痛苦&#xff0c;我都心疼&#xff0c;想为你解决 —— 25.2.15 一、按学习范式分类 1. 监督学习&#xff08;Supervised Learning&#xff09; 核心思想&#xff1a;使用带有标签&#xff08;已知输入-输出对&#xff09;的数据训练模型。 常见任务&#xff1a;分类&…...

【算法】【区间和】acwing算法基础 802. 区间和 【有点复杂,但思路简单】

题目 假定有一个无限长的数轴&#xff0c;数轴上每个坐标上的数都是 0。 现在&#xff0c;我们首先进行 n 次操作&#xff0c;每次操作将某一位置 x 上的数加 c。 接下来&#xff0c;进行 m 次询问&#xff0c;每个询问包含两个整数 l 和 r&#xff0c;你需要求出在区间 [l,r] …...

DeepSeek 从入门到精通学习指南,2025清华大学《DeepSeek从入门到精通》正式发布104页pdf版超全解析

DeepSeek 是一款强大的 AI 搜索引擎&#xff0c;广泛应用于企业级数据检索和分析。无论您是初学者还是有经验的用户&#xff0c;掌握 DeepSeek 的使用都能为您的工作带来极大的便利。本文将从入门到精通&#xff0c;详细介绍如何学习和使用 DeepSeek。 链接: https://pan.baid…...

PyQt6/PySide6 的自定义信号实现

一、信号与槽基础概念 核心机制&#xff1a;观察者模式的实现&#xff0c;支持对象间的松耦合通信原生信号&#xff1a;内置控件&#xff08;如QPushButton&#xff09;的clicked等预定义信号自定义优势&#xff1a;实现业务逻辑解耦&#xff0c;增强组件复用性 PyQt6/PySide…...

什么是FCC认证

联邦通信委员会&#xff08;FCC&#xff09;认证是美国一种强制性的认证&#xff0c;确保电子设备在上市前符合特定标准。 联邦通讯委员会&#xff08;FCC&#xff09;----管理进口和使用无线电频率装置&#xff0c;包括电脑、传真机、电子装置、无线电接收和传输设备、无线电…...

共享设备管理难?MDM助力Kiosk模式一键部署

目录 1. 简化设备部署与配置&#xff1a;实现一键式部署 2. 自动化应用更新与内容推送&#xff1a;确保设备始终保持最新状态 3. 权限控制与设备安全&#xff1a;防止滥用与数据泄露 4. 远程管理与故障诊断&#xff1a;保障设备长期稳定运行 5. 数据分析与报告&#xff1a…...

RAMinit 程序编译运行考古记录

本科的时候浅浅研究了DOSBox&#xff0c;今天看到网上挺多关于雷军代码的新闻&#xff0c;我把雷军代码在web上编译出来了&#xff0c;但是我是业余选手&#xff0c;所以做得比较差&#xff0c;不过大家感兴趣可以关注我的dosplay项目&#xff0c;旨在利用js-dos实现汇编语言在…...

今日AI和商界事件(2025-02-15)

根据2025年2月15日的科技动态&#xff0c;以下是今日AI领域的重要事件及相关进展总结&#xff1a; 1. DeepSeek日活突破3000万&#xff0c;开源生态加速AI普惠 里程碑意义&#xff1a;开源大模型DeepSeek宣布日活跃用户数突破3000万&#xff0c;其R1模型凭借开源策略和低成本优…...

鸿蒙开发:熟知@BuilderParam装饰器

前言 本文代码案例基于Api13。 在实际的开发中&#xff0c;我们经常会遇到自定义组件的情况&#xff0c;比如通用的列表组件&#xff0c;选项卡组件等等&#xff0c;由于使用方的样式不一&#xff0c;子组件是动态变化的&#xff0c;针对这一情况&#xff0c;就不得不让使用方把…...

基于和声搜索(Harmony Search, HS)的多中心点选址优化算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于和声搜索(Harmony Search, HS)的多中心点选址优化算法matlab仿真。可以设置多个不同的中心点。 2.测试软件版本以及运行结果展示 matlab2022a/matlab2024b版…...

word文档提取信息

目录 一、说明二、Aspose-words方式2.1、Aspose-words介绍2.2、Aspose-words使用说明2.3、Aspose-words解析核心代码一、说明 项目中遇到这样的一个需求问题:“一个docx文档,用户根据关键词能搜索定位到文档的哪一页”。docx文档主要有文本、表格、图片、附件这几类组合,为…...

单、双 链 表

数组模拟链表 ①单链表&#xff1a;邻接表&#xff5b;储存图和树} ②双链表&#xff1a;优化某些问题 单链表 // head 表示头结点的下标 // e[i] 表示节点i的值 // ne[i] 表示节点i的next指针是多少 // idx 存储当前已经用到了哪个点 e[i]和ne[i]用下标关联起来&#xff…...

SpringBoot整合easy-es

一、easy-es简介 EasyES是一款基于Elasticsearch官方提供的RestHighLevelClient开发的ORM框架&#xff0c;旨在简化开发流程并提高效率。 EasyES在保持RestHighLevelClient原有功能的基础上进行增强&#xff0c;而不做任何改变。它采用与Mybatis-Plus相似的语法&#xff0c;使得…...

2025年2月15日(ipython 换行-deepseek)

好的&#xff0c;用户现在想知道在IPython中如何换行而不运行代码。之前他们问过关于树莓派安装matplotlib的问题&#xff0c;现在转向IPython的使用&#xff0c;可能他们正在学习Python&#xff0c;并且可能在使用树莓派进行项目开发。需要确定用户的使用场景&#xff0c;可能…...

MyBatis:动态SQL高级标签使用方法指南

一、引言 目前互联网大厂在搭建后端Java服务时&#xff0c;常使用Springboot搭配Mybatis/Mybatis-plus的框架。Mybatis/Mybatis-plus之所以能成为当前国内主流的持久层框架&#xff0c;与其本身的优点有关&#xff1a;支持定制动态 SQL、存储过程及高级映射&#xff0c;简化数…...

Python常见面试题的详解5

1. re 模块中 search () 和 match () 的区别 要点&#xff1a;在 Python 的 re 模块中&#xff0c;re.match() 和 re.search() 是用于正则表达式匹配的两个重要函数&#xff0c;它们的主要区别在于匹配的起始位置&#xff1a;re.match()&#xff1a;从字符串的开头开始匹配正则…...

python包的管理

管理python包 python能跻身最欢迎编程语言前列的一个主要原因是python有着活跃的社区提供丰富的包&#xff0c;诸如numpy&#xff0c;pandas&#xff0c;scikit-learn等等。 python的包都存放PyPI中&#xff0c;PyPI即Python Package Index&#xff0c;是python的软件仓库。所…...

性能测试流程、主流性能工具

性能测试流程 性能测试流程 测试测试需求分析 性能测试计划和方案 测什么&#xff1a; 测试背景 测试目的 测试范围 谁来测&#xff1a; 进度和分工 交付清单 怎么测&#xff1a; 测试策略 性能测试用例设计 性能测试测试执行 性能分析和调优 性能测试报告 测试报告是…...

Lua闭包的使用以及需要注意的问题

1. 闭包的基本概念 在 Lua 中&#xff0c;闭包是一个函数值&#xff0c;它包含了函数本身以及该函数所创建时的环境。闭包允许函数访问其外部函数作用域中的变量&#xff0c;即使外部函数已经执行完毕。 2.闭包的简单使用 代码&#xff1a;在下面的代码中&#xff0c;create…...

【个人开发】deepseed+Llama-factory 本地数据多卡Lora微调

文章目录 1.背景2.微调方式2.1 关键环境版本信息2.2 步骤2.2.1 下载llama-factory2.2.2 准备数据集2.2.3 微调模式2.2.4 微调脚本 2.3 踩坑经验2.3.1 问题一&#xff1a;ValueError: Undefined dataset xxxx in dataset_info.json.2.3.2 问题二&#xff1a; ValueError: Target…...

LabVIEW 天然气水合物电声联合探测

天然气水合物被认为是潜在的清洁能源&#xff0c;其储量丰富&#xff0c;预计将在未来能源格局中扮演重要角色。由于其独特的物理化学特性&#xff0c;天然气水合物的探测面临诸多挑战&#xff0c;涉及温度、压力、电学信号、声学信号等多个参数。传统的人工操作方式不仅效率低…...

VisualStudio 2012 fatal error C1083: 无法打开包括文件:“stdio.h 找不到 sdkddkver.h

今天安装了一个VC 2012 Express 学习版,提示找不不到stdio.h, 提示找不到sdkddkver.h 发现是没有安装windows8.0 SDK ,还有一个些VC头文件没有安装. 真是太奇怪了,可能版本太多,安装出问题. 我这里放一个备份文件,省得以后,不能安装的时候,没地方找这些头文件. 无法打开包…...

什么是access token和refresh token?

access token 验证身份有效时间相对refresh token 时间短一点 refresh token 用于辅助access token 过期,避免用户反复登录的问题当accesstoken过期直接拿refreshtoken去获取最新的token...

盛铂科技 SCP4006/4018/4040:国产袖珍式功率计 射频微波功率探头 平均功率计

在通信、电子测量等领域&#xff0c;功率计是确保信号稳定、系统高效运行的关键设备。盛铂科技自主研发的 SCP4000 系列自带 USB 接口的袖珍式 CW 信号平均功率计&#xff0c;以其卓越的性能、高性价比和便捷的操作&#xff0c;在众多同类产品中脱颖而出&#xff0c;成为行业内…...

Unity 获取独立显卡数量

获取独立显卡数量 导入插件包打开Demo 运行看控制台日志 public class GetGraphicCountDemo : MonoBehaviour{public int count;// Start is called before the first frame updatevoid Start(){count this.GetIndependentGraphicsDeviceCount();}}...