自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(86)
  • 收藏
  • 关注

原创 【LeetCode】栈和队列相关算法

特性栈(Stack)队列(Queue)数据顺序后进先出(LIFO)先进先出(FIFO)操作端仅栈顶(单端操作)队尾入、队头出(双端操作)操作push:元素压入栈顶(添加)pop:移除栈顶元素(删除)peek/top:查看栈顶元素(不删除)isEmpty:检查栈是否为空enqueue/push:元素加入队尾(添加)dequeue/pop:移除队头元素(删除)front/peek:查看对头元素(不删除)isEmpty:检查队列是否为空。

2025-08-15 16:44:33 1110

原创 【LeetCode】二叉树相关算法题

结构含义节点结构二叉树由节点组成, 每个节点包含一个数据元素和最多两个子节点:左子节点和右子节点根节点树的顶部节点称为根节点,是访问整个树的起点叶节点没有子节点的节点成为叶节点子树每个节点及其后代构成一个子树。

2025-08-15 16:44:13 568

原创 【LeetCode】哈希相关算法题

哈希算法是一种将任意长度的输入数据通过特定计算转换为固定长度输出(哈希值)的算法,常见的哈希算法包括MD5、SHA系列等,安全性要求不同的场景会选择不同强度的算法。

2025-07-29 11:34:17 1167

原创 【LeetCode】前缀表相关算法

前缀表是一种在字符串匹配算法(特别是KMP算法)中使用的数据结构,用于高效地搜索模式字符串在文本中的出现位置。它通过预处理模式字符串来存储关键信息,从而避免在匹配失败时进行不必要的回溯。

2025-07-29 11:33:45 452

原创 【Leetcode】前缀和相关算法题

前缀和是一种空间换时间的预处理技术,用于高效处理静态数组的区间求和查询。其核心思想为构建辅助数组存储从起始点到每个位置的所有元素之和,将任意区间和转化为两个前缀和的差值。

2025-07-16 15:18:31 497

原创 【LeetCode】链表相关算法题

链表是一种基础而强大的线性数据结构,其核心思想是通过节点和指针构建数据序列。与数组不同,链表中的元素在内存中非连续存储,每个节点包含数据和指向下一节点的指针。

2025-07-16 15:17:57 410

原创 【LeetCode】螺旋矩阵相关算法题

螺旋矩阵是一种将矩阵元素按螺旋顺序输出的算法,其核心思想是模拟螺旋遍历路径:从矩阵左上角开始,按照右 -> 下 -> 左 -> 上 的顺序循环遍历,同时逐渐缩小遍历边界。

2025-07-08 15:47:46 334

原创 【辅助工具】Mermaid语法规则详解

Mermaid是一种基于文本的图表绘制工具,使用简单的标记语言生成各种图表。下面将详细介绍Mermaid的核心语法规则,特别是流程图的语法。A[普通] --> B[特殊]转换之后的图为:fill:#333;color:#333;color:#333;fill:none;important;important;important;important;important;important;important;important;普通特殊。

2025-07-08 15:46:38 2045

原创 【LeetCode】滑动窗口相关算法题

滑动窗口算法是一种高效处理数组/字符串子序列化问题的技术,它通过维护一个动态的窗口来避免不必要的重复计算。

2025-06-27 18:31:50 456

原创 【Linux】nmcli设置bond

nmcli是NetworkManager提供的网络管理工具,nmcli设置的bond可以持久化,因为会写入配置文件,下面我们就来通过nmcli来配置bond聚合口。

2025-06-25 09:36:32 840

原创 【linux】network服务启动网卡流程

network服务的核心由/etc/sysconfig/network-scripts/下一堆脚本配置来生效,其中启动网卡就是通过ifup脚本来实现的,下面就讲一下ifup如何恢复ip和route的流程。

2025-06-25 09:36:09 734

原创 【Linux】通过network设置bond

network服务的工作核心是/etc/sysconfig/network-scripts下一堆脚本配置,我们可以通过ifcfg配置文件来配置bond信息,通过重启network服务来生效。

2025-06-24 16:05:05 319

原创 【Linux】使用ip link命令设置bond

设置bond的方法有很多种,其中通过命令行ip link设置就是其中一种,只不过这种设置方式不会持久化,当重启服务器或重启网络服务就会失效。

2025-06-24 15:14:08 788

原创 【Linux】路由持久化

设置路由可以通过ip route add命令去设置,不过这种方式设置的路由是临时的,当重启服务器或重启网络服务后设置的路由就会丢失,下面提供几种路由持久化的方法。

2025-06-20 18:15:13 610

原创 【Linux】network网络配置

