系统分析师16:系统测试与维护
1 内容概要
2 软件测试类型
2.1 测试类型
-
动态测试【计算机运行】
- 白盒测试法:关注内部结构与逻辑
- 灰盒测试法:介于两者之间
- 黑盒测试法:关注输入输出及功能
-
静态测试【人工监测和计算机辅助分析】
- 桌前检查
- 代码审查
- 代码走查
- 以上三个都是做的【静态分析】
- 控制流分析:是否存在没有使用的语句/无法达到的语句/调用并不存在的子程序
- 数据流分析:引用未定义的变量、对以前未使用的变量再次赋值。
- 接口分析:模块之间接口的一致性、子程序和函数之间的接口一致性、函数形参与实参的数量、顺序、类型的一致性。
- 表达式分析:括号不配对、数组引用越界、除数为零。
2.1.1 白盒测试
- 白盒测试【结构测试】:主要用于单元测试阶段。
- 控制流测试【逻辑覆盖测试(语句覆盖最弱,路径测试覆盖最强)
- 数据流测试
- 程序变异测试【错误驱动测试】
2.1.2 黑盒测试
- 黑盒测试【功能测试】∶主要用于集成测试、确认测试和系统测试阶段
- 等价类划分:不同等价类,揭示不同问题;有效等价类/无效等价类。
- 边界值分析:1<=x<=10,可取x的值为0、1、10和11作为测试数据
- 错误推测:依靠测试人员的经验和直觉
- 判定表:最适合描述在多个逻辑条件取值的组合所构成的复杂情况下,分别要执行哪些不同的动作
- 因果图:根据输入条件与输出结果之间的因果关系来设计测试用例
例1
软件测试一般分为两个大类∶动态测试和静态测试。前者通过运行程序发现错误,包括()等方法;后者采用人工和计算机辅助静态分析的手段对程序进行检测,包括()等方法。
A:边界值分析、逻辑覆盖、基本路径
B:桌面检查、逻辑覆盖、错误推测
C:桌面检查、代码审查、代码走查
D:错误推测、代码审查、基本路径
A:边界值分析、逻辑覆盖、基本路径
B:桌面检查、逻辑覆盖、错误推测
C:桌面检查、代码审查、代码走查
D:错误推测、代码审查、基本路径
解析
软件测试一般分为两个大类:动态测试和静态测试。
动态测试是通过运行程序来发现错误的方法。它包括以下几种方法:
- 边界值分析:测试输入域的边界值,因为错误往往发生在边界附近。
- 逻辑覆盖:通过测试用例覆盖程序的逻辑路径,确保每条路径都被测试到。
- 基本路径:通过分析程序的控制流图,设计测试用例以覆盖所有基本路径。
静态测试是采用人工和计算机辅助静态分析的手段对程序进行检测的方法。它包括以下几种方法:
- 桌面检查:人工检查代码,查找错误。
- 代码审查:通过团队评审代码,查找错误和改进建议。
- 代码走查:通过模拟程序的执行过程,人工检查代码的逻辑和结构。
答案:A、C。
例2
用边界值分析法,假定10≤X≤30,那么X在测试中应取的边界值是( )。
A:X=11,X=29
B:X=9,X=10,X=30,X=31
C:X=10,X=30
D:X=9,X=31
解析
- 边界值分析法要求测试边界值及其附近的值;
- 对于范围10≤X≤30,边界值及其附近的值包括:
- 下边界:10
- 下边界减1:9
- 上边界:30
- 上边界加1:31
- 因此,X在测试中应取的边界值是9、10、30、31。
答案:B。
2.2 测试方法
-
AB测试
多版本同时使用,利于收集各版本的用户反馈,评估出最好版本。故也算是一种 【网页优化方法】 -
Web测试
web系统测试与其他系统 测试测试内容基本相同只是测试重点不同
Web代码测试包括:源代码规则分析、链接测试、框架测试、表格测试、图形测试等方面 -
链接测试
链接测试可分为3个方面:- 测试所有链接是否按指示的那样 确实链接到了该链接的页面
- 测试所链接的 页面是否存在
- 保证Web应用系统上 没有孤立的页面
3 测试阶段
-
回归测试:测试软件变更之后,变更部分的正确性和对变更需求的符合性
-
测试阶段
- 单元测试:依据 【详细设计】,模块测试,模块功能、性能、接口等
- 集成测试:依据 【概要设计】,模块间的接口
- 系统测试:依据 【需求文档】,在真实环境下,验证完整的软件配置项能否和系统正确连接
- 确认测试:依据 【需求文档】,验证软件与需求的一致性。内部确认测试、Alpha测试、Beta测试、验收测试
-
集成测试策略
- 一次性组装【风险高】
- 增量式组装【测试全面】
- 自顶向下【需要桩模块】
- 自底向上【需要驱动模块】
- 混合式【都需要】
例3
在单元测试中,( ) 。
A:驱动模块用来调用被测模块,自顶向下的单元测试中不需要另外编写驱动模块
B:桩模块用来模拟被测模块所调用的子模块,自顶向下的单元测试中不需要另外编写桩模块
C:驱动模块用来模拟被测模块所调用的子模块,自底向上的单元测试中不需要另外编写驱动模块
D:桩模块用来调用被测模块,自底向上的单元测试中不需要另外编写桩模块
解析
在单元测试中,驱动模块和桩模块的作用如下:
- 驱动模块
驱动模块(Driver Module)是用来调用被测模块的代码。它通常用于自底向上的单元测试中,因为自底向上的测试是从最底层的模块开始测试,逐步向上测试更高层次的模块。在这种情况下,需要编写驱动模块来调用被测模块。- 桩模块
桩模块(Stub Module)是用来模拟被测模块所调用的子模块的代码。它通常用于自顶向下的单元测试中,因为自顶向下的测试是从最高层次的模块开始测试,逐步向下测试更低层次的模块。在这种情况下,需要编写桩模块来模拟被测模块调用的子模块。- 选项分析
A: 驱动模块用来调用被测模块,自顶向下的单元测试中不需要另外编写驱动模块。这个选项是正确的,因为在自顶向下的单元测试中,通常需要编写桩模块而不是驱动模块。
B: 桩模块用来模拟被测模块所调用的子模块,自顶向下的单元测试中不需要另外编写桩模块。这个选项是错误的,因为在自顶向下的单元测试中,通常需要编写桩模块来模拟被测模块调用的子模块。
C: 驱动模块用来模拟被测模块所调用的子模块,自底向上的单元测试中不需要另外编写驱动模块。这个选项是错误的,因为在自底向上的单元测试中,通常需要编写驱动模块来调用被测模块。
D: 桩模块用来调用被测模块,自底向上的单元测试中不需要另外编写桩模块。这个选项是错误的,因为桩模块来模拟被测模块调用的子模块,而不是用来调用被测模块,在自底向上的单元测试中,通常不需要编写桩模块,而是需要编写驱动模块。答案: A。
3.1 系统测试
3.1.1 系统测试分类
-
功能测试
-
性能测试
- 负载测试:各种工作负载下系统的性能
- 压力测试【测上限】:系统的瓶颈或不能接受的性能点强度测试【测下限】:系统资源特别低的情况下运行
- 容量测试【并发测试】:同时在线的最大用户数
- 可靠性测试:MTTF之类的参数
-
健壮性测试
-
用户界面测试
-
安全性测试
-
安装与反安装测试
例4
软件性能测试有多种不同类型的测试方法,其中,()用于测试在限定的系统下考查软件系统极限运行的情况,()可用于测试系统同时处理的在线最大用户数量。
A:强度测试
B:负载测试
C:压力测试
D:容量测试
A:强度测试
B:负载测试
C:压力测试
D:容量测试
解析
- 强度测试(Stress Testing)
强度测试用于测试在限定的系统下考查软件系统极限运行的情况。它通过模拟极端条件下的负载,测试系统在超出正常工作负载时的表现,以确定系统的极限和稳定性。- 负载测试(Load Testing)
负载测试用于测试系统在正常和预期峰值负载条件下的性能。它通过逐渐增加负载,测试系统在不同负载水平下的响应时间和资源使用情况。- 压力测试(Stress Testing)
压力测试与强度测试类似,也是用于测试系统在极端条件下的表现。它通过超出系统正常工作负载的负载,测试系统的极限和稳定性。- 容量测试(Volume Testing):同时在线的最大用户数。
根据题目描述:
- 用于测试在限定的系统下考查软件系统极限运行的情况的测试方法是强度测试。
- 可用于测试系统同时处理的在线最大用户数量的测试方法是容量测试。
答案:A、D。
3.1.2 系统测试步骤
-
制定系统测试计划
进行人员以及任务的确定,明确测试范围、测试方法、测试环境与辅助工具 -
设计系统测试用例
如:等价类划分、边界值分析等测试方法的应用 -
执行系统测试
执行设计好的测试用例,并记录结果 -
缺陷管理与改错
消除已发现的错误
3.2 面向对象测试
- 算法层(单元测试)︰包括等价类划分测试、组合功能测试(基于判定表的测试)、递归函数测试和多态消息测试
- 类层(模块测试)︰包括不变式边界测试、模态类测试和非模态类测试
- 模板层/类树层(集成测试)︰包括多态服务测试和展平测试
4 软件调试
- 软件调试方法
- 蛮力法:主要思想是“通过计算机找错”,低效,耗时
- 回溯法:从出错处人工沿控制流程往回追踪,直至发现出错的根源。复杂程序由于回溯路径多,难以实施
- 原因排除法:主要思想是演绎和归纳,用二分法实现
- 软件测试与软件调试区别
-
软件测试
- 目的是找出存在的错误
- 从一个已知的条件开始,使用预先定义的过程,有预知的结果
- 测试过程可以事先设计,进度可以事先确定
-
软件调试
- 目的是定位错误并修改程序以修正错误
- 从一个未知的条件开始,结束的过程不可预计
- 调试不能描述过程或持续时间
-
5 系统转换计划
5.1 遗留系统演化策略
-
开发新系统时,需要完全兼容遗留系统的功能模型和数据模型
-
低水平、高价值:继承
-
低水平、低价值:淘汰
-
高水平、高价值:改造
- 改造包括系统功能的增强和数据模型的改造两个方面
-
高水平、低价值:集成
- 针对“信息孤岛”
例5
遗留系统的演化可以采用淘汰、继承、改造和集成四种策略。若企业中的遗留系统技术含量较高,业务价值较低,在局部领域中工作良好,形成了一个个信息孤岛时,适合于采用()演化策略。
A:淘汰
B:继承
C:改造
D:集成
解析
- 低水平、高价值:继承
- 低水平、低价值:淘汰
- 高水平、高价值:改造
- 高水平、低价值:集成
答案:D。
5.2 新旧系统的转换策略
在系统转换过程中,选择合适的转换策略至关重要,因为它直接影响到转换的顺利进行和系统的稳定性。以下是三种常见的系统转换策略:
5.2.1 直接转换策略(Big Bang Approach)
定义: 直接转换策略是指在某个特定的时间点,旧系统被完全停止,新系统立即接管所有功能。
优点:
- 快速: 转换过程迅速,可以在短时间内完成。
- 成本低: 不需要同时维护两个系统,节省了资源和成本。
缺点:
- 风险高: 如果新系统出现问题,可能会导致业务中断,影响正常运营。
- 缺乏过渡期: 没有时间进行逐步适应和调整,可能会导致用户不适应。
适用场景:
- 适用于小型系统或对业务影响较小的系统。
- 适用于新系统已经过充分测试,确保其稳定性和可靠性。
5.2.2 并行转换策略(Parallel Approach)
定义: 并行转换策略是指在一段时间内,新旧系统同时运行,并比较两者的输出结果,直到确认新系统稳定可靠后,再完全切换到新系统。
优点:
- 风险低: 即使新系统出现问题,旧系统仍然可以继续运行,确保业务连续性。
- 可靠性高: 通过并行运行,可以验证新系统的准确性和稳定性。
缺点:
- 成本高: 需要同时维护两个系统,增加了资源和成本。
- 复杂性高: 需要确保两个系统之间的数据同步和一致性。
适用场景:
- 适用于关键业务系统,确保转换过程中的业务连续性。
- 适用于新系统尚未完全验证,需要通过并行运行来逐步确认其可靠性。
5.2.3 分段转换策略(Phased Approach)
定义: 分段转换策略是指将系统转换过程分为多个阶段,逐步将新系统的各个模块或功能替换旧系统,最终完成整个系统的转换。
优点:
- 风险可控: 通过分阶段进行,可以逐步验证新系统的各个模块,降低整体风险。
- 灵活性高: 可以根据实际情况调整每个阶段的转换计划。
缺点:
- 时间长: 转换过程较长,可能需要数月甚至更长时间。
- 复杂性高: 需要详细规划每个阶段的转换步骤和时间表。
适用场景:
- 适用于大型复杂系统,逐步验证和部署新系统。
- 适用于需要逐步适应新系统的用户和业务流程。
5.3 数据转换与迁移
6 系统运行与维护
-
影响可维护性的因素
- 【可理解性】是指通过阅读源代码和相关文档,了解软件的功能和如何运行的容易程度
- 【可修改性】是指修改软件的难易程度
- 【可测试性】是指验证软件程序正确的难易程度
可测试性好的软件,通常意味着软件设计简单,复杂性低。因为软件的复杂性越大,测试的难度也就越大 - 【可靠性】一个软件的可靠性越高,需要维护的概率就会越低
- 【可移植性】是指将软件从一个环境移植到新的的环境下正确运行的难易程度
软件运行环境的变化是软件维护的一种常见情形,可移植性好的软件会降低维护的概率
-
维护类型
- 正确性维护【修BUG】︰识别和纠正软件错误/缺陷,测试不可能发现所有错误
- 适应性维护【应变】∶指使应用软件适应环境变化【外部环境、数据环境】而进行的修改
- 完善性维护【新需求】︰扩充功能和改善性能而进行的修改。
- 预防性维护【针对未来】∶为了适应未来的软硬件环境的变化,应主动增加预防性的新的功能,以使用系统适应各类变化而不被淘汰。经典实例:【专用】改【通用】。
例6
软件的维护并不只是修正错误。为了满足用户提出的增加新功能、修改现有功能以及一般性的改进要求和建议,需要进行(),它是软件维护工作的主要部分;软件测试不可能揭露旧系统中所有潜在的错误,所以这些程序在使用过程中还可能发生错误,诊断和更正这些错误的过程称为();为了改进软件未来的可维护性或可靠性,或者为了给未来的改进提供更好的基础而对软件进行修改,这类活动称为( ) 。
A:完善性维护
B:适应性维护
C:预防性维护
D:改正性维护
A:完善性维护
B:适应性维护
C:预防性维护
D:改正性维护
A:完善性维护
B:适应性维护
C:预防性维护
D:改正性维护
解析
根据题目描述,我们可以将软件维护的不同类型与各个描述进行匹配:
- 为了满足用户提出的增加新功能、修改现有功能以及一般性的改进要求和建议,需要进行(),它是软件维护工作的主要部分。
- 这种维护类型主要是为了增强软件的功能或性能,属于完善性维护。
- 答案:A:完善性维护
- 软件测试不可能揭露旧系统中所有潜在的错误,所以这些程序在使用过程中还可能发生错误,诊断和更正这些错误的过程称为()。
- 这种维护类型主要是为了修正已经发现的错误,属于改正性维护。
- 答案:D:改正性维护
- 为了改进软件未来的可维护性或可靠性,或者为了给未来的改进提供更好的基础而对软件进行修改,这类活动称为( )。
- 这种维护类型主要是为了预防未来的问题,属于预防性维护。
- 答案:C:预防性维护
答案:A、D、C。
7 附录 思维导图
相关文章:

