【JavaEE】计算机的工作原理
计算机系统的组成
一台完整的计算机包含硬件和软件两部分,另外还有一部分固化的软件称为固件(兼具软件和硬件的特性),硬件和软件结合才能使计算机正常运行并发挥作用,所以对计算机的理解应该把它看作一个包含软件系统和硬件系统的完整系统。
1.计算机硬件系统
冯诺依曼的核心思想就是提出采用二进制存储程序和程序控制;存储程序就是将解题的步骤编制成程序,然后将程序和运行程序所需要的数据以二进制的形式存放到存储器中,方便执行;程序控制则是指计算机中的控制器逐条去除存储器中的指令并按顺序执行,控制各功能部件进行相应的操作,完成数据的加工处理。
计算机的硬件系统包含运算器、控制器、存储器、输入设备、输出设备五大部件。运算器和控制器合称位CPU(又称中央处理器);CPU和存储器通常称为主机;输入设备和输出设备统称为输入输出设备,又因为它们位于主机外部,所以有时也称为外部设备。下面这张图就是冯诺依曼体系结构。
-
存储器(内存+外存)
存储器主要功能就是存放程序和数据,程序是计算机操作的依据,数据是计算机操作的对象,它们在存储器中都是以二进制存储的(它们统称为信息),为了实现自动计算,这些信息必须要预先放在主存储器中才能被CPU读取。外存就是硬盘、软盘、U盘等
-
运算器
运算器是一种用于信息加工处理的部件,他对数据进行算术运算和逻辑运算。算术运算是算术规则进行的加减乘除等运算,逻辑运算就非算术运算,像比较、移位、逻辑加、逻辑乘、逻辑取反等。运算器通常由算术逻辑单元(ALU)和一系列寄存器组成。ALU是具体完成算术与逻辑运算的部件,寄存器用于存放运算操作数。
-
控制器
控制器是整个计算机的指挥中心,它可使计算机各部件协调的工作,控制器工作的实质就是解释程序,它每次从存储器读取一条指令,经过分析译码产生一串操作命令,再发给各功能不见控制各部件动作,是整个机器连续地、有条不紊的运行,以实现指令和程序的功能。
计算机中有两股信息在流动:一股是控制流信息,即操作命令,它分散流向各个功能部件;另一股是数据流信息,它受控制流信息的控制,从一个部件流向另一个部件,在流动的过程中被相应的部件加工处理。
-
输入设备
输入设备就是将信息输入计算机的外部设备,它将人们熟悉的信息形式转成计算机能接受并是别的信息形式。
-
输出设备
输出设备就是将计算机运算结果转成人们和其他设备能接收和识别的信息形式的设备。
指令
指令:指导CPU进行工作的命令,由操作码和被操作码组成。其中操作码用来表示要做什么动作,被操作数是本条指令要操作的数据,可能是内存地址也可能是寄存器编号等。
指令表
下面是演示指令运行的一个周期:
总结:
1.CPU要执行的指令是在内存中(存储器中),冯诺依曼体系结构基本设定让执行单元和存储单元解耦合;
2.CPU要想执行指令,就需要先取指令,然后才能执行;
3.取指令需要从内存中读取指令到CPU的寄存器中,取指令的操作非常耗时(读取内存、CPU计算等);
4.CPU解析指令的时候,需要用到“指令表”,不同架构的CPU指令表不同,但是指令表细节已经写死在CPU中,CPU可以快速识别;
5.指令在执行的过程中,可能会带一些操作数,不同的指令操作个数含义不同;
6.CPU重要的参数:主频,主频表示的含义近似看成一秒钟内CPU执行的个数;
2.计算机软件系统
计算机软件将解决问题的思想、方法和过程进行描述,所以程序是软件的核心组成部分。计算机软件按其功能分成应用软件和系统软件两大类。应用软件是用户为解决某种应用问题而编制的一些程序;系统软件用于对计算机系统进行管理、调度、监视和服务等,其目的是方便用户、提高计算机使用效率、扩充系统的功能。通常系统软件分:操作系统、程序设计语言及语言处理程序、数据库管理系统。接下来我们详细将操作系统:
核心数:多个核心的运算能力,也可以说是并发编程;
主频(基准频率、睿频):单个核心运算能力;
操作系统
操作系统是管理计算机中各种资源、自动调度用户作业、处理各种中断的软件。操作系统管理的资源通常有硬件、软件、数据信息。常见操作系统有Windows、Linux、Mac、Android、iOS等。操作系统的核心概念就是进程,每个跑起来的程序都称为进程。
1.进程
进程就是操作系统提供的一种“软件资源”,比如:多任务操作系统(多个后台同时执行),单任务操作系统(没有后台执行的任务)。可以把进程看作程序的一次运行过程;同时,在操作系统内部,进程是操作系统进行资源分配的基本单位。
2.操作系统的进程管理
- 1.先描述(使用类/结构体这样的方式,把实体属性给列出来)
操作系统一般是用c/c++实现的(没有Java写的操作系统),因此就可以使用结构体表示进程信息的结构体PCB(进程控制块);
- 2.再组织(使用一定的数据结构,把这些结构体/对象串在一起)在Linux中,使用链表这样的数据结构把若干个task_struct串起来
当我们看到任务管理其中的这些进程时,意味着系统内部在遍历链表和打印每个节点的相关信息;如果运行一个新的程序,系统就会多一个进程,多的这个进程就要构出一个新的PCB,并添加到链表中;如果运行程序退出了,就需要把对应的PCB从链表中删除并销毁对应的PCB资源。
2.1 PCB重要属性
- 1. PID(进程的标识符)
通过一个简单的不重复的整数来进行区分,系统保证PID唯一;比如,选中某个进程并且点击结束任务,任务管理器获取到选中的PID,然后调用系统API,把PID作为参数传进去从而完成杀死进程的操作。
-
2.内存指针(描述了进程使用内存的详细情况)
进程运行过程中需要消耗一些系统资源,内存就是一种重要的资源。内存指针就是用来描述这个进程可以使用哪些内存。一个进程跑起来的时候,需要指令也需要数据(都是要加载到内存中的),所以进程必须要知道哪里存放的位置是指针、哪里存放的位置是数据。
- 3. 文件描述符表(描述了进程所涉及的硬盘相关资源)
由于进程经常要访问硬盘,操作系统对硬盘遮掩的硬件设备进行封装,封装成文件。操作系统都是按照“文件”的方式来操作的,一个进程想要操作文件就需要“打开文件”。
1.分时复用(并发执行)
CPU核心只有一个,先执行进程1,执行一会后,进程1下来,进程2执行,再执行一会,进程2下来,进程3执行……就是并发执行(只要速度足够快,我们就感知不到切换,所以肉眼看来就是“同时进行的”);
2.并行执行
多核CPU有多个不同的进程,这几个进程也是同时执行的,就是并行执行;
这两种执行肉眼是观察不到的。并行执行+并发执行统称为“并发”,这个就是我们称为的并发编程。
2.2CPU分配--进程调度
- 1.状态
- 就绪状态:随时准备好去CPU执行,操作系统一打招呼就上
- 阻塞状态:这个进程当前不方便去CPU执行,不应该调度它(像进程等待IO,来自控制台的输入输出等)
- 2.优先级
多个进程等待系统调度,多个进程之间调度的先后关系不是那么平均时
- 3.记账信息
记录当前进程持有CPU的情况(比如CPU执行多久),作为操作系统的调度参考依据
- 4.上下文 (存档和读档)
支撑进程调度的重要性。每个进程在执行运行的过程中,就会有很多的中间结果,在CPU的寄存器中(像前面的指令例题3+14),操作系统调度进程可以认为时“随机”的任何一个进程,代码执行到任何一条指令的时候都可能被调度出CPU;
保存上下文(存档):在进程中调度出CPU之前,把当前寄存器中的信息单独存放到一个地方
加载上下文(读档):在该进程下次再去CPU上执行的时候,再把这些寄存器的信息恢复回来
2.3内存分配--内存管理(“进程独立性”)
每个进程的内存时彼此独立的、互不干扰的,通常情况下,进程A不能直接访问进程B的内存(为了系统的稳定性)
2.4进程间通信
虽然进程具有独立性,但是有时候也需要多个进程之间相互配合完成某个工作,进程间通信和进程的独立性并不冲突,系统提供一些公共的空间(多个进程都能访问到),让两个进程借助这种公共空间来交互数据。通信方式有文件、网络。
以上就是操作系统进程的所有知识点, 欢迎小伙伴们访问我的博客呀~
相关文章:
【JavaEE】计算机的工作原理
计算机系统的组成 一台完整的计算机包含硬件和软件两部分,另外还有一部分固化的软件称为固件(兼具软件和硬件的特性),硬件和软件结合才能使计算机正常运行并发挥作用,所以对计算机的理解应该把它看作一个包含软件系统…...
DAY8:Oracle高可用架构深度解析与Data Guard单节点搭建实战
引言 在数据库领域,高可用性(High Availability)是保障业务连续性的核心要求。Oracle作为企业级数据库的领导者,提供了RAC、Data Guard、GoldenGate三大核心方案。本文将深入剖析这些技术的实现原理,并手把手指导搭建…...
程序的编译(预处理操作)+链接
程序的编译环境和执行环境 翻译环境:在这个环境中源代码被转换成可执行的机器指令 执行环境:用于实际执行代码 详解编译链接 翻译环境 注意: 1.组成一个程序的每个源文件通过编译过程分别转换成目标代码。 2.每个目标文件由链接器捆绑在一…...
Java 实现桌面共享-简单案例
服务器端(共享桌面) import java.awt.AWTException; import java.awt.Rectangle; import java.awt.Robot; import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.io.DataOutputStream; import java.io.IOException; import java…...
Idea中实用设置和插件
目录 一、Idea使用插件 1.Fitten Code智能提示 2.MyBatisCodeHelperPro 3.HighlightBracketPair 4.Rainbow Brackets Lite 5.GitToolBox(存在付费) 6.MavenHelperPro 7.Search In Repository 8.VisualGC(存在付费) 9.vo2dto 10.Key Promoter X 11.CodeGlance…...
获取电脑信息(登录电脑的进程、C盘文件信息、浏览器信息、IP)
电脑的进程信息 // 获取登录电脑的进程信息String os System.getProperty("os.name").toLowerCase();String command;if (os.contains("win")) {command "tasklist";} else {command "ps -ef";}try {Process process new ProcessB…...
单例模式(线程安全)
1.什么是单例模式 单例模式(Singleton Pattern)是一种创建型设计模式,旨在确保一个类只有一个实例,并提供一个全局访问点来访问该实例。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单…...
Sentinel源码—7.参数限流和注解的实现二
大纲 1.参数限流的原理和源码 2.SentinelResource注解的使用和实现 2.SentinelResource注解的使用和实现 (1)SentinelResource注解的使用 (2)SentinelResource注解和实现 (1)SentinelResource注解的使用 一.引入Sentinel Spring Boot Starter依赖 <dependency><…...
【单片机 C语言】单片机学习过程中常见C库函数(学习笔记)
memset() C 标准库 - <string.h> string .h 头文件定义了一个变量类型、一个宏和各种操作字符数组的函数。 <string.h> 是 C 标准库中的一个头文件,提供了一组用于处理字符串和内存块的函数。这些函数涵盖了字符串复制、连接、比较、搜索和内存操作…...
聚类算法(K-means、DBSCAN)
聚类算法 K-means 算法 算法原理 K-means 是一种基于类内距离最小化的划分式聚类算法,其核心思想是通过迭代优化将数据划分为 K 个簇。目标函数为最小化平方误差(SSE): S S E ∑ i 1 K ∑ x ∈ C i ∣ ∣ x − μ i ∣ ∣ 2…...
Spring AI Alibaba Graph基于 ReAct Agent 的天气预报查询系统
1、在本示例中,我们仅为 Agent 绑定了一个天气查询服务,接收到用户的天气查询服务后,流程会在 AgentNode 和 ToolNode 之间循环执行,直到完成用户指令。示例中判断指令完成的条件(即 ReAct 结束条件)也很简…...
C++初阶——模板
C初阶——模板 一、概念引入 1.如何实现一个通用的交换函数,使它既可以用来交换各种类型的数据呢? 通过前面的学习,我们知道函数重载可以帮我们实现这一功能,代码如下: 运行结果如图: 使用函数重载虽然…...
【技术派后端篇】技术派中基于 Redis 的缓存实践
在互联网应用追求高并发和高可用的背景下,缓存对于提升程序性能至关重要。相较于本地缓存 Guava Cache 和 Caffeine,Redis 具有显著优势。Redis 支持集群和分布式部署,能横向扩展缓存容量和负载能力,适应大型分布式系统的缓存需求…...
系统安装及应用
重点 账号安全控制 系统引导和登陆控制 弱口令检测 端口扫描 前言 随着信息技术的快速发展,系统安全成为我们日常生活和工作中不可或缺的一部分。本章节主要探讨系统安全及应用,涵盖了账号安全控制、系统引导和登录控制、弱口令检测以及端口扫描等多个方面,为我们提供了一…...
发布事件和Insert数据库先后顺序
代码解释 csharp await PublishCreatedAsync(entity).ConfigureAwait(false); await Repository.InsertAsync(entity).ConfigureAwait(false);PublishCreatedAsync(entity):这是一个异步方法,其功能是发布与实体创建相关的事件。此方法或许会通知其他组…...
【英语语法】词法---冠词
目录 冠词一、不定冠词:a / an1. 基本用法2. 主要使用场景3. 特殊情况 二、定冠词:the1. 基本用法2. 主要使用场景3. 特殊情况 三、零冠词1. 基本规则2. 特殊情况 四、冠词对比五、常见错误总结 冠词 冠词是英语中用于限定名词的一类虚词,分…...
android的 framework 有哪些知识点和应用场景
Android Framework 知识点 1. 四大组件 Activity(活动) 是 Android 应用中最基本的组件,用于实现用户界面。一个 Activity 通常对应一个屏幕的内容。有自己的生命周期,包括 onCreate、onStart、onResume、onPause、onStop、onDe…...
Prompt 攻击与防范:大语言模型安全的新挑战
随着大语言模型(LLM)在企业服务、智能助手、搜索增强等领域的广泛应用,围绕其"Prompt"机制的安全问题也逐渐引起关注。其中最具代表性的,就是所谓的 Prompt Injection(提示词注入)攻击。 本文将…...
Ubuntu20.04安装Pangolin遇到的几种报错的解决方案
1.添加两个编译选项 /usr/include/OpenEXR/half.h:121:13: note: because ‘half’ has user-provided ‘half& half::operator(half)’121 | half & operator (half h);| ^~~~~~~~ 解决方案: 在CMakeList中添加以下两句: …...
软考 中级软件设计师 考点知识点笔记总结 day14 关系代数 数据库完整性约束
文章目录 6.5 关系代数6.5.1 关系代数—七种基本运算 6.6 数据库完整性约束6.7 关系型数据库SQL简介 6.5 关系代数 候选码(键):若关系中的某一属性或属性组的值能唯一标识一个元组,则称该属性或属性组为候选码。 主码࿰…...
前端vue监听 -watch
前端vue监听 -watch 前言基本用法监听简单数据属性监听对象属性 高级用法深度监听对象即时触发监听监听计算属性 注意事项 前言 在 Vue.js 里,watch 选项可用于响应式地监听数据的变化,当被监听的数据发生改变时,就会触发相应的回调函数来执…...
Linux之信号
目录 一、预备知识 二、信号的产生 一、键盘产生信号 二、系统调用 三、调用系统命令向进程发信号 kill 四、硬件异常 五、软件条件 三、信号的保存 四、信号的处理 一、预备知识 1.信号!信号量。两者没有任何关系 2.什么是信号? 定义一&…...
微软Edge浏览器字体设置
前言 时间:2025年4月 自2025年4月起,微软Edge浏览器的默认字体被微软从微软雅黑替换成了Noto Sans,如下图。Noto Sans字体与微软雅黑风格差不多,但在4K以下分辨率的显示器上较微软雅黑更模糊,因此低分辨率的显示器建议…...
Java中 关于编译(Compilation)、类加载(Class Loading) 和 运行(Execution)的详细区别解析
以下是Java中 编译(Compilation)、类加载(Class Loading) 和 运行(Execution) 的详细区别解析: 1. 编译(Compilation) 定义 将Java源代码(.java文件&#x…...
[python] set
1.添加元素 在 Python 中,向 set 添加一个元素可以使用 add() 方法。如果添加的元素已经存在于 set 中,add() 不会重复添加(因为 set 具有自动去重的特性)。 方法 1:add(element)(添加单个元素࿰…...
转化率提升47%?亚马逊用户行为预测模型深度解读
在亚马逊运营的战场上,谁能更精准地读懂用户行为,谁就更可能赢得转化率的胜利。近年来,越来越多卖家借助“用户行为预测模型”来优化Listing布局、广告投放策略、甚至库存管理,而这些数据驱动的决策也确确实实地带来了质的提升。 …...
C++计算 n! 中末尾零的数量
* 详细说明* 给定一个整数作为输入。目标是找出该数的阶乘结果中末尾零的数量。 一个数 N 的阶乘是范围 [1, N] 内所有数的乘积。* * 我们知道,只有当一个数是 10 的倍数或者有因数对 (2, 5) 时,才会产生末尾零。 在任何大于 5 的数的阶乘中,…...
大模型中超参数TopK是什么
大模型中的超参数Top-K是文本生成过程中的关键控制参数,主要用于平衡生成结果的确定性与多样性。以下从定义、工作原理、应用场景及与其他参数的协同关系进行详细阐述: 一、Top-K的定义与核心机制 基本定义 Top-K(Top-K Sampling)是一种基于概率采样的文本生成策略。其核心…...
NetApp ONTAP 9 故障磁盘更换操作指南
以前写过一篇7-mode的磁盘更换文档,好几个朋友反馈说命令都没有,都不对。主要原因是客户现在的环境都是ontap 9的cluster-mode环境了,所以很多命令都不一样了。为此,这里专门就ontap 9的cluster-mode写一篇磁盘更换操作指南&#…...
leetcode day 35 01背包问题 416+1049
0-1背包问题 (1)第一种情况:二维dp[i][j]数组 dp[i][j]表示[0,i]的物品放入容量为j背包的最大价值 不放物品i,dp[i][j]dp[i-1][j] 放物品i,dp[i][j]dp[i-1][j-w[i]]v[i] 递推公式为: dp[i][j]dp[i-1][j];//不放 if(w[i]<j)dp…...
MySQL的基本操作
显示所有数据库: SHOW DATABASES; 系统默认数据库: 数据库名用途information_schema存储 MySQL 服务器元数据(如数据库、表、列信息),只读mysql存储用户权限、密码、日志等核心数据(不要随意修改ÿ…...
CSS伪类、clip-path实现三角形、箭头绘制
<template><div :class"$options.name"><div class"triangle-container1"><!-- 伪类三角形:向右 --><div class"triangle-RM"></div><!-- 伪类三角形:向下 --><div class&q…...
基于大模型的腹股沟疝全流程预测与诊疗方案研究报告
目录 一、引言 1.1 研究背景与目的 1.2 研究方法与创新点 二、大模型在腹股沟疝术前评估中的应用 2.1 腹股沟疝概述与诊断方法 2.2 术前评估指标与数据收集 2.3 大模型预测原理与实现 2.4 预测结果与传统评估对比 三、基于大模型预测的手术方案制定 3.1 手术方式选择…...
零基础上手Python数据分析 (20):Seaborn 统计数据可视化 - 轻松绘制精美统计图表!
写在前面 —— 告别 Matplotlib 繁琐定制,拥抱 Seaborn 便捷之美,让统计可视化更高效 在前面两篇博客中,我们学习了 Python 数据可视化的基石 Matplotlib,掌握了绘制基础图表和进行高级定制的技巧。 Matplotlib 功能强大且灵活,能够满足几乎所有的二维绘图需求。 然而,…...
elasticsearch7.15节点磁盘空间满了迁移数据到新磁盘
一.数据安全迁移 在 Elasticsearch 中设置某个节点临时不可用(例如进行维护或升级),可以通过以下步骤安全地操作,避免数据丢失或集群状态异常 1: 排除节点分片分配,触发分片迁移到其他节点 PUT /_cluster/settings {&…...
MCP案例—客户端和服务端
MCP简介 Model Context Protocol (模型上下文协议),简称MCP,MCP是一种协议,用于LLM与外部拓展资源交互的协议。 想了解具体细节可参考作者本篇文章MCP理论指南 准备 本篇文章将带你通过python创建MCP客户端及服务端,并连接到本…...
排序模型(Learning to Rank)
排序模型(Learning to Rank) 要解决的问题 排序模型旨在解决信息检索中的排序优化问题。例如: 搜索引擎中对候选网页的排序推荐系统中物品的展示顺序广告系统中广告位的分配 核心挑战:根据上下文特征,将最相关/最有…...
L1-1、Prompt 是什么?为什么它能“控制 AI”?
*Prompt 入门 L1-1 想象一下,你只需输入一句话,AI 就能自动为你写一篇文案、生成一份报告、甚至规划你的创业计划。这种“对话即编程”的背后魔法,就是 Prompt 的力量。 🔍 一、Prompt 的定义与由来 Prompt(提示词&am…...
RolmOCR重磅开源:基于Qwen2.5-VL,速度提升40%,手写/倾斜文档识别准确率超92%
向大家介绍一款全新的开源OCR模型——RolmOCR!这款由Reducto AI团队基于阿里巴巴强大的Qwen2.5-VL-7B-Instruct视觉语言模型微调而来的利器,不仅在速度和效率上实现了显著提升(据称处理速度相比其前身olmOCR提升了约40%)ÿ…...
系统架构设计(二):基于架构的软件设计方法ABSD
“基于架构的软件设计方法”(Architecture-Based Software Design, ABSD)是一种通过从软件架构层面出发指导详细设计的系统化方法。它旨在桥接架构设计与详细设计之间的鸿沟,确保系统的高层结构能够有效指导后续开发。 ABSD 的核心思想 ABS…...
[langchain教程]langchain03——用langchain构建RAG应用
RAG RAG过程 离线过程: 加载文档将文档按一定条件切割成片段将切割的文本片段转为向量,存入检索引擎(向量库) 在线过程: 用户输入Query,将Query转为向量从向量库检索,获得相似度TopN信息将…...
Android 图片加载框架 Glide 详细介绍
一、简单使用 1、加载图片 导入依赖 implementation("com.github.bumptech.glide:glide:4.16.0")编写代码 private static final String url = "http://cn.bing.com/az/hprichbg/rb/Dongdaemun_ZH-CN10736487148_1920x1080.jpg";btnPic.setOnClickList…...
vue2解析html中的公式,使用vue-katex
文本是markdown格式,需要解析markdown <p v-html"md.render(text)"></p>import MarkdownIt from markdown-it ...const mdRender MarkdownIt(); ...data中md: new MarkdownIt(),现在文本中会出现数学公式,解析使用vue-katex 1.…...
使用Unity Cache Server提高效率
2021年1月20日19:04:28 1 简介 Unity Cache Server,翻译过来就是Unity缓存服务器 1.1 缓存服务器の官方介绍 Unity 有一个完全自动的资源管线。每当修改 .psd 或 .fbx 文件等源资源时,Unity 都会检测到更改并自动将其重新导入。随后,Unity 以内部格式存储从文件导入的数…...
【C++】模板2.0
最近学习了一些模板的知识,速写本博客作为学习笔记,若有兴趣,欢迎垂阅读! 1.非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名…...
深入解析 Linux 文件系统中的软硬链接:从原理到实践
引言 在 Linux 系统中,软链接(Symbolic Link) 和 硬链接(Hard Link) 是文件管理的两大核心机制。它们如同文件系统的“快捷方式”与“分身术”,既能节省存储空间,又能实现灵活的文件管理。但两…...
JumpServer多用户VNC桌面配置指南:实现多端口远程访问
在当今的云计算和远程工作环境中,高效且安全地管理多用户远程桌面访问变得越来越重要。本文将详细介绍如何在JumpServer中配置多个VNC桌面,以满足不同用户的远程访问需求。我们将以创建第二个桌面为例,为用户user2配置VNC访问。 一、背景说明 JumpServer作为一款优秀的开源…...
【数据结构入门训练DAY-19】总结数据结构中的栈
文章目录 前言一、栈的思想二、栈的解题思路结语 前言 本次训练内容: 栈的复习。总结栈的基本操作 一、栈的思想 在数据结构中,栈是一种很常见的算法。栈——就像你往桶里放东西似的,要取出桶内的物体就得先把桶顶的物品取出来ÿ…...
MyBatis-Plus 防止 SQL 注入最佳实践指南
🚫 MyBatis-Plus 防止 SQL 注入最佳实践指南 作者:William Dawson 标签:Java、MyBatis-Plus、安全、SQL 注入、防护 💥 什么是 SQL 注入? SQL 注入是一种常见的安全漏洞,攻击者通过恶意构造 SQL 输入参数&…...
AI之pdf解析:Tesseract、PaddleOCR、RapidPaddle(可能为 RapidOCR)和 plumberpdf 的对比分析及使用建议
目录标题 Tesseract、PaddleOCR、RapidPaddle(可能为 RapidOCR)和 plumberpdf 的对比分析1. Tesseract类型: 开源 OCR 引擎特点:缺点:适用场景: 2. PaddleOCR (推荐)类型:特点:缺点:适用场景: 复杂版式文档、多语言混合文本、需要高精度识别的场景&#…...