Redis 及其在系统设计中的作用
什么是Redis
Redis 是一个开源的内存数据结构存储系统,可用作数据库、缓存和消息代理。它因其快速的性能、灵活性和易用性而得到广泛应用。
Redis 数据存储类型
Redis 允许开发人员以各种数据结构(例如字符串、位图、位域、哈希、列表、集合、有序集合、地理空间数据、超日志和流)存储、检索和操作数据。
使用 Redis 的优势
所有 Redis 数据都驻留在服务器的主内存中,这与 PostgreSQL、SQL Server 等将大部分数据存储在磁盘上的数据库不同。因此,Redis 可以支持更高数量级的操作和更快的响应时间。因此,它实现了超快的性能,平均读写操作时间不到毫秒,从而支持每秒数百万次的操作。
Redis 提供了一个完整的系统,它为我们提供了两种架构(单片机和分布式)的缓存系统,从而提高了数据检索速度,因为通过内存中的键(例如哈希表)直接访问操作将降低从原始 SQL 数据库读取数据的整体复杂性。
Redis 的工作架构
Redis 架构有多种,具体取决于用例和规模:
1. 单 Redis 实例
这是最直接的 Redis 部署方式。它要求用户设置并运行小型实例,以帮助他们扩展服务并加速其发展。然而,它也有其自身的缺点,因为如果正在运行的实例崩溃或不可用,所有对 Redis 的调用都会失败。因此,系统的整体性能和速度会下降。
单 Redis 实例
2. Redis HA(高可用性)
另一种常见的设置是主部署加上一个始终与副本保持同步的辅助部署。辅助实例在我们的部署中可以是一个或多个实例,这有助于扩展从 Redis 的读取,并在主实例丢失的情况下提供故障转移。
Redis HA(辅助实例故障转移)
3. Redis Sentinel
Sentinel 对应于分布式系统。它的设计理念是,一个哨兵进程集群协同工作,协调状态,从而为 Redis 系统提供持续的可用性。哨兵进程的职责如下:
- 监控:确保主实例和辅助实例按预期运行。
- 通知:将 Redis 实例中发生的事件通知所有系统管理员。
- 故障期间管理:如果主实例长时间不可用,并且有足够多的节点确认故障,哨兵节点可以在故障期间启动一个进程。
Redis 哨兵
4. Redis 集群/Redis 集群主从模型:Redis 的终极架构
Redis 集群是 Redis 的终极架构。它允许 Redis 进行水平扩展。
在 Redis 集群中,我们决定将存储的数据分散到多台机器上,这称为分片。因此,集群中的每个 Redis 实例都被视为整个数据的一个分片。
Redis 集群使用算法分片。为了找到给定键对应的分片,我们会对键进行哈希运算,并将结果除以分片数量。然后,使用确定性哈希函数(即给定键始终映射到同一个分片),我们可以推断出将来读取特定键时该键的位置。
系统设计中的 Redis 集群架构
为了处理系统中分片的进一步添加(重新分片),Redis 集群使用哈希槽 (Hashslot),所有数据都映射到该哈希槽。因此,当我们添加新的分片时,我们只需将哈希槽从一个分片移动到另一个分片,从而简化了向集群添加新主实例的过程。这样做的好处是,无需停机,并且性能影响最小。我们来看下面的示例:
假设哈希槽的数量为 10K。
实例 1 包含从 0 到 5000 的哈希槽,
实例 2 包含从 5001 到 10000 的哈希槽。
现在,假设我们需要添加另一个实例,那么哈希槽的分布如下:
实例 1 包含从 0 到 3333 的哈希槽。
实例 2 包含从 3334 到 6667 的哈希槽。
实例 3 包含从 6668 到 10000 的哈希槽。
Redis 集群中的 gossiping 是什么?
为了确定整个集群的健康状况,Redis 集群使用 gossiping。在下面的示例中,我们有 3 个主实例和 3 个辅助节点。所有这些节点都会不断确定哪些节点当前可用于处理请求。假设有足够多的分片一致认为实例 1 没有响应,它们就可以将实例 1 的辅助节点提升为主节点,以保持集群的健康。一般来说,为了实现最强健和容错的网络,主节点数量必须为奇数,并且每个节点有两个副本。
Redis 持久化模型的类型
Redis 提供了两种主要的持久化选项来将数据保存到磁盘:RDB 和 AOF。这两种选项各有优缺点,具体使用哪种取决于应用程序的具体需求。以下列出了几种持久化选项:
1. RDB(实时数据库)持久化模型:
RDB 是 Redis 数据集的即时快照,以二进制文件的形式存储。RDB 文件包含数据集在特定时间点的表示形式,可用于在服务器崩溃或重启时恢复数据集。由于 RDB 采用二进制格式存储数据,因此在磁盘空间利用率和性能方面非常高效。
RDB 可以配置为定期保存数据,或者根据某些条件(例如最小写入操作次数)保存数据。然而,RDB 的缺点是,如果服务器在按计划创建 RDB 快照之前崩溃,则可能导致数据丢失。
RDB 中的快照
快照是 Redis 持久化过程中的一个过程,它会在内存中创建整个数据集的时间点快照,并将其以二进制格式保存到磁盘。此快照可用于在服务器崩溃或重启时恢复数据集。Redis 通过其 RDB 持久化机制支持快照。
快照的工作原理如下:
- Redis 从父进程派生出一个子进程。
- 子进程在内存中创建数据集当前状态的副本。
- 子进程将数据集副本写入临时 RDB 文件。
- 子进程将临时文件重命名为最终的 RDB 文件名,并覆盖所有现有的 RDB 文件。
- 子进程终止,Redis 继续处理请求。
Redis 可以配置为定期自动执行快照,或根据某些条件(例如最小写入操作次数或自上次快照以来经过的最短时间)执行快照。如果我们正在进行繁重的工作并更改大量键,那么每分钟将生成一个快照;如果更改相对较少,则每 5 分钟生成一个快照;如果更改更少,则每 15 分钟生成一个快照。
RDB(实时数据库)的优势
- RDB 文件非常适合备份,因为它是 Redis 数据非常紧凑的单文件时间点表示。它使我们能够在发生灾难时轻松恢复数据集的不同版本。
- 它非常适合灾难恢复,因为它是一个可以传输到远程数据中心的单个紧凑文件。
RDB(实时数据库)的劣势
现在让我们比较一下 Redis DB 的劣势:
- RDB 并非最佳选择。
- 如果我们需要最大限度地降低 Redis 停止工作时数据丢失的可能性,
- 我们可以配置生成 RDB 的不同保存点。但是,我们通常每五分钟或更长时间就会创建一个 RDB 快照,因此,如果 Redis 由于任何原因而未正确关闭而停止工作,我们应该准备好丢失最新几分钟的数据。
2. AOF(仅追加文件)持久化模型
AOF 将所有写入操作以人类可读的格式记录到一个文件中。该文件包含自上次保存以来对数据集执行的所有写入操作的记录,以便在发生崩溃时重建数据集。AOF 比 RDB 具有更好的持久性,因为它将每个写入操作都记录到磁盘。
AOF 可以配置为定期保存数据,或根据某些条件(例如最小写入操作次数)保存数据。但是,由于 AOF 会将每个写入操作都记录到磁盘,因此会导致性能下降和磁盘空间占用增加。
由于快照的持久性较差,因此仅追加文件是 Redis 的另一种完全持久化策略。
可以通过以下方式在配置文件中启用 AOF:
appendonly yes
AOF 的工作原理?
- Redis 会从父进程 fork 一个子进程。
- 子进程会在内存中创建数据集当前状态的副本。
- 子进程将数据集的副本写入临时文件中的新 AOF 文件。
- 父进程将所有新的更改累积到内存缓冲区中(但同时,它会将新的更改写入旧的仅追加文件,因此如果重写失败,我们是安全的)。
- 当子进程完成文件重写后,父进程会收到信号,并将内存缓冲区中的更改追加到子进程生成的文件末尾。
- 然后,Redis 会自动将旧文件重命名为新文件,并开始将新数据追加到新文件中。
AOF 的优势
- Redis 的 AOF 日志更加持久,因为我们可以采用不同的 fsync 策略,例如完全不 fsync、每秒 fsync 或每次查询时 fsync。
- 它是一个仅追加的日志,因此不会出现寻道,也不会在断电时出现损坏问题。
- 如果日志由于磁盘已满或其他原因突然结束,Redis 的检查工具可以自动修复任何写入一半的命令。
AOF 的缺点
现在让我们比较一下 AOF 的缺点:
- 对于相同的数据集,这些文件通常比等效的 RDB 文件更大。
- 根据具体的 fsync 策略,它可能比 RDB 慢。
- AOF 可以提高数据一致性,但不能保证数据完全一致。数据丢失的可能性很小,但考虑到 RDB 速度更快,丢失数据的可能性比 RDB 模式要小。
选择哪个——实时数据库 (RDB) 还是追加文件 (AOF)?
通常的思路是,如果我们想要获得与 PostgreSQL 等普通数据库相当的数据安全性,我们应该同时使用这两种持久化方法。如果我们非常重视数据,但又能忍受灾难发生时几分钟的数据丢失,那么我们可以只使用 RDB。
3. 无持久化模型
Redis 还提供了完全禁用持久化的选项,在这种情况下,数据仅存储在内存中。当 Redis 用作缓存时,此选项非常有用,因为数据丢失后可以重新生成。
4. 混合 (RDB+AOF) 持久化模型
Redis 提供了同时使用 RDB 和 AOF 持久化的选项,这被称为混合持久化。此选项兼具 RDB 和 AOF 的优点,因为 AOF 日志用于在重启后重放写入操作,而 RDB 快照用于在特定时间点恢复数据集。
Redis 中的可用性、一致性和分区
以下是 Redis 如何处理可用性、一致性和分区的简要概述:
- 可用性:Redis 使用主从复制模型来确保高可用性。这意味着有一个“主”节点接受所有写入操作,还有多个“从”节点实时从主节点复制数据。如果主节点发生故障,可以将其中一个从节点提升为新的主节点。
- 一致性:Redis 为单键操作提供强一致性保证,这意味着如果将值写入某个键,集群中的任何节点都可以立即读取该值。但是,Redis 不为多键操作提供事务一致性,这意味着某些节点可能看到与其他节点不同的数据视图。
- 分区:Redis 支持分片,允许将数据集分区到多个节点。Redis 使用基于哈希的分区方案,其中每个键根据其哈希值分配给特定节点。Redis 还提供了一种在集群中添加或删除节点时重新分配数据的机制。
我们可以使用 Redis 来替代原始数据库吗?
基于以上讨论,Redis 似乎是原始数据库的更好选择,因为它提供了更快的检索速度。即便如此,Redis 也不会被用作系统中数据库的主要选项。
Redis 应该始终作为提升整体系统性能的第二支撑,因为根据 CAP 定理,Redis 既不具备一致性,也不具备高可用性。
这是因为,如果服务器崩溃,我们将丢失内存中的所有数据。崩溃时丢失这些数据是可以接受的,但对于某些其他应用来说,在服务器重启后立即重新加载 Redis 数据就变得非常重要。
结论
总的来说,Redis 是一个强大的系统设计工具,但它可能并不适合所有用例。在决定是否在特定应用程序中使用 Redis 时,务必仔细考虑其局限性。
相关文章:
Redis 及其在系统设计中的作用
什么是Redis Redis 是一个开源的内存数据结构存储系统,可用作数据库、缓存和消息代理。它因其快速的性能、灵活性和易用性而得到广泛应用。 Redis 数据存储类型 Redis 允许开发人员以各种数据结构(例如字符串、位图、位域、哈希、列表、集合、有序集合…...
运维打铁:Centos 7 使用yum安装 mysql5.7
文章目录 一、安装前信息说明二、安装步骤1. 下载并安装官网 RPM 安装包2. 修改配置文件 /etc/my.cnf3. 创建 MySQL 数据相关目录并授权4. 启动 MySQL 服务 三、修改数据库访问密码1. 修改配置文件 /etc/my.cnf2. 重启 MySQL 服务3. 登录数据库并修改密码4. 恢复配置文件并重启…...
第二章:MCP服务器分类
Chapter 2: MCP服务器分类 🌟 从上一章到本章 在第一章:Model Context Protocol (MCP)中,我们学习了如何通过MCP让LLM安全访问文件系统。现在,让我们想象一个更复杂的需求:假设你需要让LLM同时处理文件、查询数据库、…...
遨游三防|30200mAh、双露营灯三防平板,见证堆料天花板
在工业4.0与智能化转型的浪潮中,专业设备对性能、防护及场景适应性的要求日益严苛。遨游通讯作为国家级高新技术企业,依托“危、急、特”场景的深耕经验,推出的旗舰级产品AORO-P300三防平板,以30200mAh超大容量电池、双露营灯设计…...
OFDM 信道表示(3)
上节我们令得到频域相关系数与PDP是一对傅里叶变换对。这次我们令即只考虑同一个RE上随时间变化得过程。 为接收信号自相关函数,令即为上式 所以可得Doppler 功率谱和子相关函数一对傅里叶变换对。 上面给出多径DPL信道接受信号表示,其中为t时间多径时延…...
MongoDB副本集搭建与核心机制
一、节点架构解析 1.1 节点角色分工 主节点(Primary) 唯一写入口:处理所有写操作(插入/更新/删除) Oplog生成器:记录操作日志到local.oplog.rs集合 同步中枢:向所有从节点推送oplog变更 典型…...
深度学习-数值稳定性和模型初始化
到目前为止,我们实现的每个模型都是根据某个预先制定的分布来初始化模型的参数,有人会认为初始化方案时理所当然的,忽略了如何做出这些选择的细节,甚至有人可能会觉得,初始化方案的选择并不是特别重要,实际…...
详解Linux中的定时任务管理工具crond
在 Linux 容器环境中,/etc/cron.d/ 目录可能不存在,特别是在精简的容器镜像(如 Alpine、BusyBox 或某些定制化的镜像)中。这是因为容器通常追求轻量级,默认不包含完整的 cron 系统(如 cronie 或 vixie-cron…...
【element plus】解决报错error:ResizeObserver loop limit exceeded的问题
当我们在使用element plus框架时,有时会遇到屏幕突然变暗,然后来一句莫名其妙的报错ResizeObserver loop limit exceeded,其实这是因为改变屏幕大小时el-table导致的报错 网上给出了几种解决方案,我试了其中两种可以实现 方案一&…...
GD32E23x flash作为静态存储的读写操作
目录 一、前言 二、GD32E23x flash扇区地址划分 三、GD32E23x 固件库下载 四、GD32E23x falsh擦写操作函数封装 五,引用示例 一、前言 在只有芯片没有外部存储时需要存储一些配置信息,使用flash进行存储是很好的选择了,在GD32E23x中以flash…...
空闲列表:回收和再利用
空闲列表:回收和再利用 手动与自动内存管理 手动管理:程序员需要明确地分配和释放内存。自动管理:例如使用垃圾收集器(GC),它能够自动检测并回收未使用的对象,不需要程序员干预。 对于某些数据结构如B树,…...
功能脑网络较新的方法[和ai讨论的方向和学习资源]
文章目录 前言和回顾代码实现ai 提问大脑连通性分析方法扩展与分类指南一、现有方法的补充与分类1. 补充的其他连通性方法2. 分类框架 二、近年来的新方法(2019年后)1. 相位动力学扩展2. 信息论与复杂度3. 基于图论与网络科学4. 动态系统与因果推断 三、…...
【MongoDB + Spark】 技术问题汇总与解决方案笔记
场景背景 最近练手项目:Spark 结合 MongoDB 构建商品推荐系统的过程中,过程中出现多种环境配置与兼容性问题,主要涉及 MongoDB 连接、版本兼容性、Casbah 驱动使用问题等。汇总调试过程中遇到的常见错误及其解决方案,供参考复用。…...
给git配置SSH(github,gitee)
更多个人笔记:(仅供参考,非盈利) gitee: https://gitee.com/harryhack/it_note github: https://github.com/ZHLOVEYY/IT_note 本文基于mac,linux和win可以参考 个人同时配置gitee和github的ss…...
Linux基础使用-笔记
1. 文件和目录操作 查看当前目录:pwd 命令用于显示当前工作目录的完整路径。 pwd切换目录:cd 命令用于切换工作目录。 # 切换到指定目录 cd /home/user/Documents # 切换到上一级目录 cd .. # 切换到用户主目录 cd ~列出目录内容:ls 命令用…...
什么是Maven
Maven的概念 Maven是一个一键式的自动化的构建工具。Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于Java 平台的项目构建和依赖管理。Maven 这个单词的本意是:专家,内行。Maven 是目前最流行的自动化构建工具࿰…...
DNS主从同步及解析
DNS 域名解析原理 域名系统的层次结构 :DNS 采用分层树状结构,顶级域名(如.com、.org、.net 等)位于顶层,下面是二级域名、三级域名等。例如,在域名 “www.example.com” 中,“com” 是顶级域名…...
Git 的基本概念和使用方式
Git 是一种分布式版本控制系统,广泛用于跟踪文件的变化和协作开发项目。以下是 Git 的基本概念和使用方式: 仓库(Repository):Git 用来存储项目文件和历史记录的地方。可以是本地仓库(Local Repository)或远程仓库(Remote Repository)。 工作区(Working Directory):…...
【C++】二叉树进阶面试题
根据二叉树创建字符串 重点是要注意括号省略问题,分为以下情况: 1.左字树为空,右子树不为空,左边括号保留 2.左右子树都为空,括号都不保留 3。左子树不为空,右子树为空,右边括号不保留 如果根节…...
时序数据库IoTDB构建的能源电力解决方案
随着能源格局的快速变化与“双碳”战略的逐步践行,电力系统的绿色低碳转型已成为重要发展趋势。在这一背景下,数字化、智能化技术正逐步扩大在新型电力系统发电侧、电网侧、储能侧的应用,以推动传统电力发输配用向全面感知、双向互动、智能高…...
【KWDB 创作者计划】_上位机知识篇---Github
文章目录 前言1. GitHub 核心功能(1) 代码托管(Git 仓库)存储代码版本控制代码浏览(2) 协作开发Pull RequestlssuesProjectsDiscussions(3) 自动化与 CI/CDGitHub ActionsGitHub PagesDependabot(4) 社区与开源ForkStarWatchSponsor2. GitHub 基本使用方法(1) 创建仓库(Repo…...
vxe-table封装表头
待补充使用说明,但是可以用 一.效果二.封装MyTable.vue1.封装index.vue2.日期选择筛选3.输入筛选4.下拉筛选5.多选筛选6.远程多选筛选7.远程单选筛选 三、页面使用1.具体页面使用2./utils/filter.js 注意:需要使用jsx、vxe-table、element-plus 一.效果 …...
力扣hot100 91-100记录
91-100 (动态规划) class Solution { public:int uniquePaths(int m, int n) {vector<vector<int>> f(m, vector<int>(n, 1));for(int i 1; i < m; i){for(int j 1; j < n; j){f[i][j] f[i-1][j] f[i][j-1];} }return f[…...
SpringMVC处理请求映射路径和接收参数
目录 springmvc处理请求映射路径 案例:访问 OrderController类的pirntUser方法报错:java.lang.IllegalStateException:映射不明确 核心错误信息 springmvc接收参数 一 ,常见的字符串和数字类型的参数接收方式 1.1 请求路径的…...
ESP32上C语言实现JSON对象的创建和解析
在ESP32上使用C语言实现JSON对象的创建和解析,同样可以借助cJSON库。ESP-IDF(Espressif IoT Development Framework)本身已经集成了cJSON库,你可以直接使用。以下是详细的步骤和示例代码。 1. 创建一个新的ESP-IDF项目 首先&…...
关于Qt对Html/CSS的支持
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、原生控件二、QtWebEngine总结 前言 最近遇到了一些问题需要使用Qt加载Html发现一些特性不能使用,估计很多人也和我一样遇到这种情况。需要说明…...
Python 读取 txt 文件详解 with ... open()
文章目录 1 概述1.1 注意事项1.2 模式说明1.3 文件准备 2 读文件2.1 读取整个文件2.2 逐行读取2.3 读取所有行到列表 3 写文件3.1 覆盖写入3.2 追加写入3.3 写入多行 4 实用技巧4.1 检查文件是否存在4.2 异常处理 1 概述 1.1 注意事项 文件编码:建议指定编码&…...
[Mac] 使用homebrew安装miniconda
使用虚拟环境可以对不同项目的依赖进行隔离。可以使用venv或者conda来创建和使用虚拟环境。 venv是Python内置的虚拟环境管理模块,适合纯Python项目以及快速轻量级的开发和部署。conda具备更强大的版本管理能力,但是占用较大的磁盘空间。 考虑到我基本不…...
如何获取适用于广告过滤增强的Chrome浏览器版本【广告净化】
不少人使用浏览器时,会遇到广告弹窗、视频前贴广告或页面跳转。这些情况会影响上网体验。想要改善,可以从选择合适版本的谷歌浏览器开始,并加上合理设置。 先打开电脑上的浏览器,在搜索栏中输入“谷歌浏览器官方下载页面”。找到带…...
JVM(Java虚拟机)详解
目录 1 JVM执行流程 2 JVM运行时数据区(内存布局) 2.1 堆 2.2 栈 2.3 方法区 2.4 程序计数器 2.5 Java和运行时数据区相关的异常 3 JVM类加载(Class Loading) 3.1 加载Loading 3.2 连接Linking 3.2.1 验证Verification…...
Vue3 + TypeScript,使用provide提供只读的响应式数据的详细分析与解决方法
原始无类型写法(不报错) typescript const applySampleTableData ref<ApplySample[]>([]); const applySampleListSymbol Symbol("applySampleList"); provide(applySampleListSymbol, readonly(applySampleTableData)); 类型推断&a…...
深入理解 BLE PHY 模式:1M、2M 与 Coded 的演进与应用
随着蓝牙技术不断演进,BLE(Bluetooth Low Energy)在物联网、可穿戴设备、智能家居等领域的应用愈发广泛。BLE 中的 PHY(Physical Layer,物理层)是决定无线传输速率、覆盖范围和功耗的核心因素。本文将以浅显易懂的语言,结合示意图和代码示例,系统梳理 BLE 三种 PHY 模式…...
人工智能与机器学习:二元分类决策树构建指南
引言 在人工智能与机器学习的领域里,算法犹如智慧的钥匙,开启着数据洞察的大门。决策树作为其中一颗璀璨的明珠,以其独特的非线性处理能力和可解释性备受瞩目。今天,让我们跟随作者的脚步,深入探究如何构建一个用于二…...
Ubuntu下软件运行常见异常退出问题汇总分析
软件在Ubuntu下运行时,可能会遇到各种异常退出情况,常见可分为以下几点: 目录 一、系统资源耗尽导致退出 二、权限导致无法运行 三、找不到依赖的动态库 四、编译可执行文件时,动态库所引用的头文件与动态库不匹配 一、系统资…...
机器学习漏洞大汇总——利用机器学习服务
在本节中,我们将展示机器学习框架中存在的漏洞,这些漏洞会直接处理模型工件,或者通过工件存储或模型注册表的凭证来处理。利用此类漏洞,攻击者可以在企业系统内部进行非常强大的横向移动,从而劫持被利用的模型注册表中的机器学习模型。 WANDB Weave 目录遍历 - CVE-2024-…...
类的六个默认成员函数
如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认…...
精益数据分析(21/126):剖析创业增长引擎与精益画布指标
精益数据分析(21/126):剖析创业增长引擎与精益画布指标 大家好!在创业和数据分析的探索道路上,我一直希望能和大家携手共进,共同学习。今天,我们继续深入研读《精益数据分析》,剖析…...
SAIL-RK3588协作机器人运动控制器技术方案
一、核心能力与政策适配 政策合规性 满足工信部《智能机器人重点技术攻关指南》要求,支持 EtherCAT主站协议(符合IEC 61158标准),助力企业申报工业机器人研发专项补贴(最高300万元/项目)核心板…...
手搓箱图并输出异常值(MATLAB)
看下需求 想要复刻这种箱图,咱们直接开始手搓 %% 可修改 % 生成模拟数据(假设5个用户群体的发帖数) data {randn(100,1)*10 30, ... % 核心用户randn(200,1)*5 10, ... % 边缘用户randn(150,1)*8 20, ... % 积极社交用户randn(8…...
Java:XML被自动转义
在Java中处理XML响应被自动转义的问题时,需结合XML规范及工具特性进行针对性处理。以下是常见原因及解决方案的总结: 一、XML自动转义的原因 字符安全性处理 XML中的保留字符(如 <、>、&)会被自动转义为实体&a…...
Day-3 应急响应实战
应急响应实战一:Web入侵与数据泄露分析 1. Web入侵核心原理 漏洞利用路径 未授权访问:弱口令(如空密码/默认口令)、目录遍历漏洞代码注入攻击:JSP/ASP木马、PHP一句话木马(利用eval($_POST[cmd])&…...
【软件设计师】模拟题一
以下是 10道软考-软件设计师模拟试题,涵盖高频考点和易错点,附带答案和解析: 一、软件工程 1. 在软件开发生命周期中,瀑布模型的主要特点是( ) A. 强调快速原型迭代 B. 阶段间有明…...
每日一练(4~24):互质的数【省模拟赛】
算法:暴力枚举 问题描述 如果两个整数 a, b 除了 1 以外,没有其它的公约数,则称整数 a 与 b 互质。 请问,与 2024 互质的数(包括 1)中,第 2024 小的是多少? 答案提交 这是一道结…...
金融软件测试有哪些注意事项?专业第三方软件测试服务机构分享
在现代金融行业中,软件系统的稳定性和安全性直接关系到资金的安全和业务的正常运转。金融软件因涉及庞大的资金流和敏感的个人及交易信息,对软件测试提出了更高的要求,那么金融软件在进行测试时有哪些注意事项呢?卓码软件测评作为专业的第三…...
关于QT信号、槽、槽函数的讲解
也是好久没有发帖子了,最近博主主要还是在边学QT边完成任务,所以进度很慢,但确实在这几天对于QT自身槽和信号这类特殊的机制有了一定简单的理解,所以还是想记录下来,如果有初学者看到帖子对他有一定的帮助,…...
算法训练营第三十天 | 动态规划 (三)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、01背包问题理论基础(一)动态规划五部曲确定dp数组以及下标的含义确定递推公式初始化dp数组确定遍历顺序 二、01背包问题理论基础&#…...
Vue开发网站会有“#”原因是前端路由使用了 Hash 模式
前言 网站链接中出现 #(井号)是因为你的前端路由使用了 Hash 模式(hash mode),这是一种前端框架(如 Vue.js、React 等)中常用的路由策略。 为什么有 # 比如 https://www.zimeinew.com/#/order…...
SpringBootTest报错
Unable to find a SpringBootConfiguration, you need to use ContextConfiguration or … 解决方案:在SpringTest注解中添加属性(classes )填写启动类 如我的启动类是MainApplication.class javax.websocket.server.ServerContainer no…...
【质量管理】现代TRIZ(萃智)理论概述
一、什么是TRIZ理论 TRIZ理论,即发明问题解决理论(Teoriya Resheniya Izobreatatelskikh Zadatch),是由前苏联发明家根里奇阿奇舒勒(Genrich S. Altshuller)于1946年创立的。它是一门基于知识的、面向人的发明问题解决系统化方法学。TRIZ理论通过研究大量的专利,总结出技…...
前端面经-JS篇(四)--回调地狱、promise异步编程、Proxy 与 Reflect 、模块化
一、回调地狱 回调地狱(Callback Hell),也称为回调地狱,是指在 JavaScript 中处理多个嵌套的异步回调函数时,代码结构变得非常难以阅读和维护的现象。 为什么会出现回调地狱? 回调地狱通常出现在需要执行…...