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

从零基础到最佳实践:Vue.js 系列(5/10):《状态管理》

引言

你是不是正在用 Vue.js 开发一个很酷的应用,然后发现组件之间的数据传递变得越来越混乱?比如,一个按钮的状态要传到好几层组件,或者多个页面需要共享同一个用户信息。这时候,状态管理就登场了!在 Vue.js 中,状态管理是帮助我们组织和管理应用数据的“超级英雄”,让代码更清晰、更易维护。

这篇文章将带你从零开始了解 Vue.js 的状态管理,重点介绍两个热门工具:VuexPinia。我们会用简单的语言讲解基础概念,配上代码示例和实际场景,还会聊聊 2025 年的技术趋势。无论你是新手还是有一定经验的开发者,相信都能有所收获!


什么是状态管理?

简单来说,状态管理就是管理应用中的数据(也就是“状态”)。在 Vue.js 中,状态可以是用户的登录信息、购物车里的商品列表,或者页面的加载状态。

在小型应用中,你可以用 propsemit 在组件间传递数据。但当应用变大,组件嵌套变深,这种方式就会变得麻烦。这时,状态管理工具就像一个“中央仓库”,把所有数据集中起来,任何组件都可以轻松访问和修改。


Vue.js 状态管理工具

截至 2025 年 5 月(假设我们用的是 Vue 3.5.13),Vue.js 社区主要推荐两种状态管理工具:VuexPinia。下面我们来逐一了解它们。

1. Vuex:老牌状态管理工具

Vuex 是 Vue.js 官方的状态管理库,虽然在 Vue 3 时代逐渐被 Pinia 取代,但它依然很强大,适合一些复杂项目或已有 Vuex 基础的开发者。

基本概念

Vuex 的核心包括:

  • State:存放数据的“仓库”。
  • Getters:从 State 中派生出一些计算数据。
  • Mutations:同步修改 State 的方法。
  • Actions:处理异步操作,提交 Mutations。
安装与配置

先安装 Vuex(假设使用 npm):

npm install vuex@next

然后创建一个 store:

// store/index.js
import { createStore } from 'vuex';export default createStore({state: {count: 0},getters: {doubleCount(state) {return state.count * 2;}},mutations: {increment(state) {state.count++;}},actions: {asyncIncrement({ commit }) {setTimeout(() => {commit('increment');}, 1000);}}
});

在 main.js 中引入:

// main.js
import { createApp } from 'vue';
import App from './App.vue';
import store from './store';const app = createApp(App);
app.use(store);
app.mount('#app');
使用示例

在组件中使用:

<template><div><p>计数: {{ $store.state.count }}</p><p>双倍计数: {{ $store.getters.doubleCount }}</p><button @click="$store.commit('increment')">加 1</button><button @click="$store.dispatch('asyncIncrement')">异步加 1</button></div>
</template><script>
export default {name: 'Counter'
};
</script>
实际场景

想象一个电商应用,用户添加商品到购物车时,可以用 Vuex 的 Action 发送请求到服务器,然后通过 Mutation 更新购物车状态。

2. Pinia:新一代状态管理利器

Pinia 是 Vue 3 官方推荐的状态管理库,设计更简洁,支持 TypeScript,API 更直观。到 2025 年,Pinia 已经成为大多数新项目的首选。

基本概念

Pinia 没有 Mutations,直接通过函数修改状态,分为:

  • State:定义初始状态。
  • Getters:计算属性。
  • Actions:处理逻辑(同步或异步)。
安装与配置

安装 Pinia:

npm install pinia

创建 store:

// stores/counter.js
import { defineStore } from 'pinia';export const useCounterStore = defineStore('counter', {state: () => ({count: 0}),getters: {doubleCount: (state) => state.count * 2},actions: {increment() {this.count++;},async asyncIncrement() {await new Promise(resolve => setTimeout(resolve, 1000));this.count++;}}
});

在 main.js 中引入:

