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

Vue3学习笔记

目录

  • Vue3
    • Vue3优势
    • Vue3组合式API & Vue2选项式API
    • create-vue
      • 使用create-vue创建项目
    • 项目目录和关键文件
    • 组合式API-setup选项
    • 组合式API-reactive和ref函数
      • reactive()
      • ref()
    • 组合式API-computed
    • 组合式API-watch
      • 基础使用
      • immdiate和deep配置
      • 精确侦听对象的某个属性
    • 组合式API-生命周期函数
    • 组合式API-父子通信
    • 组合式API- ref模板引用
    • 组合式API-provide和inject
    • Vue3.3新特性-defineOptions
    • Vue3.3新特性-defineModel
    • pinia
      • pinia基本语法
      • storeToRefs方法
      • pinia持久化

Vue3

Vue3优势

  1. 更易维护
    • 组合式API
    • 更好的TypeScript支持
  2. 更快的速度
    • 重写diff算法
    • 模板编译优化
    • 更高效的组件初始化
  3. 更小的体积
    • 良好的TreeShaking
    • 按需引入
  4. 更优的数据响应式
    • Proxy

Vue3组合式API & Vue2选项式API

Vue3组合式API:

  1. 代码量变少
  2. 分散式维护转为了集中式维护,更易封装复用

create-vue

create-vue式Vue官方新的脚手架工具,底层切换到了vite(下一层构建工具),为开发提供极速响应
Vue2:Vue-CLI底层是webpack
Vue3:create-vue底层是vite

使用create-vue创建项目

  1. 前提环境条件:已安装16.0或更高版本的Node.js,node -v
  2. 创建一个Vue应用npm init vue@latest,这一指令会安装并执行create-vue

项目目录和关键文件

vue2安装vetur插件,vue3安装Vue - Official插件
关键文件:

  1. vite.config.js - 项目的配置文件 基于vite的配置
  2. package.json - 项目包文件 核心依赖项变成了Vue3.x和vite
  3. main.js - 入口文件 createApp函数构建应用实例
  4. app.vue - 根组件 SFC单文件组件script-template-style
    • 变化一:脚本script和模板template顺序调整
    • 变化二:模板不再要求唯一根元素
    • 变化三:脚本script添加setup标识支持组合式API
  5. index.html - 单页入口 提供id为app的挂载点

组合式API-setup选项

  1. 语法:
<script>
export default {setup () {},beforeCreate () {}
}
</script>
  1. 特点:
    1. 执行时机比beforeCreate更早
    2. setup函数中,获取不到this,即this是undefined
    3. 数据和函数,需要在setup最后return,才能在模板中应用
    4. 可使用setup语法糖简化代码
  2. setup语法糖
    1. 语法:
      原写法:
      <script> 
      export default {setup () {<!-- 准备数据 -->const name = 'xiaoyang'<!-- 函数 -->const getName = () => {console.log('我的name是xiaoyang')}return {name,getName}}
      }
      </script>
      
      语法糖写法:给script标签添加setup属性不需要return
      <script setup>
      <!-- 准备数据 -->
      const name = 'xiaoyang'
      <!-- 函数 -->
      const getName = () => {console.log('我的name是xiaoyang')
      }
      </script>
      
    2. 原理
      在这里插入图片描述

组合式API-reactive和ref函数

reactive()

  1. 作用: vue3默认并不是响应式的,reactive()可以接收对象类型数据的参数传入并返回一个响应式的对象
  2. 核心步骤:
    1. 从vue包中导入reactive函数
    2. <script setup>执行reactive函数并传入类型为对象的初始值,使用变量接收返回值
    <script setup> 
    // 导入
    import { reactive } from 'vue'
    // 执行函数 传入参数 变量接收
    const state = reactive(对象类型数据)
    </script>
    

ref()

  1. 作用:ref()可以接收简单数据类型对象类型数据的参数传入并返回一个响应式的对象
  2. 核心步骤:
    1. 从vue包中导入ref函数
    2. <script setup>执行ref函数并传入初始值,使用变量接收返回值
    <script setup> 
    // 导入
    import { ref } from 'vue'
    // 执行函数 传入参数 变量接收
    const state = ref(数据)
    </script>
    
  3. 本质:在原有传入数据的基础上,外层包了一层对象,包成了复杂数据类型
    【注意】:脚本中访问数据,需要通过.value,而在template中,可以直接访问

