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

解锁动态规划的奥秘:从零到精通的创新思维解析(9)

前言:

        小编在前几日写了关于动态规划中的多状态dp的问题,此时小编将会讲述一个动态规划我们常常会遇到的一类问题——股票问题,股票问题就类似小编上一篇所讲述的粉刷房子的问题,可以通过一个二维的dp表来代替多个一维的dp表。买卖股票算是一个很经典的问题了,下面小编简单介绍一下买卖股票问题。

        “买卖股票问题”作为动态规划的经典案例,不仅在编程竞赛中频繁出现,也是面试中的常考题目。这类问题以其现实背景的贴近性和解法的多样性著称,不仅考察了对动态规划核心思想的掌握,还能帮助我们深入理解状态转移、子问题划分以及优化策略。

        从最基本的一次买卖股票问题,到允许多次买卖甚至设置冷却期和手续费的复杂变体,每一步都体现了动态规划在不同约束条件下的灵活性与精妙性。本篇内容将以逐步深入的方式,剖析买卖股票问题的不同场景,通过数学建模和代码实现,让读者能够全面掌握这一重要的动态规划应用,并在实际问题中灵活运用。


目录

1.买卖股票的最佳时机含冷却期

1.1.题目来源

1.2.题目分析

1.3.思路讲解

1.状态表示

1.2.状态转换方程

3.初始化

4.填表顺序

5.返回值

1.4.代码实操

1.5.代码展示

2.买卖股票的最佳时机含手续费

2.1.题目来源

2.2.题目分析

2.3.思路讲解

1.状态表示

2.状态转换方程

3.初始化

4.填表顺序

5.返回值

2.4.代码书写

2.5.代码展示

3.总结


1.买卖股票的最佳时机含冷却期

1.1.题目来源

本题来自于力扣,下面小编给出相应的链接;309. 买卖股票的最佳时机含冷冻期 - 力扣(LeetCode)

1.2.题目分析

        本题的内容比较短,但是包含了许多内容,下面小编简单的概述一下:此时题目给与我们一个数组,此时这个数组里面的内容表示的是第i天时的股票价格,此时我们可以选择不购买当天的股票,或者是购买当天的股票,也可以选择把手头上的股票卖出,只不过本题多了一个限制——我们在卖出股票的第二天是无法购买股票的,因为有1天的冷却期。此时我们需要设计一个算法,这个算法是帮助我们计算我们在买卖股票的最大理论,这便是这个题目让我们去撰写的函数,并且值得一提的是,我们是不可以去参与多笔交易(我们必须在下次购买股票的时候把手头上的股票先卖出去)。

1.3.思路讲解

1.状态表示

        此时我们需要一个二维的dp表来表示此时的状态,本题目到是让我们写dp表状态的时候很好入手,无非就是表示买入,可交易,冷冻期三种状态罢了,此时我们可以用dp表的三列来分别表示此时的状态。

dp[i][0]; //第i天结束以后,进入"买入"状态,此时的最大理论。
dp[i][1]; //第i天结束以后,进入"可交易"状态,此时的最大理论。
dp[i][2]; //第i天结束以后,进入"冷冻期"状态,此时的最大理论。
1.2.状态转换方程

        此时的状态转换方程其实是本题目的最大难点,因为从题目给定我们的信息我们就可以知道,本题三个状态关系十分的密切,针对于这种情况,此时小编引入了一个小小的模型——状态机。

状态机:动态规划问题中的核心模型

        在动态规划的解决方案中,状态机(State Machine)是一个重要的抽象模型,尤其适用于解决问题有明确状态和状态之间的转移规则时。买卖股票问题是应用状态机的典型场景,通过状态机的建模,我们可以清晰地表达状态的变化和转移,从而找到问题的最优解。

        状态机是一个由状态(State)状态转移(State Transition)组成的系统。在动态规划中,状态机通常用来描述问题在不同时间点的可能状态,以及这些状态之间如何通过某种操作发生转移。

        在买卖股票问题中,状态机可以用来表示每一天结束时的可能状态,比如“手上有股票”或“手上没有股票”,并用状态转移来表达买入、卖出或保持现状的操作。

        下面小编通过图片的方式展示一下状态机的使用方法。

        此时我们先来看买入状态,当前一天是买入状态的时候,证明此时已经买入了股票,所以我们可以选择卖出股票进入冷冻期状态;或者是啥也不干,当天还是买入状态。

        此时我们在看冷冻期状态,此时如果前一天是冷冻期状态,那么根据题意,第二天仅仅只能是进入可交易状态(手里没股票)。

        最后我们再看可交易的状态。如果第二天是可交易状态,那么我们也是有两种选择,分别是:从可交易状态进入买入状态,此时我们需要付费;也可以选择啥也不干,因为股票的价格不好,所以当天还是可交易状态。

        所以我们根据状态机便可以很好的去列状态转换方程,如下所示:

dp[i][0] - max(dp[i - 1][0],dp[i - 1][1] - price[i]);//根据箭头指过来的方向
dp[i][1] = max(dp[i - 1][2],dp[i - 1][1]);
dp[i][2] = max(dp[i - 1][0] + price[i]);
3.初始化

        初始化是我们在写状态转换方程的时候最主要注意的细节问题,此时我们可以知晓此时当我们选择第一个元素的时候就会出现数组越界的问题,针对于这种问题,小编认为多开辟一行作为虚拟节点是最省事的方式,只不过此时我们需要注意虚拟节点需要填入什么。根据题目,我们可以知道在买入状态的时候,此时手里必须有股票,所以dp[I] [0]应该是-price[i - 1](注意下标的映射问题哦),其他的两个位置为0即可。

4.填表顺序

        从上到下,从左到右。

5.返回值

        根据题目,我们仅需返回最后一个位置中最大的元素即可。

1.4.代码实操

        此时我们需要设置好一个dp表,此时这个dp表要比原先给定我们的数组要多开辟一行存入虚拟节点。并且给相应的位置进行初始化即可。

int n = prices.size();
vector<vector<int>> dp(n,vector<int>(3,0));
dp[0][0] = -prices[0];

        此时我们再根据状态转换方程,通过循环填写数据即可。(一定要注意下标的映射)

for(int i = 1 ; i < n ; i++)
{dp[i][0] = max(dp[i - 1][0],dp[i - 1][1] - prices[i]);dp[i][1] = max(dp[i-1][1],dp[i-1][2]);dp[i][2] = dp[i-1][0] + prices[i];
}

        最后,我们返回最后一个位置最大的数据即可。

 return max(dp[n - 1][1],dp[n - 1][2]);

1.5.代码展示

class Solution {
public:int maxProfit(vector<int>& prices) {int n = prices.size();vector<vector<int>> dp(n,vector<int>(3,0));dp[0][0] = -prices[0];for(int i = 1 ; i < n ; i++){dp[i][0] = max(dp[i - 1][0],dp[i - 1][1] - prices[i]);dp[i][1] = max(dp[i-1][1],dp[i-1][2]);dp[i][2] = dp[i-1][0] + prices[i];}return max(dp[n - 1][1],dp[n - 1][2]);}
};

2.买卖股票的最佳时机含手续费

2.1.题目来源

        本题还是来自于力扣,下面小编给出具体题目的链接:714. 买卖股票的最佳时机含手续费 - 力扣(LeetCode)

2.2.题目分析

        下面就到了喜闻乐见的题目分析环节,本题其实和第一个题高度相似,只不过本题比第一个题要少了冷却期,多了手续费环节,所以此时我们在用状态机分析股票的时候,我们无须在分析三个状态,仅需两个状态我们就可以把这个题目做出来,只不过此时我们在每一次交易完成的时候都需要付手续费,这是和第一个题不同的地方,但是整体来说,本题的难度其实已经算是下降了,下面小编讲述一下本题的理论讲解。

2.3.思路讲解

        首先,本题可以通过设置一个二维的dp表或者建立两个一维的dp表来实现本题的思路分析,这里我选用的是两个一维的dp表来实现的,分别叫f表和g表,那么接下来我们就可以按照动态规划五步走来实现本题目的思路讲解。

1.状态表示

        此时我们通过题目的定义来对两个表进行正确的状态表示,此时我们可以清晰的知道本题一共就两个状态,分别是买入状态和卖出状态,所以小编此时便对两个表根据之和两个状态进行了定义。