// main.js
import { createApp } from 'vue';
import { createPinia } from 'pinia';
import App from './App.vue';const app = createApp(App);
app.use(createPinia());
app.mount('#app');
使用示例

在组件中使用:

<template><div><p>计数: {{ counter.count }}</p><p>双倍计数: {{ counter.doubleCount }}</p><button @click="counter.increment()">加 1</button><button @click="counter.asyncIncrement()">异步加 1</button></div>
</template><script>
import { useCounterStore } from '@/stores/counter';export default {name: 'Counter',setup() {const counter = useCounterStore();return { counter };}
};
</script>
实际场景

在任务管理应用中,可以用 Pinia 存储任务列表,添加任务时直接调用 Action 更新状态,并在 Getter 中计算未完成任务数量。


Vuex vs Pinia:优缺点对比

特性VuexPinia
学习曲线较陡峭,概念较多简单,直观易上手
TypeScript 支持一般,需要额外配置原生支持,类型友好
性能稍逊(需严格遵守规则)更轻量,性能优化更好
社区趋势逐渐减少,维护为主2025 年主流选择

选择建议

  • 如果你在维护老项目或喜欢严格的结构,选 Vuex。
  • 如果是新项目或追求简洁高效,选 Pinia。

状态管理最佳实践

  1. 模块化:将状态按功能拆分成多个模块(如用户、购物车)。
  2. 单一数据源:避免在组件和 store 中重复定义状态。
  3. 调试工具:用 Vue DevTools 监控状态变化。
  4. 性能优化:避免不必要的 Getter 计算,异步操作加防抖。

实际应用场景

场景 1:用户登录状态

用 Pinia 管理登录状态:

// stores/auth.js
import { defineStore } from 'pinia';export const useAuthStore = defineStore('auth', {state: () => ({isLoggedIn: false,user: null}),actions: {async login(credentials) {const response = await fetch('/api/login', { method: 'POST', body: JSON.stringify(credentials) });const data = await response.json();this.isLoggedIn = true;this.user = data.user;},logout() {this.isLoggedIn = false;this.user = null;}}
});

场景 2:实时计数器

用 Vuex 实现多人协作计数器:

// store/index.js
export default createStore({state: {teamCount: 0},mutations: {updateCount(state, value) {state.teamCount = value;}},actions: {async fetchCount({ commit }) {const response = await fetch('/api/count');const count = await response.json();commit('updateCount', count);}}
});

2025 年技术趋势

到 2025 年,Vue.js 状态管理可能会更倾向于:

  • 组合式 API:Pinia 与 Vue 3 的 Composition API 深度整合。
  • Server-Side State:结合 SSR 和静态站点生成,状态管理更关注服务端。
  • AI 辅助开发:工具可能自动生成状态管理代码,提升效率。

结论

状态管理是 Vue.js 开发中的关键一环。Vuex 提供了强大的功能,适合复杂场景;Pinia 则更轻量、直观,是未来的趋势。通过本文的介绍和示例,你应该能轻松上手这两种工具,并在实际项目中灵活运用。

无论你是做一个小工具还是一个大型应用,掌握状态管理都能让你的代码更整洁、更高效。赶快试试吧,把你的 Vue.js 项目带到一个新高度!

相关文章:

从零基础到最佳实践:Vue.js 系列(5/10):《状态管理》

引言 你是不是正在用 Vue.js 开发一个很酷的应用&#xff0c;然后发现组件之间的数据传递变得越来越混乱&#xff1f;比如&#xff0c;一个按钮的状态要传到好几层组件&#xff0c;或者多个页面需要共享同一个用户信息。这时候&#xff0c;状态管理就登场了&#xff01;在 Vue…...

git checkout HEAD

git checkout HEAD 主要用于将工作目录和暂存区的内容重置为当前 HEAD 指向的提交状态&#xff0c;常用于撤销未提交的修改15。具体行为如下&#xff1a; 一、核心作用 ‌恢复工作区文件‌ 将指定文件或全部文件恢复到 HEAD 指向的提交状态&#xff0c;丢弃工作区中未暂存的修改…...

