自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Undefined__yu的博客

从一无所知到熟练使用

  • 博客(41)
  • 收藏
  • 关注

原创 关于 Redis 中分布式锁

在一个分布式系统中,也会涉及到多个节点访问同一个公共资源的情况。此时就需要通过锁来做互斥控制,避免出现类似于“线程安全”的问题。而 Java 中的 synchronized 或者 C++ 中的 std::mutex,这样的锁都只能在当前进程中生效,在分布式的这种多个进程多个主机的场景下就无能为力了。此时就需要使用分布式锁。分布式锁本质就是使用一个公共的服务器,来记录加锁状态。

2024-07-17 18:01:08 660

原创 镜像与容器

Docker iamge 本质上是一个 read-only 只读文件,这个文件包含了文件系统、源码、库文件、依赖、工具等一些运行 application 所必需的文件。可以把 Docker image 理解成一个模板,可以通过这个模板实例化出来很多容器。image 里面是一层层文件系统 Union FS。联合文件系统,可以将几层目录挂在到一起,形成一个虚拟文件系统。

2024-07-17 17:43:17 1062

原创 关于 Docker Registry (镜像仓库)

(Docker Registry)负责存储、管理和分发镜像,并提供了登录认证能力,建立了仓库的索引。镜像仓库管理多个 Repository,Repository 通过命名来区分。每个 Repository 包含一个或多个镜像,镜像通过镜像名称和标签(Tag)来区分(也就是每个镜像的每一个小版本)。一个容器镜像又包含 元数据 和 blob。元数据就是由 dockerfile 构建出来的描述文件,主要记录了一个容器镜像有多少层,每一层里有什么内容。

2024-07-16 19:40:26 981

原创 Redis作为缓存

数据库把数据存储在硬盘上,硬盘的IO速度并不快,尤其是随机访问。如果查询不能命中索引,就需要进行表的遍历,这就会大大增加硬盘IO次数。关系型数据库对于SQL的执行会做一系列的解析、校验、优化工作。如果是一些复杂查询,比如联合查询,需要进行笛卡尔积操作,效率更是降低很多。

2024-06-11 15:58:30 659 1

原创 关于 Redis 中集群

节点之间通过心跳包通信,心跳包中包含了该节点持有哪些 slots。这个是使用位图的结构表示的,表示 16384(16k)个 slots,需要的位图大小是 2KB。如果给定的 slots 数更多了,则需要消耗更多的空间,8KB来表示。这样的空间虽然对于内存来说不算什么,但是在频繁的网络心跳包中,是一个不小的开销。另一方面,Redis 集群一般不建议超过 1000 个分片。所以 16K 对于最大 1000 个分片来说是足够用的,同时也会使对应的槽位配置位图体积不至于很大。

2024-06-10 17:27:23 2043

原创 关于Redis中哨兵(Sentinel)

哨兵节点不能只有一个,否则哨兵节点挂了也会影响系统可用性。哨兵节点最好是奇数个,方便选举 leader,得票更容易超过半数。哨兵节点不负责存储数据,仍然是 redis 主节点负责存储。哨兵 + 主从复制解决的问题是“提高可用性”,不能解决“数据极端情况下写丢失”问题。哨兵 + 主从复制不能提高数据的存储容量,当需要存的数据接近或超过机器的物理内存,这样的结构就难以胜任了。

2024-06-09 18:40:21 950 1

原创 预备知识----技术架构演进之路

简介:应用服务和数据库服务共用一台服务器。出现原因:出现在互联网早期,访问量较小,单机足以满足需求。架构工作原理:通过应用(划分了多个模块)和数据库在单个服务器上写作完成业务运行。优点:部署简单,成本低。缺点:存在严重的性能瓶颈,数据库和应用互相竞争资源。通过 DNS 将域名转换为 IP。通过 IP 找到对应的服务器。通过绑定的端口号找到具体的应用服务。通过查找数据库得到具体信息。将数据库中数据返回给应用服务。应用服务将信息返回给浏览器。

2024-06-09 18:36:50 801 2

原创 Redis中的主从复制

为了解决一个程序只部署在一个服务器上的单点问题:可用性问题,如果这个机器挂了,就意味着服务就中断了一个程序只部署在一台机器上,它的性能/支持的并发量也是有限的所以,就引入了分布式系统。在分布式系统中,往往希望有多个服务器来部署Redis服务,从而构成一个Redis集群,这样就可以让这个集群给整个分布式系统中的其他服务,提供更稳定/更高效的数据存储功能。

2024-06-08 18:56:30 1284

原创 关于Redis中事务

Redis中的原子性不同于MySQL,相比于MySQL,Redis中的原子性几乎不值一提。MySQL中的原子性,不仅仅是“要么全都执行,要么全都不执行”,它还保证了“一旦执行,结果就必须是正确的”,如果不正确,就会进行回滚操作,保证不会出现错误的数据。但Redis中的原子性,仅仅就是把多个操作打包在一起执行,只是保证这些操作要么都不执行,要么都执行,并不保证结果是正确的。

2024-06-08 18:50:24 432

原创 关于Redis的持久化

