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

在线终端(一个基于 Spring Boot 的在线终端模拟器,实现了类 Linux 命令行操作功能)

Online Terminal

一个基于 Spring Boot 的在线终端模拟器,实现了类 Linux 命令行操作功能。

功能特点

  • 模拟 Linux 文件系统操作
  • 支持基础的文件和目录管理命令
  • 提供文件内容查看和编辑功能
  • 支持文件压缩和解压缩操作

快速开始

环境要求

  • JDK 8+
  • Maven 3.6+

运行项目

  1. 克隆项目到本地
git clone https://gitee.com/anxwefndu/online-terminal.git
  1. 修改配置文件
    编辑 src/main/resources/application.properties, 设置根目录路径:
root.path=D:/linux/root/
  1. 启动项目
mvn spring-boot:run
  1. 访问地址: http://localhost:8080

支持的命令

文件操作命令

ls - 列出目录内容
# 基本用法
ls# 显示详细信息
ls -l# 显示隐藏文件
ls -a# 组合使用
ls -la /path/to/directory
cd - 切换目录
# 切换到指定目录
cd /path/to/directory# 返回上级目录
cd ..# 返回根目录
cd /
pwd - 显示当前工作目录
pwd
mkdir - 创建目录
# 创建单个目录
mkdir directory# 创建多级目录
mkdir -p path/to/directory
rm - 删除文件或目录
# 删除文件
rm file.txt# 递归删除目录
rm -r directory# 强制删除
rm -f file.txt# 递归强制删除目录
rm -rf directory

文件内容操作

cat - 查看文件内容
# 查看单个文件
cat file.txt# 显示行号
cat -n file.txt# 查看多个文件
cat file1.txt file2.txt
more - 分页显示文件内容
# 基本用法
more file.txt# 继续查看下一页
more -n file.txt
head - 查看文件开头
# 默认显示前10行
head file.txt# 指定显示行数
head -n 5 file.txt
tail - 查看文件结尾
# 默认显示最后10行
tail file.txt# 指定显示行数
tail -n 5 file.txt
vim - 文本编辑器
# 打开文件
vim file.txt# 编辑命令
:edit <content>  # 编辑内容
:w               # 保存
:q               # 退出
:wq              # 保存并退出

文件查找

find - 查找文件
# 按名称查找
find . -name "*.txt"# 按类型查找(f:文件,d:目录)
find . -type f
find . -type d# 在指定目录下查找
find /path/to/directory -name "*.txt"
grep - 搜索文件内容
# 基本搜索
grep "pattern" file.txt# 显示行号
grep -n "pattern" file.txt# 忽略大小写
grep -i "pattern" file.txt# 搜索多个文件
grep "pattern" file1.txt file2.txt

文件传输

cp - 复制文件
# 复制文件
cp source.txt target.txt# 递归复制目录
cp -r source_dir target_dir# 强制覆盖
cp -f source.txt target.txt
mv - 移动文件
# 移动文件
mv source.txt target/# 重命名文件
mv old.txt new.txt# 强制覆盖
mv -f source.txt target.txt

压缩文件操作

zip - 压缩文件
# 压缩文件
zip archive.zip file.txt# 压缩目录
zip -r archive.zip directory/
unzip - 解压缩文件
# 解压到当前目录
unzip archive.zip# 解压到指定目录
unzip archive.zip -d /target/directory

注意事项

  1. 所有文件操作都被限制在配置的根目录下
  2. 为了安全考虑,不支持 .. 路径
  3. 文件路径支持相对路径和绝对路径

后续开发说明

目前系统还有部分功能未开发完成,等待后续完善

代码下载

Online Terminal

核心源码

源码/src/main/resources/static/index.html