git工具使用

安装Git 在开始使用Git之前&#xff0c;需要在本地计算机上安装Git工具。Git支持Windows、macOS和Linux系统。可以从Git官方网站下载适合操作系统的安装包&#xff0c;并按照安装向导进行安装。 bash复制插入 # 在Linux上安装Git sudo apt-get install git# 在macOS上安装Git…...

极大似然估计与机器学习

复习概统的时候突然发现好像极大似然估计MLE与机器学习的数据驱动非常相似&#xff0c;都是采样样本然后估计模型参数。貌似&#xff0c;后知后觉的才意识到极大似然估计就是机器学习有效的数学保证 下面以拟合线性分布的最小二乘与分类问题为例推到以下如何从似然函数推导出M…...

基于 Guns v5.1 框架的分页教程

基于 Guns v5.1 框架的分页教程 第一步&#xff1a;Controller 层处理前端请求 在 Controller 中&#xff0c;需要接收 Bootstrap Table 传来的分页参数&#xff08;limit, offset, sort, order&#xff09;。Guns 提供了封装好的 PageFactory 类来简化 Page 对象的创建。 R…...

从零搭建SpringBoot Web 单体项目【基础篇】2、SpringBoot 整合数据库

系列文章 从零搭建SpringBoot Web单体项目【基础篇】1、IDEA搭建SpringBoot项目 从零搭建 SpringBoot Web 单体项目【基础篇】2、SpringBoot 整合数据库 目录 一、项目基础环境说明 二、数据库整合流程 1. 添加 MyBatis-Plus 相关依赖&#xff08;pom.xml&#xff09; 2…...

Supplemental Table 5FAM49B H-SCORE与其他临床特征的关系

以下是针对 Supplemental Table 5 中不同变量类型所需检验方法的 SPSS纯界面操作步骤(严格匹配原文统计方法): Supplemental Table 5 SPSS操作步骤 目标:分析FAM49B H-SCORE与其他临床特征的关系,按变量类型选择检验方法。 变量与检验方法对应表 变量变量类型检验方法SP…...

信息系统项目管理师考前练习4

项目范围基准变更 当客户提出新增功能需求时,项目经理首先应该: A. 立即更新范围说明书 B. 提交变更请求并评估影响 C. 要求团队加班实现 D. 拒绝变更以保持进度 答案:B 解析:所有范围变更必须走正式变更流程(第5版强调变更控制),评估影响是第一步。 混合项目管理模式…...

C语言判断素数(附带源码和解析)

素数&#xff0c;也称为质数&#xff0c;是一个大于 1 的自然数&#xff0c;除了 1 和它本身外&#xff0c;不能被其他自然数整除。换句话说&#xff0c;素数只有两个因子&#xff1a;1 和它自身。例如&#xff0c;2、3、5、7、11 和 13 都是素数。 素数在数学和计算机科学中扮…...

汽车电子电气架构诊断功能开发全流程解析

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...

Xilinx XCAU10P-2FFVB676I 赛灵思 Artix UltraScale+ FPGA

XCAU10P-2FFVB676I 是 AMD Xilinx 推出的 Artix UltraScale™ FPGA 器件&#xff0c;内部集成了约 96,250 逻辑单元&#xff0c;满足中等规模高性能应用的需求。该芯片采用 16 nm FinFET 制程工艺&#xff0c;核心电压典型值约 0.85 V&#xff0c;能够在较低功耗下提供高达 775…...

DS18B20 温度传感器实验探索与实践分享​

DS18B20 温度传感器实验探索与实践分享 在嵌入式系统开发领域&#xff0c;温度监测是常见的应用场景。本次实验聚焦于 DS18B20 温度传感器&#xff0c;旨在掌握其工作原理、单总线通信方式&#xff0c;以及实现温度采集与数码管显示&#xff0c;同时开启温度报警功能。接下来&…...

