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

Redis集群哨兵相关面试题

目录

1.Redis 主从复制的实现原理是什么?

详解

补充增量同步

replication buffer

repl backlog buffer

2.Redis 主从复制的常见拓扑结构有哪些?

3.Redis 复制延迟的常见原因有哪些?

4.Redis 的哨兵机制是什么?

主观下线和客观下线

哨兵leader如何选出来的?

Redis主节点选举

5.Redis 集群的实现原理是什么?

6.Redis 集群会出现脑裂问题吗?

什么是脑裂

Redis 中的脑裂

7.Redis 中如何避免脑裂问题的发生呢?

653.脑裂问题能完全避免吗?

1.Redis 主从复制的实现原理是什么?

主从复制是指一个 Redis 主节点 可以将数据复制到一个或多个从节点,从节点从主节点获取数据并保持同步。

主服务器可以进行读写操作,当发生写操作时自动将写操作同步给从服务器,而从服务器一般是只读,并接受主服务器同步过来写操作命令,然后执行这条命令。

复制流程:

  • 连接: 从节点通过向主节点发送PSNC命令建立连接。

  • 全量复制: 如果是第一次连接或之前的连接失效,从节点会请求全量复制,主节点将当前数据快照( RDB文件 )发送给从节点。

  • 增量复制: 全量复制完毕后,主从之间会保持一个长连接,主节点会通过这个连接将后续的写操作传递给从节点执行,来保证数据的一致。

详解

  1. 建立链接、协商同步

从机执行了 replicaof 命令指定主机后,就会给主服务器发送 psync 命令

  • runid指的是主服务器的run ID,从节点第一次同步不知道主节点 ID,于是传递"?"

  • offset为复制进度,第一次同步值为 -1。

主服务器收到 psync 命令后,会用 FULLRESYNC 作为响应命令返回给对方。采用全量复制的方式同步给从机。

  1. 全量同步

主服务器会执行 bgsave 命令来生成 RDB 文件,然后把文件发送给从服务器。从服务器收到 RDB 文件后,会先清空当前的数据,然后载入 RDB 文件。

  1. 心跳持续,保持通信

repl-ping-replica-period 10 => master发出PING包的周期,默认是10秒,保持通讯

  1. 进入平稳,增量同步

待同步完毕后,主从之间会保持一个长连接,主节点会通过这个连接将后续的写操作传递给从节点执行,来保证数据的一致。

接着,主服务器将replication buffer缓冲区里所记录的写操作命令发送给从服务器,从服务器执行缓冲区里发来的命令,数据就一致了。

补充增量同步

主从之间的网络可能不稳定,如果连接断开,主节点部分写操作未传递给从节点执行,主从数据就不一致了。

此时介绍下repl_backlog_buffer

repl_backlog_buffer是一个环形缓冲区,默认大小为 1m。主节点会将写入命令存到这个缓冲区中,但是大小有限,待写入的命令超过 1m 后,会覆盖最早的数据,因为是环形写入。

如何判断 能增量同步?

  1. 从节点在尝试重连时,会发送一个 PSYNC 命令给主节点,该命令包含了从节点最后一次成功执行命令后的复制偏移量(offset)以及主节点的运行 ID(runid)。

  2. 如果从节点提供的 runid 与主节点的当前 runid 匹配,那么主节点知道它是从节点了,并且可以从上次断开的地方继续。

  3. 确定 repl_backlog_buffer 的有效范围

    • repl_backlog_buffer 有一个起始偏移量,称为 backlog_offset

    • repl_backlog_buffer 还有一个结束偏移量,它是 backlog_offset + repl_backlog_size-1 (因为偏移量是从 0 开始计数的)。

  4. 比较 offsetrepl_backlog_buffer 的范围

    • 如果从节点的 offset在范围内,则说明从节点断开时的数据还在 repl_backlog_buffer 中,这时就可以进行增量同步。

    • 如果从节点的 offset 在起始或结束偏移量之外,那么表示从节点断开的时间太长了,导致需要的数据已经被覆盖掉,此时只能触发全量同步。

  5. 于是就去repl backlog buffer查找对应 offset 之后的命令数据,写入到replication buffer中,最终将其发送给 slave 节点。slave 节点收到指令之后执行对应的命令,一次增量同步的过程就完成了。

replication buffer

因为不同的从节点同步速度不一样,主节点会为每个从节点都创建一个replication buffer ,它用于实时传输写命令,且大小是动态的,因为对于同步速度较慢的从服务器,需要更多的内存来缓存数据。

