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

RAG基建之PDF解析的“无OCR”魔法之旅

PDF文件转换成其他格式常常是个大难题,大量的信息被锁在PDF里,AI应用无法直接访问。如果能把PDF文件或其对应的图像转换成结构化或半结构化的机器可读格式,那就能大大缓解这个问题,同时也能显著增强人工智能应用的知识库。

嘿,各位AI探险家们!今天我们将踏上了一段奇妙的PDF解析之旅,探索了那些不用OCR(光学字符识别)也能搞定PDF的神奇小模型。就像哈利·波特不用魔杖也能施法一样,这些小模型用神经网络直接“读懂”PDF,省去了繁琐的OCR步骤,简直是AI界的“无杖魔法”!

RAG(Retrieval-Augmented Generation)基建之PDF解析的“魔法”与“陷阱”

文章目录

    • 概述
  • 详细介绍
    • Donut
      • 编码器
      • 训练
      • 微调
    • Nougat
      • 模型架构
      • 训练数据集的构建
    • Pix2Struct
      • 模型架构
      • 预训练任务
      • 预训练数据集
      • 微调
    • 一丝感悟
      • 关于预训练任务
      • 关于预训练数据
      • 关于性能
      • 基于流水线 vs. OCR-Free
      • OCR-Free小型模型方法的局限性
    • 结论

概述

之前介绍的基于流水线的PDF解析方法主要使用OCR引擎进行文本识别。然而,这种方法计算成本高,对语言和文档类型的灵活性较差,且OCR错误可能影响后续任务。

因此,应该开发OCR-Free方法,如图1所示。这些方法不显式使用OCR来识别文本,而是使用神经网络隐式完成任务。本质上,这些方法采用端到端的方式,直接输出PDF解析结果。在这里插入图片描述
OCR-Free vs. 流水线:谁更香?
从结构上看,OCR-Free方法比基于流水线的方法更简单。OCR-Free方法主要需要注意的方面是模型结构的设计和训练数据的构建。OCR-Free方法虽然一步到位,避免了中间步骤的“损耗”,但它的训练和推理速度有点慢,像是一辆豪华跑车,虽然性能强大,但油耗高。而基于流水线的方法则像是一辆经济型小车,虽然步骤多,但每个模块都很轻量,适合大规模部署。

接下来,我们将介绍几种具有代表性的OCR-Free小型模型PDF解析框架:

    1. Donut:PDF解析界的“甜甜圈”
      Donut这个小家伙,别看它名字甜,干起活来可是一点都不含糊。它用Swin Transformer当“眼睛”,BART当“嘴巴”,直接把PDF图像“吃”进去,吐出一串JSON格式的“甜点”。不用OCR,全靠神经网络,简直是PDF解析界的“甜品大师”!
    1. Nougat:PDF解析界的“牛轧糖”
      Nougat,名字听起来就很有嚼劲,它的绝活是把PDF图像变成Markdown。它特别擅长处理复杂的公式和表格,简直是PDF解析界的“糖果工匠”。不过,它的生成速度有点慢,像牛轧糖一样,嚼起来需要点耐心。
    1. ** Pix2Struct:PDF解析界的“像素魔法师”**
      Pix2Struct是个视觉语言理解的高手,它的任务是从屏蔽的网页截图中预测HTML解析。它不仅能处理PDF,还能搞定网页截图,简直是多才多艺的“像素魔法师”。不过,它的训练数据来自网页,可能会带来一些“有害内容”,使用时得小心点。

详细介绍

Donut

如图2所示,Donut是一个端到端模型,旨在全面理解文档图像。其架构简单,由基于Transformer的视觉编码器和文本解码器模块组成。在这里插入图片描述

Donut不依赖任何与OCR相关的模块,而是使用视觉编码器从文档图像中提取特征,并直接使用文本解码器生成token序列。输出序列可以转换为JSON等结构化格式。

代码如下:

class DonutModel(PreTrainedModel):r"""Donut: 一个端到端的OCR-Free文档理解Transformer。编码器将输入的文档图像映射为一组嵌入,解码器预测所需的token序列,可以将其转换为结构化格式,给定提示和编码器输出的嵌入"""config_class = DonutConfigbase_model_prefix = "donut"def __init__(self, config: DonutConfig):super().__init__(config)self.config = configself.encoder = SwinEncoder(input_size=self.config.input_size,align_long_axis=self.config.align_long_axis,window_size=self.config.window_size,encoder_layer=self.config.encoder_layer,name_or_path=self.config.name_or_path,)self.decoder = BARTDecoder(max_position_embeddings=self.config.max_position_embeddings,decoder_layer=self.config.decoder_layer,name_or_path=self.config.name_or_path,)def forward(self, image_tensors: torch.Tensor, decoder_input_ids: torch.Tensor, decoder_labels: torch.Tensor):"""给定输入图像和所需的token序列计算损失,模型将以教师强制的方式进行训练参数:image_tensors: (batch_size, num_channels, height, width)decoder_input_ids: (batch_size, sequence_length, embedding_dim)decode_labels: (batch_size, sequence_length)"""encoder_outputs = self.encoder(image_tensors)decoder_outputs = self.decoder(input_ids=decoder_input_ids,encoder_hidden_states=encoder_outputs,labels=decoder_labels,)return decoder_outputs......

编码器

Donut使用Swin-Transformer作为图像编码器,因为它在初步的文档解析研究中表现出色。该图像编码器将输入的文档图像转换为一组高维嵌入。这些嵌入将作为文本解码器的输入。

对应代码如下:

class SwinEncoder(nn.Module):r"""基于SwinTransformerDonut编码器使用预训练的SwinTransformer设置初始权重和配置,然后修改详细配置作为Donut编码器参数:input_size: 输入图像大小(宽度,高度)align_long_axis: 如果高度大于宽度,是否旋转图像window_size: SwinTransformer的窗口大小(=patch大小)encoder_layer: SwinTransformer编码器的层数name_or_path: 预训练模型名称,要么在huggingface.co.注册,要么保存在本地。否则,将设置为`swin_base_patch4_window12_384`(使用`timm`)。"""def __init__(self,input_size: List[int],align_long_axis: bool,window_size: int,encoder_layer: List[int],name_or_path: Union[str, bytes, os.PathLike] = None,):super().__init__()self.input_size = input_sizeself.align_long_axis = align_long_axisself.window_size = window_sizeself.encoder_layer = encoder_layerself.to_tensor = transforms.Compose([transforms.ToTensor(),transforms.Normalize(IMAGENET_DEFAULT_MEAN, IMAGENET_DEFAULT_STD),])self.model = SwinTransformer(img_size=self.input_size,depths=self.encoder_layer,window_size=self.window_size,patch_size=4,embed_dim=128,num_heads=[4, 8, 16, 32],num_classes=0,)self.model.norm = None# 使用swin初始化权重if not name_or_path:swin_state_dict = timm.create_model("swin_base_patch4_window12_384", pretrained=True).state_dict()new_swin_state_dict = self.model.state_dict()for x in new_swin_state_dict:if x.endswith("relative_position_index") or x.endswith

相关文章:

RAG基建之PDF解析的“无OCR”魔法之旅

PDF文件转换成其他格式常常是个大难题,大量的信息被锁在PDF里,AI应用无法直接访问。如果能把PDF文件或其对应的图像转换成结构化或半结构化的机器可读格式,那就能大大缓解这个问题,同时也能显著增强人工智能应用的知识库。 嘿,各位AI探险家们!今天我们将踏上了一段奇妙的…...

Web开发:数据的加密和解密

一、常见通用术语解析 加盐:在密码中加入随机数据,提高安全性。摘要:固定长度的输出,用于数据完整性验证。加密:将数据转换为不可读形式,确保安全。撞库:通过暴力破解比对常见密码的攻击方式。…...