RT_Thread——内存管理

文章目录 一、为什么要自己实现内存管理二、RT-Thread 的内存管理方法2.1 小内存管理算法2.2 slab 管理算法2.3 memheap 管理算法 三、Heap 相关的函数3.1 rt_system_heap_init3.2 rt_malloc/rt_realloc/rt_calloc2.3 rt_free2.4 rt_malloc_sethook/rt_free_sethook 一、为什么…...

Temporary failure in name resolution

这个错误 ping: baidu.com: Temporary failure in name resolution 通常表示 DNS 解析的问题&#xff0c;也就是说你的系统无法通过域名服务器解析 baidu.com 的 IP 地址。 解决方案&#xff1a; 检查 DNS 配置( 有效 )&#xff1a; 确保系统的 DNS 配置是正确的。你可以检查 …...

【动手学深度学习】1.4~1.8 深度学习的发展及其特征

目录 1.4. 起源1.5. 深度学习的发展1.6. 深度学习的成功案例1.7. 特点1.8. 小结 1.4. 起源 深度学习的起源可追溯至多个领域的长期发展&#xff1a; 统计学基础&#xff1a;早期统计学方法&#xff08;如伯努利分布、高斯分布、最小均方算法&#xff09;和估计思想&#xff08…...

深度学习之序列建模的核心技术:LSTM架构深度解析与优化策略

LSTM深度解析 一、引言 在深度学习领域&#xff0c;循环神经网络&#xff08;RNN&#xff09;在处理序列数据方面具有独特的优势&#xff0c;例如语音识别、自然语言处理等任务。然而&#xff0c;传统的 RNN 在处理长序列数据时面临着严重的梯度消失问题&#xff0c;这使得网…...

Gartner研究报告《Generative AI 赋能Digital Commerce的三种路径》学习心得

一、研究背景 随着生成式 AI(GenAI)技术的迅速发展,其在数字商务领域的应用受到了广泛关注。这篇研究报告深入探讨了 GenAI 在数字商务中的角色以及它如何与现有的数字商务技术相结合来发挥优势,为应用领导者提供了关于如何利用 GenAI 优化技术投资策略的见解。 二、GenA…...

解锁 YOLOv8 新潜能:EfficientViT 主干网络的优化实践与实验数据解读

文章目录 一、YOLO 系列主干网络的发展历程二、EfficientViT&#xff1a;YOLOv8 主干网络的新宠&#xff08;一&#xff09;EfficientViT 的核心优势&#xff08;二&#xff09;EfficientViT 在 YOLOv8 中的集成与实现 三、实验对比&#xff1a;EfficientViT vs. MobileNet 系列…...

【前端基础】12、CSS的overflow(visible、hidden、scroll、auto)【注:只有最基础的说明。】

一、overflow的作用 用于控制内容溢出时的行为。 二、overflow的使用 visible&#xff1a;超出的部分正常显示&#xff08;默认设定&#xff09; hidden&#xff1a;超出的部分隐藏显示&#xff08;直接裁剪掉&#xff09; scroll&#xff1a;超出的部分滚动显示 滚动条…...

创建一个element plus项目

当然可以&#xff01;下面是一个 Vue 3 Element Plus 的最简单完整示例&#xff0c;它包括&#xff1a; 使用 <el-button> 按钮组件点击按钮后用 ElMessage 弹出提示 ✅ 1. 安装并初始化项目&#xff08;如果还没创建项目&#xff09; 你可以用官方推荐的方式快速创建…...

openCV1.1 Mat对象

imread(“D:\souse\duoxile.jpg”, IMREAD_COLOR); 功能: 从指定路径读取图像文件并解码为OpenCV的Mat对象 第一个参数: 文件路径 类型: const string&描述: 要读取的图像文件的绝对或相对路径示例: “D:\souse\duoxile.jpg” 或 “./images/test.png”第二个参数: 读取模…...

C++:array容器

