自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 (分布式系统专栏)如何解决单点故障?哨兵模式&主从复制与raft一致性协议详解

是一种主从复制架构中的监控与故障转移机制,最早由 Redis 提出,并且成为 Redis 高可用性的关键部分。哨兵模式在分布式系统中,尤其是数据持久化系统中,用于保证高可用性和自动故障恢复。哨兵模式的核心目的是监控主节点(master)和从节点(slave),如果主节点发生故障,哨兵会自动选举一个新的主节点,并将故障的主节点从系统中剔除。:哨兵不断地监控主节点和从节点的状态。它会定期向主节点和从节点发送心跳(ping)信号,以检查它们的存活状态。如果哨兵发现主节点或者从节点不可达,它会认为该节点出现故障。

2025-03-23 13:25:55 767

原创 操作系统专栏之进程管理——进程与线程,进程调度算法,进程间通信方式

由于进程间相互独立,不能直接访问彼此的内存,因此操作系统提供了多种进程间通信的方式,以下是主要的进程间通信方式。概念:套接字是一种支持不同主机和不同进程之间通信的机制,常用于网络通信,但也适用于本地进程间通信。概念:共享内存是一种最快的进程间通信方式,不同进程可以直接访问同一块内存区域;概念:信号量是一种用于进程同步的机制,用于控制多个进程对共享资源的访问;概念:管道是最简单的IPC方式,适用于具有亲缘关系的进程,如父子进程。:按照进程到达的顺序依次执行,先到的进程先运行,不可抢占。

2025-03-04 21:30:14 889

原创 中间件专栏之MySQL篇——MySQL缓存策略

二进制日志(Binlog):根据参数设置,常见的做法是每次事务提交时写入磁盘。错误日志(Error Log):实时刷盘,记录数据库运行状态和错误信息。查询日志(General Log):实时刷盘,记录所有的查询操作。日志类型主要功能是否包含数据变化是否记录所有操作刷盘时机二进制日志数据恢复、主从复制、审计是否事务提交时写入错误日志记录数据库错误、启动/停止等信息否否实时刷盘查询日志记录所有SQL查询否是实时刷盘。

2025-03-03 23:15:53 867 3

原创 中间件专栏之MySQL篇——MySQL事务原理、锁机制分析

事务的本质是并发控制的单元,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是 一个不可分割的工作单位。

2025-03-03 22:37:57 1191

原创 中间件专栏之MySQL篇——MySQL的索引原理

如果索引已经包含查询所需的所有字段,就可以直接从索引中返回数据,而。

2025-03-03 22:00:19 1331

原创 中间件专栏之MySQL篇——MySQL的基本原理和基本操作

MySQL是一个常用的数据库管理系统,它是关系型数据库,它使用结构化查询语言(SQL)来管理数据库中的数据。MySQL 使用表(Table)来存储数据,数据以行(Row)和列(Column)的形式组织。关系型数据库的关键特性包括数据存储在表中,并通过外键等机制进行表与表之间的关联。SQL 语言用于执行查询、插入、更新和删除操作,并允许通过复杂的查询进行数据的检索和管理。

2025-03-03 21:18:06 1295

原创 中间件专栏之Redis篇——Redis 高可用实践中的主从复制原理、集群脑裂现象及常用解法方案详解

主从模式适用于单机部署时对读负载进行分担,但存在单点故障的风险。哨兵模式在主从模式的基础上增加了故障转移功能,解决了主节点宕机时的单点故障问题,适用于高可用性的场景。Cluster 模式则将主从复制和数据分片结合在一起,适用于大规模分布式场景,提供高可用性和水平扩展能力。

2025-03-02 19:52:13 1034

原创 中间件专栏之Redis篇——Redis中过期key删除和内存淘汰策略

过期键删除:Redis通过惰性删除和定期删除相结合的方式来管理过期键。惰性删除在键被访问时删除过期键,而定期删除则定期扫描并删除过期的键。这些方法虽然能够有效减少内存的浪费,但仍可能导致延迟删除和性能开销。内存淘汰策略:Redis提供多种内存淘汰策略,在内存达到配置限制时,Redis根据不同的策略删除键,以释放内存。用户可以根据业务需求选择合适的策略,如LRU、LFU等。

2025-03-02 19:27:15 843

原创 中间件专栏之Redis篇——Redis的三大持久化方式及其优劣势对比

特性/持久化方式RDB持久化AOF持久化混合持久化(RDB + AOF)性能高,适合数据量大的场景,快照操作不会阻塞主进程较低,尤其在同步模式下,频繁写入磁盘较高,结合RDB的快照和AOF的日志数据安全性相对较低,可能丢失最后几分钟的数据高,几乎不丢失数据高,结合RDB和AOF的数据保护恢复速度快,RDB文件加载快速慢,需要逐条执行写命令较快,RDB快照文件快速加载,AOF用于增量恢复磁盘空间占用相对较小较大,AOF文件随着操作增大较大,需同时保存RDB和AOF文件适用场景。

