首页
关于
友链
推荐
肥啾解析
百度一下
肥啾GPT
Search
1
宝塔面板登录 phpMyAdmin 提示服务器和客户端上指示的HTTPS之间不匹配
371 阅读
2
Customer complaints evolve with in-car tech
256 阅读
3
JavaScript解析
194 阅读
4
所谓关系
170 阅读
5
解决Edge浏览器提示“此网站已被人举报不安全”
149 阅读
默认分类
网游架设
手机游戏
python
PHP
Mysql
VBA
C++
JAVASCRIPT
javascript基础
Oracle
生产管理
计划控制
ERP系统开发
APS排产
MES研究
考勤系统
CPA
财管
实务
经济法
战略
审计
税法
藏书架
古典名著
世界名著
编程秘籍
攻防渗透
经管书籍
大佬传经
风雅读物
考试相关
心情格言
拾玉良言
外文报刊
外刊随选
Facebook
Twitter
China Daily
软考
登录
Search
标签搜索
期刊读物
古文
何瑜明
累计撰写
193
篇文章
累计收到
154
条评论
首页
栏目
默认分类
网游架设
手机游戏
python
PHP
Mysql
VBA
C++
JAVASCRIPT
javascript基础
Oracle
生产管理
计划控制
ERP系统开发
APS排产
MES研究
考勤系统
CPA
财管
实务
经济法
战略
审计
税法
藏书架
古典名著
世界名著
编程秘籍
攻防渗透
经管书籍
大佬传经
风雅读物
考试相关
心情格言
拾玉良言
外文报刊
外刊随选
Facebook
Twitter
China Daily
软考
页面
关于
友链
推荐
肥啾解析
百度一下
肥啾GPT
搜索到
193
篇与
的结果
2026-04-23
技术文档
So it is today. Schedule disaster, functional misfits, and system bugs all arise because the left hand doesn't know what the right hand is doing. As work (), the several teams slowly change the functions, sizes, and speeds of their own programs, and they explicitly or implicitly ( ) their assumptions about the inputs available and the uses to be made of the outputs.For example, the implementer of a program-overlaying function may run into problems and reduce speed relying on statistics that show how ( ) this function will arise in application programs. Meanwhile, back at the ranch, his neighbor may be designing a major part of the supervisor so that it critically depends upon the speed of this function. This change in speed itself becomes a major specification change, and it needs to be proclaimed abroad and weighed from a system point of view.How, then, shall teams ( ) with one another? In as many ways as possible.Informally. Good telephone service and a clear definition of intergroup dependencies will encourage the hundreds of calls upon which common interpretation of written documents depends.Meetings. Regular project meetings, with one team after another giving technical riefings, are ( ). Hundreds of minor misunderstandings get smoked out this way.Workbook. A formal project workbook must be started at the beginning.{dotted startColor="#ff6c6c" endColor="#1989fa"/}The entity-relationship (E-R) data model is based on a perception of a real world that consists of a clletion of basic objects, called( ) ,and of relationships among these objects.An entity is a“thing”or "object" in the real world that is distinguishable from other objects.Entities are described in a database by asetof() : A relationship is an association among several entities. The set of all entities of the same type and the set of all relationships of the ametype are termed an entity sct and relationship set, respectively. The overall logical structure (schema) of a database can be expressed graphically by an E-R diagram, which is built up from the fllowing components:( ) represent entity set,( ) represent atributes, ete. In addition to entities and relations, the E-R model represents certain( )to which the contents of a database must conform. The entity-relationship model is widely used in database design.{dotted startColor="#ff6c6c" endColor="#1989fa"/}In the fields of physical security and information security, access control is the selective restriction of access to a place or other resource. The act of accessing may mean consuming,entering, or using. Permission to access a resource is called authorization(授权).An access control mechanism(请作答此空)between a user (or a process executing on behalf of a user) and system resources, such as applications, operating systems, firewalls; routers, files,and databases. The system must first authenticate(验证)a user seeking access. Typically the authentication function determines whether the user is ( ) to access the system at all.Then the access control function determines if the specific requested access by this user is permitted. A security administrator maintains an authorization database that specifies what type of access to which resources is allowed for this user. The access control function consults this database to determine whether to( ) access. An auditing function monitors and keeps a record of user accesses to system resources.In practice, a number of( )may cooperatively share the access control function. All Operating systems have at least a rudimentary(基本的).and in many cases a quite robust, access control component. Add-on security packages can add to the ( )access control capabilities of the OS. Particular applications .or utilities, such as a database management system, also incorporate access control functions. External devices, such as firewalls, can also provide access control services .
2026年04月23日
4 阅读
0 评论
0 点赞
2026-04-21
SQL语言应用:高级查询与数据库编程
旨在考查对SQL语言的掌握深度,从基础的增删改查,到复杂的多表连接、子查询、事务控制,乃至存储过程和触发器等数据库编程技术。{dotted startColor="#ff6c6c" endColor="#1989fa"/}复杂查询与优化核心考点与出题思想多表连接查询:这是SQL查询的绝对核心,要求能够根据业务需求,正确选择合适的连接类型并编写关联条件。内连接(INNER JOIN):返回两表中满足连接条件的记录。这是最常用的连接类型。外连接(OUTER JOIN):包括左外连接(LEFT JOIN)、右外连接(RIGHT JOIN)和全外连接(FULL JOIN)。它们分别保证左表、右表或两表的所有记录都被返回,即使在另一表中没有匹配的记录。考试中常出现需要查询“所有学生及其选课情况”(包括未选课的学生)的场景,这必须使用左外连接。子查询:子查询是嵌套在另一个查询语句中的SELECT语句,是解决复杂问题的利器。where子查询:将子查询的结果作为外层查询的过滤条件。例如,“查询与‘张三’在同一个部门的员工”。from子查询:将子查询的结果作为一个临时表,供外层查询使用。exists子查询:用于检查是否存在满足某种条件的记录,返回布尔值(TRUE或FALSE)。这是历年考试中极易出现的考点,尤其是“双重否定”形式的查询,如“查询没有选修任何课程的学生的学号”。这种查询通常使用NOT EXISTS关键字,其逻辑是检查子查询是否返回空集。集合操作:UNION(并)、INTERSECT(交)、EXCEPT(差)。窗口函数:这是近年来越来越重要的一个考点。ROW_NUMBER()、RANK()、DENSE_RANK()等函数可以用于分组排序,在解决“第N高工资”、“成绩排名”等问题时非常高效。解题策略与避坑指南明确查询目标与数据源:在动笔写SQL之前,务必搞清楚最终需要输出哪些列,以及这些列分别来自哪些表。这是构建正确查询的逻辑基础。选择合适的连接方式:如果需要返回两个表都匹配的记录,用INNER JOIN。如果需要返回左边表的所有记录,并根据条件匹配右边表,用LEFT JOIN。如果需要返回右边表的所有记录,并根据条件匹配左边表,用RIGHT JOIN。处理双重否定:遇到“没有”、“从未”、“全部”等关键词时,应首先考虑使用NOT IN或NOT EXISTS。理解两者的区别至关重要:NOT IN子查询的结果集不能包含NULL值,如果子查询可能返回NULL,则整个查询结果将为空,这是常见的逻辑陷阱。而NOT EXISTS不受NULL值的影响,通常更为安全和高效。验证逻辑:写完SQL后,建议用草稿纸模拟少量数据,走查SQL的逻辑流程,特别是对于复杂的嵌套子查询和连接,这一步能有效发现潜在的逻辑错误{dotted startColor="#ff6c6c" endColor="#1989fa"/}数据库对象与数据控制核心考点与出题思想这部分内容主要考查对数据库核心组件的创建、管理和控制能力,包括表、视图、索引和完整性约束。表的定义与完整性约束:主键约束(PRIMARY KEY):唯一且非空,用于实体完整性。外键约束(FOREIGN KEY):引用另一个表的主键,用于保证参照完整性。外键约束可以定义级联操作(ON DELETE CASCADE/SET NULL),这是一个重要考点。唯一约束(UNIQUE):保证列中所有值互不相同,但允许NULL值(取决于具体数据库系统)。检查约束(CHECK):用于强制域完整性,确保列中的值满足指定的条件(如性别只能为‘男’或‘女’,年龄必须大于0。视图(VIEW):视图是一个虚拟表,其内容由一个查询定义。WITH CHECK OPTION:这是一个关键选项。当通过视图插入或修改数据时,WITH CHECK OPTION会确保这些操作满足视图的WHERE子句条件,否则操作将被拒绝 。索引(INDEX):唯一索引(UNIQUE INDEX):确保索引列中没有重复值。聚簇索引(CLUSTER INDEX):这是一种特殊的索引,它会改变表中数据的物理存储顺序,使其与索引键的顺序一致。一个表只能有一个聚簇索引。解题策略与避坑指南完整性约束的综合应用:在创建表时,经常需要同时定义多种约束。需要注意PRIMARY KEY、FOREIGN KEY和UNIQUE约束在语法上的区别。一个常见错误是将UNIQUE和NOT NULL约束混用,实际上,在多数数据库中,UNIQUE约束本身就隐含了对非空值的唯一性保证,但对于主键,必须显式指定NOT NULL。理解WITH CHECK OPTION:这个选项的功能是考试中极易设置“陷阱”的地方。必须明确,它的作用是限制对视图的DML操作,使其只能作用于视图“可见”的那部分数据行。索引的权衡:索引能加速查询,但会降低写入速度并占用额外存储空间。考试中常要求为某个查询需求选择合适的索引类型。原则是:通常在WHERE子句中的列、JOIN条件中的列、以及ORDER BY或GROUP BY涉及的列上创建索引。{dotted startColor="#ff6c6c" endColor="#1989fa"/}存储过程与触发器核心考点与出题思想存储过程和触发器是实现复杂业务规则和自动化数据处理的重要工具,是SQL语言应用模块中的难点。存储过程(Stored Procedure):存储过程是一组为了完成特定功能的T-SQL语句集合,它被编译后存储在数据库中,可以通过名称和参数来调用。它能够提高代码的重用性、执行效率和安全性。触发器(Trigger):触发器是一种特殊的存储过程,它在指定的数据修改语句(INSERT、UPDATE、DELETE)执行之前(BEFORE)或之后(AFTER)被自动触发执行。临时表:在触发器内部,通常可以使用REFERENCING子句来引用两个逻辑上的临时表:inserted:包含了INSERT或UPDATE语句所影响的新行。deleted:包含了DELETE或UPDATE语句所影响的旧行。触发器常用于实现复杂的业务验证、审计日志记录、数据的自动计算与同步等功能。解题策略与避坑指南存储过程 vs. 触发器:这是概念辨析题的常考内容。核心区别在于它们的执行方式。存储过程是一个命名的代码块,需要显式调用;而触发器与表紧密关联,是自动、隐式被激发执行的,用户对它的调用无感知。触发器逻辑编写:在编写触发器时,首先要明确触发事件(Insert、Update 或 Delete)以及触发时机(BEFORE 或 AFTER)。熟练掌握inserted和deleted临时表的使用。例如,在一个INSERT触发器中,新插入的数据存储在inserted表中;在一个UPDATE触发器中,更新前的数据存储在deleted表中,更新后的数据存储在inserted表中。触发器的动作主体(即BEGIN和END之间的SQL代码)必须能够正确处理多行数据。由于一次INSERT、UPDATE或DELETE操作可能影响多行数据,因此inserted和deleted表中可能包含多行记录,触发器内的逻辑应避免使用假设只操作单行数据的变量。核心数据库对象对比
2026年04月21日
2 阅读
0 评论
0 点赞
2026-04-20
数据库设计的艺术:从概念模型到规范化理论
该模块的核心在于,掌握从需求分析到最终的逻辑模型设计与优化的完整流程。1.1 实体-联系(E-R)模型深度解析核心考点与出题思想E-R模型是概念结构设计阶段的基石,其考查形式已从简单的实体识别和图形补全,演变为对复杂业务场景的抽象和建模能力。基础构成:E-R模型由三个基本元素构成:实体(矩形表示)、属性(椭圆表示)和联系(菱形表示)。实体代表现实世界中的事物,如“学生”、“课程”;属性描述实体的特征,如“学号”、“课程名”;联系则表示实体之间的相互作用或关联,如“选课”、“授课” 。联系的类型:这是考试中必考的核心概念。1:1(一对一):如一个班级与一个辅导员、一个公民与其身份证。1:**(一对多):如一个部门与多名员工、一个作者与多本书。:(多对多):如学生与课程(一个学生可选多门课,一门课可由多个学生选)、作者与书籍(一本书可有多个作者,一个作者可写多本书)。近年高频考点与“陷阱”:三元联系与聚合:这是区分普通考生与高手的关键分水岭。考试中经常出现需要三个或更多实体同时参与的复杂联系。三元联系:指一个联系集同时关联三个实体集,三者缺一不可。例如,“供应商供应零件给项目”,这涉及到供应商、零件、项目三个实体,且三者必须同时存在才能构成一次供应行为。聚合(Aggregation):是一种特殊的联系,它将一个联系集本身视为一个“超实体”,再与另一个实体集发生联系。例如,“经理管理项目”,其中“项目”本身可能是由“员工”和“任务”两个实体通过“分配”联系构成的一个聚合体,经理管理的是这个聚合体。出题者经常在这两个概念上设置陷阱,要求考生根据题干的语义精确判断。弱实体:指一个实体的存在必须依赖于另一个实体。例如,“家属”实体必须依赖于“员工”实体而存在;没有员工,家属就失去了存在的意义。在E-R图中,弱实体用双线矩形表示,它与依赖实体之间的联系用双线菱形表示 。解题策略与避坑指南精读题干,识别关键元素:首先,通读题目说明,圈出所有名词,这些名词往往是潜在的实体。接着,分析名词之间的动词或关系短语,这些是潜在的联系。对于模糊的关系,需要结合上下文和常识进行判断 。确定联系基数:依据题干描述,判断实体之间的联系是一对一、一对多还是多对多。一个常用的经验法则是:如果题目中出现“若干”、“多个”、“至少一个”等词汇,通常指向 : 或 1:* 的联系 。区分复杂联系:这是最易失分的环节。考生必须清晰区分三元联系和聚合。关键在于判断联系的参与者是否是“同时且缺一不可”的。如果是,则为三元联系;如果存在逻辑上的层次和先后顺序(即先有两个实体的联系,这个联系再与第三个实体发生关系),则为聚合。1.2 关系规范化理论实战指南核心考点与出题思想关系规范化理论旨在指导逻辑结构设计,通过消除数据冗余和操作异常来优化关系模式。考试中,该理论通常与E-R模型转换后的结果紧密结合,考查考生对函数依赖的理解和对范式级别的判断能力。范式演进:第一范式(1NF):这是最低要求,指关系模式中的每个属性都是不可再分的原子数据项。例如,“电话”属性中如果存储了多个用逗号分隔的电话号码,就违反了1NF 。第二范式(2NF):在满足1NF的基础上,消除非主属性对候选键的部分函数依赖。这意味着,如果一个表的主键由多个属性组成(复合主键),那么所有非主属性都必须完全依赖于这个完整的组合,而不能只依赖于其中的一部分 14。例如,在选课表(学号,课程号,成绩,学分)中,“学分”只依赖于“课程号”,这就是对主键(学号,课程号)的部分依赖,违反了2NF。第三范式(3NF):在满足2NF的基础上,消除非主属性对候选键的传递函数依赖。即非主属性不能依赖于其他非主属性 14。例如,在学生表(学号,姓名,系别,系主任)中,存在“学号 -> 系别”和“系别 -> 系主任”的依赖关系,因此“系主任”传递依赖于主键“学号”,违反了3NF。BCNF(巴斯-科德范式):这是3NF的加强版,旨在消除主属性对候选键的部分和传递函数依赖。它要求所有函数依赖的左侧(决定因素)都必须是候选键 。解题策略与避坑指南寻找候选键:这是规范化分析的第一步,也是至关重要的一步。候选键是能唯一标识一条记录的最小属性集合。通常优先选择带有编号、ID的属性。如果单个属性不能唯一标识,则需要考虑由多个属性组成的复合候选键。构建函数依赖集:根据题干的业务语义和常识,推导出所有直接和隐含的函数依赖关系。例如,“员工ID -> 员工姓名”,“部门ID -> 部门名称”等。判断范式级别:从1NF开始,逐级向上检查。检查2NF:看是否存在非主属性对复合主键的部分依赖。如果主键是单一属性,则自动满足2NF。检查3NF:看是否存在非主属性之间的传递依赖。检查BCNF:看是否存在左侧不是候选键的函数依赖。这是BCNF最常见的考查点,也是考生容易忽视的“坑”。从E-R模型到关系模式的完整流程该流程是下午案例题的标准考查路径,考生必须形成一套标准化的操作步骤。实体转换为关系模式:每个实体通常转换为一个独立的关系(表)。实体的主键成为关系的主键,实体的所有属性成为关系的属性 。联系转换为关系模式:这是转换过程中的重点和难点,需根据联系的类型采用不同的策略。1:1联系:通常有三种实现方式。最常用的是将一端实体的键作为外键加入到另一端实体的关系中;或者将两个实体的主键合并,并添加联系本身的属性;也可以创建一个独立的关系,包含两个实体的主键作为外键。1:联系:标准的做法是将“1”端实体的主键作为外键加入到“”端实体的关系中 。:联系:必须转换为一个独立的关系。该关系的主键由“**”两端实体的主键组合而成,并包含联系本身的属性。这是考试中绝对的高频考点。通过以上步骤,将得到一个初步的、可能不符合高级范式的关系模式集合,随后便可应用规范化理论对其进行优化。表格1:E-R模型元素与关系模式的转换规则总结
2026年04月20日
3 阅读
0 评论
0 点赞
2026-03-17
程序知识
了解程序是如何被计算机理解和执行的,对于理解数据库内核、存储过程、触发器以及SQL查询的处理过程至关重要。程序设计语言是用来定义计算机程序的符号系统,它允许程序员以人类可读的方式向计算机发出指令{card-default label="基本成分" width=""}字符集:构成语言的基本符号,通常包括字母、数字、下划线以及运算符等。关键字:又称保留字,是语言中具有特殊含义的单词,例如if、else、while、int、class等,不能用作标识符。标识符:由程序员定义的名称,用于代表变量、常量、函数、数据类型等程序对象。常量与变量:常量是在程序运行过程中其值不能被改变的量;变量是其值可以在程序运行中被改变的量,是内存中数据存储空间的抽象。数据类型:定义了数据的取值范围和可进行的操作。运算符:用于对数据进行操作的符号。表达式:由操作数和运算符组成的式子,可以计算出一个值。语句:程序中最基本的执行单位,用于完成一定的操作任务。{/card-default}{card-default label="类型和特征" width=""}命令式语言 (Imperative Languages):也称为过程式语言,其核心思想是通过赋值语句改变变量的状态。典型代表有C、Pascal和Fortran。面向对象的程序设计语言 (Object-Oriented Programming, OOP):其核心概念是类和对象。它将数据和对数据的操作封装在一起,支持继承、多态等特性,极大地提高了代码的可重用性和可维护性。典型代表有C++、Java和C#。函数式语言 (Functional Languages):将计算看作是数学函数的求值过程,避免使用程序状态和可变数据。逻辑语言 (Logic Languages):基于形式逻辑,通过推理来解决问题。Prolog是主要代表。脚本语言 (Scripting Languages):通常用于控制软件应用程序,将应用程序联系起来,或用于快速编程。它们通常是解释执行的,如Perl、Python、Ruby、JavaScript、Shell等。一个重要的区别是:HTML不是编程语言。它是超文本标记语言(Hyper Text Markup Language),用于定义网页的结构和内容,而不是用于逻辑控制和计算的编程指令{/card-default}语言处理程序是介于用户程序与计算机硬件之间的重要系统软件,其任务是将程序员用高级语言编写的源代码翻译成计算机能够执行的机器码。{card-default label="语言处理程序分类" width=""}主要有三类:汇编程序、编译程序和解释程序。汇编程序 (Assembler):将汇编语言(介于机器语言和高级语言之间的符号化语言)翻译成机器语言。汇编指令与机器指令之间基本上是一一对应的关系。编译程序 (Compiler):将高级语言源程序一次性整体翻译成目标程序(通常是机器代码)。编译过程分为前端和后端,前端是机器无关部分,后端是机器相关部分。C、C++、Java等语言采用这种编译方式。编译方式下,用户程序运行速度更快。解释程序 (Interpreter):不事先将源程序编译成目标代码,而是逐行读取源程序,边分析边执行。脚本语言如JavaScript、Shell通常采用解释执行方式。{/card-default}编译过程{card-default label="编译过程" width=""}编译过程是一个复杂的多阶段信息加工过程,通常包括:词法分析:从左到右逐个字符扫描源程序,识别出一个个“单词”(Token),如关键字、标识符、常数、运算符等。语法分析:根据语言的语法规则,将词法分析得到的单词序列进行解析,检查其结构是否符合语法要求,并构造出语法分析树。语义分析:判断源程序的语义是否正确,例如类型是否匹配、变量是否先声明后使用等。中间代码生成:将语法分析树或经过语义分析的源程序转换为一种内部表示形式(中间代码)。常用的中间码形式有后缀式(逆波兰式)、三地址码和抽象语法树等。代码优化:对中间代码进行等价变换,以期生成更高效的目标代码。目标代码生成:将优化后的中间代码翻译成最终的目标机器代码。符号表:是编译器用来记录源程序中各种标识符(如变量名、函数名)的属性和特征信息的数据结构,比如它的类型、作用域、存储地址等。在词法分析、语法分析和语义分析阶段,编译器会不断地查找、填入或更新符号表。函数调用和返回控制是用栈实现的,在程序运行期间,函数的调用和返回遵循“后进先出”(LIFO)的规则。因此,操作系统和运行时环境使用栈结构来管理函数调用,每个函数调用在栈上分配一个“栈帧”,用于存放其局部变量、参数和返回地址。函数返回时,其对应的栈帧被弹出。编译方式是将源代码一次性转换成目标代码(机器码),后续运行时直接执行目标代码,因此速度更快。解释方式则是逐条翻译并立即执行,不生成独立的目标程序,因此运行速度相对较慢。“编译程序不参与用户程序的运行控制”意味着执行的是编译后的目标代码,编译器本身已经退出了;“解释程序参与”意味着解释器本身一直在内存中运行,控制着整个执行流程。{/card-default}程序运行时的存储组织程序在运行的时候,其内存空间的组织方式对于理解数据库内部的内存管理非常重要。通常分为以下几个部分:程序代码区:存放程序的机器指令。静态数据区:存放已初始化的全局变量和静态变量。这些变量的生命周期是整个程序运行期。栈 (Stack):又称动态数据区,用于存放函数调用过程中的局部变量、函数参数和返回值。栈的特点是“后进先出”,函数调用时分配,返回时释放。堆 (Heap):又称动态数据区,用于存放程序运行过程中动态申请和释放的内存(如C语言中的malloc/free,C++中的new/delete)。堆的分配和释放由程序员控制,比栈更灵活,但管理也更复杂。在高级语言源程序中,为变量分配的存储单元地址通常属于逻辑地址,在运行时才转换为物理地址{card-default label="传值调用和引用调用的区别" width=""}传值调用传递实参的副本,形参在函数内的修改不影响原实参;引用调用传递实参的地址,形参与实参共享内存,函数内的修改直接影响原实参。传值调用方式下,数据是实参向形参的单向流动。引用调用方式下,可以实现形参和实参间双向传递数据的效果。传值调用的实参要求可以是变量,常量,表达式(有确定的值)。引用调用的实参必须是变量(内存地址中的左值)C语言基本类型传参、默认的简单类型传递。C++引用(&)、Java/C#中的对象传参。{/card-default}
2026年03月17日
6 阅读
0 评论
0 点赞
2026-03-02
精要知识点
{callout color="#f0ad4e"}计算机硬件与体系结构基础1.存储器体系:深入理解高速缓存(Cache)的映射方式(直接、全相联、组相联)及其替换策略(LRU, FIFO)。掌握RAID磁盘阵列【磁盘间协作方式】的不同级别(0, 1, 5等)及其对应的冗余【抗风险能力】和性能特征【干活快慢】{card-default label="存储器体系" width=""}电脑的存储体系是一个层次化的结构,其核心设计思想是“速度与容量的平衡”。简单来说,越靠近CPU(中央处理器)的存储,速度越快、价格越贵、容量越小;越远离CPU的存储,速度越慢、价格越便宜、容量越大。 顶端(最快,最小) ┌─────────────────┐ │ CPU寄存器 │ ← 纳秒级,KB级别 ├─────────────────┤ │ CPU缓存(L1-L3) │ ← 纳秒级,几十KB到几十MB(相联存储器在这里) ├─────────────────┤ │ 内存(RAM) │ ← 百纳秒级,GB级别(虚拟内存在这里) ├─────────────────┤ │ 固态硬盘(SSD) │ ← 微秒级,百GB到TB级(DMA参与搬运) ├─────────────────┤ │ 机械硬盘(HDD) │ ← 毫秒级,TB级(RAID在这里组织磁盘) └─────────────────┘ 底端(最慢,最大)存储体系:一条数据从硬盘到CPU的流水线整个存储体系可以理解为一条数据传送带,目标是:让CPU尽可能快地拿到要处理的数据第一级:硬盘 —— 数据的仓库它是谁:机械硬盘(磁盘)或固态硬盘。干什么:永久保存数据。关机不会丢。怎么干:机械硬盘:用磁头读写磁盘表面的磁性方向(南极/北极代表0/1)。固态硬盘:用电压控制晶体管的电子数量(有电子/没电子代表0/1)。特点:容量大,价格便宜,但极慢(比内存慢几万倍)。第二级:内存 —— 数据的工作台它是谁:内存条(DRAM)。干什么:临时存放正在运行的程序和数据。关机就丢。怎么干:用电容里有没有电荷(有电/没电)来存0/1。特点:比硬盘快得多,但比CPU还是慢得多,而且断电消失。问题:硬盘到内存太慢,谁搬?DMA(直接内存访问):它是谁:一个专门的硬件搬运工(集成在CPU或主板芯片里)。干什么:负责硬盘和内存之间的数据搬运。怎么干:CPU告诉它“去搬什么、搬到哪”,然后它自己搬,搬完通知CPU。搬运期间CPU可以干别的活。第三级:缓存 —— 数据的桌面它是谁:CPU内部的极快小容量存储器(SRAM)。干什么:存放CPU马上要用的数据副本(从内存复制来的)。怎么干:映射方式:决定内存里的数据可以放在缓存的哪个位置。直接映射:每个数据只能去一个固定位置(简单但冲突多)。全相联映射:任何数据可以放任何位置(灵活但查找复杂)。组相联映射:先分组,组内随便放(折中方案,实际在用)。替换策略:缓存满了,新数据进来要赶走谁。LRU(最近最少用):赶走最久没被访问的那个。查找方式:用地址的一部分快速定位到可能的位置,然后比较确认。为什么快:因为局部性原理——程序访问数据有惯性,刚用过的附近数据很可能马上再用。第四级:寄存器 —— 手心里的数据它是谁:CPU内部最顶层的存储单元。干什么:存放CPU当前正在计算的值。怎么干:直接参与运算,比如 a = b + c,b和c就在寄存器里,结果也放寄存器。特点:速度极快,容量极小(几十到几百字节)。存储体系的扩展:多块硬盘怎么协作?—— RAID把多块硬盘组合起来,要么为了更快,要么为了更安全,或者两者兼顾。整个流程串起来1.CPU发出请求:带着一个逻辑地址(程序眼里的地址)。2.地址翻译:MMU拿着这个逻辑地址,先查TLB(那个用相联存储器做的快表)。如果TLB命中:瞬间拿到物理地址。如果TLB没命中:去内存里的页表查,查到后更新TLB。3.查缓存:拿着物理地址,去CPU缓存里找。怎么找:根据映射方式(比如组相联),计算出可能在哪个组,然后遍历组内的几个缓存行(相联比较),看标签是否匹配。如果缓存命中:数据直接从缓存返回CPU。快!如果缓存未命中:缓存控制器拿着同一个物理地址,去内存里取。4.内存访问:如果数据在内存里:内存控制器把数据返回给CPU,同时写入缓存(方便下次用)。如果数据不在内存里(比如还没从硬盘加载):触发缺页中断。5.硬盘读取(DMA登场):操作系统启动DMA控制器,让它把数据从硬盘搬到内存。DMA搬运期间,CPU可以干别的活。搬完后,DMA通知CPU:"数据好了!"6.重新来过:CPU再次发起访问,这次数据已经在内存里了,会经历缓存未命中→从内存读→写入缓存的过程。7.如果用了RAID:硬盘层面,文件可能被拆成多块存在不同硬盘上(RAID 0),或者有备份(RAID 1),但CPU和操作系统感知不到,它只看到一块"虚拟磁盘"。{/card-default}2.流水线技术:理解流水线的基本概念,能计算流水线的周期、吞吐率及加速比 。{card-default label="流水线技术" width=""}为什么感觉不到慢?—— 流水线与局部性局部性原理:大多数时候,CPU要的数据都在缓存里(命中率>95%),根本不用走后面的流程。流水线技术:CPU把指令执行切成多个阶段(取指、译码、执行等),让不同指令的阶段重叠执行。就像工厂流水线,虽然单个产品生产时间没变,但整体产出(吞吐率)大大提高了。预取:硬件会预测你接下来可能要什么数据,提前从内存搬到缓存。乱序执行:缓存没命中需要等待时,CPU不傻等,先干别的活。流水线周期:也叫流水线时钟周期,就是最慢的那个阶段需要的时间。因为整个流水线是按统一的时钟节拍推进的,每个阶段必须在规定时间内完成,所以周期取决于最慢的那一段。周期 = max(各阶段时间)比如某指令流水线有 5 个阶段,时间分别为:取指 10ns,译码 8ns,执行 12ns,访存 10ns,写回 7ns。那么周期 = max(10,8,12,10,7) = 12ns。吞吐率:单位时间内完成的任务数量。在计算机里,吞吐率就是每秒完成的指令数(IPS,instructions per second)或百万条指令每秒(MIPS)。理想情况下,流水线稳定后,每个时钟周期完成一条指令(假设无停顿)。吞吐率 = 1 / 周期。如上例,吞吐率 = 1 / 12ns ≈ 83.3 MIPS(百万条指令/秒)。实际中会有停顿(比如数据依赖、分支预测失败),所以实际吞吐率会低一些。加速比:使用流水线比不用流水线快了多少倍。公式是:加速比=不使用流水线的总时间/使用流水线的总时间流水线就是把指令切成多段,让不同指令的段重叠执行,用最慢的那段决定周期,稳定后每个周期完成一条,理论上比串行快接近段数倍。{/card-default}3.性能指标与可靠性:掌握主频、CPI、MIPS等关键性能指标的计算方法。理解串联与并联系统的可靠性模型,这是评估高可用数据库集群的基础{card-default label="性能指标" width=""}这三个指标用来衡量计算机处理指令的速度,它们之间是互相联系的计算关系。主频(时钟频率)定义:CPU每秒产生的时钟脉冲数,单位是赫兹(Hz)。比如3.0GHz表示每秒30亿个时钟周期。通俗理解:可以看作是CPU的“心跳”速度,心跳越快,CPU可能工作得越快,但并不是唯一决定因素。作用:主频决定了每个时钟周期的时间长度:T=1/f。如果主频3GHz,一个时钟周期 ≈ 0.33纳秒。CPI(Cycle Per Instruction,每条指令需要的时钟周期数)定义:执行一条指令平均需要的时钟周期个数。通俗理解:不同指令的复杂度不同,有的指令需要1个周期(比如简单加法),有的可能需要多个周期(比如除法、内存访问)。CPI就是平均下来每条指令消耗的周期数。影响因素:CPU架构、指令集、流水线效率、缓存命中率等。通常CPI越小越好。MIPS(Million Instructions Per Second,每秒百万条指令)定义:每秒能执行的指令数量,以百万条为单位。计算公式:MIPS=主频(MHz)/CPI因为主频单位是MHz(百万赫兹),CPI是每条指令周期数,两者相除就得到每秒百万条指令。例子:一个CPU主频3.0GHz(3000MHz),平均CPI=1.5,则MIPS = 3000 / 1.5 = 2000 MIPS,即每秒可执行20亿条指令。它们之间的关系程序执行时间 = 指令总数 × CPI × 时钟周期时间 或= 指令总数 × CPI / 主频MIPS 是衡量性能的一个粗略指标,但不同指令集之间比较MIPS可能不准确(因为不同架构的一条指令能干的事不同)。不过在同一架构下,MIPS越高性能越好。实际应用:如何用这些指标评估系统?在设计数据库服务器时,需要估算CPU能否处理预期的事务负载。比如某个数据库操作平均需要10万条指令,每秒有1万次事务,那么需要的处理能力 = 10万 × 1万 = 10^9 条指令/秒 = 1000 MIPS。如果CPU的MIPS大于这个值,理论上可以满足,还要考虑其他瓶颈。{/card-default}{card-default label="可靠性模型:串联与并联系统" width=""}串联系统定义:多个部件必须全部正常工作,整个系统才能正常工作。比如一台服务器需要电源、主板、CPU都正常才能运行,任何一个坏了,系统就宕机。可靠性公式:特点:部件越多,可靠性越低。因为相乘会使可靠度下降。例子:一个服务器由三个部件串联,可靠度分别为0.99、0.999、0.999,则系统可靠度 = 0.99×0.999×0.999 ≈ 0.988,低于最差部件。并联系统定义:多个部件至少有一个正常工作,系统就能正常工作。也就是冗余备份。比如两台数据库服务器做双机热备,一台坏了另一台接管。可靠性公式:特点:冗余越多可靠性越高,但成本增加。例子:一个部件可靠度0.9,两个并联:系统可靠度 = 1 - 0.1×0.1 = 0.99。比单个的0.9高。混合系统实际系统往往是串联和并联的组合。比如数据库集群中,多个节点并联提供高可用,但每个节点内部又是串联的(电源、CPU等)。{/card-default}{card-default label="评估基础" width=""}三、为什么这些是评估高可用数据库集群的基础?数据库集群(如MySQL主从复制、Oracle RAC、分布式数据库)追求高可用性和高性能。性能指标的应用容量规划:根据业务预估的每秒事务数(TPS),每个事务的指令数,计算出需要的MIPS,从而选择合适CPU的服务器。瓶颈分析:如果实际MIPS低于预期,可能CPI过高(比如缓存缺失多),需要优化数据库查询或增加缓存。横向扩展:集群可以增加节点分担负载,每个节点处理部分请求,整体吞吐量提升。但也要考虑节点间的协调开销。可靠性模型的应用集群高可用:数据库集群通常采用并联模型:多个节点同时提供服务或主备切换。只要至少一个节点存活,服务就可用。计算集群可用性:假设每个节点的年可用性为99%(每年约3.65天宕机),两个节点并联的系统可用性 = 1 - (1-0.99)² = 0.9999(每年约52分钟宕机),大大提升。串联与并联结合:集群的每个节点内部是串联(单点故障),所以需要节点本身有冗余电源等。而节点间是并联,整体可用性由节点数和单节点可用性决定。N模冗余:数据库可以有多副本(如三副本),只要大多数副本正常就可读写,这是更复杂的并联模型。实际设计考虑SLA(服务等级协议):要求99.99%可用性,那么需要计算需要多少个节点以及单节点可靠度。故障转移时间:并联系统的切换时间也会影响实际可用性,但基础模型给出了理论上限。{/card-default}总结主频、CPI、MIPS 是描述CPU处理能力的指标,通过它们可以估算系统能否满足性能需求,是数据库服务器选型的基础。串联/并联可靠性模型 是理解系统冗余的基本工具,是设计高可用数据库集群(如主从、多副本)的理论依据,帮助你计算需要多少备份才能达到目标可用性。4.寻址方式简单来说,就是CPU如何找到它要操作的数据。1. 立即寻址 功能:操作数直接写在指令里,CPU拿来就用。 实现:指令中的操作数字段直接送到运算单元。 例子:指令 MOV R1, #5 CPU执行时,直接将数字5放入寄存器R1,不访问内存。 2. 寄存器寻址 功能:操作数存放在CPU内部的寄存器中。 实现:指令中给出寄存器编号,CPU从对应寄存器读取。 例子:指令 ADD R1, R2 CPU从寄存器R1和R2中取出数值,相加后结果存回R1。 3. 直接寻址 功能:操作数存放在内存的固定地址。 实现:指令中给出内存地址,CPU直接访问该地址。 例子:指令 LOAD R1, 1000 CPU访问内存地址1000,取出数据放入寄存器R1。 4. 寄存器间接寻址 功能:操作数的内存地址存放在寄存器中。 实现:CPU先取寄存器的值作为地址,再访问该地址。 例子:指令 LOAD R1, (R2) 假设R2中存放的是地址2000,CPU先去R2取2000,然后访问内存2000,将数据放入R1。 5. 变址寻址 功能:通过基地址加偏移量计算内存地址。 实现:CPU将基址寄存器的值与指令中的偏移量相加,得到地址后访问内存。 例子:指令 LOAD R1, 100(R2) 假设R2=2000,CPU计算地址=2000+100=2100,访问内存2100,数据放入R1。 6. 基址寻址 功能:程序运行时动态定位,使程序可以在内存任意位置执行。 实现:指令中给出相对地址,CPU将其与基址寄存器相加得到物理地址。 例子:指令 LOAD R1, 50 假设程序基址寄存器=10000,CPU计算地址=10000+50=10050,访问内存10050,数据放入R1。为什么分这么多根本原因:指令里能写的位数有限,但数据的位置有多种可能。一条指令通常只有32位或64位,不能把完整的内存地址(也可能是64位)都塞进去。所以需要各种技巧:教材分这么多种,是为了让你理解不同场景下CPU怎么找到数据。但在硬件层面,它们共用一套地址计算单元:所有方式最终都归结为:计算出一个有效地址 → 访问内存(如果需要) → 送到寄存器(如果需要)区别在于:地址来自哪里?是立即数、寄存器、还是两者相加?所以你可以把它们看作地址来源的组合方式:理解这些,不是为了让你去控制CPU,而是为了让你能看懂数据库在干什么、诊断它为什么慢、设计出更优的表和查询。存储分级 → 教材会告诉你:寄存器、缓存、内存、硬盘速度容量不同。但没告诉你:你写的SQL,没索引的时候要全表扫,就是因为数据在硬盘/内存里分散着,CPU得一遍遍去取,TLB和缓存根本帮不上忙。缓存映射方式 → 教材会告诉你:直接映射、组相联、全相联。但没告诉你:数据库的Buffer Pool(缓存池)也是用类似的思想管理数据页的——你要读的数据如果不在缓存里,就得去磁盘读,这就是缓存未命中。TLB + MMU → 教材会告诉你:地址翻译、快表。但没告诉你:你查一个大表的时候,如果数据分布太散,TLB这个小本本装不下所有地址映射,就会频繁未命中,数据库就卡了。这就是为什么有时候内存够大也慢。寻址方式 → 教材会告诉你:立即、直接、间接、变址……但没告诉你:你写的 WHERE age = 25 能走索引,就是因为数据库可以用“基址+偏移”(变址寻址)快速定位到B+树的叶子节点。而你写 WHERE YEAR(date)=2023 不走索引,就是因为数据库没法用寻址方式直接跳到年份上,只能挨个算。流水线 → 教材会告诉你:取指、译码、执行、访存、写回,还有加速比。但没告诉你:数据库里的并行查询、多线程处理,本质上也是在数据层面做“流水线”——一条线程在处理一批数据的同时,另一条线程已经在读下一批了。{/callout}{card-default label="CPU中的重要寄存器" width=""}程序计数器(PC):存放指令地址,顺序执行时自动递增,遇到转移时接收新地址。状态寄存器(PSW/标志寄存器):记录运算标志位(如进位C、零Z、符号S、溢出V、奇偶P),用于条件判断。通用寄存器组:暂存操作数或地址,减少内存访问,提升运算速度。累加器(ACC):临时存放操作数和中间结果,不能长期保存数据。取指阶段:程序计数器(PC)提供指令地址,从内存取出指令放入指令寄存器(IR)。译码阶段:控制器分析IR中的指令,确定需要读取哪些通用寄存器或累加器中的数据。执行阶段:算术逻辑单元(ALU)根据指令对操作数进行计算,结果暂存于累加器(ACC)或通用寄存器中;同时,状态寄存器根据结果设置标志位。访存阶段:若指令需要读写内存,则地址来自通用寄存器或指令中的地址码,数据可能经过累加器或通用寄存器。写回阶段:将执行结果写回目标寄存器(通用寄存器或累加器)。更新PC:顺序执行时PC自动加1;遇到跳转指令则根据条件标志或目标地址修改PC。{/card-default}
2026年03月02日
7 阅读
0 评论
0 点赞
1
2
3
4
...
39
0:00