array容器是序列容器&#xff0c;它的特点是&#xff1a;静态&#xff0c;固定数目。可以看作更安全的数组。 它还有一些成员函数&#xff0c;如begin&#xff08;&#xff09;&#xff1a;返回指向容器中第一个元素的随机访问迭代器。 #include<iostream>//数组容器 #…...

26、AI 预测性维护 (燃气轮机轴承) - /安全与维护组件/ai-predictive-maintenance-turbine

76个工业组件库示例汇总 AI 预测性维护模拟组件 (燃气轮机轴承) 概述 这是一个交互式的 Web 组件,旨在模拟基于 AI 的预测性维护 (Predictive Maintenance, PdM) 概念,应用于工业燃气轮机的关键部件(例如轴承)。它通过模拟传感器数据、动态预测剩余使用寿命 (RUL),并根…...

特种兵参会

出发&#xff08;5.15&#xff09; 有了去年去5月去深圳参加OpenTenBase工委会成立的经验&#xff0c;今年这个时候去广州就一定要在下午16点前起飞。恰好到了候机口有蔚来的牛屋&#xff0c;进去躺了一会。飞机顺利到达广州。晚上小聚 总监约了祁总&#xff0c;我们相识多年&…...

手搓四人麻将程序

一、麻将牌的表示 在麻将游戏中&#xff0c;总共有一百四十四张牌&#xff0c;这些牌被分为多个类别&#xff0c;每个类别又包含了不同的牌型。具体来说&#xff0c;麻将牌主要包括序数牌、字牌和花牌三大类。序数牌中&#xff0c;包含有万子、条子和筒子&#xff0c;每种花色…...

一命通关单调栈

前言 我们只是卑微的后端开发。按理说&#xff0c;我们是不需要学这些比较进阶的算法的&#xff0c;可是&#xff0c;这个世界就是不讲道理。最开始&#xff0c;想法是给leetcode中等题全通关&#xff0c;我又不打ACM我去天天钻研hard干嘛&#xff0c;于是碰见单调栈树状数组的…...

NV009NV010美光闪存颗粒NV011NV012

NV009NV010美光闪存颗粒NV011NV012 美光NV009-NV012闪存颗粒技术解析与行业应用全景 一、核心技术架构与制程突破 美光NV009至NV012系列闪存颗粒基于第九代3D TLC架构&#xff0c;通过垂直堆叠技术突破传统2D平面存储的物理限制。该架构将存储单元分层排列&#xff0c;如同将…...

线程、线程池、异步

目录 什么是线程 什么是线程池 什么是异步 异步与线程关系 JS中的异步 什么是线程 线程 Thread 是计算机执行的最小单位&#xff0c;是 进程 内的一个实体&#xff0c;可以被操作系统独立调用和执行 线程可以理解为进程内的“程序执行流”&#xff0c;一个进程可以包含多…...

docker面试题(4)

Docker与Vagrant有何不同 两者的定位完全不同 Vagrant类似于Boot2Docker&#xff08;一款运行Docker的最小内核&#xff09;&#xff0c;是一套虚拟机的管理环境&#xff0c;Vagrant可 以在多种系统上和虚拟机软件中运行&#xff0c;可以在Windows、Mac等非Linux平台上为Docker…...

双检锁(Double-Checked Locking)单例模式

在项目中使用双检锁&#xff08;Double-Checked Locking&#xff09;单例模式来管理 JSON 格式化处理对象&#xff08;如 ObjectMapper 在 Jackson 库中&#xff0c;或 JsonParser 在 Gson 库中&#xff09;是一种常见的做法。这种模式确保了对象只被创建一次&#xff0c;同时在…...

建立java项目

java端: 在idea里面新建一个java,maven项目(springboot): 注意:JDK与java都得是一样的 添加基本的依赖项: 也可以在pom.xml中点击这个,从而跳转到添加依赖 建立三层架构: 在相应的java类中添加代码: <1.UserController package com.example.demo.controller;import com…...