repl backlog buffer

repl backlog buffer 在主节点上只有一个,存储最近的写命令,用于从服务器重新连接时进行部分重同步。

2.Redis 主从复制的常见拓扑结构有哪些?

Redis 主从的几种常见拓扑结构如下(忽略哨兵):

  1. 一主多从

这是最基本的拓扑结构,包含一个主节点和多个从节点。所有写操作都在主节点上执行,而读操作可以在从节点上进行,以提高读取速度和负载均衡。

  1. 树状主从结构(级联)

从节点也可以作为其他从节点的主节点。这样形成了一个层次结构,主节点负责写操作,而从节点负责读操作,并将数据再次复制到更下一级的从节点。

3. 主主结构(双主或多主)

在这种拓扑中,有两个或多个主节点,它们之间相互复制数据。这种结构提高了系统的写能力和容错性。

但需要处理多主节点之间的数据同步和冲突解决,管理复杂度高,Redis 默认不支持主主复制。

3.Redis 复制延迟的常见原因有哪些?

Redis 的复制延迟是指从节点同步主节点数据时可能出现时间延迟。在读写分离场景,这个延迟会导致明明写入了数据,但是去从节点查的时候没查到。可能原因如下:

    1.网络原因

可能是带宽不足,或者网络抖动导致同步的延迟。不过一般内网情况下不会产生这个问题。

    2.主节点负载过高

主节点接收到大量的写操作,在处理客户端请求的同时,还需向从节点发送复制数据。如果主节点负载较高时,来不及处理从服务的复制请求,就会导致复制延迟。

大量写操作无法避免。但是我们可优化下写入的结构,精简数据,降低单条数据的大小。

   3.复制缓存区溢出

复制缓存区暂存当前主节点接收到的写命令,待传输给从节点。如果从节点处理过慢,写入的命令又过多,则会导致复制缓冲区溢出,此时从节点就需要重新执行全量复制,导致延迟。 可通过client-output-buffer-limit间接控制缓冲区大小(详细看扩展知识内的主从复制原理)。

    4.主节点持久化,无法及时响应复制请求

生成 RDB 快照或 AOF 文件重写都会占用大量的 CPU 和 I/O 资源,可能会影响复制的速度。避免在高峰期触发持久化动作。

    5.从节点配置太差

因为从节点需要接收、处理和存储主节点发送的数据。如果从节点性能较低,处理数据的速度会慢,从而导致延迟此时需要升配。

4.Redis 的哨兵机制是什么?

Redis 的哨兵机制(Sentinel)是一种高可用性解决方案,用于监控 Redis 主从集群,自动完成主从切换,以实现故障自动恢复和通知。

主要功能包括:

  1. 哨兵可以不断监控 Redis 主节点和从节点的运行状态,定期发送 PING 请求检查节点是否正常。

  2. 当主节点发生故障时,哨兵会选举一个从节点提升为新的主节点,从而实现高可用。

  3. 哨兵可以向系统管理员或其他服务发送通知,以便快速处理 Redis 实例的状态变化。

主观下线和客观下线

哨兵是如何判断 Redis 中主节点挂了的呢? 主要涉及到了两个机制:主观下线以及客观下线.。

主观下线

单个Sentinel 每隔 1s 会发送 ping 命令给所有的节点。如果 Sentinel 超过一段时间还未收到对应节点的 pong 回复,就会认为这个节点主观下线。

`down-after-milliseconds <masterName> <timedut>`

客观下线

只有主节点才有客观下线,从节点没有

sentinel 的判断主节点下线了,但可能主节点并没问题,只是因为网络抖动导致了一台哨兵的误判。所以此时哨兵需要问问其他哨兵

其他哨兵会判断主节点的状态进行投票,可以投赞成或反对。

如果认为下线的总投票数大于quorum(一般为 集群总数/2 +1,假设哨兵集群有3台实例,那么 3/2 +1=2),则判定该主节点客观下线,此时就需要进行主从切换,而只有哨兵的兵王 leader 才能操作主从切换( 故障切换 )

哨兵leader如何选出来的?

涉及到raft算法,基本思路是先到先得

候选者们会先投自己一票,然后向其他 sentinel 发送命令让它们给自己投票。每个哨兵手里只有一票,投了一个之后就不能投别人了。