f[i]; //到达i位置的时候,处于买入状态,此时的最大利润。
g[i]; //到达i位置的时候,处于卖出状态,此时的最大理论
2.状态转换方程

        此时我们就可以通过状态表示来写出状态转换方程了,不过由于本题的复杂度蛮高的,所以小编还是推荐各位使用状态机来正确表示出状态转换方程,因为状态机可以极大程度上减少我们出错的概率。其状态如下图所示:

        如果此时我们当天是买入状态,那么它的前一天可能还是买入状态,或者前一天是卖出状态,通过买股票进入了买入状态。

        如果当天是卖出状态,那么前一天可能还是卖出状态,或者前一天是买入状态,只不过此时卖出了股票进入了卖出状态,此时我们有一个值得注意的点,那就是此时我们已经涉及到了手续费问题,因为已经完成了一笔交易,所以我们在得到卖股票的钱的时候,记得把手续费也交一下。

        此时我们就完整的写出一个状态机,下面我们就可以根据状态机写出状态转移方程了,此时我们需要取到每一个状态的最大值,因为此时我们要得到最大理论。

f[i] = max(f[i - 1],g[i - 1] - prices[i]);
g[i] = max(g[i - 1],f[i - 1] + prices[i] - fee);
3.初始化

        本题的越界问题还是很好发现的,此时当我们是第一个元素的时候,我们无法知道上一个元素的状态,因为上一个元素已经是越界状态了,我们可以根据每一个表的定义,来对第一个位置进行初始化,由于f表代表买入,所以第一个位置的元素肯定是买入了,而g表表示的卖出,因为第一个位置的元素没法卖掉,所以此时我们的g[0]就是0。

f[0] = -pirce[0]; 
g[0] = 0;
4.填表顺序

        从左到右依次填写即可。

5.返回值

        按理说此时我们返回两个表最后一个位置最大元素即可,但是此时我们通过定义就可以知道此时的f表代表着买入,g表代表着卖出,买入和卖出,仔细一想便可以知道当我们手里没股票的时候,证明此时我们的理论已经是最高了,所以我们仅需返回g表最后一个位置的元素即可。

2.4.代码书写

        首先,我们先要创建好两个dp表,它们的大小跟着给定数组的大小一致即可,然后把相应位置的元素进行初始化。

int n = prices.size();
vector<int> f(n); //这个状态表示买入状态,此时手上有股票
vector<int> g(n);  //这个表示卖出状态,此时手上没股票
f[0] = -prices[0];

        创建完表后,我们就可以根据之前我们分析的状态转换方程来填表了,此时我们借助循环就可以做到,填完表后,我们返回g表最后一个位置的元素即可。

for(int i = 1 ; i < n ; i++)
{f[i] = max(f[i - 1],g[i - 1] - prices[i]);g[i] = max(g[i - 1],f[i - 1] + prices[i] - fee);
}
return g[n - 1];

2.5.代码展示

class Solution {
public:int maxProfit(vector<int>& prices, int fee) {int n = prices.size();vector<int> f(n); //这个状态表示买入状态,此时手上有股票vector<int> g(n);  //这个表示卖出状态,此时受伤没股票f[0] = -prices[0];for(int i = 1 ; i < n ; i++){f[i] = max(f[i - 1],g[i - 1] - prices[i]);g[i] = max(g[i - 1],f[i - 1] + prices[i] - fee);}return g[n - 1];}
};

3.总结