组合式API-computed

  • 核心步骤:
    1. 从vue包中导入computed函数
    2. 执行函数在回调参数中return基于响应式数据做计算的值,用变量接收
    <script setup> 
    // 导入
    import { computed } from 'vue'
    // 执行函数 变量接收 在回调参数中return计算值
    const computedState = computed(() => {return 基于响应式数据做计算的值
    })
    </script>
    
    【注意】:① 计算属性不应该有副作用,eg:异步请求/修改dom ② 避免直接修改计算属性的值,计算属性应该是只读的,特殊情况可以配置get、set
  • 在computed中使用get、set
    <script setup> 
    import { computed } from 'vue'
    const computedState = computed({get:() => {},set: () => {}
    })
    </script>
    

组合式API-watch

基础使用

  1. 侦听单个数据
    1. 从vue包中导入watch函数
    2. 执行watch函数传入要侦听的响应式数据(ref对象)和回调函数
    <script setup> 
    import { watch } from 'vue'
    watch(ref对象, (newValue, oldValue) => {})
    </script>
    
  2. 侦听多个数据
    把ref对象、新值、旧值都分别包裹成数组
    <script setup> 
    import { watch } from 'vue'
    watch([ref对象1, ref对象2], ([newValue1, newValue2], [oldValue1, oldValue2]) => {})
    </script>
    

immdiate和deep配置

需要配置immediate和deep时,把他们包裹成对象,写在watch第三个参数的位置
watch中默认是浅层监视,当传入的ref对象是简单数据类型时,可以直接监视,当ref对象是复杂数据类型时,监视不到内部数据的变化,只能监视到对象地址的变化,因此需要deep配置
语法:

<script setup> 
import { watch } from 'vue'
watch(ref对象, (newValue, oldValue) => {}),{ immediate: true, deep: true }
</script>

精确侦听对象的某个属性

需求:在不使用deep的前提下,侦听ref对象中某一个属性的变化,若改变则触发回调
语法:

const info = ref({name: 'xiaoyang',age: '19'
})watch(// 表示只侦听info中的age属性() => info.value.age// 变化后触发的动作() => console.log('age发生了变化')
)

组合式API-生命周期函数

在这里插入图片描述

<script setup>// 这里可以直接放beforCreate和 d的相关代码// 如果有些代码需要在mounted生命周期中执行
/ 写成函数的调用方式,可调用多次,不会发生冲突,而是按照顺序依次执行 
onMounted(() => {逻辑1})
onMounted(() => {逻辑2})
<script>

组合式API-父子通信

  • 组合式API下的父传子
    基本思想: ① 父组件中给子组件绑定属性 ② 子组件内部通过props选项接收
    【注意】:① 在子组件中接收时,通过defineProps“编译器宏”函数接收子组件传递的数据 ② defineProps原理:就是编译阶段的一个标识,实际编译器解析时,遇到后会进行编译转换
    在这里插入图片描述

  • 组合式API下的子传父
    基本思想:① 父组件中给子组件标签通过@绑定事件 ② 子组件内部通过defineEmits“编译器宏”函数触发事件
    在这里插入图片描述

组合式API- ref模板引用

组件挂载完毕之后,才能使用模板引用,eg:在onMounted函数中、添加点击事件

  • 语法:
    1. 调用ref函数生成一个ref对象
    2. 通过ref标识绑定ref对象到标签上
    import { onMounted, ref } from 'vue'
    // 1. 获取dom
    const inp = ref(null)
    // 第一种:使用onMounted函数
    onMounted(() => {inp.value.focus()
    })<div class="box"><input ref="inp" type="text" />
    </div>
    
  • defineExpose编译宏的作用:显示暴露组件内部的属性和方法

组合式API-provide和inject

