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

杂记-LeetCode中部分题思路详解与笔记-HOT100篇-其三

时光荏苒啊,没想到这么快就到了四月份...

这个坑好久没写了,现在我们重启一下。

我看了一下之前的笔记,似乎是停留在了链表部分且HOT100中可以说最重要的链表题之一:LRU缓存居然没有写,真是岂有此理,让我们从这道脍炙人口的好题说起(好在哪呢)。

乍一看非常的唬人,如果你仔细阅读,会发现其实本质上get和put干的事就是哈希表干的事:查找和插入,当然他规定你必须以O1的时间复杂度进行,查找的时间复杂度为O1,那更离不开哈希表了,插入的时间复杂度也要为O1,那没办法了,只能上链表了。综上,显然这个题就是一个要用哈希表实现找,用链表实现插入的结构题。如果只是这样的话,那么不会非常困难,但其实LRU本身还有一个要求:最近最少使用,也就是一种算法思想:我们用的最少的东西就丢后面去,而一旦我们的容量达到上限,我们会优先摒弃最长时间未使用的数据,要在哈希表和链表的基础上实现这个功能才是关键。这里最难的部分其实是想到用双向链表来标记最长时间未使用的数据,这样我们可以直接把虚拟头结点的上一位丢掉,没有更繁琐的步骤。

我们首先写好链表部分的代码:

class Node{
public:int key,value;Node* prev,*next;Node(int k=0,int v=0):key(k),value(v){};
};

创建链表类,这里我们在构造函数里添加了一个默认参数值,这样即使我们用new Node()的写法也会自动给我们的key和value赋予0的值。当然,很重要的,别忘了Public。

private:Node* dummy;int capacity;unordered_map<int,Node*> mp;void remove(Node* node){node->prev->next=node->next;node->next->prev=node->prev;}void push_front(Node* node){node->prev=dummy;node->next=dummy->next;node->next->prev=node;node->prev->next=node;}Node* get_node(int x){auto it=mp.find(x);if(it==mp.end())return nullptr;Node* node=it->second;remove(node);push_front(node);return node;}

我们接着写了三个函数,移除,置前和查找。具体的函数内容都非常的简单而具体,不如说为什么要这样做呢?因为事实上当我们的Put函数调用时,我们要把这个put的节点放置到我们的链表的首部(因为他刚刚被使用过),我们当然也可以把这些所有功能全部塞进我们的put函数里,但那样会非常的不美观且看起来非常混乱。

public:LRUCache(int capacity):dummy(new Node()),capacity(capacity) {dummy->next=dummy;dummy->prev=dummy;}int get(int key) {auto node=get_node(key);return node==nullptr?-1:node->value;}void put(int key, int value) {auto node=get_node(key);if(node!=nullptr){node->value=value;return;}Node* toAdd=new Node(key,value);mp[key]=toAdd;push_front(toAdd);if(mp.size()>capacity){Node* toDelete=dummy->prev;mp.erase(toDelete->key);remove(toDelete);delete toDelete;}return;

剩下的就不用多说了,就是缺啥补啥。

class Node{
public:int key,value;Node* prev,*next;Node(int k=0,int v=0):key(k),value(v){};
};
class LRUCache {
private:Node* dummy;int capacity;unordered_map<int,Node*> mp;void remove(Node* node){node->next->prev=node->prev;node->prev->next=node->next;}void push_front(Node* node){node->prev=dummy;node->next=dummy->next;node->next->prev=node;node->prev->next=node;}Node* get_node(int x){auto it=mp.find(x);if(it==mp.end())return nullptr;Node* node=it->second;remove(node);push_front(node);return node;}
public:LRUCache(int capacity):dummy(new Node()),capacity(capacity) {dummy->next=dummy;dummy->prev=dummy;}int get(int key) {auto node=get_node(key);return node==nullptr?-1:node->value;}void put(int key, int value) {auto node=get_node(key);if(node!=nullptr){node->value=value;return;}Node* toAdd=new Node(key,value);mp[key]=toAdd;push_front(toAdd);if(mp.size()>capacity){Node* toDelete=dummy->prev;mp.erase(toDelete->key);remove(toDelete);delete toDelete;}return;}
};/*** Your LRUCache object will be instantiated and called as such:* LRUCache* obj = new LRUCache(capacity);* int param_1 = obj->get(key);* obj->put(key,value);*/

这个题只能说确实很麻烦,可以说是纯粹的模拟题:

我们要将二叉树退化成链表且要求链表的顺序符合先序链表,我们从根节点出发遍历所有节点,往左检查,如果当前根节点的左节点的值大于当前节点,我们就得丢到右边去,那么我们首先从左节点开始,往右边遍历到最后一个节点,然后把根节点的整个右子树接到左节点的最后一个右节点,然后再把整个左节点搬到右节点去:这么复杂的操作,无非是保留右子树的结构的同时把左节点换到右边,然后我们继续遍历左边的节点即可。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:void flatten(TreeNode* root) {TreeNode* cur=root;while(cur){if(cur->left){TreeNode* pre=cur->left,* tail=pre;while(tail->right)tail=tail->right;tail->right=cur->right;cur->left=nullptr;cur->right=pre;}cur=cur->right;}}
};