Redis采用rdb生成快照的操作要对内存中所有数据进行保存,所以适用于全量数据保存的情况由于rdb操作最终保存的二进制,所以加载数据时要快于AOF(用文本的形式保存)RDB方式没有办法做到实时持久化/秒级持久化,因为bgsave每次执行都要执行fork创建子进程,属于重量级操作,频繁操作成本过高RDB文件使用二进制格式保存,Redis版本演进过程中会有多个RDB版本,兼容性可能会有风险RDB最大的问题就是,不能实时的持久化保存数据,在两次生成快照之间,实时的数据可能会随着重启而丢失。

2024-06-08 18:41:30 1181 3

原创 【关于C++中----特殊类设计和单例模式】

文章目录一、设计一个类,不能被拷贝1.1C++98的实现方法及其弊端1.2 C++11的实现方法二、设计一个类,只能在堆上创建对象三、设计一个类,只能在栈上创建对象四、设计一个类,不能被继承五、设计一个类,只能创建一个对象(单例模式)5.1单例概念5.2饿汉模式5.3懒汉模式

2023-07-13 17:55:59 899 7

原创 【关于C++中----智能指针】

文章目录一、概念引入二、内存泄漏2.1 内存泄漏概念及其危害2.2 内存泄漏分类2.3 避免内存泄漏三、智能指针的原理3.1 RAII3.2 像指针一样四、三类智能指针4.1 auto_ptr4.2 unique_ptr4.3 shared_ptr五、循环引用和weak_ptr

2023-05-07 18:34:16 594 10

原创 【关于C++中----异常】

文章目录一、C语言中处理错误的方式二、C++异常概念三、异常的使用3.1 异常的抛出和捕获3.2 异常的重新抛出3.3 异常安全3.4 异常规范四、自定义异常体系五、C++标准库的异常体系六、异常的优缺点

2023-05-01 18:19:15 860 10

原创 【C++11那些事儿(三)】

文章目录一、可变参数模板1.1 概念引入1.2 递归函数方式展开参数包1.3 逗号表达式展开参数包1.4 可变参数模板在STL中的应用二、包装器1.1 function1.2 bind

2023-04-30 23:15:59 506 6

原创 【网络socket编程----预备知识和UDP服务器模拟实现】

一、预备知识1.1 理解IP地址和端口号1.2 认识TCP协议和UDP协议1.3 网络字节序1.4 socket编程接口和sockaddr结构二、封装 UdpSocket

2023-04-29 22:55:47 819 8

原创 【C++11那些事儿(二)】

文章目录一、新的类功能1.1 默认成员函数1.2 强制生成默认函数的关键字default1.3 禁止生成默认函数的关键字delete二、lambda表达式2.1 语法2.2 捕捉列表说明2.3 函数对象与lambda表达式

2023-04-16 17:10:23 415 6

原创 【C++11那些事儿(一)】

文章目录一、C++11简介二、列表初始化2.1 C++98中{}的初始化问题2.2 C++11中的列表初始化三、各种小语法3.1 auto3.2 decltype3.3 nullptr3.4 范围for四、STL中的一些变化五、左/右值引用和移动语义(本篇重点)5.1 做值引用和右值引用5.2 左值引用与右值引用比较5.3 右值引用使用场景和意义5.4 万能引用5.5 完美转发

2023-04-14 21:10:31 478 2

原创 【关于Linux中----信号量及其使用场景】

文章目录一、解释信号量1.1 概念的引入1.2 信号量操作和使用接口二、信号量使用场景2.1 引入环形队列&&生产消费问题2.2 代码实现2.3 对于多生产多消费的情况2.4 申请信号量和加锁的顺序问题2.5 多生产多消费的意义

2023-04-13 12:50:18 1929 11

原创 【关于Linux中----生产消费模型】

文章目录一、生产消费模型1.1概念的引入1.2 321原则二、条件变量2.1概念的引入2.2理解条件变量2.3条件变量的使用三、基于BlockingQueue的生产者消费者模型3.1BlockingQueue的介绍3.2C++ queue模拟阻塞队列的生产消费模型3.3对生产消费任务的模拟封装四、遗留问题

2023-04-11 21:46:16 1115 12

原创 【关于Linux中----线程互斥】

文章目录一、线程互斥1.1互斥概念的引入1.2详解互斥量1.2.1对样例代码加锁1.2.2如何看待锁?1.2.3如何理解加锁的本质三、对锁进行封装四、可重入和线程安全4.1概念4.2常见线程安全和不安全的情况4.3常见可重入和不可重入的情况4.4可重入与线程安全的联系4.5可重入和线程安全的区别五、死锁

2023-04-04 23:14:23 529 18

原创 【关于Linux中----多线程(二)线程终止、分离与封装、线程库以及线程id的解析】

首先需要知道,我们一直在说的pthread线程库实际上就是一个磁盘文件,当某一进程需要创建新的线程的时候就将其加载到内存中使用,它被加载到内存中的位置叫做共享区。很明显的可以看到,这次新线程不停地修改全局变量的值,但主线程却看不到了,而且两个线程拿到的全局变量的地址都是不一样的。当加上线程库之后就可以正常运行。而所谓线程的id就是每一个TCB的起始位置,线程的独立站结构就是原生线程库中为每一个线程提供的线程栈。可以看到,新线程每一次修改全局变量,主线程都能看到,并且两个线程拿到的全局变量的地址都是一样的。