系统分析师16:系统测试与维护
1 内容概要 2 软件测试类型 2.1 测试类型 动态测试【计算机运行】 白盒测试法:关注内部结构与逻辑灰盒测试法:介于两者之间黑盒测试法:关注输入输出及功能 静态测试【人工监测和计算机辅助分析】 桌前检查代码审查代码走查以上三个都是做的…...

详解Java中的堆内存
详解Java中的堆内存 堆是JVM运行数据区中的一块内存空间,它是线程共享的一块区域(注意了!!!),主要用来保存数组和对象实例等(其实对象有时候是不在堆中进行分配的,想要了…...

C++类和对象下详细指南
C类和对象下详细指南 1. 初始化列表与构造函数 1.1 初始化列表概述 初始化列表在C中用于初始化对象的成员变量,特别是当你需要在对象构造时就明确成员变量的值时。通过初始化列表,成员变量的初始化可以在进入构造函数体之前完成。这不仅可以提升性能&…...

【瑞昱RTL8763E】音频
1 音乐播放控制 1.1 播放列表更新 文件系统在sd卡中保存header.bin及name.bin两份文件用于歌曲名称的存储。为方便应用层进行歌曲显示及列表管理,可将这两个bin文件信息读取并保存到nor flash中。需要播放指定名称的歌曲时,将对于歌曲名称传递给文件系…...

videojs 播放监控
<head><!-- 1. 引入videojs的CSS。 --><link href"https://vjs.zencdn.net/7.20.3/video-js.css" rel"stylesheet" /><!-- If youd like to support IE8 (for Video.js versions prior to v7) --><!-- <script src"htt…...

电源管理芯片PMIC
一、简介 电源管理芯片(Power Management Integrated Circuits,简称PMIC)是一种集成电路,它的主要功能是在电子设备系统中对电能进行管理和控制,包括但不限于以下几点: 电压转换:将电源电压转换…...

C++ 线性表、内存操作、 迭代器,数据与算法分离。
线性表: 线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的 一种,一个线性表是n个具有相同特性的数据元素的有限序列。 线性表中数据元素之间的关系是一对一的关系,即除了第一个和…...

PHP如何解析配置文件
在PHP中解析配置文件有多种方法,具体取决于配置文件的格式。常见的配置文件格式包括INI文件、YAML文件、JSON文件以及PHP数组文件(即PHP文件本身包含配置数组)。下面是一些常用的方法来解析这些配置文件。 1. 解析INI文件 INI文件是最常见的…...

【Java】六大设计原则和23种设计模式
目录 一、JAVA六大设计原则 二、JAVA23种设计模式 1. 创建型模式 2. 结构型模式 3. 行为型模式 三、设计原则与设计模式 1. 设计原则 2. 设计模式 四、单例模式 1. 饿汉式 2. 懒汉式 四、代理模式 1. 什么是代理模式 2. 为什么要用代理模式 3. 有哪几种代理模式 …...

Java IO流全面教程
此笔记来自于B站黑马程序员 File 创建对象 public class FileTest1 {public static void main(String[] args) {// 1.创建一个 File 对象,指代某个具体的文件// 路径分隔符// File f1 new File("D:/resource/ab.txt");// File f1 new FIle("D:\\…...

PCIe6.0 AIC金手指和板端CEM连接器信号完整性设计规范
先附上我之前写的关于PCIe5.0金手指的设计解读: PCIe5.0的Add-in-Card(AIC)金手指layout建议(一)_pcie cem-CSDN博客 PCIe5.0的Add-in-Card(AIC)金手指layout建议(二)_gnd bar-CSDN博客 首先,相较于PCI…...

二、创建drf纯净项目
1)创建项目 django-admin startproject api2)创建app django-admin startproject api_app3)修改settings.py注释掉一些没用的配置 INSTALLED_APPS [# django.contrib.admin,# django.contrib.auth,# django.contrib.contenttypes,# django.contrib.sessions,# d…...

算法1:双指针思想的运用(2)--C++
1.盛水最多的容器 题目链接:11. 盛最多水的容器 - 力扣(LeetCode) 题目解析: 在解析题目时,我们可以把最直接的方法先列举出来,然后再根据相应的算法原理,来进行优化 思路一:暴力…...

L1415 【哈工大_操作系统】CPU调度策略一个实际的schedule函数
L2.7 CPU调度策略 1、调度的策略 周转时间:任务进入到任务结束(后台任务更关注)响应时间:操作发生到响应时(前台任务更关注)吞吐量:CPU完成的任务量 响应时间小 -> 切换次数多 -> 系统…...

免费版U盘数据恢复软件大揭秘,拯救你的重要数据
我们的生活和工作越来越离不开各种存储设备,其中优盘因其小巧便携、方便使用的特点,成为了我们存储和传输数据的重要工具之一。为了防止你像我一样会遇到数据丢失抓狂的情况,我分享几款u盘数据恢复软件免费版工具来即时补救。 1.福昕U盘数据…...

Pikachu-Unsafe FileUpload-客户端check
上传图片,点击查看页面的源码, 可以看到页面的文件名校验是放在前端的;而且也没有发起网络请求; 所以,可以通过直接修改前端代码,删除 checkFileExt(this.value) 这部分; 又或者先把文件名改成…...

【数据结构】什么是红黑树(Red Black Tree)?
🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 📌红黑树的概念 📌红黑树的操作 🎏红黑树的插入操作 🎏红黑树的删除操作 结语 📌红黑树的概念 我们之前学过了…...

Xcode16适配
1.问题,第三方库报错信息如下: Declaration of sa_family_t must be imported from module Darwin.POSIX.sys.types._sa_family_t before it is required2.解答,在报错文件中导入以下头文件 #import <sys/_types/_sa_family_t.h>如有…...

Vue - 路由用法
前端路由就是URL中的hash与组件之间的对应关系。Vue Router是Vue的官方路由。 组成: VueRouter:路由器类,根据路由请求在路由视图中动态渲染选中的组件。<router-link>:请求链接组件,浏览器会解析成<a>。…...

SpringBoot框架下校园资料库的构建与优化
1系统概述 1.1 研究背景 如今互联网高速发展,网络遍布全球,通过互联网发布的消息能快而方便的传播到世界每个角落,并且互联网上能传播的信息也很广,比如文字、图片、声音、视频等。从而,这种种好处使得互联网成了信息传…...

vscode 连接云服务器(ubantu 20.04)
更改服务器系统 如果云服务器上的系统不是ubantu20.04的,可以进行更改: 登录云服务官网(这里以阿里云为例)点击控制台 点击服务器实例 点击更多操作、重置系统 点击重置为其他镜像、系统镜像:选择你要使用的系统镜像…...

【SpringBoot详细教程】-09-Redis详细教程以及SpringBoot整合Redis【持续更新】
🌲 Redis 简介 🌾 什么是Redis Redis 是C语言开发的一个开源高性能键值对的内存数据库,可以用来做数据库、缓存、消息中间件等场景,是一种NoSQL(not-only sql,非关系型数据库)的数据库 Redis是互联网技术领域使用最为广泛的存储中间件,它是「Remote DictionaryServic…...

排序算法之——归并排序,计数排序
文章目录 前言一、归并排序1. 归并排序的思想2. 归并排序时间复杂度及空间复杂度3. 归并排序代码实现1)递归版本2)非递归版本 二、计数排序1. 计数排序的思想2. 计数排序的时间复杂度及空间复杂度3. 计数排序代码实现 总结(排序算法稳定性&am…...

Linux中环境变量
基本概念 环境变量Environmental variables一般是指在操作系统中用来指定操作系统运行环境一些参数。 我们在编写C、C代码时候,在链接的时候从来不知道我们所链接的动态、静态库在哪里。但是还是照样可以链接成功。生成可执行程序。原因就是相关环境变量帮助编译器…...

163页PPT罗兰贝格品牌战略升级:华为案例启示与电器集团转型之路
罗兰贝格作为一家全球顶级的战略管理咨询公司,其品牌战略升级理念在多个行业中得到了广泛应用。以下将以华为案例为启示,探讨电器集团的转型之路,并融入罗兰贝格品牌战略升级的思想。 一、华为案例的启示 华为与罗兰贝格联合撰写的《数据存…...

系统设计,如何设计一个秒杀功能
需要解决的问题 瞬时流量的承接防止超卖预防黑产避免对正常服务的影响兜底方法 前端设计 利用 CDN 缓存静态资源,减轻服务器的压力在前端随机限流按钮防抖,防止用户重复点击 后端设计 Nginx 做统一接入,进行负载均衡与限流用 sentinel 等…...

Linux:进程入门(进程与程序的区别,进程的标识符,fork函数创建多进程)
往期文章:《Linux:深入了解冯诺依曼结构与操作系统》 Linux:深入理解冯诺依曼结构与操作系统-CSDN博客 目录 1. 概念 2. 描述进程 3. 深入理解进程的本质 4. 进程PID 4.1 指令获取PID 4.2 geipid函数获取PID 4.3 kill指令终止进程 …...

索尼MDR-M1:超宽频的音频盛宴,打造沉浸式音乐体验
在音乐的世界里,每一次技术的突破都意味着全新的听觉体验。 索尼,作为音频技术的先锋,再次以其最新力作——MDR-M1封闭式监听耳机,引领了音乐界的新潮流。 这款耳机以其超宽频播放和卓越的隔音性能,为音乐爱好者和专…...

【Linux】线程的概念
一、线程的概念 1.1 什么是线程 在一个程序里的一个执行路线就叫做线程,更准确的定义是:线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程线程在进程内部运行,本质是在进程地址空间内运行在Linux系统中,在CPU眼中…...

centos7.9环境下mysql8数据库双机互备环境部署
为了实现mysql数据库的高可用性,数据库采用双机互备方式部署。双机互备能够避免单点故障造成的系统故障,由于两个节点都可以进行读写,同时也可以提高整个系统的数据读写并发性能。 1. 数据库安装 centos7安装mysql8 community 服务器IP:192.168.76.84 服务器IP:192.16…...