Vue2与Vue3不同
Vue3 设计思想与核心变化详解
一、Vue3 设计思想与 Vue2 差异对比
- 响应式系统重构
- Vue2 实现(基于 Object.defineProperty)
// 在 Vue2 中,通过 data 选项返回一个对象,对象中的属性会被 Object.defineProperty 转换为响应式数据
// 当这些属性的值发生变化时,Vue 会自动更新与之绑定的 DOM
export default {data() {return { count: 0 };}
};
- Vue3 实现(基于 Proxy 的响应式系统)
// 在 Vue3 中,使用 reactive 函数将一个普通对象转换为响应式对象
// Proxy 可以拦截对象的各种操作,实现更强大的响应式功能
import { reactive } from 'vue';
const state = reactive({ count: 0
});
- 核心差异(Proxy 支持动态属性增删、数组索引修改;性能提升约 40%)
- 在 Vue2 里,
Object.defineProperty
对新增属性、删除属性和数组索引修改等操作无法自动追踪响应式变化。而 Vue3 的Proxy
能拦截对象的属性访问、赋值、删除等操作,因此可以处理动态属性增删和数组索引修改等情况,并且在官方基准测试中性能有明显提升。 - 组合式编程范式
- Vue2 选项式 API
// Vue2 的选项式 API 是将不同功能的代码分别放在不同的选项中
// data 选项用于定义数据,methods 选项用于定义方法,mounted 是生命周期钩子
export default {data() {return { x: 0 };},methods: {move() {this.x++;}},mounted() {console.log('mounted');}
};
- Vue3 组合式 API
// Vue3 的组合式 API 是在 setup 函数中编写逻辑
// ref 用于创建响应式数据,onMounted 是生命周期钩子
import { ref, onMounted } from 'vue';
export default {setup() {const x = ref(0);const move = () => x.value++;onMounted(() => console.log('mounted'));return { x, move };}
};
- 设计理念(更好的逻辑复用;更灵活的类型推导,TypeScript 友好度提升 200%)
- 组合式 API 可以将相关逻辑封装成函数,方便在不同组件中复用。而且在使用 TypeScript 时,组合式 API 的类型推导更加直观和灵活,能更好地支持类型检查。
二、Vue3 核心变化详解
- a. v-model 升级
- Vue2 单 v-model
<!-- 在 Vue2 中,v-model 实际上是 :value 和 @input 的语法糖 -->
<Child v-model="title" />
<!-- 等价于 -->
<Child :value="title" @input="title = $event" />
- Vue3 多 v-model
<!-- 在 Vue3 中,v-model 可以有多个,通过不同的参数来区分 -->
<Child v-model:name="name" v-model:age="age" />
<!-- 等价于 -->
<Child :name="name" @update:name="name = $event":age="age"@update:age="age = $event"
/>
- b. computed 与 watch 使用
- computed 使用示例
import { ref, computed } from 'vue';
const count = ref(0);
// computed 用于创建计算属性,它会根据依赖的响应式数据自动更新
const double = computed(() => count.value * 2);
- watch 使用示例
import { ref, watch } from 'vue';
const count = ref(0);
// watch 用于监听响应式数据的变化,当 count 变化时会执行回调函数
watch(count, (newVal, oldVal) => {console.log(`count变化: ${oldVal} → ${newVal}`);
}, { immediate: true
});
- watchEffect 使用示例(包括如何停止监听)
import { ref, watchEffect } from 'vue';
const count = ref(0);
// watchEffect 会立即执行一次回调函数,并自动追踪回调函数中使用的响应式数据
// 当这些数据变化时,回调函数会再次执行
const stop = watchEffect(() => {console.log(`count值: ${count.value}`);
});
// 调用 stop 函数可以停止监听
stop();
- c. 选项式 API (Options API)
- 典型结构
// 选项式 API 按照不同的功能将代码组织在不同的选项中
export default {data() {return { // 数据 };},methods: { // 方法 },computed: { // 计算属性 },// 生命周期钩子...
};
- 特点(代码按选项类型组织;简单场景易上手;复杂组件逻辑分散)
- 选项式 API 把不同类型的代码(如数据、方法、计算属性等)分别放在不同的选项中,结构清晰,对于简单组件很容易上手。但在复杂组件中,相同逻辑的代码可能会分散在不同选项里,导致维护困难。
- d. 组合式 API (Composition API)
- 逻辑复用示例(使用函数抽离逻辑)
import { ref, computed } from 'vue';
// 封装一个可复用的逻辑函数
function useCounter(initial = 0) {const count = ref(initial);const double = computed(() => count.value * 2);const increment = () => count.value++;return { count, double, increment };
}export default {setup() {const { count, double, increment } = useCounter();return { count, double, increment };}
};
- 优势(逻辑关注点集中;代码复用率提升 60%)
- 组合式 API 可以将相关逻辑封装在一个函数中,使得逻辑关注点更加集中。而且这些函数可以在不同组件中复用,提高了代码的复用率。
- e. 引入 Composition API 原因
- 解决复杂组件代码分散问题(超过 1000 行的组件维护成本降低 40%)
- 在复杂组件中,选项式 API 会让相同逻辑的代码分散在不同选项中,而组合式 API 可以将相关逻辑集中在一起,降低了维护成本。
- 更好的 TypeScript 支持(类型推断正确率提升至 95%)
- 组合式 API 的代码结构更适合 TypeScript 进行类型推断,提高了类型检查的准确性。
- 逻辑复用能力提升(可抽离为独立函数)
- 可以将组件中的逻辑封装成独立的函数,方便在不同组件中复用。
- f. ref 与 reactive 使用
- 基本类型使用 ref 示例
import { ref } from 'vue';
// ref 用于创建基本类型的响应式数据
// 访问 ref 的值需要通过 .value 属性
const count = ref(0);
console.log(count.value);
- 引用类型使用 reactive 示例
import { reactive } from 'vue';
// reactive 用于创建引用类型的响应式数据
// 访问 reactive 对象的属性可以直接访问
const state = reactive({user: { name: 'John' },items: ['apple', 'banana']
});
console.log(state.user.name);
- g. setup 函数
- setup 函数示例(包含对 props 和 context 的处理)
export default {props: {title: String},setup(props, context) {// props 是响应式的(不要解构)console.log(props.title);// context 包含 attrs/slots/emitcontext.emit('submit');// 返回模板可用的数据return { // ... };}
};
- 注意点(在 beforeCreate 之前执行;不再需要 this 上下文;返回对象会合并到渲染上下文)
setup
函数在组件实例初始化的beforeCreate
钩子之前执行。在setup
函数中不能使用this
,因为它还没有被创建。setup
函数返回的对象会被合并到组件的渲染上下文中,供模板使用。
三、Vue Router 4 核心变化
- 主要改进
- 创建路由实例示例(包括动态导入组件)
import { createRouter, createWebHistory } from 'vue-router';
import Home from './Home.vue';const router = createRouter({history: createWebHistory(),routes: [{ path: '/', component: Home },{ path: '/about', // 动态导入组件,实现代码分割component: () => import('./About.vue') }]
});
- 组合式 API 使用示例(获取当前路由和路由实例,实现跳转等操作)
import { useRoute, useRouter } from 'vue-router';export default {setup() {const route = useRoute();const router = useRouter();const goHome = () => router.push('/');return { goHome, userId: route.params.id };}
};
- 重点变化
- 路由匹配算法优化(路径解析速度提升 30%)
- Vue Router 4 对路由匹配算法进行了优化,使得路径解析速度更快,提高了路由切换的性能。
- 动态路由优先级调整(更符合直觉)
- 动态路由的优先级调整得更加合理,让开发者更容易理解和控制路由匹配的顺序。
- 路由守卫 API 调整(支持 async/await)
- 路由守卫 API 支持
async/await
语法,方便处理异步操作,如异步验证用户登录状态等。
- 四、状态管理 Pinia
- a. Pinia 与 Vuex 对比
- API 复杂度对比(Vuex 较复杂,Pinia 极简)
- Vuex 需要使用
mutations
、actions
、getters
等概念,并且有严格的调用规则,API 相对复杂。而 Pinia 只需要使用state
、actions
、getters
,API 更加简洁。 - TypeScript 支持对比(Vuex 需要类型扩展,Pinia 开箱即用)
- Vuex 在使用 TypeScript 时需要进行额外的类型扩展,而 Pinia 本身就对 TypeScript 有很好的支持,不需要额外配置。
- 代码量对比(Vuex 平均多 40%,Pinia 更简洁)
- 由于 Vuex 的 API 复杂,在实现相同功能时,代码量通常比 Pinia 多 40% 左右。
- 模块系统对比(Vuex 是命名空间模块,Pinia 自动代码分割)
- Vuex 需要手动配置命名空间模块来管理状态,而 Pinia 会自动进行代码分割,管理更加方便。
- b. Pinia 使用示例
- store/counter.js 文件示例(定义 store)
- a. Pinia 与 Vuex 对比
import { defineStore } from 'pinia';export const useCounterStore = defineStore('counter', {state: () => ({ count: 0 }),actions: {increment() {this.count++;}},getters: {double: (state) => state.count * 2}
});
- 组件中使用示例(在 setup 中获取 store 并使用)
import { useCounterStore } from '@/stores/counter';export default {setup() {const counter = useCounterStore();return { count: counter.count,double: counter.double,increment: counter.increment };}
};
五、组件通信方式
- Vue3 通信方式
- Props 传递(同 Vue2)
- 在父组件中通过属性绑定的方式将数据传递给子组件,子组件通过
props
选项接收数据。 - 自定义事件示例(子组件触发,父组件监听)
// 子组件
import { defineEmits } from 'vue';
const emit = defineEmits(['update']);
// 触发自定义事件,并传递新值
emit('update', newValue);// 父组件
<Child @update="handleUpdate" />
- provide/inject 示例(祖先组件提供,后代组件注入)
// 祖先组件
import { provide } from 'vue';
// 提供一个名为 theme 的值
provide('theme', 'dark');// 后代组件
import { inject } from 'vue';
// 注入 theme 值,如果没有提供则使用默认值 'light'
const theme = inject('theme', 'light');
- 模板引用示例(父组件获取子组件引用)
<!-- 父组件 -->
<Child ref="childRef" /><script setup>
import { ref } from 'vue';
// 创建一个 ref 用于引用子组件
const childRef = ref(null);
</script>
相关文章:
Vue2与Vue3不同
Vue3 设计思想与核心变化详解 一、Vue3 设计思想与 Vue2 差异对比 响应式系统重构Vue2 实现(基于 Object.defineProperty) // 在 Vue2 中,通过 data 选项返回一个对象,对象中的属性会被 Object.defineProperty 转换为响应式数据…...
《Java实战:素数检测算法优化全解析——从暴力枚举到筛法进阶》
文章目录 摘要一、需求分析二、基础实现代码与问题原始代码(暴力枚举法)问题分析 三、优化版代码与解析优化1:平方根范围剪枝优化2:偶数快速跳过完整优化代码 四、性能对比五、高阶优化:埃拉托斯特尼筛法算法思想代码实…...
解决报错:node:internal/errors:496 ErrorCaptureStackTrace(err);
报错信息 我使用npm init vuelatest创建项目时出现如下报错 node:internal/errors:496 ErrorCaptureStackTrace(err); ^ TypeError [ERR_IMPORT_ASSERTION_TYPE_MISSING]: Module “file:///D:/develop/nodejs/node_cache/_npx/2f7e7bff16d1c534/node_modules/create-vue/loc…...
【Linux笔记】进程管理章节笔记
一、进程与线程的概念 1、进程 1)概念 进程是程序的执行实例,拥有独立的资源(如内存、文件描述符等)。每个进程在创建时会被分配唯一的进程ID,即为PID,也叫进程编号。 2)特点 资源隔离&#…...
使用Webpack搭建React项目:从零开始
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…...
使用Cusor 生成 Figma UI 设计稿
一、开发环境 系统:MacOS 软件版本: Figma(网页或APP版) 注:最好是app版,网页版figma 没有选项 import from manifest app下载地址:Figma Downloads | Web Design App for Desktops & …...
前端 vs 后端:技术分工详解——从用户界面到系统逻辑的全解析
前端(Frontend) 和 后端(Backend) 是软件开发中两个核心概念,分别对应用户直接交互的部分和系统背后的逻辑处理部分。它们共同构成完整的应用程序,但分工不同。 目录 一、前端(Frontend…...
CentOS 7上配置SQL Server链接其他SQL Server服务器
概述 本文介绍在CentOS 7系统上运行的SQL Server如何链接访问其他SQL Server服务器的详细步骤,包括驱动安装、配置和连接测试。 安装必要组件 1. 安装ODBC驱动 # 安装基础ODBC组件 sudo yum install unixODBC unixODBC-devel# 添加Microsoft仓库 curl https://p…...
Scade One - 将MBD技术从少数高安全领域向更广泛的安全嵌入式软件普及
Scade One是继Scade Suite version 6自2008年起发展近20年后的首次主要改进版本。在Scade One发布的同时,Scade团队发布了一系列介绍Scade One的博客。本篇Scade One - Democratizing model-based development是其中的一部分。在后面的内容中,将复述博客…...
第十二章:容器间网络_《凤凰架构:构建可靠的大型分布式系统》
第十二章 容器间网络 一、Linux网络虚拟化基础 1. 网络命名空间(Network Namespace) 隔离网络栈:每个网络命名空间拥有独立的IP地址、路由表、防火墙规则等网络配置。实现方式:通过ip netns命令管理,容器启动时自动创…...
详解七大排序
目录 一.直接插入排序 (1)基本思想 (2)算法步骤 (3)代码实现 (4)算法特性 (5)算法优化 (6)示例演示 二.希尔排序 (…...
第八章 Python基础进阶-数据可视化(终)
此章节练习主要分为:折线图、地图、柱状图,若用户只是学习Python的基础语法知识,可以不看此章节。 主要是讲解第三方包PyEcharts技术,Python数据的可视化操作。 一.json数据格式 json的概念: (1&#x…...
【Hadoop3.1.4】完全分布式集群搭建
一、虚拟机的建立与连接 1.建立虚拟机 详情见【Linux】虚拟机的安装 把上面三个参数改掉 2.连接虚拟机 具体见【Linux】远程连接虚拟机防火墙 二、修改主机名 在Centos7中直接使用root用户执行hostnamectl命令修改,重启(reboot)后永久生…...
NLP简介及其发展历史
自然语言处理(Natural Language Processing,简称NLP)是人工智能和计算机科学领域中的一个重要分支,致力于实现人与计算机之间自然、高效的语言交流。本文将介绍NLP的基本概念以及其发展历史。 一、什么是自然语言处理?…...
Java异步编程中的CompletableFuture介绍、常见错误及最佳实践
一、Future接口的局限性 Java 5引入的Future接口为异步编程提供了基础支持,但其设计存在明显局限性,导致复杂场景下难以满足需求: 阻塞获取结果 必须通过future.get()阻塞线程等待结果,无法实现真正的非阻塞: Executo…...
基于FLask的共享单车需求数据可视化分析系统
【FLask】基于FLask的共享单车需求数据可视化分析系统 (完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统能够整合并处理大量共享单车使用数据,通过直观的可视化手段࿰…...
vue2项目中,多个固定的请求域名 和 通过url动态获取到的ip域名 封装 axios
vue2 使用场景:项目中,有固定的请求域名,而有某些接口是其他域名 /utils/request.js 固定请求域名 import axios from axios import Vue from vuelet baseURL switch (window.location.hostname) {case localhost: // 本地case 127.0.0.1…...
【嵌入式学习3】基于python的tcp客户端、服务器
目录 1、tcp客户端 2、tcp服务器 3、服务器多次连接客户端、多次接收信息 1、tcp客户端 """ tcp:客户端 1. 导入socket模块 2. 创建socket套接字 3. 建立tcp连接(和服务端建立连接) 4. 开始发送数据(到服务端) 5. 关闭套接字 """ import soc…...
tomcat构建源码环境
一. IDEA运行Tomcat8源码 参考网址:https://blog.csdn.net/yekong1225/article/details/81000446 Tomcat作为J2EE的开源实现,其代码具有很高的参考价值,我们可以从中汲取很多的知识。作为Java后端程序员,相信有很多人很想了解…...
你用的是Bing吗?!
🔥【深度解析】微软Bing革命性升级!Copilot Search上线:从此搜索≠找链接,而是直接生成答案! 💡 你是否厌倦了这样的搜索体验? 搜索「Python处理JSON」,在10个网页间反复跳转想对比…...
拍摄的婚庆视频有些DAT的视频文件打不开怎么办
3-12 现在的婚庆公司大多提供结婚的拍摄服务,或者有一些第三方公司做这方面业务,对于视频拍摄来说,有时候会遇到这样一种问题,就是拍摄下来的视频文件,然后会有一两个视频文件是损坏的,播放不了࿰…...
Oracle Cloud (OCI) 服务器最新控制台启用 IPv6 超详细图文指南(2025最新实践)
本文为原作者发布到第三方平台,更多内容参考: 🚀 Oracle Cloud (OCI) 服务器最新控制台启用 IPv6 超详细图文指南(2025最新实践) 随着 IPv6 的普及,IPv6的优秀特性能为你的 OCI 云服务器提升网络性能和路由效率,并提升兼容性。本指南将引导你在 Oracle Cloud Infrast…...
YOLO环境搭建,win11+wsl2+ubuntu24+cuda12.6+idea
提示:环境搭建 文章目录 前言一、 win11 gpu 驱动更新1.1 下载驱动3. 验证, 二、配置子系统 ubuntu2.1 安装 cuda 三、配置 anaconda四、idea 配置使用 wsl ubuntu conda 环境 前言 提示:版本 win11 wsl2 ubuntu24 idea 2024 子系统跳过&…...
类 和 对象 的介绍
对象的本质是一种新的数据类型。类是一个模型,对象是类的一个具体化实例。为类创建实例也就是创建对象。 一、类(class) 类决定一个对象将是什么样的(有什么属性、功能)。类和变量一样,有名字。 1.创建类 …...
机器学习(1)—线性回归
文章目录 1. 算法定义2. 模型形式2.1. 简单线性回归(单变量):2.2. 多元线性回归(多变量): 3. 基本原理3.1. 误差函数:3.2. 求解回归系数 4. 假设条件5. 模型评估6. 优缺点7. 扩展方法8. 应用场景…...
macOS下SourceInsight的替代品
macOS 推荐的几款开源、轻量级、且功能类似于 SourceInsight 的源码阅读工具(排除 VS Code): 1. Zeal(离线文档 简单代码导航) 官网/GitHub: https://zealdocs.org/特点: 轻量级离线文档浏览器࿰…...
form实现pdf文件转换成jpg文件
说明: 我希望将pdf文件转换成jpg文件 请去下载并安装 Ghostscript,gs10050w64.exe 配置环境变量:D:\Program Files\gs\gs10.05.0\bin 本地pdf路径:C:\Users\wangrusheng\Documents\name.pdf 输出文件目录:C:\Users\wan…...
聊天室项目之http知识
一.http的核心组成部分(都分成请求的和响应的) 1.起始行:请求------------------------ 方法(Method):GET、POST、PUT、DELETE 等。 请求目标(Request Target):URL 路径…...
kubeadm部署 Kubernetes(k8s) 高可用集群 V1.28.2
1. 安装要求 在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 10台机器,操作系统Openeuler22.03 LTS SP4硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多,docker 数据卷单独挂…...
BUUCTF-web刷题篇(12)
21.easy_tornado Tornado大致可以分为四个主要组成部分: 一个web框架(包括RequestHandler创建Web应用程序的子类,以及各种支持类)。 HTTPServerHTTP(和AsyncHTTPClient)的客户端和服务器端实现。 一个异…...
基于 Netty 框架的 Java TCP 服务器端实现,用于启动一个 TCP 服务器来处理客户端的连接和数据传输
代码: package com.example.tpson_tcp;import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; imp…...
【Kafka基础】Kafka配置文件关键参数解析与单机生产环境配置指南
1 Kafka配置文件概述 Apache Kafka的配置文件是控制其行为的关键所在,合理的配置能够显著提升性能、可靠性和可维护性。Kafka主要涉及两个核心配置文件: server.properties:Broker主配置文件zookeeper.properties:ZooKeeper配置文…...
Kafka 漏消费和重复消费问题
Kafka 虽然是一个高可靠、高吞吐的消息系统,但如果使用不当,**“漏消费”和“重复消费”**问题是非常容易发生的,尤其在业务系统中会造成数据丢失、重复写库等严重问题。 🎯 一句话理解: Kafka 本身提供 “至多一次”…...
Mysql慢查询设置 和 建立索引
1 .mysql慢查询的设置 slow_query_log ON //或 slow_query_log_file /usr/local/mysql/data/slow.log long_query_time 2 修改后重启动mysql 1.1 查看设置后的参数 mysql> show variables like slow_query%; --------------------------------------------------…...
Windows程序中计时器WM_TIMER消息的使用
本文章是对《Windows程序设计》这本书第八章计时器的总结,如果有时间,可以去看书里的讲解,如果时间不充裕,想马上知道计时器该如何使用,欢迎阅读本文,本文已经将计时器的干货整理完毕! 什么是计…...
关于apple ios苹果mdm监管锁的漏洞与修复
前言 本人从2020年开始接触苹果mdm管理系统的开发 起初只是接触如何利用mdm进行app分发 23年开始开发mdm监管锁业务 随着手机租赁的市场兴起 mdm监管锁系统随即而生 注意 本人只是分享工作过程中遇到的一些问题 不接受苹果手机屏蔽以及解锁的业务 此文章仅做分享使用 MDM监…...
使用Geotools中的原始方法来操作PostGIS空间数据库
目录 前言 一、原生PostGIS连接介绍 1、连接参数说明 2、创建DataStore 二、工程实战 1、Maven Pom.xml定义 2、空间数据库表 3、读取空间表的数据 三、总结 前言 在当今数字化与信息化飞速发展的时代,空间数据的处理与分析已成为众多领域不可或缺的一环。从…...
C-S模式之实现一对一聊天
天天开心!!! 文章目录 一、如何实现一对一聊天?1. 服务器设计2. 客户端设计3. 服务端代码实现4. 客户端代码实现5. 实现说明6.实验结果 二、改进常见的服务器高并发方案1. 多线程/多进程模型2. I/O多路复用3. 异步I/O(…...
Kafka Consumer Group
Kafka 消费者组(Consumer Group) 是 Kafka 的核心机制之一!理解它对你掌握 Kafka 的高可用、高吞吐、负载均衡等能力非常关键。下面我来给你完整讲一讲👇 🧠 什么是 Kafka 消费者组(Consumer Group&#x…...
LangChain vs LlamaIndex:大模型应用开发框架深度对比与实战指南
一、引言:大模型时代的应用开发挑战 随着ChatGPT、LLaMA等大语言模型的爆发式发展,如何高效构建「大模型+垂直领域」的智能应用成为新课题。传统开发模式面临三大痛点: 数据交互复杂:大模型与本地数据的融合缺乏标准化接口功能扩展困难:链式调用、工具集成需要重复造轮子…...
第二章:访问远程服务_《凤凰架构:构建可靠的大型分布式系统》
第二章 访问远程服务 2.1 远程服务调用(RPC) 2.1.1 进程间通信机制 核心方式: 管道(Pipe):单向通信,用于父子进程信号(Signal):异步事件通知,不…...
一键自动备份:数据安全的双重保障
随着数字化时代的到来,数据已成为企业和个人不可或缺的核心资产。在享受数据带来的便捷与高效的同时,数据丢失的风险也随之增加。因此,备份文件的重要性不言而喻。本文将深入探讨备份文件的重要性,并介绍两种实用的自动备份方法&a…...
C++11之std::is_convertible
目录 1.简介 2.实现原理 3.使用场景 4.总结 1.简介 std::is_convertible 是 C 标准库 <type_traits> 头文件中的一个类型特性(type trait),它用于在编译时检查一个类型是否可以隐式转换为另一个类型。下面的原型: temp…...
从零开始:在Qt中使用OpenGL绘制指南
从零开始:在Qt中使用OpenGL绘制指南 本文只介绍基本的 QOpenGLWidget 和 QOpenGLFunctions 的使用,想要学习 OpenGL 的朋友,建议访问经典 OpenGL 学习网站:LearnOpenGL CN 本篇文章,我们将以绘制一个经典的三角形为例&…...
我的购物车设计思考:从个人项目到生产实战思考的蜕变
一、代码初体验:我踩过的那些坑 还记得大二做课程设计时,我写的购物车直接用ArrayList存商品,结果改数量时遍历半天找商品。现在看你这个HashMap实现,确实清爽很多,但有几点让我想起当年惨痛经历: 1. 线程…...
【算法实践】算法面试常见问题——数组的波浪排序
问题描述 给定一个无序整数数组,将其排列成波浪形数组。若数组 arr[0..n-1] 满足以下条件,则称为波浪形: arr[0] > arr[1] < arr[2] > arr[3] < arr[4] > ... 或 arr[0] < arr[1] > arr[2] < arr[3] > arr[4] &l…...
【大模型深度学习】如何估算大模型需要的显存
一、模型参数量 参数量的单位 参数量指的是模型中所有权重和偏置的数量总和。在大模型中,参数量的单位通常以“百万”(M)或“亿”(B,也常说十亿)来表示。 百万(M):表示…...
[论文阅读]PMC-LLaMA: Towards Building Open-source Language Models for Medicine
PMC-LLaMA:构建医学开源语言模型 摘要 最近,大语言模型在自然语言理解方面展现了非凡的能力。尽管在日常交流和问答场景下表现很好,但是由于缺乏特定领域的知识,这些模型在需要精确度的领域经常表现不佳,例如医学应用…...
`use_tempaddr` 和 `temp_valid_lft ` 和 `temp_prefered_lft ` 笔记250405
use_tempaddr 和 temp_valid_lft 和 temp_prefered_lft 笔记250405 以下是 Linux 系统中与 IPv6 临时隐私地址相关的三个关键参数 use_tempaddr、temp_valid_lft 和 temp_prefered_lft 的详细说明及协作关系: 📜 参数定义与功能 参数作用默认值依赖关…...
如何设置 JVM 内存参数(-Xms、-Xmx、-Xss 等)?
JVM 内存参数用于控制 Java 虚拟机使用的内存大小和行为。以下是一些常用的 JVM 内存参数及其设置方法: 1. 堆内存 (Heap Memory): -Xms<size>: 设置 JVM 初始堆大小 (initial heap size)。 例如:-Xms2g (初始堆大小为 2GB)默认值:物…...