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

从经典力扣题发掘DFS与记忆化搜索的本质 -从矩阵最长递增路径入手 一步步探究dfs思维优化与编程深度思考

1引子:

DFS和递归法的一道经典例题矩阵最长递增子序列这个题写完之后脑袋产生了许多突发奇想:


1 第一个堆栈代码段这些底层C语言内部管理的工具它是怎么进行内存分配的?能不能深究?
2 第二个这个DFS和计划数组存储的思路到底抽象了哪种思维?能不能发散到其他算法数据结构的面试题中?或者说能不能在其他的编程中应用到这种思维抽象出一个公有的编程范式思维范式应用到其他的任何领域包括生活中?
3 是就有了这篇博文希望大家一起和我探讨一下

2 题描述

给定一个 n 行 m 列的矩阵,矩阵内所有数均为非负整数。需要找到一条最长路径,使得这条路径上的元素是严格递增的。路径可以向上、下、左、右四个方向移动,但不能重复访问同一个单元格。

示例:
输入:[[1,2,3],[4,5,6],[7,8,9]]
输出:5
解释:最长递增路径为 1->2->3->6->9

1暴力 DFS 解法

首先想到的是暴力 DFS,从每个单元格出发,尝试所有可能的路径:
 

#include <stdio.h>
#include <stdlib.h>// 方向数组:上、下、左、右
const int dirs[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};// 深度优先搜索函数
int dfs(int** matrix, int rows, int cols, int r, int c, int prev) {// 检查边界条件和递增条件if (r < 0 || r >= rows || c < 0 || c >= cols || matrix[r][c] <= prev) {return 0;}int maxPath = 0;// 遍历四个方向for (int i = 0; i < 4; i++) {int nr = r + dirs[i][0];int nc = c + dirs[i][1];int path = 1 + dfs(matrix, rows, cols, nr, nc, matrix[r][c]);if (path > maxPath) {maxPath = path;}}return maxPath;
}// 主函数:计算最长递增路径
int longestIncreasingPath(int** matrix, int matrixSize, int* matrixColSize) {if (matrixSize == 0 || *matrixColSize == 0) {return 0;}int rows = matrixSize;int cols = *matrixColSize;int maxLength = 0;// 遍历每个单元格作为起点for (int r = 0; r < rows; r++) {for (int c = 0; c < cols; c++) {int length = dfs(matrix, rows, cols, r, c, -1);if (length > maxLength) {maxLength = length;}}}return maxLength;
}

复杂度分析:

  • 时间复杂度:O (4^(n*m)),每个单元格有 4 个方向可以选择
  • 空间复杂度:O (n*m),递归栈的深度最大为矩阵的大小

问题: 这种解法会导致大量重复计算,比如从不同路径到达同一个单元格时,会重复计算该单元格的最长路径。

2 记忆化搜索优化

为了避免重复计算,可以使用记忆化搜索:用一个二维数组memo记录每个单元格的最长递增路径长度。当访问一个单元格时,如果该单元格的结果已经计算过,直接返回结果,否则进行计算并保存结果。

#include <stdio.h>
#include <stdlib.h>// 方向数组:上、下、左、右
const int dirs[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};// 深度优先搜索函数
int dfs(int** matrix, int rows, int cols, int r, int c, int** memo) {// 如果已经计算过,直接返回结果if (memo[r][c] != 0) {return memo[r][c];}int maxPath = 1;  // 至少包含当前单元格// 遍历四个方向for (int i = 0; i < 4; i++) {int nr = r + dirs[i][0];int nc = c + dirs[i][1];// 检查边界条件和递增条件if (nr >= 0 && nr < rows && nc >= 0 && nc < cols && matrix[nr][nc] > matrix[r][c]) {int path = 1 + dfs(matrix, rows, cols, nr, nc, memo);if (path > maxPath) {maxPath = path;}}}// 记录当前单元格的最长路径memo[r][c] = maxPath;return maxPath;
}// 主函数:计算最长递增路径
int longestIncreasingPath(int** matrix, int matrixSize, int* matrixColSize) {if (matrixSize == 0 || *matrixColSize == 0) {return 0;}int rows = matrixSize;int cols = *matrixColSize;// 创建记忆化数组并初始化为0int** memo = (int**)malloc(rows * sizeof(int*));for (int i = 0; i < rows; i++) {memo[i] = (int*)calloc(cols, sizeof(int));}int maxLength = 0;// 遍历每个单元格作为起点for (int r = 0; r < rows; r++) {for (int c = 0; c < cols; c++) {int length = dfs(matrix, rows, cols, r, c, memo);if (length > maxLength) {maxLength = length;}}}// 释放内存for (int i = 0; i < rows; i++) {free(memo[i]);}free(memo);return maxLength;
}