这个题要我们去求节点值之和为targetSum的路径数量,显然这里我们需要去遍历整个树并带着节点值了,最简单的做法自然就是将我们的targetSum作为函数参数的一部分,通过递归不断更新路径总量值来做,然后这里还需要注意的是我们没有要求一定经过根节点,那么除了根节点的部分我们还要考虑左右子树。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:long long rootSum(TreeNode* cur, long long targetSum){if(!cur)return 0;long long res=0;if(cur->val==targetSum)++res;res+=rootSum(cur->left, targetSum-cur->val);res+=rootSum(cur->right, targetSum-cur->val);return res;}long long pathSum(TreeNode* root, long long targetSum) {if(!root)return 0;long long res=0;res+=rootSum(root, targetSum);res+=pathSum(root->left, targetSum);res+=pathSum(root->right, targetSum);return res;}
};

代码里的long long是因为有一些奇怪的样例无法用int通过,无伤大雅。

我们来看看回溯的题单,说实话,回溯这方面代码随想录的题单更优秀,总结得非常到位,推荐大家去做。回到题目本身,我们本质上要去不断划分子串并判断该子串是否为回文字串,那么不可避免地要写一个判断回文子串的辅助函数,至于如何划分这个子串的部分,不难发现其实就是回溯的过程:我们要不断地暴搜所有可能的划分情况并一个一个进行检查。

class Solution {
public:vector<vector<string>> res;vector<string> temp;bool helper(string s,int l,int r){while(l<r){if(s[l]!=s[r])return false;++l;--r;}return true;}void backtrack(string s,int index){if(index==s.size()){res.push_back(temp);return;}for(int i=index;i<=s.size();++i){if(helper(s,index,i)){temp.push_back(s.substr(index,i-index+1));backtrack(s,i+1);temp.pop_back();}}}vector<vector<string>> partition(string s) {backtrack(s,0);return res;}
};

这个题要求我们去找目标值的第一个和最后一个位置,其实就是找左边界和右边界嘛,那么如何找到左边界呢?我们依然用二分法,不过我们的判断条件发生一些改变:对于左边界来说,我们当然要用右指针来找:找到最后符合要求的右指针,就是我们的左边界;反之,我们最后符合要求的左指针就是我们的右边界。最后我们还要注意两点:第一是我们求出来的并不是最后符合的指针位置而是多向前了一位,或者说叫第一个不符合要求的下标,所以我们要进行一个基本的改动(l+1,r-1);第二就是我们的l和r两个指针的间隔。