从零开始研发GPS接收机连载——15、使用新射频成功打卡日本地标

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 从零开始研发GPS接收机连载——15、使用新射频成功打卡日本地标 前言MAX2771配置测试MAX2771完整程序测试 前言 话说笔者花了一笔巨资买了一个指甲盖般大小的MAX2771射频板&…...

linux压缩指令

今天我们来了解一下linux压缩指令,压缩是我们文件传输的一种重要手段,对此,我们是必须学习压缩指令的,那么话不多说,来看. 1.grep过滤查找,管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理。 基本语法&#x…...

智能提示词生成器:助力测试工程师快速设计高质量测试用例

在软件测试中,测试用例设计方法的选择和实施是确保软件质量的重要步骤。测试工程师经常需要根据不同的测试场景、参数维度和业务需求,设计出覆盖率高且有效的测试用例。然而,设计测试用例并非易事,特别是在面对复杂的业务逻辑时。 为了帮助测试工程师高效生成测试用例提示…...

QML中使用Image显示图片和使用QQuickItem显示图片

在QML中显示图片时,Image元素和自定义QQuickItem有不同的特性和适用场景。以下是两者的详细对比及性能分析: 1. Image 元素 优点: 声明式语法:简单直观,适合静态图片或简单动态需求 Image {source: "image.png&…...

若依赖前端处理后端返回的错误状态码

【背景】 后端新增加了一个过滤器,用来处理前端请求中的session 若依赖存放过滤器的目录:RuoYi-Vue\ruoyi-framework\src\main\java\com\ruoyi\framework\security\filter\ 【问题】 后端返回了一个状态码为403的错误,现在前端需要处理这…...

C++23:现代C++的模块化革命与零成本抽象新高度

以下代码为伪代码&#xff0c;仅供参考 一、标准库的范式突破 1. std::expected&#xff1a;类型安全的错误处理 std::expected<DataPacket, ErrorCode> parsePacket(ByteStream& stream) {if (stream.header_valid()) return decode_packet(stream);elsereturn s…...

【嵌入式学习3】TCP服务器客户端 - UDP发送端接收端

目录 1、TCP TCP特点 TCP三次握手&#xff08;建立TCP连接&#xff09;&#xff1a; TCP四次握手【TCP断开链接的时候需要经过4次确认】&#xff1a; TCP网络程序开发流程 客户端开发&#xff1a;用户设备上的程序 服务器开发&#xff1a;服务器设备上的程序 2、UDP 为…...

《Spring Cloud Eureka 高可用集群实战:从零构建高可靠性的微服务注册中心》

从零构建高可用 Eureka 集群 | Spring Cloud 微服务架构深度实践指南 本文核心内容基于《Spring Cloud 微服务架构开发》第1版整理&#xff0c;结合生产级实践经验优化 实验环境&#xff1a;IntelliJ IDEA 2024 | JDK 1.8| Spring Boot 2.1.7.RELEASE | Spring Cloud Greenwich…...

Dust3r、Mast3r、Fast3r

目录 一.Dust3r 1.简述 2.PointMap与ConfidenceMap 3.模型结构 4.损失函数 5.全局对齐 二.Mast3r 1.简述 2.MASt3R matching 3.MASt3R sfm 匹配与标准点图 BA优化 三.Fast3r 1.简述 2.模型结构 3.损失函数 三维重建是计算机视觉中的一个高层任务&#xff0c;包…...

HTML5 Web SQL 数据库学习笔记

HTML5 的 Web SQL 数据库曾是一种用于在浏览器客户端存储数据的技术&#xff0c;但目前已被废弃。尽管如此&#xff0c;了解其基本概念和操作方法仍具有一定的学习价值。以下是关于 Web SQL 数据库的学习笔记。 一、Web SQL 数据库概述 1.1 状态与替代方案 Web SQL API 已被…...

Plastiform复制胶泥:高精度表面复制与测量的高效工具

在工业制造和质量检测领域&#xff0c;表面复制和测量是确保产品质量的关键环节。Plastiform复制胶泥作为一种创新材料&#xff0c;凭借其出色的性能和多样化的应用&#xff0c;为用户提供了可靠的解决方案。它能够快速捕捉复杂表面的细节&#xff0c;确保测量结果的准确性&…...

安装 `torch-sparse` 和 `torch-cluster`

✅ 安装 torch-sparse 和 torch-cluster 请直接运行下面这条 一行命令 来装 PyG 剩余依赖&#xff08;适配我已装好的 PyTorch 2.5.1cpu&#xff09;&#xff1a; pip install torch-sparse torch-cluster -f https://data.pyg.org/whl/torch-2.5.1cpu.html✅ 或者自己去官网…...

Linux之基础知识

目录 一、环境准备 1.1、常规登录 1.2、免密登录 二、Linux基本指令 2.1、ls命令 2.2、pwd命令 2.3、cd命令 2.4、touch命令 2.5、mkdir命令 2.6、rmdir和rm命令 2.7man命令 2.8、cp命令 2.9、mv命令 2.10、cat命令 2.11、echo命令 2.11.1、Ctrl r 快捷键 2…...

[mlr3] Bootstrap与交叉验证k-fold cross validation

五折交叉验证因其无放回分层抽样和重复验证机制&#xff0c;成为超参数调优的首选&#xff1b; 而Bootstrap因有放回抽样的重复性和验证集的不稳定性&#xff0c;主要服务于参数估计&#xff08;置信区间的计算&#xff09;而非调优。 实际应用中&#xff0c;可结合两者优势&am…...

自动化构建攻略:Jenkins + Gitee 实现 Spring Boot 项目自动化构建

Jenkins Gitee 实现 Spring Boot 项目自动化构建 环境准备安装配置jdk安装配置maven安装git安装配置Jenkins 测试构建测试自动化触发 环境准备 云服务器环境&#xff1a; 系统版本&#xff1a;Ubuntu 24.04 64位ecs规格&#xff1a;4核(vCPU)8 GiB公网带宽&#xff1a;10Mbi…...

Python 中的不可变数据类型的解析

# Python 中的不可变数据类型的解析 在 Python 的世界里&#xff0c;数据类型扮演着至关重要的角色。根据数据是否可以在创建后被修改&#xff0c;Python 数据类型可分为可变和不可变两类。本文将聚焦于不可变数据类型&#xff0c;详细介绍它们的特点&#xff0c;并结合具体实例…...

【Kafka】分布式消息队列的核心奥秘

文章目录 一、Kafka 的基石概念​主题&#xff08;Topic&#xff09;​分区&#xff08;Partition&#xff09;​生产者&#xff08;Producer&#xff09;​消费者&#xff08;Consumer&#xff09;​ 二、Kafka 的架构探秘​Broker 集群​副本机制​ 三、Kafka 的卓越特性​高…...

基于Promise链式调用的多层级请求性能优化

代码优化-循环嵌套关联请求 1. 背景 在实际开发中&#xff0c;我们经常会遇到需要嵌套关联请求的场景&#xff0c;比如&#xff1a; 获取项目列表获取项目详情获取项目进度 2. 问题 在这种场景下&#xff0c;我们可能会遇到以下问题&#xff1a; 串行请求瀑布流&#xff…...

RuoYi基础学习

1 若依搭建 前后端分离版本&#xff1a;RuoYi-Vue利用SpringBoot作为后端开发框架&#xff0c;与Vue.js结合&#xff0c;实现了前后端分离的开发模式。这种架构有助于提高开发效率&#xff0c;前后端可以独立开发和部署&#xff0c;更适合现代化的Web应用开发。 RuoYi-Vue3&a…...

解决关于原生gmssl无法直接输出sm2私钥明文的问题

解决关于原生gmssl无法直接输出sm2私钥明文的问题 问题描述解决方法解决方法一解决方法二 问题描述 通过gmssl生成sm2公私钥对时&#xff0c;输出的是加密的sm2私钥&#xff0c;无法获取到SM2私钥明文。 解决方法 解决方法一 手动解密&#xff1a; 解决方法二 修改源码&…...

AT24Cxx移植第三方库到裸机中使用

简介 MCU : STM32F103C8T6 库: HAL库裸机开发 EEPROM : AT24C02, 256Byte容量&#xff0c;I2C接口 电路图 AT24C02 电路图 电路图引用 逻辑直接读写 // 写入数据到 EEPROM HAL_StatusTypeDef EEPROM_WriteByte(uint16_t MemAddress, uint8_t Data) {// 发送数据uint8_t …...

【落羽的落羽 C++】内存区域、C++的内存管理

文章目录 一、内存区域二、C的内存管理1. new和delete2. new和delete的特点3. 实现的原理 一、内存区域 C语言和C中&#xff0c;我们常把计算机的内存分为不同的区域&#xff0c;有各自不同的功能&#xff1a; 栈区&#xff1a;存放函数的局部变量、参数、返回地址等。堆区&a…...

星际旅行(去年蓝桥杯省赛b组-第7题)

题目链接: 蓝桥账户中心 朋友分享给我一道题&#xff0c;我刚开始其实先用dfs写&#xff0c;但是直接就超时了(很大的一部分原因是截图中没有数据范围) #include<bits/stdc.h> using namespace std; const int MAXN 1e97; vector<int> graph[MAXN]; bool visite…...

转发和重定向的区别详解

转发&#xff08;Forward&#xff09;和重定向&#xff08;Redirect&#xff09;是 Web 开发中两种常用的请求处理方式&#xff0c;主要用于将客户端请求从一个资源转移到另一个资源。它们在实现机制、行为表现和应用场景上有显著区别&#xff0c;以下是对两者的详细解析&#…...

HarmonyOS NEXT——【鸿蒙相册图片以及文件上传Picker封装】

1、鸿蒙系统文件/图片上传base64&#xff1a; 鸿蒙应用需要上传图片或者文件时&#xff0c;由于更高的安全性与更严谨的访问权限&#xff0c;通常无法直接从系统相册或文件管理中直接上传&#xff0c;因此我们可以通过picker对象去拉起相册访问的能力&#xff0c;引导用户选择…...

Java中文件copy的5种方式

Java中文件copy的5种方式 传统字节流缓冲流jdk7 Files.copy通道&#xff08;零拷贝&#xff09;内存映射对比 传统字节流 缓冲流 jdk7 Files.copy 通道&#xff08;零拷贝&#xff09; 内存映射 对比...

Nacos Client 模块的作用是什么?是如何与 Server 端通信的?

Nacos Client 模块是 Nacos 架构中的重要组成部分&#xff0c;它负责与 Nacos Server 端进行交互&#xff0c;实现服务注册、服务发现、配置管理等核心功能。 可以将 Nacos Client 理解为 Nacos 提供给应用程序使用的 SDK。 Nacos Client 模块的主要作用: 服务注册 (Service R…...

c中的变量命名规则

在 C 中&#xff0c;变量命名需要遵循一定的规则和约定&#xff0c;以确保代码的可读性和合法性。以下是 C 变量命名的详细规则&#xff1a; 1. 基本规则 字母开头&#xff1a;变量名必须以字母&#xff08;a-z 或 A-Z&#xff09;或下划线&#xff08;_&#xff09;开头&…...

DDR(Double Data Rate)详解

一、DDR的定义与核心特性 DDR&#xff08;双倍数据率同步动态随机存取存储器&#xff09; 是一种 基于时钟上升沿和下降沿传输数据的高速内存技术&#xff0c;广泛应用于计算机、嵌入式系统、移动设备等领域。其核心特性包括&#xff1a; 双倍数据率&#xff1a;每个时钟周期传…...

aocache:AOCache 新增功能深度解析:从性能监控到灵活配置的全方位升级

最近对aocache 进行了重要升级&#xff0c;最新版本0.6.0增加了几项新功能&#xff1a;性能分析日志&#xff0c;AOCache性能分析工具&#xff0c;切入点自定义配置&#xff0c;全局配置&#xff0c;本文详细说明这几项目新功能的作用和使用方式。 一、性能分析日志 需求背景…...

IsaacLab最新2025教程(7)-引入IK solver控制机器人

机器人控制可以直接给定关节角进行驱动实现功能&#xff0c;完成任务&#xff0c;但是关节角不是很直观而且做teleoperation或者是结合VLA模型时候&#xff0c;用eef pose会更符合直觉一些&#xff0c;isaacsim用的是LulaKinematics&#xff0c;因为IsaacLab现在是ETHZ的团队在…...

【测试】每日3道面试题 3/30

每日更新&#xff0c;建议关注收藏点赞。 白盒测试逻辑覆盖标准&#xff1f;哪种覆盖标准覆盖率最高&#xff1f; 5种。语句覆盖、分支/判定覆盖、条件覆盖、条件组合覆盖【覆盖率最高&#xff0c;所有可能条件组合都验证】、路径覆盖【理论上最高&#xff0c;但实际很难实现】…...

矩阵中对角线的遍历问题【C++】

1&#xff0c;按对角线进行矩阵排序 题目链接&#xff1a;3446. 按对角线进行矩阵排序 - 力扣&#xff08;LeetCode&#xff09; 【题目描述】 对于一个m*n的矩阵grid&#xff0c;要求对该矩阵进行 变换&#xff0c;使得变换后的矩阵满足&#xff1a; 主对角线右上的所有对角…...

自动化与智能化的认知差异

从认知心理学的角度对自动化和智能化进行了区分&#xff0c;我们可以从同化、顺应、平衡、图式方面来理解&#xff1a;一、自动化与图式及同化&#xff08;1&#xff09;图式是认知心理学中的一个重要概念&#xff0c;指个体对世界的知觉经验和理解方式&#xff0c;是个体过去经…...

leetcode 2360 图中最长的环 题解

题面 给定一个有向图&#xff0c;每个点出度最大为一&#xff0c;现在问你图中最长的环的长度是多少&#xff0c;如果没有环输出 -1&#xff0c; 1 ≤ n ≤ 1 0 5 1 \le n \le 10^5 1≤n≤105。 题面 解题思路 我们直接说结论&#xff0c;我们从任意一个点出发&#xff0c;用…...

鸿蒙UI开发

鸿蒙UI开发 本文旨在分享一些鸿蒙UI布局开发上的一些建议&#xff0c;特别是对屏幕宽高比发生变化时的应对思路和好的实践。 折叠屏适配 一般情况&#xff08;自适应布局/响应式布局&#xff09; 1.自适应布局 1.1自适应拉伸 左右组件定宽 TypeScript //左右定宽 Row() { …...

华宇TAS应用中间件与晓窗科技智慧校园管理一体化平台完成兼容互认证

近日&#xff0c;华宇TAS应用中间件与安徽晓窗教育科技有限公司&#xff08;以下简称晓窗科技&#xff09;的智慧校园管理一体化平台V1.0完成兼容性认证。经双方联合测试&#xff0c;两款产品在稳定性、安全性以及性能等方面表现优异&#xff0c;可以满足政企客户对于数据安全以…...

Java——数组

一、数组是&#xff1f; 数组就是一个容器&#xff0c;用于存储一批同种类型的数据。 数组变量名中存储的是数组在内存中的地址&#xff0c;数组是一种引用数据类型。 二、静态初始化数组 &#xff08;一&#xff09;定义 即定义数组的时候直接给数组赋值。 &#xff08;…...

MySQL排序详解

MySQL支持两种方式排序filesort和indexindex是指扫描索引本身完成排序&#xff0c;index效率高filesort是指通过内存或者排序文件完成排序&#xff0c;filesort效率低 order by满足两种情况时会使用index排序 order by语句使用索引最左列where条件字段和order by字段组合满足索…...

【python实战】-- 选择解压汇总mode进行数据汇总20250329更新

系列文章目录 文章目录 系列文章目录前言一、功能列表二、程序如下&#xff1a;总结 前言 一、功能列表 该模板用于多功能数据汇总处理&#xff1a; 1、用于解压压缩包&#xff0c;输入指定路径&#xff0c;即可解压多级压缩文件&#xff1b; 2、镜筒反射率、LAB文件汇总&…...

Java 程序员面试题:从基础到高阶的深度解析

引言 Java 作为全球最流行的编程语言之一&#xff0c;其面试题不仅考察候选人的编程能力&#xff0c;更关注对底层原理和架构设计的理解。本文将系统梳理 Java 面试中的高频考点&#xff0c;结合代码示例与原理分析&#xff0c;助您从容应对技术面试。 一、Java 基础语法与核…...

JSP(实验):带验证码的用户登录

[实验目的] 1&#xff0e;掌握应用request对象获取表单提交的数据。 2&#xff0e;掌握解决获取表单提交数据产生中文乱码的问题。 3&#xff0e;掌握使用response对象进行定时跳转功能。 4&#xff0e;掌握使用session对象完成登录和注销功能。 [实验要求] 设计带验证码…...

【安全运营】关于攻击面管理相关概念的梳理(二)

CYNC&#xff08;持续可见性和网络控制&#xff09; CYNC&#xff08;Continuous Visibility and Network Control&#xff09;即“持续可见性和网络控制”&#xff0c;是一个与网络安全和IT运营管理相关的概念。它强调的是在一个组织的数字环境中&#xff0c;确保对所有资产、…...

【Linux篇】进程入门指南:操作系统中的第一步

步入进程世界&#xff1a;初学者必懂的操作系统概念 一. 冯诺依曼体系结构1.1 背景与历史1.2 组成部分1.3 意义 二. 进程2.1 进程概念2.1.1 PCB&#xff08;进程控制块&#xff09; 2.2 查看进程2.2.1 使用系统文件查看2.2.2 使⽤top和ps这些⽤⼾级⼯具来获取2.2.3 通过系统调用…...

Linux进程状态补充(10)

文章目录 前言一、阻塞二、挂起三、运行R四、休眠D五、四个重要概念总结 前言 上篇内容大家看的云里雾里&#xff0c;这实在是正常不过&#xff0c;因为例如 写实拷贝 等一些概念的深层原理我还没有讲解&#xff0c;大家不用紧张&#xff0c;我们继续往下学习就行&#xff01;&…...

STM32_HAL开发环境搭建【Keil(MDK-ARM)、STM32F1xx_DFP、 ST-Link、STM32CubeMX】

安装Keil(MDK-ARM)【集成开发环境IDE】 我们会在Keil(MDK-ARM)上去编写代码、编译代码、烧写代码、调试代码。 Keil(MDK-ARM)的安装方法&#xff1a; 教学视频的第02分03秒开始看。 安装过程中请修改一下下面两个路径&#xff0c;避免占用C盘空间。 Core就是Keil(MDK-ARM)的…...

全自动数字网络机器人:重塑未来的无形引擎 ——从金融量化到万物互联,为何必须“ALL IN”?

全自动数字网络机器人&#xff1a;重塑未来的无形引擎 ——从金融量化到万物互联&#xff0c;为何必须“ALL IN”&#xff1f; &#xff08;2025年3月29日&#xff09; “未来十年&#xff0c;代码将比石油更具价值。” —— DeepSeek创始人梁文锋 一、数据洪流与AI进化&#…...

每日一题之修建灌木

问题描述 爱丽丝要完成一项修剪灌木的工作。 有 N 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晩会修剪一棵灌 木, 让灌木的高度变为 0 厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始, 每天向右修剪一棵灌木。当修剪了最右侧的灌木后, 她会调转方向, 下一天开 始向左修…...