复杂度分析:

  • 时间复杂度:O (n*m),每个单元格只需要计算一次
  • 空间复杂度:O (n*m),主要用于存储记忆化数组

3 记忆化搜索的本质

记忆化搜索实际上是动态规划的递归实现,它的核心思想是

  1. 重叠子问题:原问题可以分解为大量重复的子问题
  2. 最优子结构:问题的最优解包含子问题的最优解
  3. 状态保存:用一个数组保存已经解决的子问题的解

在这个问题中,每个单元格的最长递增路径就是一个子问题,我们通过记忆化数组避免了重复计算,将指数级时间复杂度优化到了线性级别。

4 vscode实际我的测试代码:

1 我的测试

输入矩阵:

[[9, 9, 4],[6, 6, 8],[2, 1, 1]]

步骤解析:

  1. 从单元格 (0,0) 开始,值为 9,四个方向都无法移动,路径长度为 1
  2. 从单元格 (0,1) 开始,值为 9,同样无法移动,路径长度为 1
  3. 从单元格 (1,0) 开始,值为 6,可以移动到 (2,0),继续递归计算...
  4. 当计算到单元格 (2,1) 时,值为 1,可以移动到 (2,0),但 (2,0) 的结果已经计算过,直接使用保存的结果

最终,整个矩阵的最长递增路径为 1->2->6->8->9,长度 5

通过这个问题,我们深入理解了 DFS 和记忆化搜索的结合使用。当遇到需要大量重复计算的问题时,记忆化搜索是一种非常有效的优化方法。关键在于识别问题中的重叠子问题,并设计合适的状态保存方式。

希望这篇文章能帮助你更好地理解深度优先搜索和动态规划的思想,如果你有任何疑问或更好的解法,欢迎在评论区留言讨论!

4.2 举一反三 我的习惯...

如果你对这类问题感兴趣,可以尝试以下我做的其他教程题目

  1. 力扣 329:矩阵中的最长递增路径本题进阶版
  2. 力扣 62:不同路径
  3. 力扣 64:最小路径和
  4. 力扣 79:单词搜索

如果你觉得我自己写的这个代码还不错,请给我点赞、收藏、关注,获取更多算法干货,这也是我之后继续发布高质量算法教程和编程技术帖的最大的动力   感谢大家了!!!!!

相关文章:

从经典力扣题发掘DFS与记忆化搜索的本质 -从矩阵最长递增路径入手 一步步探究dfs思维优化与编程深度思考

1引子&#xff1a; DFS和递归法的一道经典例题矩阵最长递增子序列这个题写完之后脑袋产生了许多突发奇想&#xff1a; 1 第一个堆栈代码段这些底层C语言内部管理的工具它是怎么进行内存分配的&#xff1f;能不能深究&#xff1f; 2 第二个这个DFS和计划数组存储的思路到底抽象…...

我开源了一个免费在线工具!UIED Tools

UIED Tools - 免费在线工具集合 最近更新&#xff1a;修改了文档说明&#xff0c;优化了项目结构介绍 这是设计师转开发的第一个开源项目&#xff0c;bug和代码规范可能有些欠缺。 这是一个功能丰富的免费在线工具集合网站&#xff0c;集成了多种实用工具&#xff0c;包括 AI …...

geoserver发布arcgis瓦片地图服务(最新版本)

第一步&#xff1a;下载geoserver服务&#xff0c;进入bin目录启动 需要提前安装好JDK环境&#xff0c;1.8及以上版本 安装完成&#xff0c;页面访问端口&#xff0c;进入控制台界面,默认用户名密码admin/geoserver 第二步&#xff1a;下载地图 破解版全能电子地图下载器&…...

RN 鸿蒙混合开发实践(踩坑)

#三方框架# #React Native # 1 。环境配置&#xff1b; 安装 DevEco 开发工具&#xff1b; Node 版本16&#xff1b; hdc环境配置 hdc 是 OpenHarmony 为开发人员提供的用于调试的命令行工具&#xff0c;鸿蒙 React Native 工程使用 hdc 进行真机调试。hdc 工具通过 OpenHa…...