class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {int l=getLeft(nums,target),r=getRight(nums,target);if(l==-2)return {-1,-1};if(r-l>1)return {l+1,r-1};return {-1,-1};}int getLeft(vector<int>& nums, int target){int l=0,r=nums.size()-1,leftBound=-2;while(l<=r){int mid=(l+r)/2;if(target>nums[mid])l=mid+1;else{r=mid-1;leftBound=r;}}return leftBound;}int getRight(vector<int>& nums, int target){int l=0,r=nums.size()-1,rightBound=-2;while(l<=r){int mid=(l+r)/2;if(target<nums[mid])r=mid-1;else{l=mid+1;rightBound=l;}}return rightBound;}
};

旋转排序数组问题,最核心的思想就是去判断当前下标是在左边区间还是右边区间,除此之外也没有太多新东西。

对于寻找最小值,我们可以这样想:旋转后的数组就是两个递增区间组成的数组,那么我们就直接拿mid值和我们的nums.back()比较,因为最小值在第二个递增区间的第一个元素。

class Solution {
public:int findMin(vector<int>& nums) {int left=0,right=nums.size()-1;while(left<right){int mid=(left+right)/2;if(nums[mid]<nums.back()){right=mid;}else{left=mid+1;}}return nums[right];}
};

这个题就是标准的栈题,我们需要合理地规划整个流程并借助栈来模拟:

class Solution {
public:string decodeString(string s) {stack<pair<int,int>> stk;int count=0;string res;for(int i=0;i<s.size();++i){if(isdigit(s[i]))count=count*10+s[i]-'0';else if(s[i]=='['){stk.push({count,res.size()});count=0;}else if(isalpha(s[i])){res+=s[i];}else if(s[i]==']'){string temp=res.substr(stk.top().second,res.size()-stk.top().second);for(int i=0;i<stk.top().first-1;++i){res+=temp;}stk.pop();}}return res;}
};

这个题就是一个非常经典的最大堆模板题,不适用优先队列的前提下,我们去手搓一个堆来完成。

class Solution {
public:void maxHeapify(vector<int>& nums,int i,int heapSize){int l=2*i+1,r=2*i+2,largest=i;if(l<heapSize&&nums[largest]<nums[l])largest=l;if(r<heapSize&&nums[largest]<nums[r])largest=r;if(i!=largest){swap(nums[i], nums[largest]);maxHeapify(nums, largest, heapSize);}}void buildMaxHeap(vector<int>& nums,int heapSize){for(int i=heapSize/2;i>=0;--i){maxHeapify(nums, i, heapSize);}}int findKthLargest(vector<int>& nums, int k) {int n=nums.size();buildMaxHeap(nums, n);for(int i=nums.size()-1;i>=nums.size()-k+1;--i){swap(nums[i], nums[0]);--n;maxHeapify(nums, 0, n);}return nums[0];}
};

这是一个动态规划的题,不过比较阴险的是这是一个排列题(顺序不同对结果有影响),所以我们在遍历顺序上需要注意。

class Solution {
public:bool wordBreak(string s, vector<string>& wordDict) {int n=s.size();vector<bool> dp(n+1,false);dp[0]=true;unordered_set<string> set(wordDict.begin(),wordDict.end());for(int i=0;i<=n;++i){for(int j=0;j<i;++j){if(dp[j]&&set.contains(s.substr(j,i-j))){dp[i]=true;break;}}}return dp[n];}
};

相关文章:

杂记-LeetCode中部分题思路详解与笔记-HOT100篇-其三

时光荏苒啊&#xff0c;没想到这么快就到了四月份... 这个坑好久没写了&#xff0c;现在我们重启一下。 我看了一下之前的笔记&#xff0c;似乎是停留在了链表部分且HOT100中可以说最重要的链表题之一&#xff1a;LRU缓存居然没有写&#xff0c;真是岂有此理&#xff0c;让我…...

【python画图】:从入门到精通绘制完美柱状图