Go语言内存共享与扩容机制 -《Go语言实战指南》

切片作为 Go 中的高频数据结构&#xff0c;其内存共享机制和自动扩容策略直接影响程序性能与行为&#xff0c;深入理解这两者&#xff0c;是高效使用切片的关键。 一、切片的内存结构回顾 切片是对底层数组的一个抽象&#xff0c;其本质是一个结构体&#xff1a; type slice …...

如果教材这样讲--单片机IO口Additional Functions和 Alternate Functions的区别

不管是硬件工程师还是嵌入式软件工程师&#xff0c;都应该能够熟练的看懂数据手册&#xff0c;尤其是英文。在设计单片机外围电路时&#xff0c;工程师需要了解单片机的GPIO口的各项功能来满足自己的设计需求&#xff0c;单片机小白们在查看单片机数据手册时&#xff0c;看到Ad…...

《Effective Java(第三版)》笔记

思维导图 1-4章 5-8章 9-12 章 资料 源码&#xff1a;https://github.com/jbloch/effective-java-3e-source-code...

实践大模型提示工程(Prompt Engineering)

任务目标 本文将结合实战营中的具体案例&#xff0c;分享在提示词设计、模型调用及复杂任务拆解中的实践心得&#xff0c;希望能为读者打开一扇通往 AI 开发实战的窗口。 书生浦语官方链接 实践一——写一段话介绍书生浦语实战营 在提示工程中&#xff0c;第一点给出清晰的…...

东莞一锂离子电池公司IPO终止,客户与供应商重叠,社保缴纳情况引疑

作者&#xff1a;小熊 来源&#xff1a;IPO魔女 5月17日&#xff0c;深交所发布公告称&#xff0c;东莞市朗泰通科技股份有限公司&#xff08;简称朗泰通科技&#xff09;已主动撤回其IPO申请。该公司本次IPO原拟募集资金7.0208亿元&#xff0c;保荐机构为国金证券股份有限公…...

互联网大厂Java求职面试:Spring Cloud微服务架构与AI集成挑战

互联网大厂Java求职面试&#xff1a;Spring Cloud微服务架构与AI集成挑战 引言 在当前快速发展的互联网行业中&#xff0c;Java开发者在面对复杂的分布式系统设计时&#xff0c;需要掌握从微服务架构到AI模型集成的多种技能。本文通过一场模拟面试&#xff0c;深入探讨了基于…...

解决C#泛型类参数无法带参数实例化的问题

概要 本文提供了一个基于C#表达式目录树的方法来解决泛型参数不能调用带参数的构造方法来实例化的问题。 C#泛型的限制 我们看如下的代码&#xff0c;User类需要一个泛型类&#xff0c;泛型类是要以CreditCard为基类。 class User<T> where T :CreditCard, new() {pr…...

微型化GNSS射频前端芯片AT2659S:L1频段多系统支持,SOT23-6封装

AT2659S是一款采用SiGe技术的低噪声放大器&#xff08;LNA&#xff09;&#xff0c;相比传统CMOS工艺&#xff0c;它在功耗和噪声性能上进行了显著优化。该芯片支持L1频段的多模卫星导航系统&#xff0c;包括北斗二代、GPS、伽利略和Glonass&#xff0c;适用于高灵敏度的GNSS接…...

【图像大模型】深度解析RIFE: 基于中间流估计的实时视频插帧算法

基于深度学习的视频插帧算法RIFE技术解析与实战指南 一、项目背景与技术原理1.1 视频插帧技术概述1.2 RIFE核心创新1.3 算法原理详解1.3.1 网络架构1.3.2 损失函数设计1.3.3 时间自适应训练 二、项目部署与执行指南2.1 环境配置2.2 模型推理2.2.1 快速测试2.2.2 视频处理 2.3 模…...

Docker安装Fluentd采集中间件