2025年阿里云ACP大数据分析师认证模拟试题(附答案解析)

这篇文章的内容是阿里云ACP大数据分析师认证考试的模拟试题。 所有模拟试题由AI自动生成&#xff0c;主要为了练习和巩固知识&#xff0c;并非所谓的 “题库”&#xff0c;考试中如果出现同样试题那真是纯属巧合。 1、ABC公司现有大量的图片和视频信息&#xff0c;以下哪种产…...

go语言实现IP归属地查询

效果: 实现代码main.go package mainimport ("encoding/json""fmt""io/ioutil""net/http""os" )type AreaData struct {Continent string json:"continent"Country string json:"country"ZipCode …...

Qt中解决UI线程阻塞导致弹窗无法显示的两种方法

在Qt应用程序开发中,我们经常会遇到这样的问题:当执行一个耗时操作时,整个界面会卡住,无法响应任何用户操作,甚至连一个简单的提示弹窗都无法正常显示。本文将介绍两种解决这个问题的方法,并通过完整的代码示例进行说明。 问题描述 先来看一个常见的错误示例: #inclu…...

位运算题目:黑板异或游戏

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;黑板异或游戏 出处&#xff1a;810. 黑板异或游戏 难度 8 级 题目描述 要求 给定一个整数数组 nums \texttt{nums} nums&#xff0c;表示写在黑板…...

LegoGPT,卡内基梅隆大学推出的乐高积木设计模型

LegoGPT 是由卡内基梅隆大学开发的一款创新性乐高积木设计模型&#xff0c;能够根据用户的文本提示生成结构稳固、可组装的乐高模型。该模型基于自回归语言模型和大规模乐高设计数据集进行训练&#xff0c;用户只需输入简单的文字描述&#xff0c;LegoGPT 就能逐步构建出物理稳…...

深度 |国产操作系统“破茧而出”:鸿蒙电脑填补自主生态空白

真心为国内能有像华为这样的技术型公司而自豪&#xff0c;一步步突围技术封锁。从这篇信息&#xff0c;可以给软件从业者一个启示&#xff1a;鸿蒙生态将是一个新的机会&#xff0c;值得好好把握。 鸿蒙电脑正成为中国电子信息技术新坐标。 超10亿鸿蒙生态设备、2800家鸿蒙智…...

【Python】Python常用数据类型判断方法详解

在Python编程中,准确判断数据类型是处理逻辑分支、类型转换和异常处理的基础。本文结合核心方法与实践场景,系统介绍type()、isinstance()等常用判断方式,并分析其适用性与最佳实践。 一、直接类型判断方法 type()函数 • 功能:返回对象的精确类型,适用于简单类型判断。 •…...

【美国将取消对能源之星支持 严重影响AI服务器】

1992年美国政府在共和党执政期间推出了影响深远的“能源之星”计划&#xff08;Energy Star&#xff09;&#xff0c;很多人可能并不知道能源执行计划&#xff0c;但这个蓝色星星标签估计大多数人都不会陌生。能源之星计划从推出以来不止得到各类消费电子制造商认可&#xff0c…...

《 C++ 点滴漫谈: 三十七 》左值?右值?完美转发?C++ 引用的真相超乎你想象!

摘要 本文全面系统地讲解了 C 中的引用机制&#xff0c;涵盖左值引用、右值引用、引用折叠、完美转发等核心概念&#xff0c;并深入探讨其底层实现原理及工程实践应用。通过详细的示例与对比&#xff0c;读者不仅能掌握引用的语法规则和使用技巧&#xff0c;还能理解引用在性能…...

【生产实践】Linux中/usr/bin、/usr/sbin与/usr/local的关系解析(2025年技术规范)

一、核心定位与功能划分 /usr/bin&#xff1a;用户级通用命令库 • 定位&#xff1a;存储系统预装的用户级可执行文件&#xff0c;这些命令通常由Linux发行版官方软件包管理器&#xff08;如APT、YUM&#xff09;安装&#xff0c;属于系统默认功能的一部分。 • 示例命令&#…...

数据可视化:用一张图讲好一个故事

在这个信息爆炸的时代&#xff0c;数据无处不在&#xff0c;但如何让复杂的数据变得通俗易懂&#xff1f;数据可视化就是一把神奇的钥匙。它不仅能将枯燥的数字转化为生动的图像&#xff0c;还能挖掘出数据背后隐藏的故事。然而&#xff0c;很多人对数据可视化的理解还停留在表…...

C++获取目录中所有图片路径的函数get_image_paths解析

本文将全面解析一个用于获取目录中图片路径的C函数get_image_paths&#xff0c;从基础语法到高级概念&#xff0c;涵盖C标准库、文件系统操作、异常处理等多个方面。 原始代码 std::vector<std::string> get_image_paths(const std::string& directory_path) {log_…...

物联网无线传感方向专业词汇解释

涡旋电磁波(VEMW)&#xff1a;一种具有轨道角动量的电磁波&#xff0c;其特性在于能够在传播过程中携带额外的相位信息&#xff0c;从而增加通信系统的容量和灵活性。波前&#xff1a;波动传播过程中&#xff0c;同一时刻振动相位相同的所有点构成的几何曲面&#xff0c;代表波…...

【C语言指针超详解(五)】--回调函数,qsort函数的理解和使用,qsort函数的模拟实现

目录 一.回调函数 1.1--回调函数的概念 1.2--回调函数改造计算器程序 二.qsort函数的理解和使用 2.1--qsort函数的理解 2.2--使用qsort函数排序整型数据 2.3--使用qsort函数排序结构数据 三.qsort函数的模拟实现 &#x1f525;个人主页&#xff1a;草莓熊Lotso的个人主…...

【Linux网络】————HTTP协议详解

作者主页&#xff1a; 作者主页 本篇博客专栏&#xff1a;Linux 创作时间 &#xff1a;2025年5月11日 1. HTTP 协议介绍 基本介绍&#xff1a; http协议全称&#xff1a;超文本传输协议&#xff0c;适用于从万维网服务器传输超文本到本地的传送协议。HTTP是一种应用层协议…...

使用WinSW工具将exe注册为window服务

下载工具WinSW(工具在GitHub上 打不开就需要魔法VPN) 文件准备 将以下文件放在同一个目录&#xff08;例如&#xff1a;WebSocketService 文件夹&#xff09;中&#xff1a; WebScoket.exe WinSW-x64.exe WebScoketService.xml ← 服务配置文件 install_service.bat ←…...

远程命令执行RCE概述

远程命令执行RCE诞生于1997年&#xff0c;比SQL注入早1年&#xff0c;据说当时的程序员发现在网站里可以随意的删除网页&#xff0c;就像删除本地文件一样简单&#xff0c;但是这种场景相对不多&#xff0c;因此没有SQL注入广泛&#xff0c;早期的web攻击像现在的护网一样&…...

在 .NET 8 开发的WinForms 程序中展示程序版本号的几种方式

前言 欢迎关注dotnet研习社&#xff0c;今天我们讨论一个Winform开发中的一个常见的需求内容“关于程序的版本号显示”。 在 WinForms 桌面应用程序开发中&#xff0c;向用户显示当前程序的版本号是一个常见的需求&#xff0c;尤其是在产品发布、更新提示或技术支持场景中尤为…...

[特殊字符] Spring Cloud 微服务项目中 common 模块依赖导致网关启动失败的排查与解决

在进行微服务开发时&#xff0c;我们通常会抽取一个 common 公共模块&#xff0c;封装一些通用配置类、工具类、拦截器、常用组件依赖等&#xff0c;供多个微服务共享使用。 但近期在实际开发中&#xff0c;出现了一个典型问题&#xff1a;在 Gateway 网关模块中引入 common 后…...

Java SpringMVC 和 MyBatis 整合关键配置详解

目录 一、数据源配置二、MyBatis 工厂配置三、Mapper 扫描配置四、SpringMVC 配置五、整合示例实体类Mapper 接口Mapper XML 文件Service 类控制器JSP 页面六、总结在 Java Web 开发中,SpringMVC 和 MyBatis 是两个常用框架。SpringMVC 负责 Web 层的请求处理和视图渲染,MyBa…...

24.(vue3.x+vite)引入组件并动态挂载(mount)

示例截图 组件代码: <template><div><div>{{message }}</div>...

Linux 软件包|服务管理

rpm 指令备注rpm -qa查看已安装软件&#xff0c;可以结合grep过滤查找rpm -e firefox卸载firefoxrpm -ivh firefox-115.12.0-1.el7.centos.i686.rpm安装gcc&#xff08;只能离线安装&#xff09; yum 能够从指定的服务器自动下载 RPM 包并且安装 指令备注yum list列出所有可…...

前端上传el-upload、原生input本地文件pdf格式(纯前端预览本地文件不走后端接口)

前端实现本地文件上传与预览&#xff08;PDF格式展示&#xff09;不走后端接口 实现步骤 第一步&#xff1a;文件选择 使用前端原生input上传本地文件&#xff0c;或者是el-upload组件实现文件选择功能&#xff0c;核心在于文件渲染处理。&#xff08;input只不过可以自定义样…...

TestNG接口自动化

第一章、 Rest assured接口测试框架 一、概述 接口自动化的框架&#xff0c;主要是用来做接口自动化测试&#xff0c;返回的报文都是JSON 语法比较简单&#xff0c;只需要掌握常用的方法 用例运行的速度非常快 断言的机制 Json 封装相关方法&#xff0c;jsonpath&#xff0c;x…...

Parasoft C++Test软件单元测试_实例讲解(指针类型的处理)

系列文章目录 Parasoft C++Test软件静态分析:操作指南(编码规范、质量度量)、常见问题及处理 Parasoft C++Test软件单元测试:操作指南、实例讲解、常见问题及处理 Parasoft C++Test软件集成测试:操作指南、实例讲解、常见问题及处理 进阶扩展:自动生成静态分析文档、自动…...

ngx_http_keyval_module动态键值管理

一、模块安装与验证 检查模块是否可用 nginx -V 2>&1 | grep --color -o ngx_http_keyval_module如果看到 ngx_http_keyval_module&#xff0c;说明模块已编译进 NGINX。 若未找到&#xff0c;请联系你的 NGINX 供应商&#xff0c;获取商业版或重新编译并启用该模块&am…...

面试篇:Spring MVC

基础概念 什么是Spring MVC&#xff1f; Spring MVC 是 Spring Framework 提供的一个基于 Servlet 的 Web 框架&#xff0c;属于 MVC&#xff08;Model-View-Controller&#xff09;架构的一种实现。它通过 DispatcherServlet 作为前端控制器&#xff0c;对请求进行分发和调度…...

C++初阶-string类的模拟实现3

目录 1.string::find(char ch,size_t pos0) const的模拟实现 2.string::find(const char* str,size_t pos0) const的模拟实现 3.string::size() const和string::capacity() const的模拟实现 4.string::operator[] (size_t pos)和string::operator[] (size_t pos) const的模拟…...

接口出现 请求参数格式错误 的解决方法

目录 前言1. 问题所示2. 原理分析3. 解决方法前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn Java基本知识: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD的功能整理…...

MYSQL时间函数、group by 和partition by的区别、组内编号leetcode学习

mysql时间函数 select now(); --当前时间 select current_date() --当前日期 select current_timestamp --同now()select date(2025-04-14 12:34:56) --提取日期部分&#xff1a;2025-04-14 select datediff(2025-4-14,2025-04-10) 日期相差四天 select date_sub(2024-04-14,…...

OpenCV 的 CUDA 模块中用于将一个多通道 GpuMat 图像拆分成多个单通道图像的函数split()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::split 是 OpenCV CUDA 模块中的一个函数&#xff0c;用于将一个多通道的 GpuMat 图像拆分成多个单通道的 GpuMat 图像。这个函数是 CP…...

吴恩达机器学习笔记:单变量线性回归

通过一个例子来开始&#xff1a;这个例子是预测住房价格的&#xff0c;我们要使用一个数据集&#xff0c;数据集包含俄勒冈州波特兰市的住房价格。根据不同房屋尺寸所售出的价格&#xff0c;画出我的数据集。比方说&#xff0c;如果房子是 1250 平方尺大小&#xff0c;你要告诉…...

UI自动化测试框架:PO 模式+数据驱动

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1. PO 设计模式简介 什么是 PO 模式&#xff1f; PO&#xff08;PageObject&#xff09;设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成…...

NestJS 知识框架

一、核心概念 1. 架构基础 基于 Express/Fastify 的 Node.js 框架 采用模块化设计 使用 TypeScript 构建&#xff08;也支持 JavaScript&#xff09; 借鉴 Angular 的设计理念 2. 主要组件 模块 (Module): 应用的基本组织单元 控制器 (Controller): 处理 HTTP 请求 服务…...

Porting Linux to a new processor architecture, part 1: The basics

Although a simple port may count as little as 4000 lines of code—exactly 3,775 for the mmu-less Hitachi 8/300 recently reintroduced in Linux 4.2-rc1—getting the Linux kernel running on a new processor architecture is a difficult process. Worse still, the…...

Dagster Pipes系列-1:调用外部Python脚本

本文是"Dagster Pipes教程"的第一部分&#xff0c;介绍如何通过Dagster资产调用外部Python脚本并集成到数据管道中。首先&#xff0c;创建Dagster资产subprocess_asset&#xff0c;利用PipesSubprocessClient资源执行外部脚本external_code.py&#xff0c;实现跨进程…...

北京傲云源墅——区域价值腾飞的高端之选

在北京这座繁华都市中&#xff0c;房产的价值往往与区域的发展潜力息息相关。而傲云源墅项目&#xff0c;正位于极具价值的孙河墅区&#xff0c;这片土地正发生着令人瞩目的蝶变。近年来&#xff0c;孙河区域的崛起引人注目。2025 年 3 月&#xff0c;北京朝阳区平房乡黄杉木店…...

扩展:React 项目执行 yarn eject 后的 package.json 变化详解及参数解析

扩展&#xff1a;React 项目执行 yarn eject 后的 package.json 变化详解及参数解析 什么是 yarn eject&#xff1f;React 项目执行 yarn eject 后的 package.json 变化详解1. 脚本部分 Scripts 被替换2. 新增构建依赖 dependencies&#xff08;部分&#xff09;3. 新增 Babel …...

编写一个处理txt的loader插件,适用于wbepack

处理txt的webpack的loader插件 编写一个处理txt的loader插件&#xff0c;适用于wbepack 编写一个处理txt的loader插件&#xff0c;适用于wbepack 实现一个处理txt的插件&#xff0c;给文本每行前后添加**** module.exports function txtLoader(content) {// 确保 Loader 是异…...

高速边坡监测成本高?自动化如何用精准数据省预算?

高速边坡自动化监测解决方案 一、边坡监测的概述 1.1 边坡监测的背景 我国山地丘陵约占国土面积的65%&#xff0c;且地质地貌复杂&#xff0c;气候类型多样&#xff0c;构成活动频繁&#xff0c;自然灾害隐患多&#xff0c;分布广。而且近年来由于高速公路边坡滑坡灾害引发的事…...

SysAid On-Prem XML注入漏洞复现(CVE-2025-2776)

免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 前…...

WEB安全--RCE--webshell bypass2

继WEB安全--RCE--webshell bypass的补充&#xff1a; 六、PHP反序列化 webshell&#xff1a; <?php $s unserialize(a:2:{i:0;O:8:"stdClass":1:{s:1:"a";i:1;}i:1;r:2;}); $c "123"; $arr get_declared_classes(); $i0;for($i;$i<c…...

Spark处理过程-转换算子和行动算子

&#xff08;一&#xff09;RDD的处理过程 RDD经过一系列的“转换”操作&#xff0c;每一次转换都会产生不同的RDD&#xff0c;以供给下一次“转换”操作使 用&#xff0c;直到最后一个RDD经过“行动”操作才会真正被计算处理。 1.延迟。RDD中所有的转换都是延迟的&…...

​Spring Boot 配置文件敏感信息加密:Jasypt 实战

​​ 目录 ​​ ​1. 为什么需要加密配置文件&#xff1f;​​ ​2. Jasypt 快速集成​ ​2.1 在xml文件中添加 Maven 依赖​ ​2.2 生成加密字符串​​ ​编辑 ​编辑 ​3. 安全最佳实践​ ​4. 常见问题​ ​Q1&#xff1a;加密后启动报错&#xff1f;​​ ​Q2&…...

c++STL-vector的模拟实现

cSTL-vector的模拟实现 vector的模拟实现基本信息构造函数析构函数返回容量&#xff08;capacity&#xff09;返回元素个数&#xff08;size&#xff09;扩容&#xff08;reserve和resize&#xff09;访问&#xff08;[]&#xff09;迭代器&#xff08;**iterator**&#xff09…...

【Python 变量类型】

Python 是一种动态类型语言&#xff0c;变量类型在运行时自动确定&#xff0c;无需显式声明。以下是 Python 中核心变量类型的分类与用法详解&#xff1a; 一、基本数据类型 1. 数值类型 整数 (int) 支持正负数、零和二进制/八进制/十六进制表示&#xff1a; a 42 b 0o52 #…...