linux中network网络服务的核心配置位于/etc/sysconfig/network-scripts/目录下。它们共同构成了网络接口的管理框架,负责处理网络接口的启动(ifup)和关闭(ifdown)过程。

2025-06-20 17:33:26 959

原创 【LeetCode】双指针相关算法题

双指针算法是一种在数组、链表、字符串等线性数据结构中广泛使用的技巧。它的核心思想是使用两个指针(或索引)以不同的速度、不同的放行或不同的起始位置在数据结构上移动,根据指针所指元素之间的关系来更新指针位置或得出答案,避免不必要的嵌套循环(通常可以将 O(n²) 的时间复杂度优化到 O(n) 或 O(n log n))。

2025-06-19 21:12:42 270

原创 【LeetCode】二叉树相关算法题

LeetCode第34题,题目如下:给一个按照非递减顺序排列的整数数组nums,和一个目标值target。请找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1, -1]。设计并实现时间复杂度为O(log n)的算法来解决问题。

2025-06-10 20:45:10 687

原创 【Kafka】kafka架构

这种架构设计使kafka能够支持高吞吐量(百万级消息/秒)、低延迟(毫秒级)的消息处理,同时保证高可用性和水平扩展能力,成为现代分布式系统中广泛采用的消息中间件解决方案。3、每个段包含两个文件:.log文件存储实际消息、.index文件存储消息偏移量索引。1、生产者(Producer):负责创建并发布消息到kafka集群的客户端应用程序。2、消费者(Consumer):订阅主题并处理消息的客户端应用程序。2、日志管理器(Log Manager):负责消息的物理存储和检索。

2025-06-08 00:33:18 635

原创 【Kafka】消息队列

1、生产者(Producer):创建并发送消息的应用程序。2、消费者(Consumer):接收并处理消息的应用程序。5、代理(Broker):管理队列的中间件服务。3、消息(Message):传输的数据单元。1、异步通信:生产者和消费者不需要同时在线。4、队列(Queue):存储消息的缓冲区。1、消息顺序:保证消息处理的顺序性。1、合理设置消息TTL(生存时间)1、一个消息只能被一个消费者消费。1、异步处理(如发送邮件、短信)3、消息堆积:消费者处理能力不足。5、监控管理:消息跟踪和监控。

2025-06-08 00:25:06 372

原创 【Redis】缓存雪崩、缓存击穿、缓存穿透

大量缓存数据在同一时间失效,导致所有请求直接打到数据库,引发数据库瞬时高负载甚至崩溃某个热点key突然失效,大量并发请求直接穿透到数据库,导致数据库压力激增查询不存在的数据(如非法ID、恶意攻击),导致请求绕过缓存直接访问数据库问题触发条件核心解决方案缓存雪崩大量key同时失效差异化TTL、多级缓存、熔断降级缓存击穿单个热点key失效互斥锁、逻辑过期、预加载缓存穿透查询不存在的数据布隆过滤器、控制缓存、参数校验。

2025-06-07 10:14:52 613

原创 【Redis】数据库与缓存一致性

数据库与缓存一致性是指当数据同存在于数据库和缓存中时,如何确保两者数据保持同步,避免出现数据不一致的情况。1、缓存击穿后并发重建:使用互斥锁防止多个请求同时重建缓存。2、主从延迟:主库更新后从库可能还未同步,导致读取到旧数据。2、设置合理的缓存过期时间:即使不一致也有自动恢复机制。2、读请求可能在删除后、更新前将旧数据加载到缓存。2、并发操作问题:多个请求同时操作数据库和缓存。1、写入顺序问题:先更新数据库还是先更新缓存。2、未命中则查数据库,写入缓存后返回。2、但删除缓存失败会导致不一致。

2025-06-07 10:14:24 715

原创 【Redis】哨兵模式

Redis哨兵模式(Sentinel)是Redis官方提供的高可用性(HA)解决方案,用于监控和管理Redis主从架构,实现自动故障检测、主从切换和配置更新。2、Redis主从集群:至少包含1个主节点和若干个从节点(建议至少2个从节点)1、监控:持续检测主节点(master)和从节点(replica)的运行状态。3、仲裁机制:通常部署3个或以上哨兵节点(避免单节点故障,基于多数投票决策)2、自动故障转移:当主节点不可用时,哨兵会选举一个从节点晋升为新主节点。2、监控哨兵进程本身(避免哨兵单节点故障)

2025-06-06 11:15:40 921

原创 【Redis】Cluster集群