最后,如果某个候选者拿到哨兵集群半数及以上的赞成票,就会成为leader。这里有一个注意的点,为了保证 sentinel 选举的时候尽量避免出现平票的情况,sentinel的节点个数一般都会是奇数比如 3,5,7 这样。

Redis主节点选举

重点 由兵王开始推动故障切换流程并选出一个新的master

  1. 新主登基:某个Slave被选中成为新master

选出新master的规则,剔除已经下线的结点,从正常从节点中判断

  • redis.conf文件中,优先级slave-priority或者replica-priority最高的从节点(数字最小优先级越高)

  • 主从复制偏移位置 offset 最大的从节点 ==》 复制量 offset 表示主节点向从节点同步数据的偏移量,越大表示同步的数据越多

  • 最小Run ID的从节点( 每个实例ID不同 ) ==》 字典顺序,ASCII码

2.群臣俯首:一朝天子一朝臣,换个码头重新拜

  • 在执行slave no one命令让选出来的从节点(master)成为新的主节点,并通过slaveof命令让其他节点成为其从节点

    • Sentinel leader(兵王)会对选举出来的新master执行slave no one操作,将其提升为master节点

    • Sentinel leader向其他slave发送命令,让剩余的slave成为新的master节点的slave

3. 旧主拜服

  1. 将之前已下线的老master设置为新选出来的新master的从节点,当老master重新上线后,它会成为新master的从节点
  2. Sentinel leader会让原来的master降级为slave并回复正常工作

5.Redis 集群的实现原理是什么?

Redis集群是 多主机集群 +主从 复制 +自带故障转移功能(无需哨兵)

Redis 集群是通过多个 Redis 实例组成的,每个实例存储部分的数据( 每个实例之间的数据是不重复的 )

具体是采用 哈希槽( Hash Slot )机制来分配数据

将整个键空间划分为 16384个槽(slots)。每个Redis 实例负责一定范围的哈希槽

  • 数据的 key 按照 CRC16算法 计算得到一个 16 bit 的值。

  • 再用 16bit 值对 16384 取模,得到 0~16383 (0,2^14-1)范围内的对应槽位

客户端在发送请求时,会通过集群的任意节点进行连接

  • 如果该节点存储了对应的数据则直接返回

  • 反之该节点会根据请求的键值计算哈希槽并路由到正确的节点。

简单来说,集群就是通过多台机器分担单台机器上的压力。

怎么构建redis集群的?

假如有6台redis,三主三从架构

  1. 首先每台redis配置文件要开启集群模式

  2. 通过redis-cli命令为6台机器构建集群关系,具体是--cluster-replicas 1即配置三主三从,分配的结点是随机的

  3. 成功后可以通过CLUSTER NODES 查看结点信息拓扑图

为什么redis集群的最大槽数值是16384个?

根据作者的话来说

  • 如果槽位为65536(2^16),发送心跳信息的信息头达8k,发送的心跳包过于庞大。

  • 当槽位为16384时,这块的大小是:65536÷8÷1024=2kb

  • 因为每秒钟,redis节点需要发送一定数量的ping消息作为心跳包,如果槽位为65536,这个ping消息的消息头太大了,浪费带宽。

并且redis的集群主节点数量基本不可能超过1000个。集群节点越多,心跳包的消息体内携带的数据越多。如果节点超过1000个,也会导致网络拥堵。所以,对于节点数在1000以内的redis cluster集群,16384槽位够用了。

Redis 集群中节点之间的信息如何同步?

Redis 集群内每个节点都会保存集群的完整拓扑信息,包括每个节点的 ID、IP 地址、端口、负责的哈希槽范围等。

节点之间使用 Gossip 协议进行状态交换,以保持集群的一致性和故障检测。每个节点会周期性地发送 PING 和 PONG 消息,交换集群信息,使得集群信息得以同步。

Gossip 的优点:

快速收敛: Gossip 协议能够快速传播信息,确保集群状态的迅速更新。

降低网络负担: 由于信息是以随机节点间的对话方式传播,避免了集中式的状态查询,从而降低了网络流量。

6.Redis 集群会出现脑裂问题吗?

Redis 集群存在脑裂问题的风险,特别是在网络分区的情况下,可能会导致同一集群内出现多个主节点,导致数据不一致。