Fluentd 简介 &#xff1a;Fluentd 是一个高性能、可扩展的数据收集与聚合工具&#xff0c;能够统一数据收集和消费&#xff0c;实现各种数据源到各种数据接收器的高效传输&#xff0c;广泛应用于日志收集等领域。 功能特点 &#xff1a; 统一日志收集 &#xff1a;支持从各种…...

【攻防实战】MacOS系统上线Cobalt Strike

如果巅峰留不住&#xff0c;那就重走来时路 前言 目前在一些攻防项目中遇到的互联网大厂&#xff0c;很多员工使用的都是MacOS主机。研究过程中发现网上这方面分享比较少&#xff0c;这里记录分享一下。 插件安装 配置cna基础文件&#xff0c;注意路径名不能包含中文或特殊…...

基于Resnet-34的树叶分类(李沐深度学习基础竞赛)

目录 一&#xff0c;数据集介绍 1.1 数据集下载 1.2 数据集介绍 二&#xff0c;Resnet-34介绍 三&#xff0c;模型训练 四&#xff0c;模型预测 五&#xff0c;测试结果 5.1 测试集结果 5.2 预测结果 5.3 总结 一&#xff0c;数据集介绍 1.1 数据集下载 本数据集下载…...

PCB设计实践(二十三)什么是阻抗匹配,需要做啥

PCB设计中的阻抗匹配是高速数字电路、射频通信、信号完整性等领域的核心技术&#xff0c;其重要性贯穿从基础理论到复杂系统设计的全流程。本文将从工程实践角度深入探讨阻抗匹配的本质原理、应用场景、设计方法、常见误区及解决方案&#xff0c;全面解析这一影响现代电子设备性…...

网络世界的“变色龙“:动态IP如何重构你的数据旅程?

在深秋的下午调试代码时&#xff0c;我偶然发现服务器日志中出现异常登录记录——IP地址显示为某个境外数据中心。更有趣的是&#xff0c;当我切换到公司VPN后&#xff0c;这个"可疑IP"竟自动消失在了防火墙监控列表中。这个瞬间让我意识到&#xff1a;现代网络架构中…...

Chrome浏览器捕获hover元素样式

–前言– 某些元素&#xff0c;只有hover上去才会看到触发效果&#xff0c;但是鼠标移开就找不到element元素&#xff0c;导致无法调试样式。下属两种方案可参考&#xff1a; 文章目录 一、方式1&#xff1a;通过class伪类触发二、方式2&#xff1a;通过断点调试2.1控制台切换到…...

嵌入式自学第二十五天(5.21)

&#xff08;1&#xff09;二进制文件读写操作&#xff1a; 例&#xff1a; #include<stdio.h> int main() { FILE *fp fopen("a.out","r"); FILE *fp1 fopen("app","w"); if(NULL fp || NULL fp1) { …...

golang库源码学习——Pond,小而精的工作池库

pond 是一个轻量级的 Goroutine 池库&#xff0c;用于高效管理并发任务。它提供了灵活的配置选项和多种策略&#xff0c;适合处理高并发场景。 GitHub - alitto/pond at v1 一、特点&#xff1a; 1.轻量级 pond 的代码库非常精简&#xff0c;它的V1版本仅有四个业务文件&#…...

Microbiome医口经典思路:退烧药物代谢过程如何进行多组学分析?

乙酰氨基酚&#xff08;APAP&#xff09;&#xff0c;俗称扑热息痛&#xff0c;是应用最广泛的镇痛和解热药物之一。以往的研究主要集中在分离APAP降解菌株&#xff0c;了解其降解代谢途径。但微生物群与对乙酰氨基酚之间的相互作用、对乙酰氨基酚降解基因的分布特征以及对乙酰…...

微信小程序AI大模型流式输出实践与总结

背景 让Cursor生成小程序中大模型调用内容回复的流式输出时一直有问题&#xff0c;参考整理此文章。 参考原文&#xff1a;https://blog.csdn.net/weixin_47684422/article/details/145859543 一、什么是流式传输&#xff1f; 流式传输&#xff08;Streaming&#xff09;指的…...