2、若不在,且该槽的迁移未在进行中时,返回MOVED [slot] [target-node:port]错误,客户端需缓存槽与节点的映射关系。1、主节点故障检测:其它节点通过心跳检测超时标记节点为PFAIL,超过半数主节点确认后标记为FAIL。每个主节点可以配置多个从节点,主节点故障时,从节点通过选举晋升为新主节点(基于Raft协议)2、从节点晋升:从节点发起选举,获取多数主节点投票后晋升为新主节点。2、从节点:复制主节点数据,故障时替换主节点。1、主节点:处理读写请求,管理分配的哈希槽。

2025-06-06 11:15:10 762

原创 【Redis】内存淘汰策略

2、无过期键的影响:volatile-*策略在无键设置TTL时会退化为noeviction。适用于对数据一致性要求极高的场景,确保不会因淘汰策略丢失数据。仅从设置了过期时间(TTL)的键中淘汰最近最少使用的键。适用于需要缓存热点数据的场景,优先保留最近访问频繁的键。适用于部分数据有TTL的场景,优先淘汰不常用的过期键。仅从设置了过期时间的键中淘汰访问频率最低的键。从所有键中淘汰最近最少使用(LRU)的键。仅从设置了过期时间的键中随机淘汰。从所有键中淘汰访问频率最低的键。从所有键中随机淘汰键。

2025-06-05 10:27:30 602

原创 【Redis】主从复制

1、主节点(Master):可读写,数据变更的来源2、从节点(Slave/Replica):只读,复制主节点数据。

2025-06-05 10:26:38 1145

原创 【Golang】使用gin框架导入excel和csv文件

批量导入数据是项目中很常见的一个功能,通常大量的数据以表格的形式存储再导入,本篇文件就讲一下通过go库导入excel和csv文件功能。

2025-06-04 09:43:13 385

原创 【Redis】过期删除策略

策略触发条件优点缺点惰性删除键被访问时检查cpu友好,简单高效可能内存泄漏定期删除周期性随机检查减少内存泄漏非实时,依赖配置。

2025-06-04 09:42:30 425

原创 【Redis】大key对持久化的影响

2、fork延迟:BGSAVE需要fork子进程,大key会导致fork操作耗时增加(尤其在虚拟内存较大的实例中)4、版本选择:使用redis 4.0+版本,其改进的lazy-free机制可降低大key删除对持久化的影响。2、内存消耗:重写期间会创建子进程,大key导致内存占用翻倍(Copy-on-Write机制)1、追加延迟:每次修改大key都会生成较大的AOF记录,导致AOF文件膨胀。1、混合文件体积大:RDB部分包含大key会导致整个AOF文件头部膨胀。

2025-06-03 11:59:01 498

原创 【Golang】使用gin框架导出excel和csv文件

项目中可能会遇到导入导出一批数据的功能,对于批量大数据可能用表格的方式直观性更好,所以本篇文件来讲一下go中导出excel和csv文件的方式。下载excel文件,浏览器上输入。

2025-06-03 11:57:42 918

原创 【Redis】RDB和AOF混合使用

在Redis中,RDB(Redis Database)和AOF(Append-Only File)是两种不同的持久化机制,可以单独使用,也可以混合使用以结合两者的优势。1、AOF文件中包含RDB数据:定期生成RDB快照并写入AOF文件头部,后续操作仍以AOF格式追加。3、重启恢复:先加载RDB部分快速恢复基础数据,再重放AOF增量命令保证数据完整性。生成某个时间点的数据快照,文件紧凑、恢复速度快,但可能丢失最后一次快照后的数据。1、触发RDB快照:通过BGSAVE生成RDB数据,写入AOF文件头部。

2025-05-29 16:22:28 871

原创 【Redis】大key问题详解

在redis中,大key通常指以下三种情况之一:1、value过大:单个key的value体积过大(如字符串值超过10KB,集合/列表/哈希/有序集合元素过多)2、元素过多:集合类型(hash/list/set/zset)中包含大量元素(如超过5000个元素)3、结构复杂:key对应的数据结构嵌套过深或过于复杂。

2025-05-29 16:22:03 1047

原创 【Redis】AOF重写策略与后台重写机制

2、(当前AOF大小 - 上次重写AOF大小) / 上次重写后AOF大小 ≥ auto-aof-rewrite-min-size。1、当前AOF文件大小 > auto-aof-rewrite-percentage。5、子进程完成时,主进程将重写缓冲区内容追加到新文件,原子性替换旧AOF文件。1、创建临时文件temp-rewriteaof-bg-[pid].aof。4、主进程继续服务,将新命令写入常规AOF缓冲区,同时写入重写缓冲区。1、重写后的AOF文件前半部分是RDB格式的快照。

2025-05-22 11:24:23 902

原创 【Redis】RDB快照