作用与场景:顶层组件向任意底层组件传递数据和方法,实现跨层组件通信

  • 跨层传递普通数据
    1. 顶层组件通过provide函数提供数据provide('key', 顶层组件中的数据)
    2. 底层组件通过inject函数获取数据const message = inject('key')
  • 跨层传递响应式数据
    1. 顶层组件:provide('key', ref对象)
    2. 底层组件:const message = inject('key')
  • 跨层传递函数
    【注意】:一般来说,谁的数据就由谁来修改,所以对于传递的数据的修改操作要放在顶层组件中
    1. 顶层组件:provide('key', 函数名)
    2. 底层组件:const message = inject('key')

Vue3.3新特性-defineOptions

  • 背景说明:当使用<script setup>时,如果要定义组件的name或者其他自定义属性,就需要再添加一个普通的<script>标签
  • 新特性:在vue3.3中引入defineOptions宏,用来定义任意的选项,prop、emits、expose、slots除外(这些可以用defineXXX实现)
  • 语法:
    <script setup>defineOptions {name: 'loginIndex'}
    </script>
    

Vue3.3新特性-defineModel

vue3中使用v-model相当于传递了一个modelValue属性,同时触发update:modelValue事件,同时还要在内部使用props和emits传递数据
在这里插入图片描述

使用defineModel时只需要在父组件中绑定defineModel,然后再子组件中导入即可,并且可以直接在子组件内操作数据
语法:

  1. 父组件中创建数据,并用v-model给子组件绑定
  2. 子组件中用defineModel()接收,在input标签中使用:value绑定,再添加input事件该值
    eg:
<!-- 父组件 --><script setup>const count = ref(12345)</script></template><div><MyInput v-model="count"></MyInput><br>{{ count }}</div></template><!-- 子组件 --><script setup>const modelCount = defineModel()</script><template><input type="text" :value="modelCount"@input="e => modelCount = e.target.value"name="" id=""></template>

pinia

pinia是Vue的最新状态管理工具,是vuex的替代品

  • 优势:
    1. 提供更加简单的API(去掉了mutations)
    2. 提供符合组合式风格的API(和vue3新语法统一)
    3. 去掉了modules的概念,默认每一个store都是一个独立的模块
    4. 配合TypeScript更加友好,提供可靠的类型判断-
  • 手动添加Pinia到Vue项目
    实际开发中可以在项目创建时自动添加
    手动添加步骤:
    1. 使用vite创建一个空的vue项目
    2. 按照官方文档安装pinia到项目中

pinia基本语法

pinia有两种基本语法,第一种Option Store把同一类的代码写在一起,第二种把同一数据的操作代码写在一起,常用第二种

  1. Option Store
    语法示例:
    这里state是store的数据(data),getters是store的计算属性(computed),而 actions则是方法(methods)
    export const useCounterStore = defineStore('仓库的唯一标识名', {state: () => ({ count: 0, name: 'Eduardo' }),getters: {doubleCount: (state) => state.count * 2,},actions: {increment() {this.count++},},
    })
    
  2. Setup Store
    语法示例:
    这里ref()就是state属性,computed()就是getters,function()就是actions
    【注意】:① 要让pinia正确识别state,你必须在setup store中返回state的所有属性 ② 在组件中调用的时候不能使用解构赋值,使用解构赋值会导致丢失响应式
    export const useCounterStore = defineStore('仓库的唯一标识名', () => {<!-- 声明数据 -->const count = ref(0)<!-- 声明基于数据派生的计算属性 -->const doubleCount = computed(() => count.value * 2)<!-- 声明操作数据的方法 --><!-- 普通函数 -->function increment() {count.value++}<!-- 异步函数 -->const func = async () => {const res = await axios.get('')}return { count, doubleCount, increment }
    })
    

storeToRefs方法

  • 目的:解决使用解构赋值在组件中调用pinia后,出现的丢失响应式的问题
  • 解决方法:使用storeToRefs方法
    eg:
    import { useCounterStore } from '@/store/counter.js'
    const counterStore = useCounterStore()
    const { count, addCnt } = storeToRefs(counterStore)
    
  • 注意:解构数据时,使用storeToRefs方法解构方法时,不使用storeToRefs方法,可以直接从store实例中解构