目录 Python数据可视化&#xff1a;从入门到精通绘制完美柱状图一、基础篇&#xff1a;快速绘制柱状图1.1 使用Matplotlib基础绘制1.2 使用Pandas快速绘图 二、进阶篇&#xff1a;专业级柱状图定制2.1 多系列柱状图2.2 堆叠柱状图2.3 水平柱状图 三、专业参数速查表Matplotlib …...

医疗设备预测性维护的合规性挑战与标准化路径研究

摘要 本研究从医疗设备全生命周期管理视角&#xff0c;探讨预测性维护技术面临的特殊合规性挑战及其标准化解决方案。通过分析全球12个主要医疗市场的监管差异&#xff0c;提出基于ISO 23510的通用合规框架&#xff0c;并验证其在三类典型医疗设备&#xff08;生命支持类、影像…...

使用 XWPFDocument 生成表格时固定列宽度

一、XWPFDocument XWPFTable个性化属性 1.初始默认写法 XWPFTable table document.createTable(n, m); //在文档中创建一个n行m列的表格 table.setWidth("100%"); // 表格占页面100%宽度// 通过getRow获取行进行自定义设置 XWPFTableRow row table.getRow(0); XW…...

抽象的https原理简介

前言 小明和小美是一对好朋友&#xff0c;他们分隔两地&#xff0c;平时经常写信沟通&#xff0c;但是偶然被小明发现他回给小美的信好像被人拆开看过&#xff0c;甚至偷偷被篡改过。 对称加密算法 开头的通信过程比较像HTTP服务器与客户端的通信过程&#xff0c;全明文传输…...

Chakra UI框架中响应式断点

默认的断点&#xff1a;base是默认样式&#xff0c;不带任何媒体查询&#xff0c;适用于所有屏幕。 sm是30em&#xff08;约480px&#xff09; md是48em&#xff08;768px&#xff09; lg是62em&#xff08;992px&#xff09; xl是80em&#xff08;1280px&#xff09; 2xl是96e…...

【cocos creator 3.x】cocos creator2.x项目升级3.x项目改动点

1、基本改动 基本改动&#xff1a;去掉了cc.&#xff0c;改成在顶部添加导入 项目升级时候直接将cc.去掉&#xff0c;根据提示添加引用 node只保留position,scale,rotation,layer 其余属性如opacity&#xff0c;如果需要使用需要在节点手动添加UIOpacity组件 3d层和ui层分开…...

【android telecom 框架分析 01】【基本介绍 2】【BluetoothPhoneService为何没有源码实现】

1. 背景 我们会在很多资料上看到 BluetoothPhoneService 类&#xff0c;但是我们在实际 aosp 中确找不到具体的实现&#xff0c; 这是为何&#xff1f; 这是一个很好的问题&#xff01;虽然在车载蓝牙电话场景中我们经常提到类似 BluetoothPhoneService 的概念&#xff0c;但…...

Linux:进程:进程调度

进程在CPU上运行具有以下特性&#xff1a; 竞争、独⽴、并⾏、并发 竞争性:系统进程数⽬众多&#xff0c;⽽CPU资源很少甚至只有一个&#xff0c;所以进程之间是具有竞争属性的。为 了⾼效完成任务&#xff0c;更合理竞争相关资源&#xff0c;便具有了优先级 独⽴性: 为了避…...

2025年探秘特种设备安全管理 A 证:守护安全的关键凭证​

在现代工业与生活中&#xff0c;特种设备如锅炉、压力容器、电梯、起重机械等广泛应用&#xff0c;它们给我们带来便利的同时&#xff0c;也伴随着较高的安全风险。为了确保这些设备的安全运行&#xff0c;保障人民生命财产安全&#xff0c;特种设备安全管理显得尤为重要&#…...

WebSocket 实现数据实时推送原理

WebSocket 实现数据实时推送的核心机制在于其全双工通信能力和持久的连接特性。以下是其工作原理的详细步骤&#xff1a; 1. 握手阶段&#xff08;HTTP 升级协议&#xff09; 客户端发起请求&#xff1a;通过发送一个带有特殊头部的 HTTP 请求&#xff0c;请求协议升级。 GET …...