2025-03-02 18:56:05 944

原创 中间件专栏之Redis篇——Redis的基本IO网络模型

Redis 的网络 I/O 模型是基于单线程事件驱动和I/O 多路复用的设计,通过事件循环处理并发连接和请求,避免了多线程带来的同步问题和性能开销。通过这种高效的网络 I/O 模型,Redis 能够在高并发的环境下提供非常优秀的性能。

2025-03-02 17:03:44 749

原创 (面试经典问题之无锁队列篇)无锁队列的基本原理及其作用

由名字可知,无锁队列首先是个队列,并且不能使用互斥锁。

2025-02-27 22:00:47 759

原创 (面试经典问题之原子操作篇)原子操作CAS与锁实现

原子操作(Atomic Operation)是指在多线程并发编程中,作为一个不可分割的单元执行的操作。无论操作过程中是否有其他线程或进程的干扰,它都会以整体的方式执行完毕。换句话说,原子操作在执行时要么完全完成,要么完全不做,过程中不会被中断,并且中间状态也不会暴露给其他线程。不可分割性:在执行过程中,操作不会被其他线程或进程打断。一致性:无论操作的执行顺序如何,结果都是一致的。高效性:因为原子操作不需要使用锁(或者使用非常轻量的锁),所以它比传统的锁机制要高效,特别是在高并发的场景中。

2025-02-25 16:51:40 1163

原创 C/C++后端开发面试表述、技术点摸底——基础组件篇

前端时间笔者系统学习了基础组件中的池式结构(包括线程池、内存池、连接池),原子操作,锁,无锁队列,网络缓冲区,定时器设计,分布式锁,有些内容笔者已经总结整理成了相关技术文档,读者若感兴趣可以翻看笔者的个人空间进行查阅,剩余没写的笔者会在近期总结整理。本文是笔者在阶段性学习后进行的一次全面总结整理,旨在对之前没整理到的技术细节以及面试常问的问题表述进行查漏补缺,并且分享给大家。

2025-02-24 12:25:12 730

原创 中间件专栏之redis篇——redis基本原理、概念及其相关命令介绍

内存数据库表示redis的数据是存储在内存中(相较于存储在磁盘中速度大约快10w倍),KV数据库表示redis存储数据的方式为“key-value”的hash表结构,每个key对应一个value;数据结构数据库表示redis存储的数据类型(即value的类型)有多种,包括string、list、hash、set、zset等。记录文章的标题、摘要、作者、封面,用于页面展示,也是用hash,因为也是有多个属性的场景;无序结合set对顺序不关注,里面的值都是唯一的;双端队列(链表)list是插入有序的;

2025-02-23 15:59:57 547

原创 (面试经典问题之连接池篇)连接池构成、作用及其基本原理详解

连接池一般指的是数据库连接池(connection pooling),是指程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态的对池中的连接进行申请,使用,释放(跟前面文章提到线程池、内存池的概念很像,因为他们都是属于池式结构)。

2025-02-23 12:47:26 786

原创 (面试经典问题之虚假唤醒)虚假唤醒的原理和解决方案

虚假唤醒是指线程在没有条件满足的情况下被唤醒,可能导致程序错误。为了避免虚假唤醒,线程在被唤醒后需要重新检查条件。循环检查条件是避免虚假唤醒的标准方法,确保线程只有在条件真的满足时才继续执行。

2025-02-22 16:07:30 625

原创 (面试经典问题之分布式锁)分布式锁的基本原理、作用以及实现

分布式锁指的是在分布式场景中实现互斥类型的锁。分布式是什么意思?分布式表示运行的节点可能在不同的机器或不同的网段中,节点间通信通过socket。互斥类型是什么意思?互斥类型表示同一时刻只允许一个执行体进入临界资源。

2025-02-22 15:55:30 754

原创 (面试经典问题之内存池篇)内存池构成、作用及其基本原理详解

内存池是一种管理和复用内存的技术,通过预分配一定量的内存块并对其进行维护,从而避免频繁的内存申请和释放,提升系统性能,尤其在高并发的应用场景下尤为重要。内存池通过减少内存操作的开销,优化程序的内存管理,避免频繁的内存分配与释放导致的性能瓶颈。内存池是提升系统性能的关键技术之一,特别是在高并发、内存密集型的应用场景中,内存池通过预分配固定大小的内存块,避免了频繁的内存申请和释放操作,从而减少了内存碎片、提升了效率。

2025-02-21 13:41:43 344

原创 (面试经典问题之线程池篇)线程池构成、作用及其基本原理详解