        本文到这里也就结束了,这是小编第一次讲述股票问题,所以内容有问题的话私信我即可,直接在评论区给我指点一下也没有问题,小编在写本文章的时候,已经度过了艰难的期末周,所以我现在十分舒畅,我准备在这几天多产出几篇文章以备不时之需,一起写题的时光总是很短暂的,那么各位大佬们,我们下一篇文章见啦。

相关文章:

解锁动态规划的奥秘:从零到精通的创新思维解析(9)

前言&#xff1a; 小编在前几日写了关于动态规划中的多状态dp的问题&#xff0c;此时小编将会讲述一个动态规划我们常常会遇到的一类问题——股票问题&#xff0c;股票问题就类似小编上一篇所讲述的粉刷房子的问题&#xff0c;可以通过一个二维的dp表来代替多个一维的dp表。买卖…...

redis 配置日志和数据存储位置

Redis配置日志和数据存储位置 介绍 Redis是一个开源的高性能键值存储数据库&#xff0c;常用于缓存、消息队列和实时分析等场景。在使用Redis时&#xff0c;我们需要配置日志和数据存储位置&#xff0c;以便更好地管理和监控Redis的运行状态。本文将介绍如何配置Redis的日志和数…...

STL详解 - stack与queue的模拟实现

目录 一、容器适配器 1. 什么是适配器模式 2. stack与queue的底层结构 3. deque的原理与缺陷 3.1 deque的原理 3.2 deque的缺陷 4. 为何选择deque作为默认底层容器 二、stack与queue的模拟实现 1. stack的实现 2. queue的实现 一、容器适配器 1. 什么是适配器模式 适…...

Chromium 134 编译指南 macOS篇:获取源代码(四)

1. 引言 在Chromium 134的开发之旅中&#xff0c;获取源代码是一个至关重要的里程碑。本文将引导您完成这一关键步骤&#xff0c;为后续的编译和开发工作奠定坚实的基础。无论您是出于学习目的&#xff0c;还是计划开发自己的浏览器项目&#xff0c;掌握获取Chromium源码的方法…...

关于 IntelliJ IDEA 中频繁出现的 Kotlin 及其核心作用

关于 IntelliJ IDEA 中频繁出现的 Kotlin 及其核心作用 1. Kotlin 是什么&#xff1f; Kotlin 是由 JetBrains&#xff08;IntelliJ IDEA 的开发商&#xff09;设计的一种现代化编程语言&#xff0c;2016年正式发布&#xff0c;2017年被 Google 指定为 Android 官方开发语言。…...

MYOJ_11700(UVA10591)Happy Number(快乐数)(超快解法:图论思想解题)

原题(English) Let the sum of the square of the digits of a positive integer S0S0​ be represented by S1S1​. In a similar way, let the sum of the squares of the digits of S1S1​ be represented by S2S2​ and so on. If Si1Si​1 for some i≥1i≥1, then the or…...

2843. 统计对称整数的数目

2843. 统计对称整数的数目 题目链接&#xff1a;2843. 统计对称整数的数目 代码如下&#xff1a; class Solution { public:int countSymmetricIntegers(int low, int high) {int res 0;for (int i low;i < high;i) {string s to_string(i);int n s.size();if (n % 2 …...

【模块化拆解与多视角信息6】自我评价:人设构建的黄金50字——从无效堆砌到精准狙击的认知升级

写在最前 作为一个中古程序猿,我有很多自己想做的事情,比如埋头苦干手搓一个低代码数据库设计平台(目前只针对写java的朋友),比如很喜欢帮身边的朋友看看简历,讲讲面试技巧,毕竟工作这么多年,也做到过高管,有很多面人经历,意见还算有用,大家基本都能拿到想要的offe…...

ServletRequestAttributeListener 的用法笔记250417

ServletRequestAttributeListener 的用法笔记250417 以下是关于 ServletRequestAttributeListener 的用法详解&#xff0c;涵盖核心方法、实现步骤、典型应用场景及注意事项&#xff0c;帮助您有效监听请求级别属性&#xff08;ServletRequest 中的属性&#xff09;的变化&…...

大模型在胃十二指肠溃疡预测及诊疗方案制定中的应用研究

目录 一、引言 1.1 研究背景与目的 1.2 国内外研究现状 1.3 研究方法和创新点 二、大模型相关理论基础 2.1 大模型的基本原理 2.2 适用于医疗领域的大模型类型 2.3 大模型在医疗领域的应用现状和潜力 三、胃十二指肠溃疡的疾病特征 3.1 疾病概述 3.2 诊断方法 3.3 …...

第九节:React HooksReact 18+新特性-React 19的use钩子如何简化异步操作?

对比&#xff1a;useEffect vs use处理Promise 代码题&#xff1a;用use改写数据请求逻辑 React 19 use 钩子&#xff1a;异步操作革命性简化方案&#xff08;附完整代码对比&#xff09; 一、useEffect vs use 处理 Promise 核心差异对比 对比维度useEffect 方案use 钩子方案…...

【React】项目的搭建

create-react-app 搭建vite 搭建相关下载 在Vue中搭建项目的步骤&#xff1a;1.首先安装脚手架的环境&#xff0c;2.通过脚手架的指令创建项目 在React中有两种方式去搭建项目&#xff1a;1.和Vue一样&#xff0c;先安装脚手架然后通过脚手架指令搭建&#xff1b;2.npx create-…...

方案精读:华为数字化转型实践案例合集【附全文阅读】

华为数字化转型旨在通过数字化变革实现全连接的智能华为,成为行业标杆,提升客户满意度和运营效率。其以客户为中心,基于 “双轮驱动” 理念,从转意识、方法、文化、组织、模式等方面入手,构建数字化平台,推进数据治理,保障安全,开展业务重构。通过合同 360、产品设计与…...

VScode使用Pyside6(环境篇)

Pyside6的环境搭建&#xff1a; cmd命令窗口输入&#xff1a;pip install pyside6 使用everthing进行查找&#xff1a;&#xff08;非常好用的一款搜索工具 &#xff09; 进入PySide6文件夹中&#xff0c;点击designer.exe,查看是否能够点开。 VScode环境搭建&#xff1a; 下…...

智能云图库-12-DDD重构

本节重点​ 之前我们已经完成了本项目的功能开发。由于本项目功能丰富、代码量大&#xff0c;如果是在企业中维护开发的项目&#xff0c;传统的 MVC 架构可能会让后续的开发协作越来越困难。所以本节鱼皮要从 0 带大家学习一种新的架构设计模式 —— DDD 领域驱动设计。 大纲…...

Linux 网络配置

文章目录 网络基础知识IP地址子网掩码DNS Linux操作系统网络配置 网络基础知识 IP地址 IP地址是用于区分同一个网络中的不同主机的唯一标识。 Internet中的主机要与其他机器通信必须具有一个IP地址&#xff0c;因为网络中传输的数据包必须携带目的IP地址和源IP地址&#xff…...

05-DevOps-Jenkins自动拉取构建代码2

通过前面的操作&#xff0c;已经成功完成了源代码的打包工作&#xff0c;具体操作参见下面的文章&#xff1a; 05-DevOps-Jenkins自动拉取构建代码-CSDN博客 验证打包文件 验证打包后的文件是否存在&#xff0c;进入到Jenkins的工作目录中&#xff0c;找到对应的jar包&#x…...

ESP32之OTA固件升级流程,基于VSCode环境下的ESP-IDF开发,基于阿里云物联网平台MQTT-TLS连接通信(附源码)

目录 1.创建产品和设备 2.准备工作 2.1 获取基础工程 2.2 基本知识概述 2.2.1 OTA升级流程 2.2.2 主题和数据格式 &#xff08;1&#xff09;设备上报版本号 ①请求主题&#xff08;设备 -> 阿里云&#xff09;&#xff1a; ②响应主题&#xff08;阿里云->设备…...

【秣厉科技】LabVIEW工具包——OpenCV 教程(20):拾遗 - imgproc 基础操作(下)

文章目录 前言imgproc 基础操作&#xff08;下&#xff09;8. 霍夫检测9. 滤波与模糊10. 拟合与包围 总结 前言 需要下载安装OpenCV工具包的朋友&#xff0c;请前往 此处 &#xff1b;系统要求&#xff1a;Windows系统&#xff0c;LabVIEW>2018&#xff0c;兼容32位和64位。…...

kafka发送消息,同时支持消息压缩和不压缩

1、生产者配置 nacos中增加配置&#xff0c;和公共spring-kafka配置字段有区分 需要发送压缩消息时&#xff0c;使用该配置类发送即可 import org.apache.kafka.clients.producer.ProducerConfig; import org.springframework.beans.factory.annotation.Autowired; import or…...

AOSP世界时间的更新

在 AOSP&#xff08;Android Open Source Project&#xff09;中&#xff0c;世界时间的更新主要涉及设备时区数据的管理和更新&#xff0c;以确保设备能够正确显示全球各地的时间。AOSP 依赖 IANA 时区数据库&#xff08;也称为 tzdata&#xff09;来提供时区规则和世界时间数…...

Python + 链上数据可视化:让区块链数据“看得懂、用得上”

Python + 链上数据可视化:让区块链数据“看得懂、用得上” 区块链技术的透明性和去中心化特性,使得链上数据成为金融、供应链、NFT 以及 DeFi 领域的关键参考。可是,对于普通用户而言,链上数据往往晦涩难懂,难以直接利用。那么,如何利用 Python 提取、分析并直观展示链上…...

方德桌面操作系统V5.0-G23 vim无法复制粘贴内容

1.修改 Vim 配置文件 rootyuhua-virtualmachine:/etc/docker# sudo vim /usr/share/vim/vim82/defaults.vim 2.在第82行找到set mousea行&#xff0c;将其为set mouse-a。如果文件中没有set mousea&#xff0c;则修改添加set mouse-a。 3.保存文件并退出 Vim&#xff1a; 4…...

[linux] vim 乱码

1. 确保终端支持中文 设置终端编码为 UTF-8,运行: echo $LANG如果不是 UTF-8(如 en_US.UTF-8),你可以设置为: export LANG=zh_CN.UTF-8 export LC_ALL=zh_CN.UTF-8 2. 确保 Vim 使用 UTF-8 编码 打开 .vimrc 或输入以下命令: :set encoding=utf-8 :set fileencodin…...

天洑参加人工智能校企产学研及人才对接活动——走进南京大学人工智能学院

4月15日&#xff0c;人工智能校企产学研及人才对接——走进南京大学人工智能学院活动在南京大学成功举办。此次活动由江苏省人工智能学会、南京大学人工智能学院主办&#xff0c;江苏省工业和信息化厅党组成员、副厅长池宇&#xff0c;南京大学副校长周志华出席。江苏省工业和信…...

33、单元测试实战练习题

以下是三个练习题的具体实现方案&#xff0c;包含完整代码示例和详细说明&#xff1a; 练习题1&#xff1a;TDD实现博客评论功能 步骤1&#xff1a;编写失败测试 # tests/test_blog.py import unittest from blog import BlogPost, Comment, InvalidCommentErrorclass TestBl…...

《AI大模型应知应会100篇》第22篇:系统提示词(System Prompt)设计与优化

第22篇&#xff1a;系统提示词(System Prompt)设计与优化 摘要 在大语言模型&#xff08;LLM&#xff09;应用中&#xff0c;系统提示词&#xff08;System Prompt&#xff09;是控制模型行为的核心工具之一。它不仅定义了模型的身份、角色和行为规范&#xff0c;还直接影响输…...

【KWDB 创作者计划】_深度学习篇---松科AI加速棒

文章目录 前言一、简介二、安装与配置硬件连接驱动安装软件环境配置三、使用步骤初始化设备调用SDK接口检测设备状态:集成到AI项目四、注意事项兼容性散热固件更新安全移除五、硬件架构与技术规格核心芯片专用AI处理器内存配置接口类型物理接口虚拟接口能效比散热设计六、软件…...

【Quest开发】在虚拟世界设置具有遮挡关系的透视窗口

软件&#xff1a;Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72 硬件&#xff1a;Meta Quest3 仅针对urp管线 参考了YY老师这篇&#xff0c;可以先看他的再看这个可能更好理解一些&#xff1a;Unity Meta Quest MR 开发&#xff08;七&#xff09;&#xff1a;使…...

Spark on K8s 在vivo大数据平台的混部实战

作者&#xff1a;vivo 互联网大数据团队- Qin Yehai 在离线混部可以提高整体的资源利用率&#xff0c;不过离线Spark任务部署到混部容器集群需要做一定的改造&#xff0c;本文将从在离线混部中的离线任务的角度&#xff0c;讲述离线任务是如何进行容器化、平台上的离线任务如何…...

Mac配置Java的环境变量

刚拿到手的Mac mini M4如何去设置java的环境变量&#xff1f; 第一步&#xff1a; 首先&#xff0c;你先下载好intelliJ IDEA&#xff0c;然后在里面自带的jdk列表里选择你自己想要使用的jdk的版本以及供应商。 下面是我自己使用的jdk版本以及供应商&#xff1a; 第二步&am…...

RPCRT4!OSF_CCONNECTION::OSF_CCONNECTION函数分析之创建一个RPCRT4!OSF_CCALL--RPC源代码分析

RPCRT4!OSF_CCONNECTION::OSF_CCONNECTION函数分析之创建一个RPCRT4!OSF_CCALL 第一部分&#xff1a; 1: kd> p RPCRT4!OSF_CCONNECTION::OSF_CCONNECTION0x167: 001b:77bf6957 393dec35c877 cmp dword ptr [RPCRT4!gfRPCVerifierEnabled (77c835ec)],edi 1: kd> …...

6、事件处理法典:魔杖交互艺术——React 19 交互实现

一、魔杖启灵&#xff1a;交互魔法的本质 "记住&#xff0c;巫师们&#xff01;魔杖的每一次挥动都是与魔法世界的对话&#xff0c;"麦格教授的魔杖在空中划出金色事件流&#xff0c;"React 19的useTransition如同时间转换器&#xff0c;让麻瓜设备也能感知魔杖…...

.net C# 使用Epplus库将Datatable导出到Excel合并首列

最近处理大量数据,需单独导出到首列名称一致的excel,Epplus免费,效率spire高,在Nuget添加Epplus。因为特殊原因,不能使用数据库,只能由数据源导出到excel;最终处理39万行输出到单独的excel文件时间2分钟。 一、EPPlus 基础介绍 ​EPPlus​ 是一个开源的 .NET 库(适用…...

【gpt生成-总览】怎样才算开发了一门编程语言,需要通过什么测试

开发一门真正的编程语言需要经历完整的设计、实现和验证过程&#xff0c;并通过系统的测试体系验证其完备性。以下是分阶段开发标准及测试方法&#xff1a; 一、语言开发核心阶段 1. 语言规范设计&#xff08;ISO/IEC 标准级别&#xff09; ​​语法规范​​&#xff1a;BNF/…...

网络417 路由转发2 防火墙

路由器临时开启路由转发功能 查看节点a网关ip 节点b网关 1.开启路由器路由转发功能。 2.配置到节点a 节点b的网络。 节点a因为和节点b不在同一网段&#xff0c;计划通过网关直达 网关就是中间节点路由器的ip地址 再Ping另一个 计划节点bping节点c ping不通 是因为 修改了…...

HttpSessionAttributeListener 的用法笔记250417

HttpSessionAttributeListener 的用法笔记250417 以下是关于 HttpSessionAttributeListener 的用法详解&#xff0c;涵盖核心方法、应用场景、实现步骤及关键注意事项&#xff0c;帮助您有效监听会话&#xff08;HttpSession&#xff09;中属性的动态变化&#xff1a; 1. 核心功…...

Spring Boot 实现 Excel 导出功能(支持前端下载 + 文件流)

&#x1f9e0; 一、为什么用 EasyExcel&#xff1f; 在 Java 开发中&#xff0c;操作 Excel 的框架主要有&#xff1a; Apache POI&#xff08;经典但慢、内存占用大&#xff09; JXL&#xff08;老旧不维护&#xff09; Alibaba EasyExcel&#xff08;阿里出品&#xff0c;…...

Java动态批量生成logback日志文件

应用场景举个例子&#xff1a; 当我一个服务需要启动n个端口&#xff0c;来监听n个来源的数据&#xff0c;并且处理数据逻辑一致&#xff1b;但是我想要它们的日志分开文件夹来打印&#xff0c;从而更好的分析问题&#xff0c;那么就可以用我下面提供的模版了&#xff1b; 动态…...

从原理到实践:NFS复杂故障处理方法论

#作者&#xff1a;孙德新 文章目录 一、nfs使用概述二、疑难故障现象描述三、原理分析四、解决方案五、优化服务器资源配置&#xff1a;六、故障案例总结七、故障预防建议八、nfs优化方法 一、nfs使用概述 NFS&#xff08;Network File System&#xff09;是一种分布式文件系…...

SAP FI固定资产报错:在折旧范围 30 中的业务与帐面净值规则冲突 - 解决方法

一、问题描述 消息号 AA660 诊断 由于和在区域30中检查的净帐面价值规则相反&#xff0c;不能过帐该凭证。 过程 当输入比例值时会出现此错误。比例值超过过帐金额&#xff0c;如 100 的后续资本化&#xff0c;但该金额的比例折旧为 110。请检查输入项并做需要的更正。 二、…...

Go语言从零构建SQL数据库(8):执行计划的奥秘

从SQL语句到高效查询&#xff1a;执行计划的奥秘 想象你是一位旅行者&#xff0c;想从北京到上海。你告诉导航软件你的目的地&#xff08;类似SQL查询&#xff09;&#xff0c;但导航软件需要为你规划具体路线——是走高速公路还是国道&#xff1f;是选择最短距离还是最省时间…...

UNet 改进(12):UNet with ECA (Efficient Channel Attention) 网络

详解 下面将详细解析这个实现了ECA注意力机制的UNet网络代码。 1. 代码概述 代码实现了一个带有Efficient Channel Attention (ECA)模块的UNet网络架构。 UNet是一种常用于图像分割任务的编码器-解码器结构网络,而ECA模块则是一种轻量级的通道注意力机制,可以增强网络对重…...

关于 AI驱动的智慧家居、智慧城市、智慧交通、智慧医疗和智慧生活 的详细解析,涵盖其定义、核心技术、应用场景、典型案例及未来趋势

以下是关于 AI驱动的智慧家居、智慧城市、智慧交通、智慧医疗和智慧生活 的详细解析&#xff0c;涵盖其定义、核心技术、应用场景、典型案例及未来趋势&#xff1a; 一、AI智慧家居 1. 定义与核心功能 定义&#xff1a;通过AI与物联网&#xff08;IoT&#xff09;技术&#…...

Windows11-24h2的任务栏时间显示秒 笔记250417

Windows11-24h2的任务栏时间显示秒 笔记250417 打开注册表编辑器 WinR输入 regedit 回车。 修改注册表项 定位到路径&#xff1a; HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced右键右侧空白处 → 新建【DWORD (32位)值】→ 命名为 ShowSec…...

机器学习的简单应用

什么是机器学习&#xff1f; 定义&#xff1a; ‌机器学习&#xff08;Machine Learning, ML&#xff09;‌ 是人工智能&#xff08;AI&#xff09;的一个子领域&#xff0c;其核心是 ‌通过算法让计算机从数据中自动学习规律&#xff0c;并基于这些规律对新数据做出预测或决策…...

双 Token 与 单 Token 优缺点

双Token与单Token认证机制对比 在Web应用开发中&#xff0c;身份认证和授权是保障系统安全的核心环节。随着技术演进&#xff0c;基于Token的认证机制逐渐取代传统Session方案&#xff0c;而双Token与单Token架构的选型争议也日益成为开发者关注的焦点。本文将从技术原理、优缺…...

第五章 SQLite数据库:6、SQLite 常用语法1

SQLite Insert 语句 SQLite 的 INSERT INTO 语句用于向数据库的某个表中添加新的数据行。 语法 INSERT INTO 语句有两种基本语法&#xff0c;如下所示&#xff1a; INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)] VALUES (value1, value2, value3,...…...

JVM考古现场(二十二):降维打击·用二向箔优化内存模型

"警报&#xff01;三维堆内存正在经历二维化坍缩&#xff01;" 我腰间的玄铁令突然震动&#xff0c;在蜀山剑派的量子剑阵中投射出诡异的曼德博分形——这是三体文明发动降维打击的铁证&#xff01; 楔子&#xff1a;二向箔奇点降临 昆仑镜监控日志&#xff1a; // …...

eclipse常用快捷键

Eclipse 是一款功能强大的 Java 集成开发环境&#xff08;IDE&#xff09;&#xff0c;熟练掌握其快捷键可以显著提高开发效率。下面是一些常用的 Eclipse 快捷键分类介绍&#xff1a; 编辑相关快捷键 操作快捷键说明内容辅助Alt /调出代码提示和自动补全功能&#xff0c;根…...