快速迭代收缩-阈值算法(FISTA)

文章目录 1. 数学与优化基础2. FISTA 算法的原理、推导与机制3. Matlab 实现4. FISTA 在图像处理与压缩感知中的应用4.1. 基于小波稀疏先验的图像去噪4.2 压缩感知图像重建 1. 数学与优化基础 在许多信号处理与机器学习问题中&#xff0c;我们希望获得稀疏解&#xff0c;即解向…...

XC6SLX100T-2FGG484I 赛灵思 XilinxFPGA Spartan-6

XC6SLX100T-2FGG484I 是Xilinx 推出的Spartan-6 LXT 系列FPGA芯片&#xff0c;采用45nm工艺设计&#xff0c;以高性价比和低功耗为核心 系列定位&#xff1a;Spartan‑6 LXT&#xff0c;中端逻辑与 DSP 加速 逻辑资源&#xff1a;101 261 个逻辑单元&#xff08;LE&#xff0…...

DP 32bit位宽数据扰码实现和仿真

关于DisplayPort 1.4协议中扰码用的16-bit LFSR的移位8个时钟周期后的输出表达式我们已经用迭代的方法推导过&#xff0c;那么移位32个时钟周期的输出表达式同样可以迭代32次推导出&#xff0c;或者将移位8个时钟的输出表达式迭代3次也可以得到。以下就是移位32个时钟周期的输出…...

Electricity Market Optimization 探索系列(V)

本文参考链接link \hspace{1.6em} 众所周知, 社会福利是指消费者剩余和生产者剩余的和&#xff0c;也等价于产品的市值减去产品的成本&#xff0c;在电力市场中也非常关注社会福利这一概念&#xff0c;基于电力商品的同质性的特点&#xff0c;我们引入反价格需求函数来形象地刻…...

vue3 element-plus el-time-picker控制只显示时 分,并且控制可选的开始结束时间

只显示时分 控制只显示时分 HH:mm 控制只显示时分秒 HH:mm:ss 全部代码&#xff1a; <template><el-time-pickerstyle"width: 220px !important;"v-model"timeValue"format"HH:mm"value-format"HH:mm"/> </template&…...

从技术本质到未来演进:全方位解读Web的过去、现在与未来

一、Web的本质定义 Web(万维网)是一种基于**超文本传输协议(HTTP)和统一资源标识符(URI)**构建的分布式信息系统。它的核心在于通过超链接将全球范围内的信息资源连接成网状结构,使任何接入互联网的设备都能访问这些资源。Web的本质特征体现在三个方面: 跨平台性:无论…...

C++十进制与十六进制

在C中&#xff0c;可以使用不同的方式来表示十进制和十六进制数值。下面是一个简单的示例代码&#xff0c;展示了如何在C中表示和输出十进制和十六进制数值&#xff1a; #include <iostream> #include <iomanip>int main() {int decimalValue 255; // 十进制数值…...

MySQL基本语法

本地登录&#xff1a;mysql -u 用户名 -p 查看数据库&#xff1a;show databeases 创建库&#xff1a;create database 名字&#xff1b; 删除库&#xff1a;drop database 名字&#xff1b; 选择库&#xff1a;use 名字&#xff1b; 创建表&#xff1a;create table 表名 在…...

机器学习有多少种算法?当下入门需要全部学习吗?

机器学习算法如同工具箱中的器械——种类繁多却各有专攻。面对数百种公开算法&#xff0c;新手常陷入"学不完"的焦虑。本文将拆解算法体系&#xff0c;为初学者指明高效学习路径。 一、算法森林的全景地图 机器学习算法可按四大维度分类&#xff1a; 监督学习&#…...

【c语言】深入理解指针2