<!DOCTYPE html>
<html lang="zh"><head><meta charset="UTF-8"><meta content="width=device-width, initial-scale=1.0" name="viewport"><title>在线终端</title><script src="https://cdn.tailwindcss.com"></script><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet"><script>tailwind.config = {theme: {extend: {colors: {primary: '#2563eb',secondary: '#475569',terminal: {bg: '#1a1b26',text: '#a9b1d6',prompt: '#7aa2f7',success: '#9ece6a',error: '#f7768e'}},borderRadius: {'none': '0px','sm': '2px',DEFAULT: '4px','md': '8px','lg': '12px','xl': '16px','2xl': '20px','3xl': '24px','full': '9999px','button': '4px'}}}}</script><style>@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&display=swap');* {font-family: 'JetBrains Mono', monospace;}.file-tree::-webkit-scrollbar {width: 8px;}.file-tree::-webkit-scrollbar-track {background: #1a1b26;}.file-tree::-webkit-scrollbar-thumb {background: #414868;border-radius: 4px;}.terminal-container::-webkit-scrollbar {width: 8px;}.terminal-container::-webkit-scrollbar-track {background: #1a1b26;}.terminal-container::-webkit-scrollbar-thumb {background: #414868;border-radius: 4px;}.terminal-container {display: flex;flex-direction: column;height: 100%;font-family: 'Consolas', monospace;}.terminal-output {overflow-y: auto;}.command-input-container {position: relative;}.prompt {position: absolute;left: 0;top: 0;}.command-input-wrapper {background: transparent;border: none;color: #a9b1d6;font-family: inherit;font-size: inherit;outline: none;padding: 0;margin: 0;min-height: 1.5em;white-space: pre-wrap;word-break: break-all;}</style>
</head><body class="bg-terminal-bg text-terminal-text"><div class="max-w-[1440px] mx-auto h-screen flex flex-col"><header class="h-12 bg-terminal-bg border-b border-gray-700 flex items-center px-4 justify-between"><div class="flex items-center space-x-4"><buttonclass="text-terminal-text hover:text-terminal-prompt !rounded-button px-3 py-1.5 flex items-center space-x-2"><i class="fas fa-upload text-sm"></i><span class="text-sm whitespace-nowrap">上传文件</span></button><buttonclass="text-terminal-text hover:text-terminal-prompt !rounded-button px-3 py-1.5 flex items-center space-x-2"><i class="fas fa-download text-sm"></i><span class="text-sm whitespace-nowrap">下载文件</span></button></div><div class="flex items-center space-x-4"><button class="text-terminal-text hover:text-terminal-prompt !rounded-button px-3 py-1.5"><i class="fas fa-moon text-sm"></i></button><div class="flex items-center space-x-2"><button class="text-terminal-text hover:text-terminal-prompt !rounded-button px-2 py-1"><i class="fas fa-minus text-sm"></i></button><span class="text-sm">14px</span><button class="text-terminal-text hover:text-terminal-prompt !rounded-button px-2 py-1"><i class="fas fa-plus text-sm"></i></button></div></div></header><div class="flex-1 flex" style="overflow: hidden"><aside class="w-64 border-r border-gray-700 flex flex-col"><div class="p-4 border-b border-gray-700"><div class="text-sm text-terminal-prompt current-path">/</div></div><div class="flex-1 overflow-auto file-tree p-2"><div class="space-y-1"></div></div></aside><main class="flex-1 flex flex-col"><div class="flex-1 overflow-auto terminal-content p-4 terminal-container" onclick="focusCommandInput()"><div style="height: fit-content"><!-- 终端输出区 --><div class="terminal-output"></div><!-- 命令输入区 --><div class="command-input-container"><span class="text-terminal-prompt mr-2 prompt">user@localhost$</span><div class="command-input-wrapper" contenteditable="true"onkeydown="handleKeyDown(event)"></div></div></div></div><div class="h-12 border-t border-gray-700 flex items-center px-4 justify-between"><div class="flex items-center space-x-4"><span class="text-sm text-terminal-success"><i class="fas fa-check-circle mr-1"></i>就绪</span></div><div class="flex items-center space-x-4"></div></div></main></div></div><script src="./init.js"></script><script src="./handleFocus.js"></script><script src="./handleAppendTerminal.js"></script><script src="./handlePromote.js"></script><script src="./handleCommandInput.js"></script>
</body></html>