什么是脑裂
  • 脑裂是指在分布式系统中,由于网络分区或其他问题导致系统中的多个节点( 特别是主节点 )误以为自己是唯一的主节点。这种情况会导致多个主节点同时提供写入服务,从而引起数据不一致。

  • 分布式系统就像一个团队在干活,如果发生了脑裂,就好比这个团队突然因为某些原因,比如通信出了问题,分成了几个小团体。

  • 每个小团体都以为自己是整个团队,都在按自己的方式工作。这样一来,数据也可能变得不一致,服务也变得不正常了,这就是分布式系统中的脑裂

  • 导致脑裂出现原因主要是网络分区

Redis 中的脑裂

例如发生了网络分区,主节点与哨兵、从节点分区了。

哨兵发现联系不上主节点,于是发起选举,选了新的主节点,此时 Redis 就出现了两个主节点

7.Redis 中如何避免脑裂问题的发生呢?

主要是通过 Redis 的配置文件中的两个参数

  • min-slaves-to-write: 设置主节点在至少有指定数量的从节点确认写操作的情况下才执行写操作

  • min-salves-max-lag: 设置从节点的最大延迟(以秒为单位),如果从节点的延迟超过这个值,则该从节点不会被计入min-slaves-to-write的计数中

举个例子: 当 min-slaves-to-write设置为2,min-slaves-max-lag 设置为 10 秒时,主节点只有在至少有 2 个从节点延迟不超过 10 秒的情况下才会接受写操作。

  • 这两个参数使得发生脑裂时,若某个主节点跟随的从节点数量不够或延迟较大,就无法被写入,能避免脑裂导致的数据不一致。

  • 建议集群部署奇数个节点,例如集群数为5,那么可以设置min-slaves-to-write 为3,min-slaves-max-lag为5-10秒

653.脑裂问题能完全避免吗?

并不能。即使配置了以上两个参数也可能会因为脑裂导致数据不一致。

举个例子,假设某个主节点临时出了问题,哨兵判断它主观下线,然后开始发起选举

在选举进行的时候,主节点恢复了,此时它还是跟着很多从节点,假设min-slaves-max-lag配置了10s,可能此时从节点和主节点延迟的时间才 6s,因此此时主节点还是可以被写入。

而等选举完毕了,选出新的主节点,旧的主节点被哨兵操作需要 salveof 新主,此时选举时间内主节点写入的数据会被覆盖了(新主和其存在数据冲突 ),因此就导致了数据不一致的问题。

相关文章:

Redis集群哨兵相关面试题

目录 1.Redis 主从复制的实现原理是什么? 详解 补充增量同步 replication buffer repl backlog buffer 2.Redis 主从复制的常见拓扑结构有哪些? 3.Redis 复制延迟的常见原因有哪些? 4.Redis 的哨兵机制是什么? 主观下线和客观下线 哨兵leader如何选出来的&#x…...

【CXX-Qt】4.1 extern “RustQt“

QObjects Properties Methods Signals #[cxx_qt::bridge] mod ffi {extern "RustQt" {} }extern “RustQt” 部分是 CXX-Qt 桥接的核心&#xff0c;用于声明 Rust 类型和签名&#xff0c;使其可用于 Qt 和 C。 CXX-Qt 代码生成器使用你的 extern “RustQt” 部…...

当 0 编程基础,用 ChatGPT 和 Cursor 开发同一应用时… |AI 开发初体验

求人不如求己。 事情是这样的&#xff0c;前段时间&#xff0c;我看了本书&#xff0c;书里介绍了款应用&#xff0c;能计算财富自由价格&#xff0c;还能制定退休计划。 结果&#xff0c;我迫不及待去下载这个应用时&#xff0c;发现这应用功能残缺&#xff0c;完全不可用。 …...

如何排查C++程序的CPU占用过高的问题

文章目录 可能的原因程序设计的BUG系统资源问题恶意软件硬件问题 通常步骤一个简单的问题代码在windows平台上如何排查Windows Process ExplorerWinDBG 在Linux平台如何排查使用TOP GDBPerf 可能的原因 程序设计的BUG 有死循环低效算法与数据结构滥用自旋锁频繁的系统调用&a…...

数据库练习

完善t_hero表 -- 添加作者字段 alter table t_hero add author varchar(100);-- 更新数据update t_hero set author "曹雪芹" where id 1; update t_hero set author "曹雪芹" where id 2; update t_hero set author "曹雪芹" where id…...

nodejs-原型污染链

