一、表单元素的v-model绑定(核心场景)

v-model 是Vue实现“表单元素与数据双向同步”的语法糖,不同表单元素的绑定规则存在差异,需根据元素类型选择正确的绑定方式。

1.1 四大表单元素的绑定规则对比

表单元素类型绑定数据类型核心规则初始值设置关键注意事项
单选框(radio)字符串/数字绑定值与单选框的value属性一致时,该选项选中设为目标value(如'male'必须为每个单选框显式设置value属性
单个多选框(checkbox)布尔值选中时数据为true,未选中为false,无需设置valuetrue(默认选中)/false常用于“同意协议”“记住密码”等场景
多个多选框(checkbox)数组选中项的value自动加入数组,取消选中时自动移除空数组[](默认无选中)所有多选框需绑定同一数组,且必须设置value
下拉框(select)字符串/数组- 单选下拉框:绑定选中项的value; - 多选下拉框(加multiple):绑定选中项value组成的数组单选:目标value;多选:[]若未设value,默认用<option>的文本作为value

1.2 详细用法与示例

1. 单选框(radio):性别选择
<div id="app"><label><input type="radio" name="gender" value="male" v-model="selectedGender"></label><label><input type="radio" name="gender" value="female" v-model="selectedGender"></label><p>选中性别:{{ selectedGender }}</p>
</div>
<script>
new Vue({el: "#app",data: {selectedGender: "male" // 初始选中“男”}
});
</script>
  • 关键name属性确保单选框互斥(同一组只能选一个),v-model绑定值与value匹配即选中。
2. 单个多选框(checkbox):协议同意
<div id="app"><label><input type="checkbox" v-model="isAgree"> 我已阅读并同意用户协议</label><button :disabled="!isAgree" style="margin-left: 8px;">提交</button><p>同意状态:{{ isAgree }}</p>
</div>
<script>
new Vue({el: "#app",data: {isAgree: false // 初始未选中,按钮禁用}
});
</script>
  • 关键:无需设置valuev-model直接绑定布尔值,常用于控制按钮禁用状态。
3. 多个多选框(checkbox):爱好选择
<div id="app"><p>选择爱好:</p><label><input type="checkbox" value="game" v-model="selectedHobbies"> 游戏</label><label><input type="checkbox" value="reading" v-model="selectedHobbies"> 阅读</label><label><input type="checkbox" value="sports" v-model="selectedHobbies"> 运动</label><p>选中爱好:{{ selectedHobbies }}</p>
</div>
<script>
new Vue({el: "#app",data: {selectedHobbies: ["reading"] // 初始选中“阅读”}
});
</script>
  • 关键:所有多选框绑定同一数组,value必须唯一,数组自动维护选中状态。
4. 下拉框(select):省份选择
<div id="app"><!-- 单选下拉框 --><select v-model="selectedProvince"><option value="">请选择省份</option> <!-- 空value对应初始未选 --><option value="beijing">北京</option><option value="shanghai">上海</option><option>广东</option> <!-- 未设value,默认用文本“广东”作为value --></select><!-- 多选下拉框(按住Ctrl选择) --><select v-model="selectedProvinces" multiple style="margin-top: 8px;"><option value="beijing">北京</option><option value="shanghai">上海</option></select><p>单选省份:{{ selectedProvince }}</p><p>多选省份:{{ selectedProvinces }}</p>
</div>
<script>
new Vue({el: "#app",data: {selectedProvince: "shanghai", // 初始选中“上海”selectedProvinces: ["beijing"] // 初始选中“北京”}
});
</script>
  • 关键:多选下拉框需加multiple属性,绑定数组;未设value时,v-model值为<option>的文本。

二、v-model修饰符(简化表单处理)

表单输入默认是字符串类型,且可能包含无效空格,Vue提供3个常用修饰符,无需手动写JS逻辑即可优化输入体验。

修饰符核心作用适用场景示例代码与效果
.trim自动去除输入值的首尾空格(中间空格保留)用户名、手机号、邮箱等需过滤无效空格的场景<input v-model.trim="username"> 输入“ 小明 ”→ 变量值“小明”
.number自动将输入值转为数字类型(非数字保留字符串)年龄、金额、数量等需数值运算的场景<input v-model.number="age" type="number"> 输入“18”→ 变量值18(数字)
.lazy从“input事件”触发同步改为“change事件”触发(失去焦点/回车时同步)输入内容无需实时同步的场景(如长文本输入)<input v-model.lazy="desc"> 输入时不实时同步,失去焦点后更新

示例:带修饰符的注册表单

<div id="app"><input v-model.trim="username" placeholder="用户名(去首尾空格)"><br><input v-model.number="age" type="number" placeholder="年龄(转数字)"><br><textarea v-model.lazy="desc" placeholder="描述(失焦同步)"></textarea><br><p>用户名:{{ username }}(类型:{{ typeof username }})</p><p>年龄:{{ age }}(类型:{{ typeof age }})</p><p>描述:{{ desc }}</p>
</div>
<script>
new Vue({el: "#app",data: {username: "",age: "", // 初始为空,输入后转为数字desc: ""}
});
</script>

三、核心:计算属性(computed)

计算属性是Vue中“处理派生数据”的核心特性,本质是依赖其他数据动态计算出的属性,具有缓存机制,可避免重复计算,保持模板简洁。

3.1 为什么需要计算属性?(解决的痛点)

直接在模板中写复杂JS逻辑会导致模板臃肿、难维护,例如:

<!-- 模板中直接写复杂运算:臃肿且无缓存 -->
<p>{{ msg[0].toUpperCase() + msg.substring(1) }}</p> <!-- 首字母大写 -->
<p>{{ gender === 1 ? "男" : gender === 2 ? "女" : "未知" }}</p> <!-- 性别转换 -->

计算属性可将这些逻辑移到JS层,模板仅需引用属性名,实现“关注点分离”:

<!-- 模板简洁清晰 -->
<p>{{ formattedMsg }}</p>
<p>{{ formattedGender }}</p>
<script>
new Vue({computed: {// 计算属性:首字母大写formattedMsg() {return this.msg[0].toUpperCase() + this.msg.substring(1);},// 计算属性:性别转换formattedGender() {return this.gender === 1 ? "男" : this.gender === 2 ? "女" : "未知";}}
});
</script>

3.2 计算属性的核心机制:缓存与依赖追踪

1. 缓存机制(性能关键)
  • 原理:计算属性会缓存计算结果,只有当它依赖的data属性变化时,才会重新执行计算函数;若依赖未变,多次调用会直接返回缓存值。
  • 对比methods:methods每次调用都会重新执行函数,无缓存,性能较差。
示例:缓存机制验证
<div id="app"><p>计算属性结果:{{ computedResult }}</p><p>计算属性结果:{{ computedResult }}</p> <!-- 复用缓存,不重新计算 --><p>方法结果:{{ methodResult() }}</p><p>方法结果:{{ methodResult() }}</p> <!-- 重新执行,打印2次“方法执行” --><button @click="msg = 'new message'">修改依赖</button>
</div>
<script>
new Vue({el: "#app",data: { msg: "hello" },computed: {computedResult() {console.log("计算属性执行"); // 仅依赖变化时打印1次return this.msg.toUpperCase();}},methods: {methodResult() {console.log("方法执行"); // 每次调用都打印,共2次return this.msg.toUpperCase();}}
});
</script>
  • 输出结果:初始时打印“计算属性执行”1次、“方法执行”2次;点击按钮修改msg后,打印“计算属性执行”1次、“方法执行”2次。
2. 依赖追踪

Vue会自动追踪计算属性依赖的所有data属性(如formattedMsg依赖msg),当任一依赖变化时,计算属性会“自动重新计算”并更新视图。

3.3 计算属性 vs methods vs watch(核心区别)

三者都能处理数据逻辑,但适用场景不同,需精准选择:

特性计算属性(computed)方法(methods)侦听器(watch)
核心作用处理派生数据(如格式化、过滤、计算)处理事件逻辑、异步操作、无返回值的操作监听单个数据变化,执行异步/开销大的操作
缓存机制有(依赖不变时复用结果)无(每次调用重新执行)无(数据变化时执行)
调用方式模板中直接用属性名(不加括号)需加括号调用(如method()自动执行(数据变化时触发)
返回值必须有返回值(否则无意义)可无返回值(如仅执行事件)无需返回值(仅执行副作用)
适用场景1. 数据格式化(如日期、金额); 2. 数组过滤排序; 3. 多数据组合计算1. 事件处理(如点击、输入); 2. 同步逻辑执行1. 异步操作(如数据变化后请求接口); 2. 数据变化时执行复杂逻辑
示例:watch的适用场景(异步操作)
<div id="app"><input v-model="username" placeholder="输入用户名"><p>用户名合法性:{{ usernameValid }}</p>
</div>
<script>
new Vue({el: "#app",data: {username: "",usernameValid: true},watch: {// 监听username变化,执行异步验证(计算属性无法处理异步)username(newVal) {// 模拟后端接口验证(异步)setTimeout(() => {this.usernameValid = newVal.length >= 3; // 用户名≥3位为合法}, 500);}}
});
</script>

3.4 计算属性的进阶用法

1. 计算属性的setter(修改计算属性)

默认情况下,计算属性是“只读”的(仅实现getter),若需“修改计算属性”,需显式定义setter

<div id="app"><p>全名:{{ fullName }}</p><input v-model="fullName" placeholder="修改全名"><p>姓:{{ firstName }},名:{{ lastName }}</p>
</div>
<script>
new Vue({el: "#app",data: {firstName: "张",lastName: "三"},computed: {fullName: {// getter:读取fullName时执行(默认)get() {return this.firstName + this.lastName;},// setter:修改fullName时执行set(newFullName) {// 拆分全名为姓和名(如“李四”→ firstName=“李”,lastName=“四”)const arr = newFullName.split("");this.firstName = arr[0];this.lastName = arr.slice(1).join("");}}}
});
</script>
  • 效果:修改fullName输入框时,setter会拆分输入值,同步更新firstNamelastName
2. 计算属性传参(间接实现)

计算属性本质是“属性”,不能直接传参(如computedProp(123)会报错),需通过“返回函数”间接实现:

<div id="app"><p>年龄判断(18):{{ checkAge(18) }}</p> <!-- 成年 --><p>年龄判断(16):{{ checkAge(16) }}</p> <!-- 未成年 -->
</div>
<script>
new Vue({el: "#app",data: { adultAge: 18 }, // 依赖的基准年龄computed: {// 计算属性返回函数,函数接收参数checkAge() {// 函数内可访问Vue实例的属性(如this.adultAge)return (age) => {return age >= this.adultAge ? "成年" : "未成年";};}}
});
</script>
  • 注意:返回的函数无缓存,每次调用都会重新执行,适用于“需动态传参且计算逻辑简单”的场景。

四、实战案例:待办事项列表(Todo List)

综合运用v-forv-model、数组变异方法、计算属性,实现“添加-删除-统计”的完整功能。

需求分析

  1. 输入框输入待办内容,回车添加到列表;
  2. 点击待办项,删除该条目;
  3. 统计“已完成/总数量”(用计算属性实现)。

完整代码实现

<div id="app"><div style="margin-bottom: 16px;"><input v-model.trim="newTodo" placeholder="输入待办内容,回车添加"@keyup.enter="addTodo"style="padding: 8px; width: 300px;"></div><!-- 待办列表 --><ul style="list-style: none; padding: 0; max-width: 300px;"><li v-for="(todo, index) in todoList" :key="todo.id" style="padding: 8px; border-bottom: 1px solid #eee; cursor: pointer; display: flex; justify-content: space-between;"@click="deleteTodo(index)"><span>{{ todo.text }}</span><span style="color: #f44336;">×</span></li></ul><!-- 统计信息(计算属性) --><p style="max-width: 300px; text-align: right;">总数量:{{ totalCount }} | 已完成:{{ completedCount }} | 未完成:{{ uncompletedCount }}</p>
</div>
<script src="https://cdn.staticfile.org/vue/2.7.0/vue.min.js"></script>
<script>
new Vue({el: "#app",data: {newTodo: "", // 新待办输入值todoList: [{ id: 1, text: "学习v-model绑定", completed: false },{ id: 2, text: "掌握计算属性缓存", completed: true }]},computed: {// 总数量totalCount() {return this.todoList.length;},// 已完成数量completedCount() {return this.todoList.filter(todo => todo.completed).length;},// 未完成数量uncompletedCount() {return this.totalCount - this.completedCount;}},methods: {// 添加待办(回车触发)addTodo() {if (!this.newTodo) return; // 空内容不添加this.todoList.push({id: Date.now(), // 时间戳作为唯一ID(避免index冲突)text: this.newTodo,completed: false // 初始未完成});this.newTodo = ""; // 清空输入框},// 删除待办(点击触发)deleteTodo(index) {this.todoList.splice(index, 1); // splice是变异方法,触发视图更新}}
});
</script>

关键要点

  1. 数组变异方法:用push(添加)、splice(删除)确保视图响应式更新;
  2. 唯一ID:用Date.now()作为待办项的id,避免indexkey的缺陷;
  3. 计算属性统计completedCount依赖todoList,待办状态变化时自动重新计算,无需手动更新统计。

小练习(巩固核心知识点)

练习1:表单绑定综合(用户信息收集)

需求
  1. 实现用户信息表单,包含:
    • 性别(单选框:男/女);
    • 爱好(多选框:电影、音乐、旅行);
    • 城市(下拉框:北京、上海、广州);
    • 年龄(输入框,自动转数字,范围18-60);
  2. 点击“提交”按钮,控制台打印完整用户信息;
  3. 年龄输入非数字或超出范围时,按钮禁用。

练习2:计算属性缓存(商品价格计算)

需求
  1. 定义商品列表products(含namepricecount字段);
  2. 用计算属性totalPrice计算“所有商品的总价”(price * count求和);
  3. 验证缓存机制:多次引用totalPrice,观察是否重复计算;
  4. 修改任一商品的count,验证totalPrice是否重新计算。

练习3:计算属性传参(数组过滤)

需求
  1. 定义数组users(含nameage字段);
  2. 用计算属性filterUsers返回函数,函数接收minAge参数;
  3. 调用函数时,过滤出age ≥ minAge的用户(如filterUsers(18)返回成年用户);
  4. 在模板中分别显示“≥18岁”和“≥25岁”的用户列表。

练习4:计算属性setter(全名修改)

需求
  1. 定义firstName(姓)和lastName(名);
  2. 用计算属性fullName实现:
    • getter:返回“姓+名”(如“张三”);
    • setter:输入“全名”时拆分出姓和名(如输入“李四”→ firstName=“李”lastName=“四”);
  3. 用输入框绑定fullName,修改输入框时同步更新firstNamelastName

小练习参考答案

练习1:表单绑定综合(用户信息收集)

<div id="app"><div style="margin-bottom: 8px;"><label>性别:</label><input type="radio" name="gender" value="" v-model="user.gender"><input type="radio" name="gender" value="" v-model="user.gender"></div><div style="margin-bottom: 8px;"><label>爱好:</label><input type="checkbox" value="电影" v-model="user.hobbies"> 电影<input type="checkbox" value="音乐" v-model="user.hobbies"> 音乐<input type="checkbox" value="旅行" v-model="user.hobbies"> 旅行</div><div style="margin-bottom: 8px;"><label>城市:</label><select v-model="user.city"><option value="">请选择</option><option value="北京">北京</option><option value="上海">上海</option><option value="广州">广州</option></select></div><div style="margin-bottom: 8px;"><label>年龄:</label><input type="number" v-model.number="user.age" placeholder="18-60"></div><button @click="submit" :disabled="!isFormValid"style="padding: 8px 16px; background: #2196F3; color: white; border: none; border-radius: 4px;">提交</button>
</div>
<script src="https://cdn.staticfile.org/vue/2.7.0/vue.min.js"></script>
<script>
new Vue({el: "#app",data: {user: {gender: "",hobbies: [],city: "",age: ""}},computed: {// 表单合法性判断isFormValid() {const { gender, hobbies, city, age } = this.user;// 性别、城市必选,爱好至少选1个,年龄18-60return !!gender && hobbies.length > 0 && !!city && age >= 18 && age <= 60;}},methods: {submit() {console.log("用户信息:", this.user);alert("提交成功!");}}
});
</script>

练习2:计算属性缓存(商品价格计算)

<div id="app"><div v-for="(product, index) in products" :key="product.id" style="margin-bottom: 8px;"><span>{{ product.name }} - ¥{{ product.price }} × </span><input type="number" v-model.number="product.count" min="1" style="width: 50px;"></div><!-- 多次引用计算属性,验证缓存 --><p>总价1:{{ totalPrice }}</p><p>总价2:{{ totalPrice }}</p><p>总价3:{{ totalPrice }}</p><p>计算属性执行次数:{{ computeCount }}</p>
</div>
<script src="https://cdn.staticfile.org/vue/2.7.0/vue.min.js"></script>
<script>
new Vue({el: "#app",data: {computeCount: 0, // 统计计算属性执行次数products: [{ id: 1, name: "Vue教程", price: 59, count: 1 },{ id: 2, name: "前端手册", price: 39, count: 2 }]},computed: {totalPrice() {this.computeCount++; // 每次计算+1// 求和:price * countreturn this.products.reduce((sum, product) => {return sum + product.price * product.count;}, 0);}}
});
</script>
  • 验证结果:初始时computeCount=1(3次引用仅执行1次);修改任一商品的countcomputeCount变为2(仅重新执行1次)。

练习3:计算属性传参(数组过滤)

<div id="app"><p>≥18岁用户:</p><ul><li v-for="user in filterUsers(18)" :key="user.id">{{ user.name }}({{ user.age }}岁)</li></ul><p>≥25岁用户:</p><ul><li v-for="user in filterUsers(25)" :key="user.id">{{ user.name }}({{ user.age }}岁)</li></ul>
</div>
<script src="https://cdn.staticfile.org/vue/2.7.0/vue.min.js"></script>
<script>
new Vue({el: "#app",data: {users: [{ id: 1, name: "小明", age: 17 },{ id: 2, name: "小红", age: 20 },{ id: 3, name: "小刚", age: 26 },{ id: 4, name: "小丽", age: 30 }]},computed: {// 计算属性返回函数,接收minAge参数filterUsers() {return (minAge) => {// 过滤出age ≥ minAge的用户return this.users.filter(user => user.age >= minAge);};}}
});
</script>

练习4:计算属性setter(全名修改)

<div id="app"><p>姓:{{ firstName }}</p><p>名:{{ lastName }}</p><p>全名:</p><input v-model="fullName" placeholder="输入全名"style="padding: 8px; width: 200px;">
</div>
<script src="https://cdn.staticfile.org/vue/2.7.0/vue.min.js"></script>
<script>
new Vue({el: "#app",data: {firstName: "张",lastName: "三"},computed: {fullName: {// getter:读取全名时执行get() {return this.firstName + this.lastName;},// setter:修改全名时执行set(newFullName) {// 处理特殊情况(空输入或单字)if (newFullName.length === 0) {this.firstName = "";this.lastName = "";} else if (newFullName.length === 1) {this.firstName = newFullName;this.lastName = "";} else {// 拆分:首字符为姓,剩余为名this.firstName = newFullName[0];this.lastName = newFullName.slice(1);}}}}
});
</script>
  • 效果:输入“李四”→ firstName=“李”lastName=“四”;输入“王”→ firstName=“王”lastName=“”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/922407.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/922407.shtml
英文地址,请注明出处:http://en.pswp.cn/news/922407.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FPGA入门-数码管静态显示

19. 数码管的静态显示 在许多项目设计中&#xff0c;我们通常需要一些显示设备来显示我们需要的信息&#xff0c;可以选择的显示设备有很多&#xff0c;而数码管是使用最多&#xff0c;最简单的显示设备之一。数码管是一种半导体发光器件&#xff0c;具有响应时间短、体积小、…

深入理解大语言模型(5)-关于token

到目前为止对 LLM 的描述中&#xff0c;我们将其描述为一次预测一个单词&#xff0c;但实际上还有一个更重要的技术细 节。即 LLM 实际上并不是重复预测下一个单词&#xff0c;而是重复预测下一个 token 。对于一个句子&#xff0c;语言模型会 先使用分词器将其拆分为一个个 to…

视觉智能的「破壁者」——Transformer如何重塑计算机视觉范式?三大CV算法论文介绍 ViTMAESwin Transformer

当自然语言处理领域因Transformer而焕发新生时&#xff0c;计算机视觉却长期困于卷积神经网络的架构桎梏。直到ViT&#xff08;Vision Transformer&#xff09;的横空出世&#xff0c;才真正打破了视觉与语言之间的壁垒。它不仅是技术的革新&#xff0c;更是范式革命的开始&…

Java 并发容器源码解析:ConcurrentSkipListSet 行级深度剖析

Java 并发容器源码解析&#xff1a;ConcurrentSkipListSet 行级深度剖析 本文将深入解析 Java 并发容器 ConcurrentSkipListSet 的核心源码&#xff0c;结合流程图、代码注释、设计思想、优缺点分析、业务场景、调试与优化、集成方案、高阶应用等&#xff0c;帮助你系统掌握这款…

答题卡自动识别案例

目录 1.答题卡自动批阅整体实现思路 2.关键技术步骤与原理 答题卡区域提取 ①轮廓检测并排序 ②执行透视变换 ③找到每一个圆圈轮廓 ④先对所有圆圈轮廓从上到下排序 ⑤再通过循环每次只提取出五个轮廓再进行从左到右的排序 3.完整代码 1.答题卡自动批阅整体实现思路 …

C#实现通过POST实现读取数据

C# POST请求与MySQL数据存储实现下面是一个完整的C#解决方案&#xff0c;用于发送POST请求、接收响应数据&#xff0c;并将数据保存到MySQL数据库中。完整代码实现 using System; using System.Net.Http; using System.Text; using System.Threading.Tasks; using Newtonsoft.J…

Java 字符编码问题,怎么优雅地解决?

网罗开发&#xff08;小红书、快手、视频号同名&#xff09;大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等方…

STL之string类(C++)

1.string类核心定位std::string 本质是对 “字符序列” 的封装&#xff0c;内部通过动态数组存储字符&#xff0c;并自动管理内存&#xff08;分配、扩容、释放&#xff09;&#xff0c;对外提供了简洁的接口用于字符串的创建、修改、拼接、查找等操作。1.1 使用前提头文件包含…

[Maven 基础课程]第一个 Maven 项目

idea 新建一个项目&#xff1a; 来到 New Project 页面&#xff1a; 这里我们有两种方式创建 maven 项目&#xff0c;一种是自定义创建&#xff0c;另一种是使用 maven 模版项目创建。 自定义创建 maven 项目 基本配置 Name: first_maven_project 项目名称&#xff0c;设为 …

uni小程序中使用Echarts图表

前言 今天鸡米花给大家带来的是在uni里面使用echarts&#xff0c;能够完美支持和PC端一样的效果&#xff0c;我这边的工程是uni转为微信小程序&#xff0c;用的是vue3vite来写的&#xff0c;然后实现了竖屏和横屏的展示方式&#xff0c;好了献上效果图。 效果图 一、引入插件 这…

从FOTA测试到汽车电子安全体系的启蒙之旅

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

stm32中 中断和事件的区别

一、核心概念比喻想象一下工厂里的一个报警系统&#xff1a;​中断 (Interrupt)​​&#xff1a;就像火警警报器响了。它的目的是通知管理员&#xff08;CPU&#xff09;​​&#xff1a;“着火了&#xff01;”。管理员听到后&#xff0c;会停下手中的工作&#xff08;保存现场…

深入理解MySQL主从架构中的Seconds_Behind_Master指标

问题&#xff1a;主从延迟与写后读不一致 在典型的 MySQL 主从架构下&#xff0c;所有写操作都会直接进入主库&#xff0c;而读操作大多分流到从库&#xff0c;从而实现读写分离&#xff0c;缓解主库压力。 然而 MySQL 的复制机制是异步的&#xff1a;主库先写入 binlog&#…

MySQL安装(linux版本)

MySQL安装&#xff08;linux版本&#xff09; 课程地址 08. 进阶-MySQL安装(linux版本)_哔哩哔哩_bilibili 安装过程中所有需要的程序都放在网盘里了 通过网盘分享的文件&#xff1a;虚拟机 链接: https://pan.baidu.com/s/1eLMD2iq1uEujNN7mWs2dIg?pwdckmh 提取码: ckmh …

OpenCV 图像双三次BSpline插值

文章目录 一、简介 二、实现代码 三、实现效果 参考资料 一、简介 之前我们介绍过BSpline曲线,一条B样条曲线可以被定义成 n + 1 n+1 n+1个控制点的集合 { Q i } i = 0 n {\{Q_i\}}^{n}_{i=0}

Prometheus+Grafana构建企业级监控方案

1.prometheus工作原理&#xff1a; Prometheus将指标收集并存储为时间序列数据库&#xff08;时序数据库&#xff09;&#xff0c;即指标信息与记录它的时间戳一起存储&#xff0c;以及称为标签的可选键值对。 特性&#xff1a; 具有由指标名称和键/值对识别的时间序列数据的…

第23课:行业解决方案设计

第23课:行业解决方案设计 课程目标 掌握金融、医疗、教育等行业应用 学习领域特定Agent设计 了解行业标准集成 实践设计行业解决方案 课程内容 23.1 金融行业解决方案 金融Agent系统 class FinancialAgentSystem {constructor() {this.agents =

Go语言快速入门教程(JAVA转go)——2 环境搭建与入门

安装go Go官网下载地址&#xff1a;https://golang.org/dl/ 中国区官方镜像站&#xff08;推荐&#xff09;&#xff1a;https://golang.google.cn/dl/ windows安装 下载好后选择安装路径即可&#xff0c;安装完成后&#xff0c;winr 输入cmd调出命令行窗口&#xff0c;输入…

ffplay播放pcm

用 ffplay 播放 PCM 裸流时&#xff0c;必须手动告诉它“没有封装头、采样率、声道数、采样格式”四个关键点。命令模板如下&#xff1a; ffplay -f <采样格式> -ar <采样率> -ac <声道数> -i <pcm文件>常用组合示例 48 kHz、16 bit、小端、双声道 ffp…

【LLM】大模型训练中的稳定性问题

训练稳定性问题 &#x1f4cb; 概述 本文档详细介绍了在项目中解决训练稳定性问题的方法、原理分析以及实际应用。涵盖了梯度裁剪、损失函数优化、数值稳定化处理和学习率调度等关键技术。&#x1f6a8; 问题描述 现象: 训练过程中出现数值不稳定&#xff0c;损失函数波动剧烈 …