源码/src/main/resources/static/handleCommandInput.js

let commandHistory = [];
let historyIndex = -1;async function handleKeyDown(event) {const inputDiv = event.target;if (event.key === 'Enter') {event.preventDefault();await executeCommand();} else if (event.key === 'ArrowUp') {if (historyIndex < commandHistory.length - 1) {event.preventDefault();historyIndex++;inputDiv.textContent = commandHistory[historyIndex];// 将光标移到末尾const range = document.createRange();const sel = window.getSelection();range.selectNodeContents(inputDiv);range.collapse(false);sel.removeAllRanges();sel.addRange(range);}} else if (event.key === 'ArrowDown') {if (historyIndex > -1) {event.preventDefault();historyIndex--;inputDiv.textContent = historyIndex === -1 ? '' : commandHistory[historyIndex];// 将光标移到末尾const range = document.createRange();const sel = window.getSelection();range.selectNodeContents(inputDiv);range.collapse(false);sel.removeAllRanges();sel.addRange(range);}}
}async function executeCommand() {const inputWrapperList = document.getElementsByClassName('command-input-wrapper');const inputDiv = inputWrapperList[inputWrapperList.length - 1];const command = inputDiv.textContent.trim();const promptList = document.getElementsByClassName('prompt');const prompt = promptList[promptList.length - 1];if (command) {commandHistory.unshift(command);historyIndex = -1;try {const response = await fetch('/api/terminal/execute', {method: 'POST',headers: { 'Content-Type': 'application/json' },body: JSON.stringify({ command })});const result = await response.text();appendToTerminal(`${prompt.textContent} ${command}\n${result}`);// 如果是 cd 命令,更新提示符if (command.startsWith('cd ')) {const currentPath = await getCurrentPath();updatePrompt(currentPath);}// 更新根目录子文件及子文件夹展示await loadRootDirectory();} catch (error) {appendToTerminal(`执行出错: ${error.message}`);}inputDiv.textContent = '';} else {appendToTerminal(`${prompt.textContent}\n`);}
}// 获取当前路径
async function getCurrentPath() {try {const response = await fetch('/api/terminal/execute', {method: 'POST',headers: { 'Content-Type': 'application/json' },body: JSON.stringify({ command: 'pwd' })});const path = await response.text();return path.trim();} catch (error) {console.error('获取当前路径失败:', error);return '/';}
}// 在目录变化后更新当前目录
function updatePrompt(newPath) {const promptList = document.getElementsByClassName('prompt');const prompt = promptList[promptList.length - 1];prompt.textContent = `user@localhost$`;if (newPath === "") {newPath = "/";}if (!newPath.startsWith("/")) {newPath = "/" + newPath;}document.getElementsByClassName("current-path")[0].textContent = newPath;updatePromptIndent();
}

运行截图

1.系统首页
在这里插入图片描述

2.测试部分命令
在这里插入图片描述

相关文章:

在线终端(一个基于 Spring Boot 的在线终端模拟器,实现了类 Linux 命令行操作功能)

Online Terminal 一个基于 Spring Boot 的在线终端模拟器,实现了类 Linux 命令行操作功能。 功能特点 模拟 Linux 文件系统操作支持基础的文件和目录管理命令提供文件内容查看和编辑功能支持文件压缩和解压缩操作 快速开始 环境要求 JDK 8Maven 3.6 运行项目 克隆项目到…...

vue+electron ipc+sql相关开发(三)

在 Electron 中使用 IPC(Inter-Process Communication)与 SQLite 数据库进行通信是一个常见的模式,特别是在需要将数据库操作从渲染进程(Vue.js)移到主进程(Electron)的情况下。这样可以更好地管理数据库连接和提高安全性。下一篇介绍结合axios写成通用接口形式,虽然没…...

C++静态变量多线程中的未定义行为

静态变量&#xff0c;是 C 程序员最早接触的语言特性之一。它有状态、生命周期长、初始化一次&#xff0c;用起来真是香。 但只要程序一旦进入多线程的世界&#xff0c;很多你原以为“稳定可靠”的写法&#xff0c;可能就突然开始“不对劲”了。静态变量首当其冲。 今天我们就…...

黑马商城项目(二) Docker

一、Docker快速入门 安装Docker - 飞书云文档 二、命令解读 常见命令&#xff1a; 数据卷&#xff1a; 案例1 数据卷挂载&#xff1a; 案例2 本地目录挂载&#xff1a; 挂载到指定目录能够保存数据&#xff08;即使Mysql容器被删除&#xff09; docker run -d \--name mysql …...

玩转Docker | 使用Docker部署Memos笔记工具

玩转Docker | 使用Docker部署Memos笔记工具 前言一、Memos介绍Memos简介主要特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署Memos服务下载镜像创建容器创建容器检查容器状态检查服务端口安全设置四、访问Memos服务访问Memos首页注册账号五、基本使用…...

c#从ftp服务器下载文件读取csv

从 FTP 服务器下载文件的功能&#xff0c;并且支持根据文件名称的前缀或直接文件名进行查找和下载。以下是对代码的一些建议和修改&#xff0c;以确保它能够满足您的需求&#xff0c;尤其是如果您希望仅下载特定类型的文件&#xff08;例如 .csv 文件&#xff09; using Syste…...

电脑知识 | TCP通俗易懂详解 <三>tcp首部中ACK、SYN、FIN等信息填写案例_握手时

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f91d;&#x1f3fb;握手时的快递单 1.&#x1f46b;第一次握手&#xff08;发送方&#xff09; 2.&#x1f46b;第二次握手&#xff08;收件方&#xff09; 3.&#x1f46b;第三次握手&#xff08;发件方&#xff09;…...

go学习记录(第二天)

Java里面的类对象可以对应go里面的结构体吗 表格对比 Java 类 (Class)​​​​Go 结构体 (Struct)​​封装数据和行为&#xff08;字段方法&#xff09;主要封装数据&#xff08;字段&#xff09;&#xff0c;方法通过​​接收者​​关联支持继承&#xff08;extends&#xf…...

Docker 中启动 Nginx 容器

文章目录 1. 快速运行 Nginx 容器从 Docker Hub 拉取官方镜像并运行&#xff1a;验证访问&#xff1a; 2. 挂载自定义配置和静态文件步骤&#xff1a; 3. 常用操作命令4. 生产环境建议使用 Docker Compose关键优化&#xff1a; 5. 调试技巧6. 常见问题解决 1. 快速运行 Nginx 容…...

windows 11 安装 redis

在 Windows 11 上安装 Redis 可以采用几种不同的方法&#xff0c;这里介绍几种常见的方法&#xff1a; 方法 1&#xff1a;使用 Microsoft Store Windows 11 提供了 Microsoft Store&#xff0c;你可以直接从那里安装 Redis。 打开 Microsoft Store。 在搜索框中输入 “Redi…...

5. k8s 之 pod原理与使用

Kubernetes Pod 原理详解 1. Pod 的部署方式 Pod 是 Kubernetes 的最小调度单元&#xff0c;其部署方式分为 声明式&#xff08;YAML&#xff09; 和 命令式&#xff08;kubectl&#xff09; 两种&#xff1a; (1) 声明式部署&#xff08;推荐&#xff09; 通过 YAML 文件定…...

人形机器人动作策略 ∼ 人类动作策略

25年3月来自UCSD、CMU、西雅图 UW、MIT 和 Apple 公司的论文“Humanoid Policy ∼ Human Policy”。 利用多样化数据训练人形机器人的操作策略&#xff0c;可以增强其在跨任务和平台的鲁棒性和泛化能力。然而&#xff0c;仅从机器人演示中学习需要耗费大量的人力&#xff0c;需…...

MySQL事务详解:从5.7到8.0的变化

MySQL事务详解&#xff1a;从5.7到8.0的变化 引言 在关系型数据库管理系统&#xff08;RDBMS&#xff09;中&#xff0c;事务是一个核心概念&#xff0c;它确保了数据的一致性和可靠性。MySQL作为最流行的开源RDBMS之一&#xff0c;其事务处理机制在不同的版本中经历了重要的…...

conda常用命令简解

以下是conda常用命令的汇总: 创建一个新环境&#xff1a; conda create -n your_env_name pythonX.X 激活某个环境&#xff1a; activate your_env_name 安装包&#xff1a; conda install [package] 查看安装了哪些包&#xff1a; conda list 查看当前有哪些虚拟环境&…...

数据科学与机器学习:前沿技术研究

数据科学与机器学习:前沿技术研究 摘要 本文探讨了数据科学与机器学习领域的三个前沿方向:自适应机器学习模型、联邦学习隐私与保护以及多模态数据处理。通过理论分析、算法设计和实验验证,展示了这些技术在解决实际问题中的潜力和挑战。自适应机器学习模型能够根据数据变化…...

个人博客测试报告

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…...

Sentinel源码—3.ProcessorSlot的执行过程一

大纲 1.NodeSelectorSlot构建资源调用树 2.LogSlot和StatisticSlot采集资源的数据 3.Sentinel监听器模式的规则对象与规则管理 4.AuthoritySlot控制黑白名单权限 5.SystemSlot根据系统保护规则进行流控 1.NodeSelectorSlot构建资源调用树 (1)Entry的处理链的执行入口 (2…...

datagrip连接mysql问题5.7.26

1.Case sensitivity: plainmixed, delimitedexac Remote host terminated the handshake. 区分大小写&#xff1a;plain混合&#xff0c;分隔exac 远程主机终止了握手。 原因:usessl 参数用于指定是否使用 SSL&#xff08;Secure Sockets Layer&#xff09;加密来保护数据传…...

【电路笔记】-变压器构造

变压器构造 文章目录 变压器构造1、概述2、变压器铁芯的构造3、变压器叠片4、变压器绕组排列5、变压器点定位6、变压器铁芯损耗6.1 磁滞损耗6.2 涡流损耗6.3 铜损耗一个简单的双绕组变压器构造包括每个绕组分别缠绕在一个独立的软铁肢或磁芯上,这提供了必要的磁路。 1、概述 …...

阿里云集群开启debug

1、安装 kubectl Macos brew install kubectl Windows&#xff1a; https://kubernetes.io/zh-cn/docs/tasks/tools/install-kubectl-windows/ 下载后&#xff0c;放到任意目录 2、配置连接信息 mac 将以下内容复制到计算机 $HOME/.kube/config 文件下: windows 不同集…...

继承-C++

继承在我们日常中经常指我们的人伦关系中的父子关系&#xff0c;孩子继承父母的基因、习惯之类的&#xff0c;孩子也会有自己的个性等。然而在我们C计算机语言中的类也存在继承&#xff0c;我们将作为“父亲”的类称为父类&#xff0c;将作为“孩子”的类称为子类&#xff0c;父…...

Java并发-AQS框架原理解析与实现类详解

什么是AQS&#xff1f; AQS&#xff08;AbstractQueuedSynchronizer&#xff09;是Java并发包&#xff08;JUC&#xff09;的核心基础框架&#xff0c;它为构建锁和同步器提供了高效、灵活的底层支持。本文将从设计原理、核心机制及典型实现类三个维度展开&#xff0c;帮助读者…...

【FFmpeg从入门到精通】第一章-FFmpeg简介

1 FFmpeg的定义 FFmpeg既是一款音视频编解码工具&#xff0c;同时也是一组音视频编解码开发套件&#xff0c;作为编解码开发套件&#xff0c;它为开发者提供了丰富的音视频处理的调用接口。 FFmpeg提供了多种媒体格式的封装和解封装&#xff0c;包括多种音视频编码、多种协议…...

Mac屏幕共享怎么使用?

Mac电脑要实现远程桌面连接到的工功能&#xff0c;可以使用其自带的屏幕共享功能。Mac屏幕共享能从一台Mac电脑远程控制另一台Mac电脑&#xff0c;并且无需下载第三方远程控制软件。下面&#xff0c;将为您介绍Mac远程桌面连接在哪&#xff0c;以及使用方法。 步骤 1. Mac的远…...

探索亮数据Web Unlocker API:让谷歌学术网页科研数据 “触手可及”

本文目录 一、引言二、Web Unlocker API 功能亮点三、Web Unlocker API 实战1.配置网页解锁器2.定位相关数据3.编写代码 四、Web Scraper API技术亮点 五、SERP API技术亮点 六、总结 一、引言 网页数据宛如一座蕴藏着无限价值的宝库&#xff0c;无论是企业洞察市场动态、制定…...

【后端】【python】利用反射器----动态设置装饰器

&#x1f4d8; Python 装饰器进阶指南 一、装饰器本质 ✅ 本质概念 Python 装饰器的本质是 函数嵌套 返回函数&#xff0c;它是对已有函数的增强&#xff0c;不修改原函数代码&#xff0c;使用语法糖 decorator 实现包裹效果。 def my_decorator(func):def wrapper(*args, …...

Oracle 中的 NOAUDIT CREATE SESSION 命令详解

Oracle 中的 NOAUDIT CREATE SESSION 命令详解 NOAUDIT CREATE SESSION 是 Oracle 数据库中用于取消对用户登录会话审计的命令&#xff0c;它与 AUDIT CREATE SESSION 命令相对应。 一、基本语法 NOAUDIT CREATE SESSION [BY user1 [, user2]... | BY [SESSION | ACCESS]] …...

《Chronos: Learning the Language of Time Series》

全文摘要 本文提出了Chronos&#xff0c;一个简单而有效的预训练概率时间序列模型框架。Chronos通过缩放和量化将时间序列值标记化为固定词汇&#xff0c;并利用现有的基于变换器的语言模型架构进行训练。我们在多个公开数据集和合成数据集上预训练了Chronos模型&#xff0c;并…...

git UserInterfaceState.xcuserstate 文件频繁更新

1> 退出 Xcdoe&#xff0c;打开终端&#xff08;Terminal&#xff09;&#xff0c;进入到你的项目目录下。 2> 在终端键入 git rm --cached <YourProjectName>.xcodeproj/project.xcworkspace/xcuserdata/<YourUsername>.xcuserdatad/UserInterfaceState.x…...

Day92 | 灵神 | 二叉树 路径总和

Day92 | 灵神 | 二叉树 路径总和 112.路径总和 112. 路径总和 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 1.递归函数意义 如果在根节点为t的树中可以找到长度为target的路径就返回true&#xff0c;找不到就返回false 2.参数和返回值 bool tra(TreeNode …...

数据集 handpose_x_plus 3D RGB 三维手势 - 打篮球 场景 play basketball

数据集 handpose 相关项目地址&#xff1a;https://github.com/XIAN-HHappy/handpose_x_plus 样例数据下载地址&#xff1a;数据集handpose-x-plus3DRGB三维手势-打篮球场景playbasketball资源-CSDN文库...

GitLab本地安装指南

当前GitLab的最新版是v17.10&#xff0c;安装地址&#xff1a;https://about.gitlab.com/install/。当然国内也可以安装极狐GitLab版本&#xff0c;极狐GitLab 是 GitLab 中国发行版&#xff08;JH&#xff09;。极狐GitLab支持龙蜥&#xff0c;欧拉等国内的操作系统平台。安装…...

云数据库:核心分类、技术优势与创新、应用场景、挑战应对和前沿趋势

李升伟 整理 云数据库技术是云计算与数据库技术融合的产物&#xff0c;它通过云服务模式提供数据库功能&#xff0c;彻底改变了数据的存储、管理和访问方式。以下从核心概念、技术优势、应用场景及挑战等方面展开分析&#xff1a; 一、云数据库的核心分类 按部署模式 托管数…...

算力狂飙时代:解码2024年上海及周边区域IDC市场的三重构局

2025年3月&#xff0c;科智咨询《2024-2025年上海及周边地区IDC市场研究报告》正式发布。报告对上海及周边地区IDC市场发展情况进行全面分析与深入解读。 在长三角地区数字经济蓬勃发展的背景下&#xff0c;上海及周边区域的数据中心产业正迎来深刻转型。随着上海市政府陆续出台…...

循环首差链码的通俗解释

循环首差链码的通俗解释 1. 链码是什么&#xff1f; 链码是一种用数字序列描述图像中物体轮廓的方法。例如&#xff0c;在 4-链码 中&#xff1a; 0 表示向右移动&#xff1b;1 表示向上移动&#xff1b;2 表示向左移动&#xff1b;3 表示向下移动。 假设有一段轮廓的链码为…...

✅ MySQL 事务 MVCC ROLLBACK

&#x1f9e0; 一、MVCC 与可重复读&#xff08;REPEATABLE READ&#xff09; 项目内容MVCC 概念多版本并发控制&#xff0c;事务中读到的是开启事务时的数据快照实现机制依赖 Read View trx_id Undo Log 实现版本判断快照读普通 SELECT&#xff0c;使用 MVCC&#xff0c;不…...

信息系统项目管理工程师备考计算类真题讲解四

一、三点估算&#xff08;PERT&#xff09; PERT&#xff08;Program Evaluation and Review Technique&#xff09;&#xff1a;计划评估技术&#xff0c;又称三点估算技术。PERT估算是一种项目管理中用于估算项目工期或成本的方法&#xff0c;以下是其详细介绍&#xff1a; …...

winfrom 查询某字符串 找到它在 richTextbox 的位置 定位 并高亮 并且滚动定位到所查询的字符串所在的行

如图&#xff1a; 代码&#xff1a; //查找关键字private void buttonSearch_Click(object sender, EventArgs e){string searchText textBoxSearch.Text;if (!string.IsNullOrEmpty(searchText)){TextBoxFinds(txtJSON, searchText);TextBoxFinds(txtSQL, searchText);}}//查…...

数据结构学习笔记 :线性表的链式存储详解

目录 单链表 1.1 无头单链表 1.2 有头单链表单向循环链表双链表 3.1 双链表 3.2 双向循环链表总结与对比 一、单链表 1. 无头单链表&#xff08;Headless Singly Linked List&#xff09; 定义&#xff1a;链表无头结点&#xff0c;直接由头指针指向第一个数据节点。 特点&…...

MyBatis-Plus 详解:快速上手到深入理解

一、前言 &#x1f31f; &#x1f9e9; MyBatis & MyBatis-Plus 是啥关系&#xff1f; MyBatis 是一个优秀的 ORM 框架&#xff08;Object Relational Mapping&#xff0c;面向对象关系映射&#xff09;&#xff0c;它让我们可以通过编写 SQL 来操作数据库&#xff0c;同…...

【软件工程大系】净室软件工程

净室软件工程&#xff08;Cleanroom Software Engineering&#xff09;是一种以缺陷预防&#xff08;正确性验证&#xff09;为核心的软件开发方法&#xff0c;旨在通过严格的工程规范和数学验证&#xff0c;在开发过程中避免缺陷的产生&#xff0c;而非依赖后期的测试和调试。…...

[区块链lab2] 构建具备加密功能的Web服务端

实验目标&#xff1a; 掌握区块链中密码技术的工作原理。在基于Flask框架的服务端中实现哈希算法的加密功能。 实验内容&#xff1a; 构建Flash Web服务器&#xff0c;实现哈希算法、非对称加密算法的加密功能。 实验步骤&#xff1a; 哈希算法的应用&#xff1a;创建hash…...

2025年- H10-Lc117-560.和为K的子数组(子串)--java版

1.题目描述 2.思路 例子1&#xff1a; 3.代码实现 class Solution {public int subarraySum(int[] nums, int k) {// List<Integer> listnew ArrayList<>();// int cnt0;// for(int i0;i<nums.length;i)// {// for(int ji1;j<nums.length;j)// {// …...

肾脏系统触发 “元数据泄漏警报“(蛋白尿+)

肾脏系统触发 "元数据泄漏警报"&#xff08;蛋白尿&#xff09; 核心故障模块&#xff1a;肾小球滤过屏障&#xff08;GlomerularFilter v2.5.0&#xff09; 漏洞类型&#xff1a;孔径屏障漏洞 电荷屏障校验失败 → 元数据&#xff08;蛋白质&#xff09;越界泄漏 …...

摄像头的工作原理与应用摄像头的工作原理与应用

一、摄像头的工作原理与应用 基本概念 V4L2的全称是Video For Linux Two&#xff0c;其实指的是V4L的升级版&#xff0c;是linux系统关于视频设备的内核驱动&#xff0c;同时V4L2也包含Linux系统下关于视频以及音频采集的接口&#xff0c;只需要配合对应的视频采集设备就可以…...

一个由通义千问以及FFmpeg的AVFrame、buffer引起的bug:前面几帧影响后面帧数据

目录 1 问题描述 2 我最开始的代码----错误代码 3 正确的代码 4 为什么前面帧的结果会叠加到了后面帧上----因为ffmpeg新一帧只更新上一帧变化的部分 5 以后不要用通义千问写代码 1 问题描述 某个项目中&#xff0c;需要做人脸马赛克&#xff0c;然后这个是君正的某款芯片…...

MyBatis-动态SQL

MyBatis Plus 作为 MyBatis 的增强工具&#xff0c;简化了 CRUD 操作&#xff0c;但在复杂查询时&#xff0c;仍需使用 MyBatis 的动态 SQL 功能。以下是一些常用的动态标签、用法示例及注意事项&#xff1a; 常用动态标签及用法示例 <if> 标签 用途&#xff1a;条件判…...

顺序表(Arraylist)和链表(Linkedlist)

List List是一个接口&#xff0c;继承自Collection。 从数据结构角度来说&#xff0c;List就是一个线性表&#xff0c;即用n个相同类型的有限序列&#xff0c;可以在此序列中可以进行增删改查操作。 List是接口不能直接实例化&#xff0c;Linkedlist和Arraylist都实现了List…...

【python】django sqlite版本过低怎么办

方法一&#xff1a;下载最新版本 复制上面的内容的链接 在服务器上进行操作 wget https://sqlite.org/2025/sqlite-autoconf-3490100.tar.gz tar -zxvf sqlite-autoconf-3490100.tar.gz cd sqlite-autoconf-3490100 ./configure --prefix/usr/local make && make in…...

解决Dify使用Docker Compose部署中无法通过OpenAI插件等国外大模型厂商的插件访问其API的问题

解决Dify使用Docker Compose部署中无法通过OpenAI插件等国外大模型厂商的插件访问其API的问题 问题描述 在使用Docker Compose部署Dify时&#xff0c;发现无法通过OpenAI等国外大模型厂商的插件访问其API。这主要是因为Docker容器内的网络环境与宿主机不同&#xff0c;导致无…...