还是老规矩&#xff0c;边写边学&#xff0c;先分享两篇文章 深入理解 JavaScript Prototype 污染攻击 | 离别歌 《JavaScript百炼成仙》 全书知识点整理-CSDN博客 Ctfshow web入门 nodejs篇 web334-web344_web334 ctfshow-CSDN博客 334-js审计 var express require(expr…...

无人机与AI技术结合的突破性应用场景

1. 自主导航与动态避障 技术栈&#xff1a;SLAM 强化学习 (PPO算法) 代码示例&#xff08;Python PyTorch&#xff09;&#xff1a; import torch class DronePPO(torch.nn.Module):def __init__(self):super().__init__()self.actor torch.nn.Sequential(torch.nn.Linear…...

jsBridge在vue中使用

创建jsBridge.js /* eslint-disable */ function connectWebViewJavascriptBridge (callback) {if (window.WebViewJavascriptBridge) {callback(window.WebViewJavascriptBridge)} else {document.addEventListener(WebViewJavascriptBridgeReady, function () { callback(wi…...

Windows下docker使用教程

docker安装 镜像制作镜像加载容器创建更新镜像导出镜像 Windows10安装dockerdocker image制作docker 镜像加载docker 容器创建更新imageimage 导出为.tar文件 #以Windows10 、11为例 linux和Windows区别在于docker安装的程序是哪个操作系统的&#xff0c;后面的内容其实不变 …...

iOS:GCD信号量、同步、异步的使用方法

信号量的详细用法&#xff0c;可以用此方法进行队列管理 -(void)dispatchSignal{//crate的value表示&#xff0c;最多几个资源可访问dispatch_semaphore_t semaphore dispatch_semaphore_create(3);dispatch_queue_t quene dispatch_get_global_queue(DISPATCH_QUEUE_PRIORI…...

Nginx相关漏洞解析

一、CRLF注入漏洞 原理&#xff1a;Nginx将传入的url进行解码&#xff0c;对其中的%0a%0d替换成换行符&#xff0c;导致后面的数据注入至头部&#xff0c;造成CRLF 注入漏洞 1、开环境 2、访问网站&#xff0c;并抓包 3、构造请求头 %0ASet-cookie:JSPSESSID%3D1 这样就可以…...

SpringCloud构建一个服务步骤

Spring Cloud是一个用于构建分布式系统的开源框架&#xff0c;可以帮助开发者快速构建各种云原生应用。下面是一个简单的步骤&#xff0c;展示如何使用Spring Cloud构建一个服务&#xff1a; 创建一个Spring Boot项目&#xff1a;首先需要创建一个Spring Boot项目作为基础。可以…...

MySQL中怎么分析性能?

MySQL中主要有4种方式可以分析数据库性能&#xff0c;分别是慢查询日志&#xff0c;profile&#xff0c;Com_xxx和explain。 慢查询日志 先用下面命令查询慢查询日志是否开启&#xff0c; show variables like slow_query_log;# 一般默认都是以下结果 ---------------------…...

MinGW与使用VScode写C语言适配

压缩包 通过网盘分享的文件&#xff1a;MinGW.zip 链接: https://pan.baidu.com/s/1QB-Zkuk2lCIZuVSHc-5T6A 提取码: 2c2q 需要下载的插件 1.翻译 找到VScode页面&#xff0c;从上数第4个&#xff0c;点击扩展&#xff08;以下通此&#xff09; 搜索---Chinese--点击---安装--o…...

k8s存储介绍(五)PV与PVC

在 Kubernetes&#xff08;k8s&#xff09;中&#xff0c;持久化存储&#xff08;Persistent Storage&#xff09;是一个非常重要的概念&#xff0c;因为 Pod 本身是无状态的&#xff0c;重启后会丢失数据。为了支持有状态应用&#xff0c;Kubernetes 提供了持久化存储的机制&a…...

LangChain开发(五)消息管理与聊天历史存储

文章目录 消息存储在内存使用单参数session_id配置会话唯一键 消息持久化到redis安装redis依赖安装redis调用聊天接口&#xff0c;看Redis是否存储历史记录 裁剪消息总结记忆源码地址参考资料 消息存储在内存 我们展示一个简单的示例&#xff0c;其中聊天历史保存在内存中&…...

HTML 表单处理进阶:验证与提交机制的学习心得与进度(一)

引言 在前端开发的广袤领域中&#xff0c;HTML 表单处理堪称基石般的存在&#xff0c;是构建交互性 Web 应用不可或缺的关键环节。从日常频繁使用的登录注册表单&#xff0c;到功能多样的搜索栏、反馈表单&#xff0c;HTML 表单如同桥梁&#xff0c;紧密连接着用户与 Web 应用…...

【文献25/03/26】Hyperspectral Image Transformer Classification Networks

高光谱图像Transformer分类网络 Hyperspectral Image Transformer Classification Networks | IEEE Journals & Magazine | IEEE Xplore 摘要 高光谱图像&#xff08;HSI&#xff09;分类是地球观测任务中的一项重要工作。 卷积神经网络&#xff08;CNN&#xff09;凭借…...

数字转换(c++)

【题目描述】 如果一个数 xx 的约数和 yy &#xff08;不包括他本身&#xff09;比他本身小&#xff0c;那么 xx 可以变成 yy &#xff0c;yy 也可以变成 xx 。例如 44 可以变为 33 &#xff0c;11 可以变为 77 。限定所有数字变换在不超过 nn 的正整数范围内进行&#xff0c;…...

WPF ContentPresenter详解2

ContentPresenter与ContentControl的区别 ContentControl 和 ContentPresenter 是 WPF 中两个相关的控件&#xff0c;但它们在用途和功能上有一些关键的区别。理解这两者的区别和联系有助于更好地设计和开发用户界面。 1. 类层次结构 ContentControl&#xff1a;位于 WPF 控件…...

【git】认识git的本地仓库

1.创建本地仓库 git init2. 配置本地仓库 git config user.name xxx git config user.email xxx3. 认识本地仓库 创建完本地仓库后&#xff0c;目录下会有一个.git文件&#xff0c;这个就是本地仓库 而创建本地仓库的目录叫做工作区&#xff0c;我们不能对.git文件进行任何手…...

正则表达式基本语法和Java中的简单使用

先来个例子 public static final Pattern CHINESE_PATTERN Pattern.compile("[\\u4e00-\\u9fa5]"); / 检测字符串是否包含汉字 String text "Hello 世界"; boolean hasChinese CHINESE_PATTERN.matcher(text).find(); // 返回 true// 提取所有汉字 Mat…...

【大模型】什么是循环神经网络(RNNs)

在人工智能&#xff08;AI&#xff09;的世界里&#xff0c;**循环神经网络&#xff08;Recurrent Neural Networks, RNNs&#xff09;**是一种非常强大的工具&#xff0c;特别适合处理序列数据。无论是语言、时间序列还是音乐&#xff0c;RNNs都能帮助我们理解和预测这些数据的…...

Leetcode 交错字符串

java solution class Solution {public boolean isInterleave(String s1, String s2, String s3) {//首先获取这三个字符串的长度int m s1.length();int n s2.length();int l s3.length();if(m n ! l) return false;//创建dp数组,dp[i][j]其含义是s3的前ij个字符是否可以由…...

Vue动态绑定:文本框、单选按钮、下拉列表、多选按钮

Vue 指令系列文章: 《Vue插值:双大括号标签、v-text、v-html、v-bind 指令》 《Vue指令:v-cloak、v-once、v-pre 指令》 《Vue条件判断:v-if、v-else、v-else-if、v-show 指令》 《Vue循环遍历:v-for 指令》 《Vue事件处理:v-on 指令》 《Vue表单元素绑定:v-model 指令》…...

MySQL - 数据库基础操作

SQL语句 结构化查询语言(Structured Query Language)&#xff0c;在关系型数据库上执行数据操作、数据检索以及数据维护的标准语言。 分类 DDL 数据定义语言(Data Definition Language)&#xff0c;定义对数据库对象(库、表、列、索引)的操作。 DML 数据操作语言(Data Manip…...

从入门到精通:SQL注入防御与攻防实战——红队如何突破,蓝队如何应对!

引言&#xff1a;为什么SQL注入攻击依然如此强大&#xff1f; SQL注入&#xff08;SQL Injection&#xff09;是最古老且最常见的Web应用漏洞之一。尽管很多公司和组织都已经采取了WAF、防火墙、数据库隔离等防护措施&#xff0c;但SQL注入依然在许多情况下能够突破防线&#…...

关于优麒麟ukylin如何更换清华源以及ubuntu24.04安装gcc-i686-linux-gnu找不到包的问题

打算把这个文章当成一个调试Linux bug的汇总&#xff0c;会持续更新 1、关于优麒麟ukylin如何更换清华源 &#xff08;1&#xff09;首先打开命令行&#xff0c;切换root权限 su root 输入密码 如果第一次使用ubuntu会提示密码不正确&#xff0c;输入 sudo passwd root …...

Spring Boot 自定义 Starter 组件的技术指南

1、简述 Spring Boot 通过 Starter 机制&#xff0c;让开发者可以快速集成第三方组件。在企业级开发中&#xff0c;我们常常需要封装自己的 Starter 组件&#xff0c;以提高代码复用性&#xff0c;简化配置&#xff0c;并实现可插拔的模块化开发。 Spring Boot Starter 机制 …...

基于Spring Boot的ONLY在线商城系统设计与实现的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

HarmonyOS 之 @Require 装饰器自学指南

在 HarmonyOS 应用开发工作中&#xff0c;我频繁碰到组件初始化传参校验的难题。在复杂的组件嵌套里&#xff0c;要是无法确保必要参数在构造时准确传入&#xff0c;就极易引发运行时错误&#xff0c;而且排查起来费时费力。一次偶然的机会&#xff0c;我接触到了 Require 装饰…...

【Unity】 HTFramework框架(六十三)SerializableDictionary可序列化字典

更新日期&#xff1a;2025年3月26日。 Github 仓库&#xff1a;https://github.com/SaiTingHu/HTFramework Gitee 仓库&#xff1a;https://gitee.com/SaiTingHu/HTFramework 索引 一、SerializableDictionary可序列化字典1.使用SerializableDictionary2.实现思路 二、Serializ…...

JavaScript的性能优化指导

JavaScript 的性能优化可以从多个层面入手&#xff0c;涵盖代码执行效率、内存管理、DOM 操作、网络请求等。以下是一些关键优化策略&#xff1a; 一、代码执行优化 减少作用域链查找 避免在循环中频繁访问全局变量或深层嵌套的属性&#xff0c;将其缓存到局部变量中。 // 优化…...

如何在 Vue 项目中使用v - for指令进行列表渲染,如何优化其性能?

大白话如何在 Vue 项目中使用v - for指令进行列表渲染&#xff0c;如何优化其性能&#xff1f; 在Vue项目里&#xff0c;咱们常常会碰到要把一组数据渲染成列表的状况。这时候&#xff0c;v-for指令就派上大用场啦&#xff01;它能让咱们轻松地把数据数组里的每个元素渲染成对…...

Notepad++ 替换 换行符 为 逗号

多行转一行&#xff0c;逗号分隔 SPO2025032575773 SPO2025032575772 SPO2025032575771 SPO2025032575771 SPO2025032575770为了方便快速替换&#xff0c;我们需要先知道这样类型的数据都存在哪些换行符。 点击【视图】-【显示符号】-【显示行尾符】 对于显示的行尾换行符【C…...

《基于机器学习发电数据电量预测》开题报告

个人主页&#xff1a;大数据蟒行探索者 目录 一、选题背景、研究意义及文献综述 &#xff08;一&#xff09;选题背景 &#xff08;二&#xff09;选题意义 &#xff08;三&#xff09;文献综述 1. 国内外研究现状 2. 未来方向展望 二、研究的基本内容&#xff0c;拟解…...

【Linux】MAC帧

目录 一、MAC帧 &#xff08;一&#xff09;IP地址和MAC地址 &#xff08;二&#xff09;MAC帧格式 &#xff08;三&#xff09;MTU对IP协议的影响、 &#xff08;四&#xff09;MTU对UDP协议的影响 &#xff08;五&#xff09;MTU对TCP协议的影响 二、以太网协议 &…...

企业入驻成都国际数字影像产业园,可享150多项专业服务

企业入驻成都国际数字影像产业园&#xff0c;可享150多项专业服务 全方位赋能&#xff0c;助力影像企业腾飞 入驻成都国际数字影像产业园&#xff0c;企业将获得一个涵盖超过150项专业服务的全周期、一站式支持体系&#xff0c;旨在精准解决企业发展各阶段的核心需求&#xf…...

飞速(FS)企业网布线解决方案:赋能能源行业客户高效网络部署与智能化管理

国家&#xff1a;中国 行业&#xff1a;能源与公用事业 网络类型&#xff1a;楼宇主干局域网 方案类型&#xff1a;企业网络布线 案例亮点 部署高密度、高性能飞速&#xff08;FS&#xff09;24口千兆企业级交换机&#xff0c;有效节省客户机房安装空间&#xff0c;提高并发…...

前端性能优化方案总结

首屏加载优化 把老版本的库替换成新版本&#xff0c;支持tree shaking的库&#xff0c;按需引入&#xff0c;只打包用到的部分&#xff0c;大大优化项目体积&#xff0c;加快项目的首屏渲染。 能不用第三方库&#xff0c;就不用第三方库&#xff0c;比如时间格式化&#xff0c;…...

基于ADMM无穷范数检测算法的MIMO通信系统信号检测MATLAB仿真,对比ML,MMSE,ZF以及LAMA

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 ADMM算法 4.2 最大似然ML检测算法 4.3 最小均方误差&#xff08;MMSE&#xff09;检测算法 4.4 迫零&#xff08;ZF&#xff09;检测算法 4.5 OCD_MMSE 检测算法 4.6 LAMA检测算法 …...

[plugin:vite:import-analysis] Cannot find module ‘vuex\dist\vuex.esm-bundler

我的是升级了uview-plus版本&#xff0c;导致一直报错&#xff0c;即时将版本降回去也报错&#xff0c;需要将package-lock.json和package-lock.yaml文件删掉重新安装软件包...

用Deepseek + Kimi 快速生成高质量的ppt

AI系列文章&#xff1a; AWS AI认证考试中经常提及几个重要的工具介绍 简单理解机器学习中top_k、top_p、temperature三个参数的作用 用Deepseek Kimi 快速生成高质量的ppt 在职场&#xff0c;不管干什么&#xff0c;都少不了和 PPT 打交道&#xff1a;客户交流&#xff0c…...

【Go万字洗髓经】Golang中sync.Mutex的单机锁:实现原理与底层源码

本章目录 1. sync.Mutex锁的基本用法2. sync.Mutex的核心原理自旋到阻塞的升级过程自旋CAS 饥饿模式 3. sync.Mutex底层源码Mutex结构定义全局常量Mutex.Lock()方法第一次CAS加锁能够成功的前提是&#xff1f;竞态检测 Mutex.lockSlow()lockSlow的局部变量自旋空转state新值构造…...

Maven入门

1、简介 Apache Maven是一个项目管理及自动构建工具&#xff0c;由Apache软件基金会所提供。基于项目对象模型&#xff08;缩写&#xff1a;POM&#xff09;概念&#xff0c;Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。 2、作用 1&#xff09;依赖导…...

SpringCloud Stream:消息驱动的微服务架构设计

文章目录 引言一、Spring Cloud Stream基础概念二、核心组件和架构三、消息生产者实现四、消息消费者实现五、消息分组与持久化六、消息分区与扩展七、函数式编程模型八、错误处理与重试机制九、测试与监控总结 引言 在当今复杂的分布式系统环境中&#xff0c;微服务架构已经成…...

进程通信(进程池的模拟实现) read write函数复习 Linux ─── 第23课

目录 进程池(process pool) 第一步: 创建并初始化processpool 第二步:主进程对子进程派发任务 补充: 第三步: 子进程执行完退出进程池 回收子进程 进程池的实现 Channel.hpp ProcessPool.hpp Task.hpp main.cc makefile 匿名管道的应用: 进程池 进程池(process po…...

Docker技术全景解析

一、Docker是什么 1.1 定义 Docker是一种容器化技术平台&#xff0c;它通过操作系统级别的虚拟化&#xff0c;将应用程序及其依赖打包成标准化的可移植单元&#xff08;容器&#xff09;。这种技术实现了&#xff1a; 环境一致性&#xff1a;消除“在我机器上能跑”的问题进…...

23种设计模式-状态(State)设计模式

状态设计模式 &#x1f6a9;什么是状态设计模式&#xff1f;&#x1f6a9;状态设计模式的特点&#x1f6a9;状态设计模式的结构&#x1f6a9;状态设计模式的优缺点&#x1f6a9;状态设计模式的Java实现&#x1f6a9;代码总结&#x1f6a9;总结 &#x1f6a9;什么是状态设计模式…...

【计算机网络运输层详解】

文章目录 一、前言二、运输层的功能1. 端到端通信2. 复用与分用3. 差错检测4. 流量控制5. 拥塞控制 三、运输层协议&#xff1a;TCP 和 UDP1. TCP&#xff1a;面向连接的可靠传输协议2. UDP&#xff1a;无连接的传输协议 四、端口号与进程通信1. 端口号分类2. 端口通信模型 五、…...