文章目录 一、指针数组指针数组模拟二维数组 二、数组指针二维数组传参的本质 三、字符指针变量四、函数指针变量4.1. 函数指针的应用4.2 两端有趣的代码4.3. typedef关键字4.3.1 typedef 的使用4.3.2. typedef与#define对比 五、函数指针数组函数指针数组的应用 一、指针数组 …...

Nacos

Nacos是阿里巴巴的产品&#xff0c; 现在是SpringCloud中的一个组件。相比Eureka功能更加丰富&#xff0c;在国内受欢迎程度较高。 官网地址&#xff1a;Redirecting to: https://nacos.io/ GitHub&#xff1a; https://github.com/alibaba/nacos 1.Nacos快入门 Nacos可以直…...

Linux,redis群集模式,主从复制,读写分离

redis的群集模式 主从模式 &#xff08;单项复制&#xff0c;主复制到从&#xff09; 一主两从 一台主机上的一主两从 需要修改三个配置文件 主要端口不一样 redis-8001.conf redis-8002.conf redis-8003.conf 哨兵模式 分布式集群模式 redis 安装部署 1&#xff0c;下载…...

《手环表带保养全攻略:材质、清洁与化学品避坑指南》

系列文章目录 文章目录 系列文章目录前言一、表带材质特性与专属养护方案二、清洁剂使用红黑榜三、家庭清洁实验&#xff1a;化学反应警示录四、保养实践方法论总结 前言 手环作为现代生活的智能伴侣&#xff0c;表带材质选择丰富多样。从柔软亲肤的皮质到耐用耐磨的金属&…...

【Leetcode 每日一题 - 补卡】1534. 统计好三元组

问题背景 给你一个整数数组 a r r arr arr&#xff0c;以及 a 、 b 、 c a、b 、c a、b、c 三个整数。请你统计其中好三元组的数量。 如果三元组 ( a r r [ i ] , a r r [ j ] , a r r [ k ] ) (arr[i], arr[j], arr[k]) (arr[i],arr[j],arr[k]) 满足下列全部条件&#xff…...

医疗设备预测性维护合规架构:从法规遵循到技术实现的深度解析

在医疗行业数字化转型加速推进的当下&#xff0c;医疗设备预测性维护已成为提升设备可用性、保障医疗安全的核心技术。然而&#xff0c;该技术的有效落地必须建立在严格的合规框架之上。医疗设备直接关乎患者生命健康&#xff0c;其维护过程涉及医疗法规、数据安全、质量管控等…...

如何在 IntelliJ IDEA 中安装 FindBugs-IDEA 1.0.1

以下是 FindBugs-IDEA 1.0.1 插件在 IntelliJ IDEA 中的安装步骤&#xff08;适用于较旧版本的 IDEA&#xff0c;新版本可能需使用替代插件如 SpotBugs&#xff09;&#xff1a; 方法一&#xff1a;手动下载安装&#xff08;适用于无法通过市场安装的情况&#xff09; 下载插件…...

小车正常但是加载不出地图 找不到mapserver

Request for map failed; trying again... 找不到mapserver 原因&#xff1a; bash [ERROR] [1744895448.714854952]: failed to open image file "/home/liyb/catkin_ws/src/nav_demo/map/crossing.pgm": Couldnt open /home/xxx/catkin_ws/src/nav_demo/map/cr…...

无头开发模式

“无头”开发模式&#xff08;Headless Development Mode&#xff09;是指在没有直接连接物理显示器&#xff08;monitor&#xff09;、键盘或鼠标等输入输出设备的情况下&#xff0c;通过远程工具&#xff08;如 SSH、SCP、rsync、VNC 或 Web 界面&#xff09;对设备进行开发、…...

DAY 47 leetcode 232--栈与队列.用栈实现队列

