【日撸 Java 三百行】Day 12(顺序表(二))
目录
Day 12:顺序表(二)
一、顺序表的方法
1. 顺序查找
拓展:顺序查找中的哨兵思想
2. 插入
3. 删除
二、代码及测试
拓展:
小结
Day 12:顺序表(二)
Task:
今天的代码直接在昨天的基础上增加. 只贴出新的部分.
- 查找给定元素所处的位置. 找不到就返回 -1.
- 在给定位置增加元素. 如果线性表已满, 或位置不在已有位置范围之内, 就拒绝增加. 该位置可以是在最后一个元素之后一个.
- 删除定定位置的元素. 要处理给定位置不合法的情况. 该位置必须是已经有数据的.
- 函数 要求同样的输入参数获得同样的输出结果, 但 方法 所依赖的数据既包括参数列表中给出的,也依赖于对象的成员变量. 因此, 面向对象所涉及的参数列表要短些. 例如, locate 方法就有效利用了 length 和 data 这两个成员变量.
一、顺序表的方法
在【数据结构】线性表-CSDN博客 中,我们介绍了如何用 C++ 来实现顺序表的构造,检索,插入以及删除。运用类似的思维模式,我们可以举一反三的实现用 Java 语言操作顺序表。
由于存在相应的专题,所以这里仅仅做代码上的展示,思维简要略过。
今天的代码内容是对昨日顺序表对象的方法扩充,详情可见:【日撸 Java 三百行】Day 11-12(顺序表)-CSDN博客
今天我们的任务是对于顺序表方法的基础扩充,因此就继续沿用昨日的的类,补充几个关键的函数和改写测试用的main函数即可。
1. 顺序查找
顺序查找的含义是:给出任意一个数,在顺序表中查找此元素首次出现时的下标号。
默认的顺序查找方法就是从头到尾遍历数据(什么方向都行),一但发现合适的数据就返回下标即可,如果结束遍历后都没有发现合适元素就返回一个定义内的下标非法的数值(比如-1)。
此算法的执行时间主要体现在元素的比较次数中,即for循环上。最好的情况是第1个元素的值即为 value,此时只需比较一次即可;最差的情况则是表中没有值为 value 的元素,这时需要比较n次;一般情况下,假设 value出现在每个位置的概率相同,均为p=1/n,则平均的比较时间为
代码如下:
/************************ Find the index of the given value. If it appears in multiple positions,* simply return the first one.* * @param paraValue The given value.* @return The position. -1 for not found.**********************/public int indexOf(int paraValue) {int tempPosition = -1;for (int i = 0; i < length; i++) {if (data[i] == paraValue) {tempPosition = i;break;} // Of if} // Of forreturn tempPosition;}// Of indexOf
拓展:顺序查找中的哨兵思想
所谓“哨兵”就是用一个特殊值来作为数组的边界,使用“哨兵”可以少用一条判断语句,所以可以提高程序的效率。
这样就可以将数组的第一个位置作为“哨位”,数据的存储从Data[1]开始。因此线性表的初始化中List是从0开始的,表示表中暂无元素。
那么,这种方法到底好不好呢?
从正面看,"哨兵"的引入确实可以令数组不必判断越界问题,到头时循环自己会退出,而且这种"哨兵"思想确实也能避免很多不必要判断(就不需要诸如i<length这种判断了)。
但是,我们知道对于一个 List 来说,插入和删除一个元素都需要考虑到其他元素的平移存储。对比下来,优化一条判断语句的收益远低于处理平移存储所花费的代价。
而一个 “概念” 的提出,必然尤其优越性。当数据总量足够大时,每轮循环固定一次的越界判断累加上来会是一个十分大的开销。此时,“哨兵” 无需判断边界的优势就体现了。
2. 插入
插入操作将改变顺序表的内容,因此必须满足一定的限制条件:除了涉及被更新的那个元素之外,其他线性关系的相对顺序应该保持不变。为此,需要对顺序表实施一系列的元素移动操作来维护逻辑的和存储的线性关系。
在进行插入前,我们需要考虑以下两点(这是需要再程序中体现的逻辑)
- 顺序表是否满了?
- 插入的位置合理吗?
这两个基本问题的解决是顺序表健壮性的基本保障。
插入的具体操作可以参考下图:
在循环遍历时,这里需要采用反向遍历,这是因为我们在插入新元素的位置后,用前一个元素覆盖下一个元素。这一点正向遍历时做不到的。
public boolean insert(int paraPosition, int paraValue) {if (length == MAX_LENGTH) {System.out.println("List full.");return false;} // Of ifif ((paraPosition < 0) || (paraPosition > length)) {System.out.println("The position " + paraPosition + " is out of bound.");return false;}// From tail to head. The last one is moved to a new position.// Because length < MAX_LENGTH, no exceeding occurs.for (int i = length; i > paraPosition; i--) {data[i] = data[i - 1];} // Of for idata[paraPosition] = paraValue;length++;return true;}// Of insert
3. 删除
删除操作与插入操作有异曲同工之妙,同样的,我们也需要考虑如下两个问题:
- 顺序表是否空了?
- 插入的位置合理吗?
删除操作示意图如下:
与插入操作相反,这里我们需要正向遍历, 因为我们在删除一个元素后,需要用后一个元素来填补前一个元素,而这是反向遍历做不到的。
除此之外,我们还需要对 length 做 -1 的修正。
/************************ Delete a value at a position.* * @param paraPosition The given position.* @return Success or not.**********************/public boolean delete(int paraPosition) {if ((paraPosition < 0) || (paraPosition >= length)) {System.out.println("The position " + paraPosition + " is out of bounds.");return false;} // Of if// From head to tailfor (int i = paraPosition; i < length - 1; i++) {data[i] = data[i + 1];} // Of for ilength--;return true;}// Of delete
二、代码及测试
/************************ The entrance of the program.* * @param args Not used now.**********************/public static void main(String args[]) {int[] tempArray = { 1, 4, 5, 9 };SequentialList tempFirstList = new SequentialList(tempArray);System.out.println("After initialization, the list is: " + tempFirstList.toString());System.out.println("Again, the list is: " + tempFirstList);int tempValue = 4;int tempPosition = tempFirstList.indexOf(tempValue);System.out.println("The position of " + tempValue + " is " + tempPosition);tempValue = 5;tempPosition = tempFirstList.indexOf(tempValue);System.out.println("The position of " + tempValue + " is " + tempPosition);tempPosition = 2;tempValue = 5;tempFirstList.insert(tempPosition, tempValue);System.out.println("After inserting " + tempValue + " to position " + ", the list is: " + tempFirstList);tempPosition = 8;tempValue = 10;tempFirstList.insert(tempPosition, tempValue);System.out.println("After inserting " + tempValue + " to position " + tempPosition + ", the list is: " + tempFirstList);for (int i = 0; i < 8; i++) {tempFirstList.insert(i, i);System.out.println("After inserting " + i + " to position " + i + ", the list is: " + tempFirstList);} // Of for itempFirstList.reset();System.out.println("After reset, the list is: " + tempFirstList);}// Of main
测试说明如下:
基本说明下,首先初始了一个包含元素1、4、5、9的顺序表,输出必要答应,然后分别进行了下述操作:
- 查找数字4、5在表中的位置,并打印信息
- 在下标为2的元素前插入5,在下标为8的元素前插入10(这个越界了)
- 删除下标为3的元素
- 在下标为i的元素前插入元素i (0 < i < 8) (这个在插入过程中会导致顺序表满,后续元素将无法插入)
拓展:
顺序表基本方法:【数据结构】线性表-CSDN博客
类、包和接口:
查找中的 “哨兵思想”:顺序查找与"哨兵"的使用&&二分查找_带哨兵的顺序查找算法-CSDN博客
小结
检索,插入和删除是针对各种数据结构的最基本操作,任何数据结构都比不开这三者。实际上,随着我们学习的深入,会发现我们可以根据自己的需求,去重构这三者。
举个例子,对于插入操作,这里仅仅展示了单个元素的插入,那么扩展一下,我们能不能插入一个数列?这个数列是自然递增,还是说可以我们来自定义?学习了重构后,这是我们自然可以联想到的东西。
相关文章:
【日撸 Java 三百行】Day 12(顺序表(二))
目录 Day 12:顺序表(二) 一、顺序表的方法 1. 顺序查找 拓展:顺序查找中的哨兵思想 2. 插入 3. 删除 二、代码及测试 拓展: 小结 Day 12:顺序表(二) Task: 今天…...
Python爬虫实战:研究ajax异步渲染加密
一、引言 在当今数字化时代,数据已成为推动各行业发展的核心驱动力。网络爬虫作为一种高效的数据采集工具,能够从互联网上自动获取大量有价值的信息。然而,随着 Web 技术的不断发展,越来越多的网站采用了 AJAX(Asynchronous JavaScript and XML)异步渲染技术来提升用户体…...
Golang企业级商城高并发微服务实战
Golang企业级商城高并发微服务实战包含内容介绍: 从零开始讲了百万级单体高并发架构、千万级微服务架构,其中包含Rpc实现微服务、微服务的跨语言调用jsonrpc和protobuf、protobuf的安装、protobuf高级语法、protobuf结合Grpc实现微服务实战、微服务服务…...
从经典力扣题发掘DFS与记忆化搜索的本质 -从矩阵最长递增路径入手 一步步探究dfs思维优化与编程深度思考
1引子: DFS和递归法的一道经典例题矩阵最长递增子序列这个题写完之后脑袋产生了许多突发奇想: 1 第一个堆栈代码段这些底层C语言内部管理的工具它是怎么进行内存分配的?能不能深究? 2 第二个这个DFS和计划数组存储的思路到底抽象…...
我开源了一个免费在线工具!UIED Tools
UIED Tools - 免费在线工具集合 最近更新:修改了文档说明,优化了项目结构介绍 这是设计师转开发的第一个开源项目,bug和代码规范可能有些欠缺。 这是一个功能丰富的免费在线工具集合网站,集成了多种实用工具,包括 AI …...
geoserver发布arcgis瓦片地图服务(最新版本)
第一步:下载geoserver服务,进入bin目录启动 需要提前安装好JDK环境,1.8及以上版本 安装完成,页面访问端口,进入控制台界面,默认用户名密码admin/geoserver 第二步:下载地图 破解版全能电子地图下载器&…...
RN 鸿蒙混合开发实践(踩坑)
#三方框架# #React Native # 1 。环境配置; 安装 DevEco 开发工具; Node 版本16; hdc环境配置 hdc 是 OpenHarmony 为开发人员提供的用于调试的命令行工具,鸿蒙 React Native 工程使用 hdc 进行真机调试。hdc 工具通过 OpenHa…...
2025年阿里云ACP大数据分析师认证模拟试题(附答案解析)
这篇文章的内容是阿里云ACP大数据分析师认证考试的模拟试题。 所有模拟试题由AI自动生成,主要为了练习和巩固知识,并非所谓的 “题库”,考试中如果出现同样试题那真是纯属巧合。 1、ABC公司现有大量的图片和视频信息,以下哪种产…...
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…...
位运算题目:黑板异或游戏
文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题:黑板异或游戏 出处:810. 黑板异或游戏 难度 8 级 题目描述 要求 给定一个整数数组 nums \texttt{nums} nums,表示写在黑板…...
LegoGPT,卡内基梅隆大学推出的乐高积木设计模型
LegoGPT 是由卡内基梅隆大学开发的一款创新性乐高积木设计模型,能够根据用户的文本提示生成结构稳固、可组装的乐高模型。该模型基于自回归语言模型和大规模乐高设计数据集进行训练,用户只需输入简单的文字描述,LegoGPT 就能逐步构建出物理稳…...
深度 |国产操作系统“破茧而出”:鸿蒙电脑填补自主生态空白
真心为国内能有像华为这样的技术型公司而自豪,一步步突围技术封锁。从这篇信息,可以给软件从业者一个启示:鸿蒙生态将是一个新的机会,值得好好把握。 鸿蒙电脑正成为中国电子信息技术新坐标。 超10亿鸿蒙生态设备、2800家鸿蒙智…...
【Python】Python常用数据类型判断方法详解
在Python编程中,准确判断数据类型是处理逻辑分支、类型转换和异常处理的基础。本文结合核心方法与实践场景,系统介绍type()、isinstance()等常用判断方式,并分析其适用性与最佳实践。 一、直接类型判断方法 type()函数 • 功能:返回对象的精确类型,适用于简单类型判断。 •…...
【美国将取消对能源之星支持 严重影响AI服务器】
1992年美国政府在共和党执政期间推出了影响深远的“能源之星”计划(Energy Star),很多人可能并不知道能源执行计划,但这个蓝色星星标签估计大多数人都不会陌生。能源之星计划从推出以来不止得到各类消费电子制造商认可,…...
《 C++ 点滴漫谈: 三十七 》左值?右值?完美转发?C++ 引用的真相超乎你想象!
摘要 本文全面系统地讲解了 C 中的引用机制,涵盖左值引用、右值引用、引用折叠、完美转发等核心概念,并深入探讨其底层实现原理及工程实践应用。通过详细的示例与对比,读者不仅能掌握引用的语法规则和使用技巧,还能理解引用在性能…...
【生产实践】Linux中/usr/bin、/usr/sbin与/usr/local的关系解析(2025年技术规范)
一、核心定位与功能划分 /usr/bin:用户级通用命令库 • 定位:存储系统预装的用户级可执行文件,这些命令通常由Linux发行版官方软件包管理器(如APT、YUM)安装,属于系统默认功能的一部分。 • 示例命令&#…...
数据可视化:用一张图讲好一个故事
在这个信息爆炸的时代,数据无处不在,但如何让复杂的数据变得通俗易懂?数据可视化就是一把神奇的钥匙。它不仅能将枯燥的数字转化为生动的图像,还能挖掘出数据背后隐藏的故事。然而,很多人对数据可视化的理解还停留在表…...
C++获取目录中所有图片路径的函数get_image_paths解析
本文将全面解析一个用于获取目录中图片路径的C函数get_image_paths,从基础语法到高级概念,涵盖C标准库、文件系统操作、异常处理等多个方面。 原始代码 std::vector<std::string> get_image_paths(const std::string& directory_path) {log_…...
物联网无线传感方向专业词汇解释
涡旋电磁波(VEMW):一种具有轨道角动量的电磁波,其特性在于能够在传播过程中携带额外的相位信息,从而增加通信系统的容量和灵活性。波前:波动传播过程中,同一时刻振动相位相同的所有点构成的几何曲面,代表波…...
【C语言指针超详解(五)】--回调函数,qsort函数的理解和使用,qsort函数的模拟实现
目录 一.回调函数 1.1--回调函数的概念 1.2--回调函数改造计算器程序 二.qsort函数的理解和使用 2.1--qsort函数的理解 2.2--使用qsort函数排序整型数据 2.3--使用qsort函数排序结构数据 三.qsort函数的模拟实现 🔥个人主页:草莓熊Lotso的个人主…...
【Linux网络】————HTTP协议详解
作者主页: 作者主页 本篇博客专栏:Linux 创作时间 :2025年5月11日 1. HTTP 协议介绍 基本介绍: http协议全称:超文本传输协议,适用于从万维网服务器传输超文本到本地的传送协议。HTTP是一种应用层协议…...
使用WinSW工具将exe注册为window服务
下载工具WinSW(工具在GitHub上 打不开就需要魔法VPN) 文件准备 将以下文件放在同一个目录(例如:WebSocketService 文件夹)中: WebScoket.exe WinSW-x64.exe WebScoketService.xml ← 服务配置文件 install_service.bat ←…...
远程命令执行RCE概述
远程命令执行RCE诞生于1997年,比SQL注入早1年,据说当时的程序员发现在网站里可以随意的删除网页,就像删除本地文件一样简单,但是这种场景相对不多,因此没有SQL注入广泛,早期的web攻击像现在的护网一样&…...
在 .NET 8 开发的WinForms 程序中展示程序版本号的几种方式
前言 欢迎关注dotnet研习社,今天我们讨论一个Winform开发中的一个常见的需求内容“关于程序的版本号显示”。 在 WinForms 桌面应用程序开发中,向用户显示当前程序的版本号是一个常见的需求,尤其是在产品发布、更新提示或技术支持场景中尤为…...
[特殊字符] Spring Cloud 微服务项目中 common 模块依赖导致网关启动失败的排查与解决
在进行微服务开发时,我们通常会抽取一个 common 公共模块,封装一些通用配置类、工具类、拦截器、常用组件依赖等,供多个微服务共享使用。 但近期在实际开发中,出现了一个典型问题:在 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查看已安装软件,可以结合grep过滤查找rpm -e firefox卸载firefoxrpm -ivh firefox-115.12.0-1.el7.centos.i686.rpm安装gcc(只能离线安装) yum 能够从指定的服务器自动下载 RPM 包并且安装 指令备注yum list列出所有可…...
前端上传el-upload、原生input本地文件pdf格式(纯前端预览本地文件不走后端接口)
前端实现本地文件上传与预览(PDF格式展示)不走后端接口 实现步骤 第一步:文件选择 使用前端原生input上传本地文件,或者是el-upload组件实现文件选择功能,核心在于文件渲染处理。(input只不过可以自定义样…...
TestNG接口自动化
第一章、 Rest assured接口测试框架 一、概述 接口自动化的框架,主要是用来做接口自动化测试,返回的报文都是JSON 语法比较简单,只需要掌握常用的方法 用例运行的速度非常快 断言的机制 Json 封装相关方法,jsonpath,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,说明模块已编译进 NGINX。 若未找到,请联系你的 NGINX 供应商,获取商业版或重新编译并启用该模块&am…...
面试篇:Spring MVC
基础概念 什么是Spring MVC? Spring MVC 是 Spring Framework 提供的一个基于 Servlet 的 Web 框架,属于 MVC(Model-View-Controller)架构的一种实现。它通过 DispatcherServlet 作为前端控制器,对请求进行分发和调度…...
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) --提取日期部分:2025-04-14 select datediff(2025-4-14,2025-04-10) 日期相差四天 select date_sub(2024-04-14,…...
OpenCV 的 CUDA 模块中用于将一个多通道 GpuMat 图像拆分成多个单通道图像的函数split()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::cuda::split 是 OpenCV CUDA 模块中的一个函数,用于将一个多通道的 GpuMat 图像拆分成多个单通道的 GpuMat 图像。这个函数是 CP…...
吴恩达机器学习笔记:单变量线性回归
通过一个例子来开始:这个例子是预测住房价格的,我们要使用一个数据集,数据集包含俄勒冈州波特兰市的住房价格。根据不同房屋尺寸所售出的价格,画出我的数据集。比方说,如果房子是 1250 平方尺大小,你要告诉…...
UI自动化测试框架:PO 模式+数据驱动
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 1. PO 设计模式简介 什么是 PO 模式? PO(PageObject)设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成…...
NestJS 知识框架
一、核心概念 1. 架构基础 基于 Express/Fastify 的 Node.js 框架 采用模块化设计 使用 TypeScript 构建(也支持 JavaScript) 借鉴 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教程"的第一部分,介绍如何通过Dagster资产调用外部Python脚本并集成到数据管道中。首先,创建Dagster资产subprocess_asset,利用PipesSubprocessClient资源执行外部脚本external_code.py,实现跨进程…...
北京傲云源墅——区域价值腾飞的高端之选
在北京这座繁华都市中,房产的价值往往与区域的发展潜力息息相关。而傲云源墅项目,正位于极具价值的孙河墅区,这片土地正发生着令人瞩目的蝶变。近年来,孙河区域的崛起引人注目。2025 年 3 月,北京朝阳区平房乡黄杉木店…...
扩展:React 项目执行 yarn eject 后的 package.json 变化详解及参数解析
扩展:React 项目执行 yarn eject 后的 package.json 变化详解及参数解析 什么是 yarn eject?React 项目执行 yarn eject 后的 package.json 变化详解1. 脚本部分 Scripts 被替换2. 新增构建依赖 dependencies(部分)3. 新增 Babel …...
编写一个处理txt的loader插件,适用于wbepack
处理txt的webpack的loader插件 编写一个处理txt的loader插件,适用于wbepack 编写一个处理txt的loader插件,适用于wbepack 实现一个处理txt的插件,给文本每行前后添加**** module.exports function txtLoader(content) {// 确保 Loader 是异…...
高速边坡监测成本高?自动化如何用精准数据省预算?
高速边坡自动化监测解决方案 一、边坡监测的概述 1.1 边坡监测的背景 我国山地丘陵约占国土面积的65%,且地质地貌复杂,气候类型多样,构成活动频繁,自然灾害隐患多,分布广。而且近年来由于高速公路边坡滑坡灾害引发的事…...
SysAid On-Prem XML注入漏洞复现(CVE-2025-2776)
免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 前…...
WEB安全--RCE--webshell bypass2
继WEB安全--RCE--webshell bypass的补充: 六、PHP反序列化 webshell: <?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处理过程-转换算子和行动算子
(一)RDD的处理过程 RDD经过一系列的“转换”操作,每一次转换都会产生不同的RDD,以供给下一次“转换”操作使 用,直到最后一个RDD经过“行动”操作才会真正被计算处理。 1.延迟。RDD中所有的转换都是延迟的&…...