2023-04-01 22:02:16 803 12

原创 【关于Linux中----多线程(一)】

文章目录认识线程创建线程线程优点和缺点创建一批线程终止线程线程的等待问题

2023-04-01 01:00:03 364 13

原创 【C++实现红黑树】

红黑树的实现过程讲解+完整代码,以及如何验证红黑树的正确性方法介绍,深入浅出。

2023-02-08 21:54:26 507 13

原创 【C++实现AVL树】

本篇文章主要是介绍了AVL树的插入,对其中的四种旋转方法做了详解。过程中有图示和例子,包括完整代码,较好理解。

2023-02-06 23:00:04 613 11

原创 【关于Linux中----信号】

本篇文章详细解释了信号产生、发送和处理的全过程。还对其中一些不太容易理解的知识点作了补充,包括代码样例。比较深入浅出。

2023-02-01 17:59:27 676 16

原创 【关于Linux中----进程间通信方式之system V共享内存】

对system V共享内存的接口进行了详细的解释,用代码模拟实现了两个进程通过共享内存通信的过程。

2023-01-16 17:32:39 573 17

原创 【关于Linux中----进程间通信方式之管道】

本篇文章对管道的定义进行了详细说明,实现了匿名管道和命名管道,并说明了二者之间的差异。

2023-01-11 16:46:08 666 21

原创 【关于Linux中----文件系统、inode、软硬链接和动静态库】

对文件系统以及inode作了详细的解释,对动静态库的概念和命名规则作了说明,并写出了动静态库的自主实现方法,希望对大家有帮助!

2023-01-06 19:47:53 1223 21

原创 【关于C++中----继承】

文章目录一、继承的概念和意义二、基类和派生类对象复制转换三、继承中的作用域四、派生类的默认成员函数五、继承与友元六、继承与静态成员七、复杂的菱形继承及菱形虚拟继承八、继承的总结和反思

2023-01-05 12:22:16 523 22

原创 【关于Linux中----文件接口、描述符、重定向、系统调用和缓冲区】

文章目录一、C文件接口中的那些事儿二、接口介绍三、文件描述符fd四、重定向五、缓冲区

2022-12-03 16:00:41 887 22

原创 【关于Linux中----进程控制和进程替换】

文章目录一、进程创建二、进程终止2.1进程退出场景2.2进程退出方法三、进程等待3.1进程等待必要性3.2进程等待的方法3.3获取子进程status四、进程程序替换4.1替换原理4.2替换函数4.3命名理解五、总结

2022-11-11 09:28:14 649 31

原创 【关于Linux中----进程优先级、环境变量和进程地址空间】

文章目录一、进程优先级1.1基本概念1.2查看系统进程1.3查看进程优先级的命令1.4其他概念二、环境变量2.1基本概念2.2常见环境变量2.3和环境变量相关的命令2.4环境变量的组织方式2.5如何通过代码获取环境变量2.6环境变量通常是具有全局属性的三、进程地址空间3.1程序地址空间3.2分页和虚拟地址空间

2022-11-04 18:25:43 702 30

原创 【关于Liunx中----冯诺依曼体系结构、系统以及进程概念】

文章目录一、冯诺依曼体系结构二、操作系统三、系统调用和库函数的概念四、进程4.1基本概念4.2描述进程--PCB4.3查看进程4.4task_ struct内容解释4.5通过系统调用创建进程--fork初识五、进程状态5.1Linux内核源代码5.2进程状态解释5.3Z(zombie)-僵尸进程5.4孤儿进程六、总结

2022-10-19 16:47:57 348 31

原创 【关于Linux中权限管理】

文章目录一、文件访问者的分类二、文件类型和访问权限三、文件权限值的表示方法四、文件访问权限的相关设置方法五、目录的权限

2022-09-30 17:54:47 3750 37

原创 【关于C++中内联函数】

一、概念二、特性三、类与内联函数四、用内联函数替换宏五、内联函数到底有没有地址?

2022-09-23 10:11:33 769 24

原创 【大厂面试重点(程序环境和预处理以及C语言不能函数重载但C++却可以的原理分析)】

想进大厂,还不来看看?

2022-09-18 20:05:51 836 65

原创 【数据结构第四讲(排序算法)】我不信教不会你

这都不进来看看?

2022-08-15 20:49:24 683 71

原创 【数据结构第2.5讲(栈和队列)】

栈和队列知识点+接口实现+LeetcodeOJ题目讲解一条龙

2022-08-07 09:59:10 347 64

原创 【数据结构第三讲(二叉树)】应对考试没问题

从零开始,掌握二叉树

2022-06-09 22:34:47 1170 116

原创 【数据结构第一讲(顺序表和单链表)】各种接口超详实现过程,不来看看吗?

从零开始学习数据结构,从小白到精通,学起来!卷起来!

2022-05-13 23:29:42 414 34

空空如也

空空如也

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

TA关注的人

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