题号232 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; class MyQueue {Stack<Integer> stackIn;Stack<Integer> stackOut;/** Initialize your data structure here. */pu…...

SpringAI+DeepSeek大模型应用开发——4 对话机器人

目录​​​​​​​ ​​​​​​​​​​​​​​项目初始化 pom文件 配置模型 ChatClient 同步调用 流式调用 日志功能 对接前端 解决跨域 会话记忆功能 ChatMemory 添加会话记忆功能 会话历史 管理会话id 保存会话id 查询会话历史 完善会话记忆 定义可序列…...

leetcode0058. 最后一个单词的长度-easy

1 题目&#xff1a;最后一个单词的长度 官方标定难度&#xff1a;易 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1&#x…...

深入理解 Linux top 命令:从字段解读到性能诊断

系统或产品都需要部署到服务器或容器上运行,而服务器的运行效率直接影响到系统的稳定性和用户体验。因此,服务器的性能监控与分析就显得尤为重要。 在实际运维和性能测试过程中,我们可以从以下关键的几个方面入手进行系统监控与分析(网络延迟分析暂时先略过): CPU 使用率…...

[特殊字符] UnionFS(联合文件系统)原理解析:容器背后的存储技术

&#x1f50d; UnionFS&#xff08;联合文件系统&#xff09;原理解析&#xff1a;容器背后的存储技术 &#x1f4a1; 什么是 UnionFS&#xff1f; UnionFS&#xff08;联合文件系统&#xff09; 是一种可以将多个不同来源的文件系统“合并”在一起的技术。它的核心思想是&am…...

部署若依前后端分离

参考部署&#xff1a;https://blog.csdn.net/qq_46073825/article/details/128716794?spm1001.2014.3001.5502 1.连接mysql(windows版本) 2.更新数据库用户为远程可连接 3.redis下载地址 https://github.com/tporadowski/redis/releases 5执行npm init 或者npm install --r…...

用Python Pandas高效操作数据库:从查询到写入的完整指南

一、环境准备与数据库连接 1.1 安装依赖库 pip install pandas sqlalchemy psycopg2 # PostgreSQL # 或 pip install pandas sqlalchemy pymysql # MySQL # 或 pip install pandas sqlalchemy # SQLite 1.2 创建数据库引擎 通过SQLAlchemy创建统一接口&#xff1a…...

eventBus 事件中心管理组件间的通信

EventBus&#xff08;事件总线&#xff09;是Vue中用于实现非父子组件间通信的轻量级方案&#xff0c;通过一个中央Vue实例管理事件的发布与订阅。 一、基本使用步骤 1.创建EventBus实例 推荐单独创建文件&#xff08;如event-bus.js&#xff09;导出实例&#xff0c;避免全…...

某客户ORA-600 导致数据库反复重启问题分析

上班期间&#xff0c;收到业务反馈&#xff0c;测试环境数据库连接报错。 查看数据库alert日志&#xff0c;发现从中午的时候就出现了重启。并且在17时20分左右又发生了重启&#xff1a; 同时&#xff0c;在重启前alert日志中出现了ORA-600报错&#xff0c;相关报错在trc文件中…...

LeetCode 2176.统计数组中相等且可以被整除的数对:两层遍历模拟

【LetMeFly】2176.统计数组中相等且可以被整除的数对&#xff1a;两层遍历模拟 力扣题目链接&#xff1a;https://leetcode.cn/problems/count-equal-and-divisible-pairs-in-an-array/ 给你一个下标从 0 开始长度为 n 的整数数组 nums 和一个整数 k &#xff0c;请你返回满足…...

Vue项目Webpack Loader全解析:从原理到实战配置指南

Vue项目Webpack Loader全解析&#xff1a;从原理到实战配置指南 前言 在Vue项目的开发与构建中&#xff0c;Webpack Loader扮演着资源转换的核心角色。无论是单文件组件&#xff08;SFC&#xff09;的解析、样式预处理&#xff0c;还是静态资源的优化&#xff0c;都离不开Loa…...

Vscode --- LinuxPrereqs │远程主机可能不符合 glibc 和 libstdc++ Vs code 服务器的先决条件

打开vscode连接远程linux服务器&#xff0c;发现连接失败&#xff0c;并出现如下报错信息&#xff1a; 原因是&#xff1a; vscode 官网公告如下&#xff1a;2025 年 3 月 (版本 1.99) - VSCode 编辑器 版本1.97 官网公告如下&#xff1a;链接 版本1.98 官网公告如下&am…...

大数据常见的模型定义及应用场景建议╮(╯▽╰)╭

以下是常见的大数据模型类型及其分析方法&#xff1a; 1. 描述性模型 1.1 定义 描述性模型&#xff1a;用于描述数据的现状和历史趋势&#xff0c;帮助理解数据的特征和模式。 1.2 常见模型 统计摘要&#xff1a;均值、中位数、标准差等。数据可视化&#xff1a;直方图、散…...

红宝书第四十八讲:实时通信双雄:Socket.IO Meteor 的奇妙旅程

红宝书第四十八讲&#xff1a;实时通信双雄&#xff1a;Socket.IO & Meteor 的奇妙旅程 资料取自《JavaScript高级程序设计&#xff08;第5版&#xff09;》。 查看总目录&#xff1a;红宝书学习大纲 一、实时通信基础 1. WebSocket与HTTP对比 传统HTTP请求类似送信&…...

【数字图像处理】图像分割(1)

图像分割定义 把图像分成若干个特定的、具有独特性质的区域&#xff0c;并提出感兴趣目标的技术和过程 图像分割概述 一幅图像通常是由代表物体的图案与背景组成&#xff0c;简称物体与背景 图像分割的本质&#xff1a;将图像按照区域内的一致性和区域间的不一致性进行分类的过…...

VFlash的自动化和自定义动作

文章目录 一、automation 自动化二、custom actions 自定义动作常用方法如何选择要发送的诊断请求CustomActionValueList 作用Pre Action和Post Action之间交换信息 提示&#xff1a;如何打印软件中变量报错&#xff1a;无法打开源文件 Windows.h stdio.h conio.h报错&#xff…...

pytorch学习02

自动微分 自动微分模块torch.autograd负责自动计算张量操作的梯度&#xff0c;具有自动求导功能。自动微分模块是构成神经网络训练的必要模块&#xff0c;可以实现网络权重参数的更新&#xff0c;使得反向传播算法的实现变得简单而高效。 1. 基础概念 张量 Torch中一切皆为张…...

TV板卡维修技术【四】

【一】热成像松香的结合快速定位短路位置 发现电路短路&#xff0c;但是无法定位到大概位置&#xff0c;可以采用烧机法&#xff1a; 热成像大致定位&#xff0c;松香准确定位&#xff1a; 可以很快找到这种小陶瓷电容短路的故障&#xff1a; 测量电路是否有大短路&#xff0c…...

Rust生命周期、文件与IO

文章目录 Rust生命周期生命周期注释结构体如何使用字符串静态生命周期 Rust文件与IO接收命令行参数命令行输入文件读取文件写入 Rust生命周期 终于讲到Rust最重要的机制之一了&#xff0c;生命周期机制 我们先复习一下垂悬引用 {let r;{let x 5;r &x;}println!("…...

22、字节与字符的概念以及二者有什么区别?

1、概念 字节&#xff08;byte&#xff09; 定义&#xff1a;字节是计算机信息技术中用于计量存储容量和传输容量的一种单位&#xff0c;通常由8个二进制位&#xff08;bit&#xff09;组成。 作用&#xff1a;字节是计算机存储和处理信息的基本单位&#xff0c;用于衡量数据…...

APP端测试

一、功能测试 1. 核心测试点 安装/卸载/升级&#xff1a;验证不同安装方式&#xff08;应用商店/APK/IPA&#xff09; 注册登录&#xff1a;多种登录方式测试&#xff08;手机号、第三方账号&#xff09; 核心业务流程&#xff1a;支付流程、内容发布等关键路径 中断测试&a…...