RDB(Redis Database)是redis默认的持久化方式,它通过创建内存数据的快照来实现持久化。RDB文件是个经过压缩的二进制文件,包含了redis在某个时间点的完整数据状态。同步保存(阻塞式,不推荐在生产环境使用,会导致redis阻塞直到RDB文件创建完成)异步保存(后台保存,推荐使用方式,redis会fork子进程进行保存)3、子进程将内存数据写入临时RDB文件,完成后替换旧RDB文件。2、主从复制时,从库首次同步会触发主库执行BGSAVE。2、fork()创建子进程(使用写时复制技术)

2025-05-22 11:23:49 946

原创 【Redis】AOF日志

AOF(Append Only File)是redis提供的持久化机制之一,它通过记录所有修改数据库状态的写命令来实现数据库持久化。1、命令记录:当AOF开启时,redis会将每个写命令追加到AOF缓冲区。2、everysec(默认):每秒同步一次,平衡安全性和性能。1、always:每个写命令都同步到磁盘,最安全但性能最低。3、no:由操作系统决定同步时机,性能最好但是可能丢失数据。2、文件同步:根据配置策略将缓冲去内容写入AOF文件。3、文件重写:定期执行AOF重写以压缩文件大小。

2025-05-21 14:58:39 689 1

原创 【Redis】AOF日志的三种写回机制

redis的AOF(Append Only File)持久化提供了三种不同的写回策略,通过appendfsync配置项来控制,这三种策略在数据安全性和性能之间提供了不同的权衡选择。3、主线程不阻塞,后台线程每秒检查一次缓冲区,缓冲区有数据就执行fsync()同步到磁盘。1、每次写入命令后立即执行fsync,将数据同步到磁盘。2、确保每个写命令都持久化到磁盘后才返回成功响应。3、立即调用fsync()将缓冲区内容写入磁盘。2、命令追加到AOF缓冲区。2、命令追加到AOF缓冲区。2、命令追加到AOF缓冲区。

2025-05-21 14:58:22 786

原创 【Redis】哈希表结构

redis中的hashtable(哈希表)是一种高效的键值对存储结构,主要用于实现redis的字典类型,接下来就来讲解一下hashtable(redis版本6.2.18)的底层实现。在redis的hashtable实现中,哈希冲突发生在两个或多个不同的键(key)被哈希函数映射到同一个哈希桶(bucket)的情况。1、扩容条件:当负载因子(哈希表已使用的节点数量/哈希表大小)> 1时,且服务器没有执行RDB快照或AOF重写。1、哈希函数的输出空间(哈希值范围)通常小于输入空间(可能的键数量)

2025-05-20 18:24:14 1429

原创 【Redis】跳表结构

redis中的跳表是一种有序数据结构,主要用于实现有序集合(zset)。跳表通过多级索引实现高效查找(平均O(logN)时间复杂度),同时保持插入和删除的高效性,下面就来讲解一下跳表(redis版本6.2.18)的底层结构。2、性能:与红黑树的查找/插入均为O(logN),但跳表更适合并发场景(Redis6.0后支持多线程)1、查找:从高层开始向右遍历,若下一节点分值大于目标值,则下降一层。1、平衡性:相比红黑树,跳表实现更简单,且支持范围查询。2、插入:随机生成节点层数,更新前后指针和跨度。

2025-05-20 18:23:53 736

原创 【Redis】整数集合结构

1、encoding属性值为INTSET_ENC_INT16,那么contents就是一个int16_t类型的数组,数组中每一个元素的类型都是int16_t。2、encoding属性值为INTSET_ENC_INT32,那么contents就是一个int32_t类型的数组,数组中每一个元素的类型都是int32_t。3、encoding属性值为INTSET_ENC_INT64,那么contents就是一个int64_t类型的数组,数组中每一个元素的类型都是int64_t。

2025-05-19 11:28:08 577

原创 【Redis】快速列表结构

向quicklist添加一个元素的时候,不会像普通的链表那样直接新建一个链表节点,而是会检查插入位置的压缩列表是否能够容纳该元素,如果能容纳就直接保存到quicklistNode结构里的压缩列表里,如果不能容纳,才会建一个新的quicklistNode结构。redis的quicklist(快速列表)是一个双向链表,其中每个节点都是一个ziplist(压缩列表)。这中结构结合了双向链表和压缩列表的优点,在内存使用和性能之间取得了平衡,接下来就来熟悉一下redis(6.2.18版本)的底层结构实现。

2025-05-19 11:26:24 388

原创 【Redis】双向链表结构

新版本使用快速列表,接下来就来讲一下redis(6.2.18版本)双向链表的底层结构。redis的list类型在旧版本数据量小的时候用的压缩列表,数据量大的时候用。

2025-05-15 18:13:03 385

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除