pinia持久化

pinia持久化可以使用插件pinia-plugin-persistedstate
官方文档:https://prazdevs.github.io/pinia-plugin-persistedstate/zh/

  • 使用步骤
    1. 安装插件 npm i pinia-plugin-persistedstate
    2. main.js使用,把插件挂载在pinia上
      import { createPinia } from 'pinia'
      import persist from 'pinia-plugin-persistedstate'const pinia = createPinia()
      pinia.use(persist)
      
    3. store仓库中,persist: true开启(组合式写法下,写在export的defineStore的第三个参数的位置,包裹成对象)
  • 配置
    1. 默认配置
      • localStorage 作为存储。
      • store.$id 作为存储的默认 key。
      • JSON.stringify/destr 作为序列化器/反序列化器。
      • 整个状态将持久化到存储中
    2. 自定义配置(常用)
      persist: {key: 'my-custom-key',storage: sessionStorage,<!-- pick用来定义哪些数据需要持久化,哪些不需要 -->pick: ['save.me', 'saveMeToo'],
      }
      

相关文章:

Vue3学习笔记

目录 Vue3Vue3优势Vue3组合式API & Vue2选项式APIcreate-vue使用create-vue创建项目 项目目录和关键文件组合式API-setup选项组合式API-reactive和ref函数reactive()ref() 组合式API-computed组合式API-watch基础使用immdiate和deep配置精确侦听对象的某个属性 组合式API-生…...

node + Redis + svg-captcha 实现验证码