线程池是一种管理和复用线程的技术,通过维护一定数量的线程来执行任务,从而避免频繁创建和销毁线程,提升系统性能,特别是在高并发场景下。它提供线程复用、任务排队和线程管理等功能。更精简的说:线程池是维持管理固定数量线程的池式结构。

2025-02-21 10:54:12 444

原创 Reactor、Proactor 和协程:三大并发模型在网络编程中的异同与应用(一)

但请注意,协程是个很广泛的概念,他的应用包括但并不局限于网络I/O,而前面的reactor和proactor则是专门在网络编程领域中存在的两种模式,这也是为什么我认为协程最多算个远房亲戚的原因。笔者的上篇文章是进行协程内容的讲解,但在持续创作协程系列文章时发现,协程与Reactor、Proactor之间特别容易混淆和杂糅(笔者自己一段时间不去想,也容易搞混),因此决定中途穿插这样一篇文章,用以帮助各位网络编程初学者们(包括笔者自己)明晰三者间的异同,在学习过程中打好理论基础。

2025-01-14 15:32:29 2078

原创 从线程到协程:理解现代编程中的并发革命(一)

为什么要有协程?协程的引入是为了简化异步编程和高并发任务的实现,它通过轻量级的用户态调度,降低了资源消耗和上下文切换的开销。相比传统线程,协程更高效,能够在需要时挂起并释放 CPU 资源,同时以同步的编程风格书写异步逻辑,使代码更直观、易读、易维护。尤其在处理异步 I/O、高并发任务、游戏开发和分布式系统时,协程能显著提升性能和开发效率,是现代编程应对复杂场景的重要工具。

2025-01-13 15:06:51 1723

原创 select、poll、epoll实现tcp回显服务器(完整版代码)

select、poll、epoll系列文章完整版代码,供读者参考,如有错误欢迎批评指正。

2025-01-08 19:57:35 97

原创 I/O 多路复用,网络编程中的select、poll、epoll的发展历史、原理详解以及代码实现(五)

epoll在 Linux 系统中提供了一种高效的 I/O 事件通知机制,并且正是epoll的出现,使得Linux成为服务器操作系统的主流选择。本系列结束后,后续会开启异步I/O的系列文章,包括协程,io_uring等,并会带来相关的项目。上节我们基于poll实现了一个简单的TCP回显服务器的应用,本节将使用epoll代替poll,仍保持TCP回显服务器应用的功能不变。

2025-01-08 10:39:22 855

原创 I/O 多路复用,网络编程中的select、poll、epoll的发展历史、原理详解以及代码实现(四)

上节基于select实现了一个简单的TCP回显服务器的应用,它通过创建并监听服务器套接字,以及使用select对文件描述符进行监控(接受客户端的连接,并监听是否有可读事件),最后通过recv和send函数实现数据接受以及数据回发。本节将在上节的基础上,使用poll替代select,但仍保持TCP回显服务器应用的功能不变。

2025-01-07 10:24:49 459

原创 I/O 多路复用,网络编程中的select、poll、epoll的发展历史、原理详解以及代码实现(三)

上节讲到select、poll、epoll的原理详解,本节将对三者的代码实现进行介绍,此外,为了方便读者更好地对其使用场景进行理解,本节还将基于三者实现一个简单的tcp回显服务器的应用(Echo Server)。

2025-01-06 10:39:33 464

原创 I/O 多路复用,网络编程中的select、poll、epoll的发展历史、原理详解以及代码实现(二)

select、poll 和 epoll是 Linux 中实现 I/O 多路复用的三种主要方法,它们的设计思想和实现原理各有不同,用于满足不同的场景需求。(PS:本系列文章面向的读者群体需要有一定的基本网络编程知识,若文章中出现的一些名词不清楚含义,恕笔者无法讲得事无巨细,读者可自行利用搜索引擎解决,或者在评论区留言交流)

2025-01-05 15:11:40 818

原创 I/O 多路复用,网络编程中的select、poll、epoll的发展历史、原理详解以及代码实现(一)

本篇文章主要从select、poll、epoll的发展历史和背景进行了介绍,目的是梳理清楚这三者的出现顺序,以及是为了解决哪些具体的实际问题,后续将带来对select、poll、epoll的原理详解以及代码实现。是 Linux/Unix 系统中处理多路 I/O 复用的核心技术,随着计算机网络的发展,它们的演进反映了高并发场景对性能优化的不断需求。需要一种能够同时监控多个 I/O 描述符(文件描述符或套接字)的机制,以便支持高效的多任务操作。

2025-01-04 15:33:14 1682 1

select、poll、epoll实现tcp回显服务器(完整版代码)

select、poll、epoll实现tcp回显服务器(完整版代码)

2025-01-08

空空如也

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

TA关注的人

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