【EasyPan】removeFile2RecycleBatch方法及递归操作解析
【EasyPan】项目常见问题解答(自用&持续更新中…)汇总版
文件批量转移到回收站方法解析
一、方法总述
removeFile2RecycleBatch
方法实现将用户选中的文件/目录及其子内容批量移入回收站的业务逻辑,主要特点:
- 递归处理:深度遍历文件夹层级结构
- 双重状态更新:区分直接删除和回收站保留
- 批量操作:基于文件ID集合的批量SQL执行
- 事务安全:依赖MyBatis事务管理保证一致性
二、方法流程及时序图
核心处理流程
三、方法模块化解析
1. 数据准备模块
// 输入参数处理
String[] fileIdArray = fileIds.split(","); // 构建基础查询条件
FileInfoQuery query = new FileInfoQuery();
query.setUserId(userId);
query.setFileIdArray(fileIdArray);
query.setDelFlag(FileDelFlagEnums.USING.getFlag()); // del_flag=0
关键设计:
- 使用逗号分隔符处理批量ID
- 严格限定用户权限(userId)
- 只操作正常状态的文件(del_flag=0)
2. 递归查找模块
private void findAllSubFolderFileList(List<String> fileIdList, String userId, String fileId, Integer delFlag) {// 递归终止条件:无子文件夹时自动结束// 递归过程:深度优先遍历文件夹树
}
处理逻辑:
- 将当前文件夹ID加入结果集
- 查询该文件夹下的所有子文件夹
- 对每个子文件夹递归执行相同操作
3. 状态更新模块
子文件删除操作
// 更新条件:
// - 文件PID在delFilePidList中
// - 当前del_flag=0
this.fileInfoMapper.updateFileDelFlagBatch(updateInfo, userId, delFilePidList, // 基于父ID的条件null, FileDelFlagEnums.USING.getFlag()
);
选中文件回收站操作
// 更新条件:
// - 文件ID在delFileIdList中
// - 当前del_flag=0
this.fileInfoMapper.updateFileDelFlagBatch(fileInfo, userId, null, delFileIdList, // 基于自身ID的条件FileDelFlagEnums.USING.getFlag()
);
递归操作解析与示例
一、递归原理图解
二、代码中的递归实现
private void findAllSubFolderFileList(List<String> fileIdList, String userId, String fileId, Integer delFlag) {// 1. 将当前文件夹ID加入结果集fileIdList.add(fileId); // 2. 查询当前文件夹下的所有子文件夹FileInfoQuery query = new FileInfoQuery();query.setUserId(userId);query.setFilePid(fileId); // 关键:设置父ID条件query.setDelFlag(delFlag);query.setFolderType(FileFolderTypeEnums.FOLDER.getType());// 3. 获取子文件夹列表List<FileInfo> subFolders = this.fileInfoMapper.selectList(query);// 4. 递归处理每个子文件夹for (FileInfo subFolder : subFolders) {findAllSubFolderFileList(fileIdList, userId, subFolder.getFileId(), delFlag);}
}
三、递归执行过程示例
原始文件夹结构
根文件夹 (fileId: "F0")
├─ 子文件夹1 (fileId: "F1", filePid: "F0") ← 用户选中要删除的
│ ├─ 文件1 (fileId: "F11", filePid: "F1")
│ └─ 子文件夹2 (fileId: "F12", filePid: "F1")
│ └─ 文件2 (fileId: "F121", filePid: "F12")
└─ 子文件夹3 (fileId: "F2", filePid: "F0") ← 用户同时选中的另一个独立文件夹
执行后状态变化
文件/文件夹 | 原状态 | 新状态 | 可见性 |
---|---|---|---|
F1 (选中的文件夹) | USING (0) | RECYCLE (2) | 回收站可见 |
F11 | USING (0) | DEL (1) | 回收站不可见 |
F12 | USING (0) | DEL (1) | 回收站不可见 |
F121 | USING (0) | DEL (1) | 回收站不可见 |
F2 (选中的文件夹) | USING (0) | RECYCLE (2) | 回收站可见 |
递归调用栈演示
四、递归过程详解
1. 递归调用栈
// 第一轮递归(处理F1)
findAllSubFolderFileList(list, "user1", "F1", 0)|- 添加F1到list|- 发现子项F11(文件)、F12(文件夹)|- 处理F12:|- 添加F12到list|- 发现子项F121(文件)
2. 最终生成的ID列表
delFilePidList = ["F1", "F12", "F121"] // 所有包含子项的文件夹ID
delFileIdList = ["F1", "F2"] // 用户直接选中的ID
五、状态转换验证
代码:
/*** 批量将文件/文件夹移动到回收站* @param userId 用户ID* @param fileIds 要删除的文件ID列表,多个用逗号分隔*/
@Override
public void removeFile2RecycleBatch(String userId, String fileIds) {// 1. 参数预处理:将逗号分隔的字符串转为数组String[] fileIdArray = fileIds.split(",");// 2. 构建查询条件:查询用户选中的有效文件FileInfoQuery query = new FileInfoQuery();query.setUserId(userId); // 限制用户权限query.setFileIdArray(fileIdArray); // 设置目标文件IDquery.setDelFlag(FileDelFlagEnums.USING.getFlag()); // 只查询未删除的文件(del_flag=0)// 3. 执行查询获取文件列表List<FileInfo> fileInfoList = this.fileInfoMapper.selectList(query);if (fileInfoList.isEmpty()) {return; // 如果没有符合条件的文件直接返回}// 4. 递归查找所有需要删除的子文件夹(深度优先遍历)List<String> delFilePidList = new ArrayList<>(); // 存储所有子文件夹IDfor (FileInfo fileInfo : fileInfoList) {// 只处理文件夹类型(文件不需要递归)if(FileFolderTypeEnums.FOLDER.getType().equals(fileInfo.getFolderType())) {findAllSubFolderFileList(delFilePidList, userId, fileInfo.getFileId(), FileDelFlagEnums.USING.getFlag());}}// 5. 批量更新子文件状态为完全删除(del_flag=1)if(!delFilePidList.isEmpty()) {FileInfo updateInfo = new FileInfo();updateInfo.setDelFlag(FileDelFlagEnums.DEL.getFlag()); // 设置删除状态// 执行批量更新:将这些子文件夹下的所有内容标记为删除this.fileInfoMapper.updateFileDelFlagBatch(updateInfo, userId, delFilePidList, null, FileDelFlagEnums.USING.getFlag());}// 6. 将用户选中的文件/文件夹标记为回收站状态(del_flag=2)List<String> delFileIdList = Arrays.asList(fileIdArray); // 用户原始选择的文件IDFileInfo fileInfo = new FileInfo();fileInfo.setRecoveryTime(new Date()); // 设置回收时间fileInfo.setDelFlag(FileDelFlagEnums.RECYCLE.getFlag()); // 设置回收站状态// 执行批量更新:将用户直接选中的文件放入回收站this.fileInfoMapper.updateFileDelFlagBatch(fileInfo, userId, null, delFileIdList, FileDelFlagEnums.USING.getFlag());
}/*** 递归查找所有子文件夹* @param fileIdList 结果收集列表(输出参数)* @param userId 用户ID(权限控制)* @param fileId 当前处理的文件夹ID* @param delFlag 文件状态筛选条件(0=正常)*/
private void findAllSubFolderFileList(List<String> fileIdList, String userId, String fileId, Integer delFlag) {// 1. 将当前文件夹ID加入结果集fileIdList.add(fileId);// 2. 构建查询条件:查找当前文件夹下的子文件夹FileInfoQuery query = new FileInfoQuery();query.setUserId(userId); // 用户隔离query.setFilePid(fileId); // 子项条件:parent_id=当前文件夹IDquery.setDelFlag(delFlag); // 状态条件:del_flag=0query.setFolderType(FileFolderTypeEnums.FOLDER.getType()); // 只查询文件夹类型// 3. 查询子文件夹列表List<FileInfo> fileInfoList = this.fileInfoMapper.selectList(query);// 4. 递归处理每个子文件夹for (FileInfo fileInfo : fileInfoList) {findAllSubFolderFileList(fileIdList, userId, fileInfo.getFileId(), delFlag);}
}
相关文章:
【EasyPan】removeFile2RecycleBatch方法及递归操作解析
【EasyPan】项目常见问题解答(自用&持续更新中…)汇总版 文件批量转移到回收站方法解析 一、方法总述 removeFile2RecycleBatch方法实现将用户选中的文件/目录及其子内容批量移入回收站的业务逻辑,主要特点: 递归处理&…...
AIGC的伦理困境:机器生成内容是否该被监管?
AIGC的伦理困境:机器生成内容是否该被监管? 在当今数字时代,人工智能(AI)技术的发展日新月异,其中生成式人工智能(AIGC, AI-Generated Content)作为一项前沿技术,正以前…...
缓存一致性
什么是缓存一致性? 当数据库和缓存之间的额数据内容保持同步或最终一致,称为缓存一致性 为什么缓存不一致会发生? 因为缓存和数据库是两个独立系统,它们的更新过程不是原子操作,就可能发生以下情况: //…...
【Java学习方法】终止循环的关键字
终止循环的关键字 一、break 作用:跳出最近的循环(直接结束离break最近的那层循环) 使用场景:一般搭配if条件判断,如果满足某个条件,就结束循环,(场景:常见于暴力枚举中…...
bert学习
BERT Google在2018年提出的预训练语言模型,通过双向Transformer结构和大规模预训练。 核心特点 双向上下文 与传统模型(如LSTM或单向Transformer)不同,BERT通过同时考虑单词的左右上下文来捕捉更丰富的语义信息。…...
读书笔记:淘宝十年产品与技术演进史
作者:大淘宝技术 原文地址:读书笔记:淘宝十年产品与技术演进史 本文是对《淘宝十年产品事》与《淘宝技术这十年》两本书的阅读笔记总结。通过回顾淘宝过去十年在产品、技术、架构、中间件及开放平台等方面的发展历程,展现了其从初…...
ROS 快速入门教程02
5. Node 节点 以智能手机为例,当我们使用智能手机的某个功能时,大多时候在使用手机的某个APP。同样当我们使用ROS的某个功能时,使用的是ROS的某一个或者某一些节点。 虽然每次我们只使用ROS的某一个或者某一些节点,但我们无法下…...
卷积神经网络常用结构
空间注意力机制(Spatial Attention)详解 空间注意力机制(Spatial Attention)详解 空间注意力机制是计算机视觉中的重要组件,它使网络能够选择性地关注特征图中的重要空间区域,同时抑制不相关区域的影响。 空间注意力机制结构图 空间注意力机制详细解析…...
neo4j中节点内的名称显示不全解决办法(如何让label在节点上自动换行)
因为节点过多而且想让节点中所有文字都显示出来而放大节点尺寸 从neo4j中导出png,再转成PDF来查看时,要看清节点里面的文字就得放大5倍才行 在网上看了很多让里面文字换行的办法都不行 然后找到一个比较靠谱的办法是在要显示的标签内加换行符 但是我的节点上显示的是…...
容器化-Docker-进阶
一、自定义镜像:从基础部署到镜像定制 (一)Linux 与 Docker 原生部署 Nginx 对比 Linux 原生部署 Nginx # 安装依赖 sudo apt-get update && sudo apt-get install -y build-essential openssl libpcre3-dev zlib1g-dev # 下载Nginx源码 wget http://nginx.org…...
Sqlserver 自增长id 置零或者设置固定值
在 SQL Server 中,如果需要重置一个表的自增长(Identity)列的当前值,通常有几种方法可以实现。但是,值得注意的是,直接将自增长列的值设置为0并不是一个推荐的做法,因为这会破坏自增长列的连续性…...
状态模式(State Pattern)详解
文章目录 一、状态模式简介1.1 什么是状态模式?1.2 为什么需要状态模式?1.3 状态模式的核心思想二、状态模式的结构2.1 UML类图2.2 各个组件的详细说明2.3 交互过程三、状态模式的实现步骤(以Java为例)步骤1:创建状态接口步骤2:实现具体状态类步骤3:创建上下文类步骤4:…...
Shopee五道质检系统重构东南亚跨境格局,2025年电商游戏规则悄然改写
在2024年的东南亚跨境电商市场,一场以“质量”为核心的深度变革正在上演。作为头部平台的Shopee率先出招,以一套“五道质检流程”打破行业旧格局,不仅有效遏制高企的退货率,更引发从卖家结构到政策制度的连锁反应。 这场质量革命…...
Unity-无限滚动列表实现Timer时间管理实现
今天我们来做一个UI里经常做的东西:无限滚动列表。 首先我们得写清楚实现的基本思路: 所谓的无限滚动当然不是真的无限滚动,我们只要把离开列表的框再丢到列表的后面就行,核心理念和对象池是类似的。 我们来一点一点实现&#x…...
Python高级爬虫之JS逆向+安卓逆向1.6节: 函数基础
目录 引言: 1.6.1 理解函数 1.6.2 定义函数 1.6.3 调用函数 1.6.4 位置实参 1.6.5 关键字实参 1.6.6 爬虫不要进接单群 引言: 大神薯条老师的高级爬虫+安卓逆向教程: 这套爬虫教程会系统讲解爬虫的初级,中级,高级知识,涵盖的内容包括基础爬虫,高并发爬虫的设计与…...
集结号海螺捕鱼组件搭建教程与源码结构详解(第四篇)
本篇将聚焦“冰封领域”场景构建与性能优化策略。本节适合有Unity经验的技术团队,对大型特效场景优化、C与Unity协同通信及资源动态加载有深入需求的开发者。 一、冰封领域场景设计理念 冰封领域是高难度玩法场景,常用于高段位玩家房间,场景…...
02.Python代码Pandas - Series全系列分享(使用.特点.说明.取值.函数)
02.Python代码Pandas - Series全系列分享(使用.特点.说明.取值.函数) 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是pandas的使用语法。前后每一小节的内容是存在的有:学习and理解的关联性,希望…...
星火燎原:Spark技术如何重塑大数据处理格局
在数字化浪潮席卷全球的今天,数据已成为企业发展与社会进步的核心驱动力。面对海量且复杂的数据,传统的数据处理技术逐渐显得力不从心。而Apache Spark作为大数据领域的明星框架,凭借其卓越的性能与强大的功能,如同一束璀璨的星火…...
AI大模型和人脑的区别
为什么人脑没有幻觉,但是 AI 大语言模型有幻觉? 人脑和大型语言模型(LLM)在处理信息的方式上存在根本差异,这导致了幻觉现象主要出现在LLM中。LLM的幻觉是指模型生成了貌似合理但实际上错误或虚构的内容。 LLM的工作…...
第一章:基于Docker环境快速搭建LangChain框架的智能对话系统:从langchain环境搭建到多轮对话代码实现(大语言模型加载)
文章目录 前言一、langchain环境搭建1、docker容器搭建2、docker容器连接修改密码容器内容修改物理机修改 3、langchain安装 二、langchain构建简单智能对话示例1、基于deepseek的简单问答Demo2、langchain的invoke、stream与astream生成方法1、langchain的invoke、stream与ast…...
数据结构的学习(1)二分查找,利用二分查找找局部最小值,选择排序,冒泡排序,插入排序,位运算的基础知识
一、二分查找某个元素 (1)查找是否存在某个元素在数组中 思想: 1)先看中间位置的值 2)如果中间位置的值大于目标值说明目标值在整个数组中偏左的位置,改变右边界,即Right Mid - 1; 3…...
vue2+Vant 定制主题
参考文档:Vant主题定制-CSDV博客 vant提供了一套默认主题,若想完全替换主题是或者其他样式,则需要定制主题。 定制方法 1、main.js文件引入主题样式源文件 // 导入并安装 Vant 组件库 import Vant from vant // 切记:为了能够覆…...
【自然语言处理与大模型】大模型参数规模与部署配置调查2025第一季度
调查大模型参数规模与部署配置之间的关系。探讨如何在不同硬件和场景下优化大模型的部署。 一、 当前主流模型的参数规模对比 (1)当前主流模型有哪些 参考全球最大AI开源社区Hugging Face发布的榜单、上海AI实验室推出的开放评测体系OpenCompass和国内开…...
香港科技大学广州|先进材料学域博士招生宣讲会—南开大学专场
香港科技大学广州|先进材料学域博士招生宣讲会—南开大学专场 时间:2025年4月25日(星期五)10:00 地点:南开大学八里台校区中心实验室报告厅 宣讲嘉宾: 李昊翔 助理教授 TAN Chee Keong 助理教授 教授亲…...
异构迁移学习(无创脑机接口中的跨脑电帽迁移学习)
本文介绍BCI中的跨脑电帽的迁移学习最新算法。 (发表于2025 arxiv,应该属于投稿阶段,这个场景具有非常不错的研究意义和前景) 最新跨脑电帽异构算法github开源代码 SDDA算法原文 一、脑机接口绪论 脑机接口(BCI)指在人或动物大脑与外部设备之间创建的直接连接,通过脑…...
若依项目部署小结
参考视频:前后端分离式项目实战部署 | CodeSheep 环境搭建 虚拟机环境:jdk1.8 tomcat9 nginx A :虚拟机A运行前端项目 A B:虚拟机B运行war包 B C:虚拟机C运行jar包 C mysql和redis连的是C主机 前端项目部署 必备&…...
多智能体系统的中间件架构
多智能体系统(Multi-Agent Systems, MAS)是一种由多个智能体(Agents)组成的分布式系统,这些智能体能够自主地感知环境、做出决策并与其他智能体进行交互。 中间件(Middleware)在多智能体系统中…...
Eliciting Causal Abilities in Large Language Models for Reasoning Tasks
Eliciting Causal Abilities in Large Language Models for Reasoning Tasks | Proceedings of the AAAI Conference on Artificial Intelligencehttps://ojs.aaai.org/index.php/AAAI/article/view/33669 1. 概述 大型语言模型(Large Language Models, LLMs)面临的一...
DeepSeek+Mermaid:轻松实现可视化图表自动化生成(附实战演练)
目录 一、引言:AI 与图表的梦幻联动二、DeepSeek:大语言模型新星崛起2.1 DeepSeek 全面剖析2.2 多场景应用示例2.2.1 文本生成2.2.2 代码编写 三、Mermaid:代码式图表绘制专家3.1 Mermaid 基础探秘3.2 语法与图表类型详解3.2.1 流程图&#x…...
LeetCode第164题_最大间距
LeetCode 第164题:最大间距 题目描述 给定一个无序的数组 nums,返回 数组在排序之后,相邻元素之间最大的差值 。如果数组元素个数小于 2,则返回 0 。 您必须编写一个在「线性时间」内运行并使用「线性额外空间」的算法。 难度…...
什么是DDD?为什么它正在取代传统架构?
什么是DDD?为什么它正在取代传统架构? 1. 传统开发模式的痛点 在经典的MVC架构中,开发流程往往从数据库表结构设计开始,业务逻辑散落在Service层,随着需求迭代容易形成「大泥球」代码: 实体类变成纯粹的…...
Vue3父子组件数据双向同步实现方法
在 Vue 3 中,实现父子组件间双向同步响应式对象的步骤如下: 实现思路 父组件通过 v-model 传递响应式对象。 子组件接收并深拷贝为本地副本。 子组件监听父组件的数据变化,更新本地副本(不触发同步)。 子组件监听本…...
一些基本的 Vue 规范
一、项目结构规范 推荐的目录结构 src/ ├── assets/ # 静态资源(如图片、字体) ├── components/ # 全局组件 ├── views/ # 页面组件(用于路由) ├── router/ # 路由配置 ├── store/…...
面试篇:Java并发与多线程
基础概念 什么是线程?线程和进程的区别是什么? 线程 是程序执行的最小单位,它是 CPU 调度和执行的基本单元。一个进程可以包含多个线程,这些线程共享进程的资源(如内存),但每个线程有自己的栈…...
Unity中通过TMP使用图片字体
折腾了半天,最后发现一个相对简单,不需要使用任何插件,只凭默认的TMP外加PS的办法。 1,在Font Asset Creator设置参数 (1)source font file:尽量选一个支持中文的字体。 (2&#x…...
WSL2-Ubuntu22.04下拉取Docker MongoDB镜像并启动
若未安装docker可参考此教程:可以直接在wsl上安装docker吗,而不是安装docker desktop?-CSDN博客 1. 拉取镜像 docker pull mongo:latest 2.打开网络加速,再次拉取镜像 3.创建docker-compose.yml 进入vim编辑器后输入i进行编辑&a…...
Java基础系列-HashMap源码解析2-AVL树
文章目录 AVL树左旋右旋左旋右旋的4种情况LL 型RR 型LR 型RL 型 实际插入时怎么判断是那种类型?插入时注意事项删除节点 AVL树 为避免BST树退化成链表的极端情况, AVL 树应运而生。 平衡因子取值(-1,0,1)…...
介绍 IntelliJ IDEA 快捷键操作
IntelliJ IDEA 快捷键操作 1. 编辑与导航2. 查找与替换3. 调试与运行4. 导航与视图5. 重构与生成6. 高级快捷键(提高效率)注意事项 IntelliJ IDEA 是一款功能强大的集成开发环境,掌握其常用快捷键可以显著提升开发效率。但是有些小伙伴并不清…...
Python 流程控制
目录 1. if 语句 1.1 条件表达式与关系运算符 1.2 if-else 条件语句 1.3 多重 if 语句 1.4 if 语句的常见问题 2. Python 的循环 2.1 while 循环 2.1.1 while 循环语句 2.1.2 Python 的注释 2.1.3 字符串的格式化输出 2.1.4 while 循环嵌套 2.2 for 循环 2.2.1 for…...
若依框架深度解析:企业级快速开发平台的设计哲学与实践
一、框架定位与技术基因 若依(RuoYi)作为国产开源企业级快速开发平台,完美融合了**"高效"与"灵活"两大核心设计理念。其技术基因植根于Spring Boot生态,通过模块化架构设计,将传统Java EE开发效率…...
【每日八股】复习 MySQL Day2:索引
文章目录 昨日内容复习MySQL 事务的四大特性?并发事务会产生哪些问题?MySQL 事务的隔离级别?MVCC 实现原理?幻读如何解决?读已提交隔离级别如何实现? 复习 MySQL Day2:索引MySQL 使用 B 树作为索…...
2025深圳中兴通讯安卓开发社招面经
2月27号 中兴通讯一面 30多分钟 自我介绍 聊项目 我的优缺点,跟同事相比,有什么突出的地方 Handler机制,如何判断是哪个消息比较耗时 设计模式:模板模式 线程的状态 线程的开启方式 线程池原理 活动的启动模式 Service和Activity…...
MyBatis中的@Param注解-如何传入多个不同类型的参数
mybatis中参数识别规则 默认情况下,MyBatis 会按照参数位置自动分配名称:param1, param2, param3, ...或者 arg0, arg1。 // Mapper 接口方法 User getUserByIdAndName(Integer id, String name); 以上接口在XML中只能通过param1或者arg0这样的方式来引用,可读性差。 &l…...
【高频考点精讲】JavaScript中的访问者模式:从AST解析到数据转换的艺术
大家好呀!今天想和大家聊聊一个既实用又有点"高冷"的设计模式——访问者模式。这个模式在AST解析、Babel插件开发中无处不在,但很多同学可能一直没搞明白它到底妙在哪里。 一、生活中的访问者模式 想象一下你开了一家奶茶店,店里…...
crictl 拉取镜像报错 Unimplemented desc = unknown service runtime.v1.ImageService
具体报错内容如下 crictl pull registry.cn-beijing.aliyuncs.com/kubesphereio/pause:3.9 FATA[0000] validate service connection: validate CRI v1 image API for endpoint "unix:///run/containerd/containerd.sock": rpc error: code Unimplemented desc un…...
1.第一章:数据治理的历史演进
文章目录 1.1 数据管理的进化之路1.2 数据整合时代的突破与局限1.3 数据治理时代的全面展开1.4 智能数据治理的突破性进展1.5 数据分类的根本价值与方法论1.6 数据分类的新方向 第一章快速的过一下: 相关专栏:数据分类的艺术 1.1 数据管理的进化之路 数…...
ApacheJmeter使用权威指南
1. JMeter 概述 JMeter 是一款开源的性能测试工具,支持HTTP、FTP、JDBC、SOAP等协议,广泛用于负载测试、压力测试和功能测试。 核心功能: 模拟多用户并发请求生成实时测试报告支持分布式测试断言验证响应结果 2. 安装与配置 2.1 环境要求…...
Ethan独立开发产品日报 | 2025-04-22
1. Agent Simulate 用数千个数字人来测试你的人工智能应用。 Agent Simulate 让你在发布之前,能够在一个安全的环境中模拟和测试大型语言模型(LLM)代理。它帮助你调试行为、加快迭代速度,并降低生产风险,专为代理开发…...
C++二分法详解
C二分法详解 文章目录 C二分法详解一、算法简介二、算法原理三、代码实现四、复杂度分析五、常见练习题 一、算法简介 二分查找(Binary Search)是一种 高效搜索算法 ,适用于 有序序列 。通过每次将搜索范围减半,时间复杂度为O(log…...
【UML建模】数据流图 绘制
管理-相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 (一)知识点 1.1定义 数据流图或数据流程图(Data Flow Diagram,简称DFD),是需求分析阶段(结构化分析 SA)中主要表达工具 , 用于表示软件模型的一种图示方法。它以图形的方式描绘数据在系统中流动和处理…...