- 博客(43)
- 收藏
- 关注
原创 [redis进阶六]详解redis作为缓存&&分布式锁
缓存(cache)是计算机中的⼀个经典的概念.在很多场景中都会涉及到.核⼼思路就是把⼀些常⽤的数据放到触⼿可及(访问速度更快)的地⽅,⽅便随时读取.对于计算机硬件来说,往往访问速度越快的设备,成本越⾼,存储空间越⼩.缓存是更快,但是空间上往往是不⾜的.因此⼤部分的时候,缓存只放⼀些热点数据(访问频繁的数据),就⾮常有⽤了.在⼀个分布式的系统中,也会涉及到多个节点访问同⼀个公共资源的情况.此时就需要通过锁来做互斥控制,避免出现类似于"线程安全"的问题.
2025-05-12 08:37:17
931
原创 [redis进阶五]万字详解分布式系统之集群
上述的哨兵模式,提⾼了系统的可⽤性.但是真正⽤来存储数据的还是master和slave节点.所有的数据都需要存储在单个master和slave节点中.如果数据量很⼤,接近超出了master/slave所在机器的物理内存,就可能出现严重问题了.如何获取更⼤的空间?加机器即可!所谓"⼤数据"的核⼼,其实就是⼀台机器搞不定了,⽤多台机器来搞.Redis 的集群就是在上述的思路之下,引⼊多组Master/Slave,每⼀组Master/Slave存储数据全集的。
2025-05-12 08:36:45
831
原创 [redis进阶四]分布式系统之哨兵(2)
上述过程,都是"⽆⼈值守",Redis⾃动完成的.这样做就解决了主节点宕机之后需要⼈⼯⼲预的问题,提⾼了系统的稳定性和可⽤性.哨兵节点不能只有⼀个.否则哨兵节点挂了也会影响系统可⽤性.哨兵节点最好是奇数个.⽅便选举leader,得票更容易超过半数.哨兵节点不负责存储数据.仍然是redis主从节点负责存储.哨兵+主从复制解决的问题是"提⾼可⽤性",不能解决"数据极端情况下写丢失"的问题。
2025-05-11 00:37:51
851
原创 [redis进阶四]分布式系统之哨兵(1)
为什么要有哨兵机制?肯定是我们的主从复制机制有缺陷,是的由于我们在主从复制中,遇到主节点挂了的情况,我们就没办法提供 "写" 服务,只有从节点能够进行 "读" 服务,并且我们的从节点没办法自动升级成为主节点,所以就有大佬想出来了哨兵机制,哨兵机制能够在主节点挂了的情况下,通过投票选举的方式从众多从节点中挑一个从节点升级为主节点。Redis Sentinel 相⽐于主从复制模式是多了若⼲(建议保持奇数)Sentinel节点⽤于实现监控数据节点,哨兵节点会定期监控所有节点(包含数据节点和其他哨兵节点)。
2025-05-11 00:37:09
1695
原创 [redis进阶三]分布式系统之主从复制结构(3)
并响应 +CONTINUE 给从节点。6)主节点将需要从节点同步的数据发送给从节点,最终完成⼀致性。根据统计指标,可算出复制积压缓冲区内的可⽤偏移量范围:[repl_backlog_first_byte_offset, repl_backlog_first_byte_offset + repl_backlog_histlen]。2. 从节点在配置⽂件中加⼊ slaveof 主节点ip 主节点端⼝ 的形式即可.1. Redis 通过复制功能实现主节点的多个副本。4. 复制分为全量复制, 部分复制和实时复制。
2025-05-11 00:36:35
1014
原创 [docker基础四]容器虚拟化基础之 LXC
安装前执行检查看下是否需要卸载,如果需要卸载,执行下面的命令完成卸载,不需 要直接到第 2 步。变成 STOPPED 状态只是停止运行,想要彻底销毁还是需要 destory 命令。容器状态由 STIPPED ->RUNNING 从停止变成运行中。STOPPED表示容器只是创建出来但是还没启动。
2025-05-10 14:07:30
1141
1
原创 [docker基础三]CGroups资源控制实战
cgroups(Control Groups) 是 linux 内核提供的一种机制,简单说, cgroups 可以限制、记录任务组所使用的物理资源。本质上来说, cgroups 是内核附加在程序上的一系列钩子(hook),通过程序运行时对资源的调度触发相应的钩子以达到资源追踪和限制的目的。
2025-05-10 13:57:59
668
原创 [docker基础二]NameSpace隔离实战
借助 mount 隔离把挂载点完成了一个隔离,挂载点一旦隔离,想象一下在每个 mount 出来的目录下放入应用程序需要的所有程序,再放入所需要的操作系统所需要的文件,完成了一个操作系统隔离的最简单的沙箱。
2025-05-09 09:09:14
1087
原创 [docker基础一]docker简介
总结:虚拟化就是把一台物理计算机切分成很多逻辑计算机容器化就是虚拟化的一种技术,主要虚拟的是操作系统层面实际的服务器或者计算机。相对于虚拟机而言的对实体计算机的称呼。物理 机提供给虚拟机以硬件环境,有时也称为“寄主”或“宿主”。是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上 同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都 可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
2025-05-09 09:08:29
886
原创 [redis进阶三]分布式系统之主从复制结构(2)
答案:说白了就是若干个结点之间,按照啥样的方式来进行组织连接Redis 的复制拓扑结构可以⽀持单层或多层复制关系,根据拓扑复杂性可以分为以下三种:⼀主⼀ 从、⼀主多从、树状主从结构。
2025-04-14 19:29:15
1083
原创 【redis进阶三】分布式系统之主从复制结构(1)
进阶二内容如下:(1)介绍复制的使⽤⽅式:如何建⽴或断开复制、安全性、只读等。(2) 说明复制可⽀持的拓扑结构,以及每个拓扑结构的适⽤场景。(3)分析复制的原理,包括:建⽴复制、全量复制、部分复制、⼼跳检测等。
2025-04-13 20:04:03
850
原创 [redis进阶二]redis的事务
Redis 事务本质上是在服务器上搞了⼀个"事务队列".每次客⼾端在事务中进⾏⼀个操作,都会把命令先 发给服务器,放到"事务队列"中(但是并不会⽴即执⾏) ⽽是会在真正收到EXEC命令之后,才真正执⾏队列中的所有操作.此时,key的值是多少呢?从输⼊命令的时间看,是客户端1先执⾏的set key 100.客户端2后执⾏的set key 200. 但是从实际的执⾏时间看,是客户端2先执⾏的,客户端1后执⾏的.因此,即使不保证严格的隔离性,⾄少也要告诉⽤⼾,当前的操作可能存在⻛险.
2025-04-13 20:03:44
1001
原创 [redis进阶一]redis的持久化(2)AOF篇章
AOF(AppendOnlyFile)持久化:以独⽴⽇志的⽅式记录每次写命令,重启时再重新执⾏AOF ⽂件中的命令达到恢复数据的⽬的。AOF的主要作⽤是解决了数据持久化的实时性,⽬前已经是 Redis 持久化的主流⽅式。理解掌握好AOF持久化机制对我们兼顾数据安全性和性能⾮常有帮助。1)板书如下2)开启AOF机制:开启AOF功能需要设置配置:appendonlyyes,默认不开启为no。AOF⽂件名通过 appendfilename 配置(默认是appendonly.aof)设置。
2025-04-13 20:03:12
1126
原创 [算法题:快排(一)]颜色分类
类⽐数组分两块的算法思想,这⾥是将数组分成三块,那么我们可以再添加⼀个指针,实现数组分三块。◦ [left + 1, i - 1] 内的元素都是 1;[right, numsSize - 1] 表⽰ 2 序列;◦ [i, right - 1] 内的元素是待定元素;◦ [right, n] 内的元素都是 2;
2025-04-12 19:05:49
431
原创 [redis进阶一]redis的持久化(1)RDB篇章
持久化是指将数据保存在持久存储介质(如硬盘、数据库)中,以确保数据在系统重启或关闭后仍然保持不变。持久化的概念通常应用在计算机领域,确保数据的长期存储和可靠性。在软件开发中,持久化可以是将数据写入文件、数据库或其他可靠的存储介质,而不是仅存在于内存中,以保证数据的持久性和可恢复性。总结。
2025-04-12 18:58:43
811
原创 [项目测试]负载均衡在线OJ测试
1、实现可以在线做题的系统,可以在浏览器上访问题目,编写代码,编译以及运行,并返回结果, 本项目是实现一个仿 leetcode 的 OJ (Online-Judge)系统。更准确的说应该称之为leetcode 的裁剪版。2、因为本项目只实现了leetcode中展示题目列表 + 在线测评的功能。至于leetcode中的其他功能例如:社区、论坛、求职等功能暂未实现,大家可自行进行扩展。
2025-03-12 19:24:10
984
原创 [全网最细数据结构完整版]第七篇:3分钟带你吃透队列
/Queue.h//链式结构:表示队列//指向下一个结点int _data;//数据域}QNode;//队列的结构//指向队列头部的结点//指向队列尾部的结点int _size;//队列中结点的个数}Queue;//1.队列初始化//2.队列销毁//3.队列插入数据//4.队列删除数据//5.获取队列头部数据//6.获取队列尾部数据//7.获取队列有效元素的个数//8.判断队列是否为空,空返回true,非空返回false。
2024-11-09 19:39:57
675
1
原创 [全网最完整最详细C++篇]第四篇:类和对象(上)
/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字ClassName为类的名字{}中为类的主体注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。一般情况下,更期望采用第二种方式。注意:为了方便演示使用方式一定义类,大家后序工作中尽量使用第二种。
2024-11-08 18:48:04
863
1
原创 [全网最细数据结构完整版]第六篇:3分钟带你吃透栈并模拟实现
int* _arr;//开辟在堆区上存储数据的数组int _top;//栈顶的下一个位置//栈的容量}ST;//1.栈初始化//2.栈的销毁//3.栈的插入操作//4.栈的删除操作//5.取栈顶元素//6.判断栈是否为空,空为true,非空为false//7.求栈的大小即有效元素的个数。
2024-11-08 17:07:58
382
1
原创 [蓝桥杯算法从小白到大牛]动态规划第三讲:使用最小花费爬楼梯
注意注意:在这道题中,数组内的每⼀个下标 [0, n - 1] 表⽰的都是楼层,⽽顶楼的位置其实是在 n 的位置!!!
2024-11-07 16:15:29
486
1
原创 [蓝桥杯算法从小白到大牛]动态规划第二讲:三步问题
目录1->题目链接2->题目解析3->讲解算法原理 核心流程:3.1->状态表示3.2->状态转移方程(最重要的一步)3.3->初始化3.4->填表顺序3.5->返回值4->编写代码实现5->您的专属鼓励师三步问题 题目意思就是一次选择可以走1 或 2 或 3个台阶,现在一共有n个台阶,问我们到达第个台阶共有多少种走法,看下我画的图你就很容易理解了. 创建一个dp表,按照题目要求去填表,最后根据题目要求返回经过处理的值 状态表示的含义(你就直接背下来
2024-11-07 15:28:18
1115
1
原创 [数据结构从小白到大牛]第五篇:3分钟带你吃透双链表并用C语言模拟实现
虽然有这么多的链表的结构,但是我们实际中最常用还是两种结构:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构,如哈希桶、图的邻接表等等。另外这种结构在笔试面试中出现很多。结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而简单了,后面我们代码实现了就知道了。上一个篇章我们讲解了无头单向非循环链表,这节我们讲解带头双向循环链表数据域_data指针域。
2024-11-06 22:35:20
846
原创 [C++从小白到大牛]第三篇:3分钟带你入门C++(下)
在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,大家可思考下为什么?auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。return 10;auto b = a;//auto e;无法通过编译,使用auto定义变量时必须对其进行初始化return 0;【注意】
2024-11-06 16:34:26
1192
1
原创 [C++从小白到大牛]第二篇:3分钟带你入门C++(中)
目录4->缺省参数4.1 缺省参数概念4.2 缺省参数分类5->函数重载5.1 函数重载概念5.2 C++支持函数重载的原理--名字修饰(name Mangling)6->引用6.1 引用概念注意:引用类型必须和引用实体是同种类型的6.2 引用特性6.3 常引用6.4 使用场景6.5 传值、传引用效率比较6.6 引用和指针的区别您的专属鼓励师 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。4.2 缺省参数分
2024-11-05 22:12:30
861
1
原创 [C++从小白到大牛]第一篇:3分钟带你入门C++(上)
本节知识点安排目的C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等。熟悉C语言之后,对C++学习有一定的帮助,本节主要目标:1. 补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的,比如:作用域方面、IO方面、函数方面、指针方面、宏方面等。2. 为后续类和对象学习打基础。定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。
2024-11-05 22:07:42
1402
1
原创 C++游戏开发前景讨论
为什么「多数」游戏服务端是用 C++ 来写呢,我觉得这个「多数」很可能是错的,没有任何数据支撑C++写的游戏服务器占大多数。但是我自己进鹅厂以后一直是用C++写游戏服务器,而且是纯C++,我了解的不少团队都是纯C++,也有极少数团队换成了,我参加评审的时候还碰到过用java写游戏服务器的项目。下面是个人的一些见解游戏引擎并不是那种特别短小精悍、几个神奇的算法加起来构成稳定健壮的系统的那种程序。比方像Git、Lua、SVN类似的程序或者系统,虽然看似高深,但是功能边界非常清晰。
2024-11-03 23:54:53
782
1
原创 [蓝桥杯算法从小白到大牛]贪心第二讲:将数组和减半的最少操作次数
目录1->题目链接2->题目解析3->讲解算法原理4->编写代码实现5->您的专属鼓励师将数组和减半的最少操作次数 读完题目很简单的发现只需要每次把当前数组中的最大值减半就能达到最佳效果,得到最小次数贪⼼策略: (1)每次挑选出「当前」数组中「最⼤」的数,然后「减半」 (2)直到数组和减少到⾄少⼀半为⽌ (3)为了「快速」挑选出数组中最⼤的数,我们可以利⽤「堆」这个数据结构 结果正确,欧耶!!! 有些事情,你永远都没有办法做到“顶尖
2024-11-03 23:36:49
300
1
原创 [数据结构从小白到大牛]第四篇:3分钟带你吃透单链表并模拟实现
/用C语言模拟实现"不带头单向不循环链表,插入数据以int为例子//定义单链表结构体int _data;//数据域//指针域}SLTNode;
2024-11-02 20:46:53
1732
4
原创 [蓝桥杯算法从小白到大牛]动态规划第一讲:第N个泰波那契数
就像下边这个例子,我们要求第五个泰波那切数那就需要第4,第3,第2个数加一起,可是第四个并不知道,这样我们很容易就知道填表顺序就是从左到右,这样我们不管求解哪一个数他所需要的前三个数我们都已经求解过,直接用就行了!那就去leetcode实现呗,把我们算法原理的东西换成程序语言实现就行,看代码,大家一定要自己做一遍在来看哦。题目要求返回第N个泰波那切数的值,那不就是我们dp表里的值嘛,秒他!初始化的目的是为了我们在填写dq表的时候保证不越界!例如这道题是相当简单,dp表的递推公式就是。
2024-11-02 00:14:11
917
1
原创 [蓝桥杯算法从小白到大牛]贪心第一讲:柠檬水找零
两种找钱策略先采 取哪一种才能让算法最优,这就是贪心(选取最优策略)这道贪心题目挺简单的,算法原理在上边题目解析差不多说完了,接下来看图。顾客给你10块,你把10块收下,你只有找他5块这一个选择。(3)顾客只会给你5块,10块,20块,其他绝对不会出现。顾客给你20,你把20块收下,你找他15,(1)顾客一个一个排队来,是有顺序的,水5块。(4)顾客给你5块,你把5块收下,你找他0;(2)刚开始你手上一个5/10/20都没有。接下来一起编写代码吖!(一)找他一个10一个5。
2024-10-31 16:41:00
557
4
原创 [MySQL从小白到大牛]第三篇:详细讲解数据库级别操作
目录1->创建数据库(1)先看语法(看不明白没关系,推荐先去看后边例子,然后再回过头来看语法) (2)说明: 2->创建数据库案例: 2.1 创建名为db1的数据库说明:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则是:utf8_ general_ ci 2.2 创建一个使用utf8字符集的 db2 数据库 2.3 创建一个使用utf字符集,并带校对规则的 db3 数据库3-> 字符集和校验规则 3.1 查看系统默认
2024-10-31 12:35:14
1056
原创 [数据结构从小白到大牛]第三篇:3分钟带你吃透顺序表并模拟实现
2->开始模拟实现顺序表2.1->定义顺序表结构,每一步都有详细解释哦注意看代码后边的注释!!!首先我们需要定义一个顺序表结构体,这个结构体中的各个字段含义如下。
2024-10-30 14:35:25
1054
原创 [小白也能写出高效C++程序]第一篇:专栏前言
本专栏讲解国外大佬Scott Meyers所著作书籍<<Effective C++>>改善程序与设计的55个具体做法,如果你能保证在以后的编写程序生涯中一直谨遵这55条规则,那么我就能保证你写的C++程序比普通程序员写的不仅效率上有质的提高,并且远离错误!!!目录1->前言2->前提知识2.1声明式和定义式2.2 构造函数+拷贝构造函数+拷贝赋值运算符3->您的专属鼓励师1->前言
2024-10-30 14:22:42
711
1
原创 [MySQL从小白到大牛]第二篇:万字详解让你彻底学懂数据库
我们平常存储文本数据或者二进制数据的时候用文件就可以了,为什么还要弄个数据库呢?那肯定是因为用文件保存数据有弊端,有缺点!!!用文件保存数据有以下几个缺点:(1)文件的安全性问题:访问控制方面权限设置简单且易出错:文件系统主要依赖操作系统的权限设置来控制访问。在很多情况下,权限的设置可能过于简单,例如只有读、写、执行三种基本权限。这对于复杂的用户和数据环境来说是不够的。比如在一个企业环境中,可能有不同部门的员工需要访问同一个文件,但是他们对文件的操作权限应该是不同的。
2024-10-23 15:53:15
938
2
原创 [小白拿捏面试题]第二篇:使用malloc开空间但是却用delete释放空间从内存分析会发生什么?---阿里巴巴面试题
对于自定义类型对象:new之后调用free,不会调用析构函数进行资源清理,会调用构造函数进行资源初始化。如果构造函数有内存资源需要初始化,会导致内存泄漏.总结:先malloc后delete,可能导致程序崩溃问题.先new后free,可能出现内存泄漏问题.5->专属鼓励师一遍不会没关系吖,多看几遍,我也是学了好多遍呢,小伙伴们肯定学的又快又好!!!最后希望写的内容对小伙伴们有所帮助,我写的如果有哪里不对的地方请指出来哦!让我们一起进步吖,任何疑问包括心情不好都可以找我聊聊,我很乐意当你的倾听者吖.
2024-10-23 08:03:53
937
原创 [数据结构从小白到大牛]第二篇:详细讲解时间复杂度和空间复杂度
目录1->表示算法效率的两个重点知识:时间复杂度和空间复杂度 2->如何表示两种复杂度?使用大O渐进表示法3->用例子带大家学会时间复杂度时间复杂度例一:时间复杂度例二:时间复杂度例三:3->用例子带大家学会空间复杂度首先大家思考下我们写代码是为了干什么?就是为了让计算机去帮助我们做那么多繁杂的计算任务和其他任务,那么我们是不是特别需要关心程序运行花费的时间呢?是的,试想一下如果一项代码需要运行一年才能得出结果,那么只想说"人麻了,毁灭吧世界!"除此之外,运行中的数据需要存储起来对吧,那就要存储设备,我们夸
2024-10-20 21:50:33
1607
3
原创 学好算法对一个程序员来说是必须的吗?如果是,至少应该学到哪种程度?
此外,我认为在提高自我技术水平的过程中,比如去阅读一些优秀的代码的时候,也是需要算法功底的,就像去看leveldb、redis源码的时候,起码得知道跳表是个啥吧,看Linux vma的代码得知道红黑树是个啥,看page cache得知道个。可以说在各种公司的面试中深受广大面试官喜爱,动规(DP)主要还算是一种解决问题的思想,并不是像一个数据结构模型的成型算法,学好的话很难,但是学好动规可以说对你思考问题的方式有很大的提高,这里列一些常见的动规问题的分类。改了一下知识列表的结构,分了下类,可能更加清楚一点。
2024-10-19 00:11:22
738
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人