目录 前提说明 Redis链接与封装 svg-captcha使用步骤 封装中间件验证 前端接收 扩展【svg API】 svgCaptcha.create(options) svgCaptcha.createMathExpr(options) svgCaptcha.loadFont(url) svgCaptcha.options svgCaptcha.randomText([size|options]) svgCaptcha(…...

dubbo-go框架介绍

框架介绍 什么是 dubbo-go Dubbo-go 是 Apache Dubbo 的 go 语言实现&#xff0c;它完全遵循 Apache Dubbo 设计原则与目标&#xff0c;是 go 语言领域的一款优秀微服务开发框架。dubbo-go 提供&#xff1a; API 与 RPC 协议&#xff1a;帮助解决组件之间的 RPC 通信问题&am…...

玛哈特矫平机:工业制造中的平整利器

在日新月异的工业制造领域&#xff0c;每一个细节都至关重要。而在这其中&#xff0c;矫平机以其独特的功能和卓越的性能&#xff0c;成为了不可或缺的重要工具。它就像一位技艺高超的工匠&#xff0c;精心雕琢着每一件工业产品&#xff0c;赋予它们平整、光滑的表面。 矫平机…...

IDEA 2024安装指南(含安装包以及使用说明 cannot collect jvm options 问题 四)

汉化 setting 中选择插件 完成 安装出现问题 1.可能是因为之前下载过的idea&#xff0c;找到连接中 文件&#xff0c;卸载即可。...

Jmeter中的定时器

4&#xff09;定时器 1--固定定时器 功能特点 固定延迟&#xff1a;在每个请求之间添加固定的延迟时间。精确控制&#xff1a;可以精确控制请求的发送频率。简单易用&#xff1a;配置简单&#xff0c;易于理解和使用。 配置步骤 添加固定定时器 右键点击需要添加定时器的请求…...

共享单车管理系统项目学习实战

前言 Spring Boot Vue前后端分离 前端&#xff1a;Vue&#xff08;CDN&#xff09; Element axios(前后端交互) BaiDuMap ECharts(图表展示) 后端&#xff1a;Spring Boot Spring MVC(Web) MyBatis Plus(数据库) 数据库:MySQL 验证码请求 git提交 cd C:/Users/Ustini…...

学Linux的第九天--磁盘管理

目录 一、磁盘简介 &#xff08;一&#xff09;、认知磁盘 &#xff08;1&#xff09;结构 &#xff08;2&#xff09;物理设备的命名规则 &#xff08;二&#xff09;、磁盘分区方式 MBR分区 MBR分区类型 扩展 GPT格式 lsblk命令 使用fdisk管理分区 使用gdisk管理分…...

CLIP-Adapter: Better Vision-Language Models with Feature Adapters 论文解读

abstract 大规模对比视觉-语言预训练在视觉表示学习方面取得了显著进展。与传统的通过固定一组离散标签训练的视觉系统不同&#xff0c;(Radford et al., 2021) 引入了一种新范式&#xff0c;该范式在开放词汇环境中直接学习将图像与原始文本对齐。在下游任务中&#xff0c;通…...

D74【 python 接口自动化学习】- python 基础之HTTP

day74 http基础定义 学习日期&#xff1a;20241120 学习目标&#xff1a;http定义及实战 -- http基础介绍 学习笔记&#xff1a; HTTP定义 HTTP 是一个协议&#xff08;服务器传输超文本到浏览器的传送协议&#xff09;&#xff0c;是基于 TCP/IP 通信协议来传递数据&…...

维护表空间和数据文件(一)

学习目标 定义表空间和数据文件的用途创建表空间管理表空间使用Oracle管理文件&#xff08;OMF&#xff09;创建和管理表空间获取表空间信息 表空间和数据文件 Oracle逻辑上将数据存储在表空间中&#xff0c;物理上将数据存储在数据文件中。 Tablespaces&#xff1a; 一次只…...

H.265流媒体播放器EasyPlayer.js H5流媒体播放器关于如何查看手机端的日志信息并保存下来

现今流媒体播放器的发展趋势将更加多元化和个性化。人工智能的应用将深入内容创作、用户体验优化等多个方面&#xff0c;带来前所未有的个性化体验。 EasyPlayer.js H.265流媒体播放器属于一款高效、精炼、稳定且免费的流媒体播放器&#xff0c;可支持多种流媒体协议播放&#…...

Apple Vision Pro开发003-PolySpatial2.0新建项目

unity6.0下载链接:Unity 实时开发平台 | 3D、2D、VR 和 AR 引擎 一、新建项目 二、导入开发包 com.unity.polyspatial.visionos 输入版本号 2.0.4 com.unity.polyspatial&#xff08;单独导入&#xff09;&#xff0c;或者直接安装 三、对应设置 其他的操作与之前的版本相同…...

解决 npm xxx was blocked, reason: xx bad guy, steal env and delete files

问题复现 今天一位朋友说&#xff0c;vue2的老项目安装不老依赖&#xff0c;报错内容如下&#xff1a; npm install 451 Unavailable For Legal Reasons - GET https://registry.npmmirror.com/vab-count - [UNAVAILABLE_FOR_LEGAL_REASONS] vab-count was blocked, reas…...

leetcode 面试150之 156.LUR 缓存

请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#xff0c;否则返回 -…...

Vue 动态给 data 添加新属性深度解析:问题、原理与解决方案

在 Vue 中,动态地向 data 中添加新的属性是一个常见的需求,但它也可能引发一些问题,尤其是关于 响应式更新 和 数据绑定 的问题。Vue 的响应式系统通过 getter 和 setter 来追踪和更新数据,但 动态添加新属性 时,Vue 并不会自动为这些新属性创建响应式链接。 1. 直接向 V…...

Unity类银河战士恶魔城学习总结(P141 Finalising ToolTip优化UI显示)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址&#xff1a;https://www.udemy.com/course/2d-rpg-alexdev/ UI部分暂时完结&#xff01;&#xff01;&#xff01; 本章节优化了UI中物品描述的显示效果&#xff0c;技能描述的显示效果 并且可以批…...

面试:请阐述MySQL配置文件my.cnf中参数log-bin和binlog-do-db的作用

大家好&#xff0c;我是袁庭新。星球里的小伙伴去面试&#xff0c;面试官问&#xff1a;MySQL配置文件my.cnf中参数log-bin和binlog-do-db的作用&#xff1f;一脸懵逼&#xff5e;不知道该如何回答。 在MySQL的配置文件my.cnf中&#xff0c;log-bin和binlog-do-db是与二进制日志…...

监控报警系统的指标、规则与执行闭环

随笔 从千万粉丝“何同学”抄袭开源项目说起&#xff0c;为何纯技术死路一条&#xff1f; 数据源的统一与拆分 监控报警系统的指标、规则与执行闭环 java 老矣&#xff0c;尚能饭否&#xff1f; 一骑红尘妃子笑&#xff0c;无人知是荔枝来! 有所依 我们如何知道系统交易…...

玩转数字与运算:用C语言实现24点游戏的扑克牌魅力

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

动态反馈控制器(DFC)和 服务率控制器(SRC);服务率和到达率简单理解

目录 服务率和到达率简单理解 服务率 到达率 排队论中的应用 论文解析:队列等待成本动态感知控制模型 动态反馈和队列等待成本意识: 服务速率调整算法: 动态反馈控制器(DFC)和 服务率控制器(SRC) SRC公式4的原理 算力资源分配系统中的调整消耗 举例说明 服务…...

Flutter-Web首次加载时添加动画

前言 现在web上线后首次加载会很慢&#xff0c;要5秒以上&#xff0c;并且在加载的过程中界面是白屏。因此想在白屏的时候放一个加载动画 实现步骤 1.找到web/index.html文件 2.添加以下<style>标签内容到<head>标签中 <style>.loading {display: flex;…...

stl 实现非容器类型元素和容器元素比较

在 C 标准模板库&#xff08;STL&#xff09;中&#xff0c;有许多算法可以接受自定义的比较函数&#xff08;Compare&#xff09;。这些算法通常涉及排序、查找、合并、集合操作等场景&#xff0c;允许用户通过 Compare 函数指定如何比较两个元素。 自定义compare的算法 排序…...

ChatGPT 桌面版发布了,如何安装?

本章教程教大家如何进行安装。 一、下载安装包 官网地址地址&#xff1a;https://openai.com/chatgpt/desktop/ 支持Windows和MacOS操作系统 二、安装步骤 Windows用户下载之后&#xff0c;会有一个exe安装包&#xff0c;点击运行安装即可。 注意事项&#xff0c;如果Windows操…...

【动手学电机驱动】STM32-FOC(8)MCSDK Profiler 电机参数辨识

STM32-FOC&#xff08;1&#xff09;STM32 电机控制的软件开发环境 STM32-FOC&#xff08;2&#xff09;STM32 导入和创建项目 STM32-FOC&#xff08;3&#xff09;STM32 三路互补 PWM 输出 STM32-FOC&#xff08;4&#xff09;IHM03 电机控制套件介绍 STM32-FOC&#xff08;5&…...

JavaWeb后端开发知识储备2

目录 1.HttpClient 2.微信小程序开发 3.Spring Cache 4.Spring Task 4.1cron表达式 4.2入门案例 1.HttpClient 简单来说&#xff0c;HttpClient可以通过编码的方式在Java中发送Http请求 2.微信小程序开发 微信小程序的开发本质上是前端开发&#xff0c;对于后端程序员来…...

Java Stream API - 高效数据处理的核心工具_01

文章目录 概述&#xff1a;高效数据处理的核心工具1. 流的创建1.1 从集合创建流1.2 从数组创建流1.3 直接创建流 2. 中间操作&#xff1a;流的转换和处理2.1 map()&#xff1a;映射操作2.2 filter()&#xff1a;过滤操作2.3 flatMap()&#xff1a;扁平化映射操作2.4 sorted()&a…...

【计算机网络】网段划分

一、为什么有网段划分 IP地址 网络号(目标网络) 主机号(目标主机) 网络号: 保证相互连接的两个网段具有不同的标识 主机号: 同一网段内&#xff0c;主机之间具有相同的网络号&#xff0c;但是必须有不同的主机号 互联网中的每一台主机&#xff0c;都要隶属于某一个子网 -&…...

HTML和CSS 表单、表格练习

HTML和CSS 表格练习 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>HTML表格练习</title>…...

ByteBuffer模拟拆包输出消息字符串

以下代码模拟网络编程中的粘包现象&#xff0c;用\n进行分割消息块 源码 public static void main(String[] args) {ByteBuffer byteBuffer1 ByteBuffer.allocate(60) ;byteBuffer1.put("Hello World\nWhat is you name?\nI am Licky!\nHo".getBytes());splice(byt…...

Java FastJson 踩坑记录

newtonsoft.json 第一次用。java 转的json给newtonsoft.json解析&#xff0c;一直解析不出来。 直到写这个文章的时候&#xff0c;我都还觉得是newtonsoft.json和fastjson都有问题。 先看java JSONField(name"Rank​Value") public long Rank1​1000; JSONField(na…...

深入理解 Java 阻塞队列:使用场景、原理与性能优化

在并发编程中&#xff0c;线程安全的队列是解决线程间任务传递和调度的关键工具之一。阻塞队列&#xff08;BlockingQueue&#xff09;作为一种线程安全的队列&#xff0c;实现了在并发环境下对共享数据的安全访问&#xff0c;广泛应用于生产者-消费者模型、任务调度和多线程计…...

Python常用高阶函数:map()、filter()、reduce()

Python常用高阶函数&#xff1a;map()、filter()、reduce() 高阶函数是一类以函数作为参数或者返回值的函数&#xff0c;能够显著提高代码的简洁性和灵活性。在Python中&#xff0c;map()、filter()和reduce()是三种非常常用的高阶函数&#xff0c;它们常被用来对列表或其他可…...

多目标优化算法:多目标极光优化算法(MOPLO)求解ZDT1、ZDT2、ZDT3、ZDT4、ZDT6,提供完整MATLAB代码

一、极光优化算法 极光优化算法&#xff08;Polar Lights Optimization, PLO&#xff09;是2024年提出的一种新型的元启发式优化算法&#xff0c;它从极光这一自然现象中汲取灵感。极光是由太阳风中的带电粒子在地球磁场的作用下&#xff0c;与地球大气层中的气体分子碰撞而产…...

【大数据学习 | Spark-Core】关于distinct算子

只有shuffle类的算子能够修改分区数量&#xff0c;这些算子不仅仅存在自己的功能&#xff0c;比如分组算子groupBy&#xff0c;它的功能是分组但是却可以修改分区。 而这里我们要讲的distinct算子也是一个shuffle类的算子。即可以修改分区。 scala> val arr Array(1,1,2,…...

ShuffleNet:一种为移动设备设计的极致高效的卷积神经网络

摘要 https://arxiv.org/pdf/1707.01083 我们介绍了一种名为ShuffleNet的计算效率极高的卷积神经网络&#xff08;CNN&#xff09;架构&#xff0c;该架构专为计算能力非常有限的移动设备&#xff08;例如10-150 MFLOPs&#xff09;而设计。新架构利用两种新操作&#xff1a;逐…...

AIGC-------AIGC在社交媒体内容生成中的应用

AIGC在社交媒体内容生成中的应用 引言 随着人工智能生成内容&#xff08;AIGC&#xff09;的快速发展&#xff0c;社交媒体平台上的内容创作方式发生了巨大变化。AIGC使得内容创作的门槛大大降低&#xff0c;从而让更多的人能够参与到社交媒体内容的创作中&#xff0c;同时也使…...

提取图像中的高频信息

三种方法 1. 傅里叶变换提取高频和低频【有损】2. 傅里叶变换提取振幅和相位【无损】3. 小波变换【不涉及恢复代码】代码1.代码2代码3 1. 傅里叶变换提取高频和低频【有损】 环境&#xff1a;集群210.30.98.11效果: 2. 傅里叶变换提取振幅和相位【无损】 环境&#xff1a;集…...

js函数声明

在 JavaScript 中&#xff0c;函数是一等公民&#xff08;first-class citizen&#xff09;&#xff0c;这意味着函数可以作为变量、参数和返回值使用。JavaScript 提供了多种定义函数的方式&#xff0c;以下是几种常见的方法&#xff1a; 1. 函数声明&#xff08;Function De…...

语言模型中的多模态链式推理

神经网络的公式推导 简介摘要引言多模态思维链推理的挑战多模态CoT框架多模态CoT模型架构细节编码模块融合模块解码模块 实验结果运行代码补充细节安装包下载Flan-T5数据集准备rougenltkall-MiniLM-L6-v2运行 简介 本文主要对2023一篇论文《Multimodal Chain-of-Thought Reason…...

【Java 解释器模式】实现高扩展性的医学专家诊断规则引擎

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…...

CTF之密码学(Polybius密码)

棋盘密码&#xff0c;也称为Polybius密码或方格密码&#xff0c;是一种基于替换的加密方法。以下是对棋盘密码的详细解析&#xff1a; 一、加密原理 棋盘密码使用一个5x5的方格棋盘&#xff0c;其中填充了26个英文字母&#xff08;通常i和j被视为同一个字母并放在同一个格子中…...

java excel 导入各种踩坑

在 Java 中处理 Excel 导入时&#xff0c;常见的问题&#xff08;即“踩坑”&#xff09;很多&#xff0c;下面列举了处理 Excel 导入时可能遇到的一些问题&#xff0c;并给出了解决方案和优化技巧。 1. POI 库与版本问题 Apache POI 是处理 Excel 的常用库&#xff0c;但是不…...

优化表单交互:在 el-select 组件中嵌入表格显示选项

介绍了一种通过 el-select 插槽实现表格样式数据展示的方案&#xff0c;可更直观地辅助用户选择。支持列配置、行数据绑定及自定义搜索&#xff0c;简洁高效&#xff0c;适用于复杂选择场景。完整代码见GitHub 仓库。 背景 在进行业务开发选择订单时&#xff0c;如果单纯的根…...

js版本之ES5特性简述【String、Function、JSON、其他】(二)

目录 String相关方法 string.charAt() string.charCodeAt() string.concat() string.match() string.search() string.replace() string.split() string.trim() string.slice() string.substr() string.substring() Function相关方法 arguments.length function…...

【redis】哈希类型详解

哈希类型详解 一、哈希类型的介绍二、哈希类型的常用命令2.1 HSET2.2 HGET2.3 HEXISTS2.4 HDEL2.5 HKEYS2.6 HAVLS2.7 HGETALL2.8 HMGET2.9 HLEN2.10 HSETNX2.11 HINCRBY2.12 HINCRBYFLOAT 三、哈希类型命令小结四、哈希类型内部编码五、哈希类型应用场景 一、哈希类型的介绍 …...

每日练题之动态规划(子序列问题讲解 1.最长递增子序列 2.摆动序列)

前言&#xff1a; 需要对「子序列」和「子数组」这两个概念进行区分&#xff1b; 子序列&#xff08;subsequence&#xff09;&#xff1a;子序列并不要求连续&#xff0c;但是我们调出来的顺序必须和原数组的顺序相同。例如&#xff1a;序列 [4, 6, 5] 是 [1, 2, 4, 3, 7, 6,…...

JSON 性能测试 - WastJson 性能也很快

WAST 是一个高性能 Java 工具集库包&#xff0c;包括 JSON、YAML、CSV、HttpClient、JDBC 和 EL 引擎. WastJson 无论是小中大文本各种数据类型等性能都没有明显的短板&#xff0c;除了推广外可以说是六边形战士&#xff0c;更多测试参考 wast-jmh-test: wast性能测试 (并非所…...

Windows 软件之 FFmpeg

文章目录 前言1 FFmpeg 视频处理1.1 编解码1.2 其它视频编辑命令1.3 视频抽帧 2 FFmpeg 音频处理3 FFmpeg 图片处理3.1 编解码3.2 拼接图片3.3 图片合成视频 附录1&#xff1a;mediainfo.ps1 前言 FFmpeg 是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的…...

接口的扩展

1. 接口中新增的方法 JDK7之前接口中只能定义抽象方法。 JDK8的新特性&#xff1a;接口中可以定义有方法体的方法。&#xff08;默认、静态&#xff09; JDK9的新特性&#xff1a;接口中可以定义有私有方法体的方法。 有方法体的方法&#xff1a;接口升级时&#xff0c;为了兼容…...