自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MYSQL 的缓存策略(四)

用户直接从。

2025-05-13 12:37:28 662

原创 MYSQL事务原理分析(三)

在数据库多用户高并发访问场景中,多个连接同时操作数据可能导致数据不一致。事务(Transaction)是数据库管理系统提供的一种机制,用于确保一组数据库操作要么全部成功执行,要么全部失败回滚,从而保证数据的完整性和一致性。

2025-05-12 18:01:55 650 1

原创 MySQL索引原理以及SQL优化(二)

Change Buffer 是 InnoDB 中专门为二级索引的插入、更新、删除操作设置的缓存区域,延迟将二级索引变更写入磁盘,从而减少磁盘 I/O。流程:将索引添加判断推到存储引擎中过滤数据,最终由存储引擎进行数据汇总返回给server层,减少了server层和引擎层的交互次数。索引节点存储主键值而非数据地址,查询时需要先查索引再查主键索引,产生回表操作。所有数据存储在叶子节点,非叶子节点仅存储索引键和指针,支持范围查询和随机访问,适合磁盘存储结构。无唯一性约束的基础索引类型,允许重复值和NULL值。

2025-05-11 20:20:55 931

原创 MYSQL语句,索引,视图,存储过程,触发器(一)

SQL 语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的 SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。范式可以避免数据冗余,减少数据库的空间,减小维护数据完整性的麻烦;当数据积累到一定的程度,我们需要对过去发生的事情做一个总结分析时,就需要把过去一段时间内产生的数据拿出来进行统计分析,从中获取我们想要的信息;是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合;

2025-05-11 15:05:39 904

原创 Redis 主从同步与对象模型(四)

fork进程,根据内存数据生成 aof 文件,避免同一个 key 历史冗余,在重写 aof 期间,对 redis 的写操作记录到重写缓存区,当重写 aof 结束后,附加到 aof 文件末尾。通过 fork 子进程,根据内存数据生成 rdb 文件,在rdb持久化期间,对redis 的写操作记录到重写缓冲区,当rdb 持久化结束后,附加到 aof 文件末尾。目的:实现 Redis 故障自动转移。父进程对数据修改,触发写保护中断,从而进行物理内存的复制,父进程的页表指向新的物理内存(谁修改谁指向新的物理内存)

2025-05-10 11:00:00 1020

原创 Redis 存储原理与数据模型(三)

hashtable 就是通过 hash 运算的方式来决定字符串放到数组的哪一个槽位,数组的大小根据数据量来进行调整,所以就会涉及到扩容和缩容。当 hashtable 中的元素过多的时候,不能一次性 rehash 到 ht[1] ,这样会长期占用 redis,其他 命令得不到响应,所以需要使用渐进式 rehash;负载因子 = used / size , used 是数组存储元素的个数,size 是数组的长度;如果负载因子 < 0.1 ,则会发生缩容,缩容的规则是恰好包含 used 的 2的n次方;

2025-05-09 12:35:25 1225

原创 Redis协议与异步方式(二)

事务是一个不可分割的工作单位,事务中的操作要么全部成功,要么全部失败;即使事务队列中的某个命令在执行期间出现了错误,整个事务也会继续执行下去,直 到将事务队列中的所有命令都执行完毕为止。hiredis 异步客户端接入自定义的 reactor 事件驱动系统的适配器,核心作用是桥接Redis的异步事件自定义事件循环机制,实现了一套hiredis的IO多路复用抽象接口。事务:用户定义一系列数据库操作,这些操作视为一个完整的逻辑处理工作单元,要么全部执行, 要么全部不执行,是不可分割的工作单元。

2025-05-08 14:15:47 1343

原创 Redis相关命令详解与原理(一)

Redis 是Remote Dictionary Server(Redis) 的缩写,是一个使用 C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型的Key-Value数据库,并提供多种语言的API。它是一种 NoSQL(not-only sql,泛指非关系型数据库)的数据库,可以用作数据库、缓存、消息中间件、分布式锁等。返回 key1 有但 key2 没有的元素。

2025-05-07 19:22:48 1358

原创 纯C协程框架NtyCo

一个协程会有哪些状态呢?如果协程sleep了,那么就是睡眠状态,如果协程刚创建出来,那它肯定是就绪状态,如果协程在等待数据的到来,那就是等待状态。这里这里定义协程的三个运行状态{就绪,睡眠,等待}。新创建的协程,加入就绪集合等待调度io未就绪的协程,加入等待集合等待epoll_wait有sleep操作的协程,加入睡眠集合就绪集合没有设置优先级,所以在就绪集合里面的协程优先级一样,那么就可以用队列来存储,先进先出等待集合就是等待IO准备就绪,这个等待IO是有时间长短的,这里用红黑树来存储。

2025-04-29 17:28:00 1297

原创 C++高性能日志库spdlog

spdlog是一个高性能的 C++ 日志库,它设计时充分考虑了速度和易用性,具有以下特点高效与快速:Spdlog 专注于提供极致的性能,在大量日志记录场景下也能保持较低的延迟和较高的吞吐量。低内存占用:Spdlog的设计确保了即使在高负载下,它也能保持低内存占用。轻量化设计:Spdlog 是头文件(header-only)库,这意味着用户只需要包含相应的头文件即可开始使用,无需编译链接额外的库文件。跨平台支持。

2025-04-28 14:03:29 974

原创 动态库加载函数dlsym

是一个用于动态链接库(Dynamic Linking Library)的函数,它允许程序在运行时获取动态链接库中符号(如函数、变量等)的地址。

2025-04-22 10:26:36 215

原创 基于红黑树,时间轮,最小堆的定时器方案

eg:epoll_wait 第四个参数 超时参数如果没有定时器,就会一直等待,直到有延迟任务的出现。

2025-04-17 10:29:38 1098

原创 用户态网络缓冲区

6.从IP头看上一层协议是tcp还是udp,根据五元组找到socket,并将数据提取出来放到socket的接受缓冲区。3.向下传递依次增加TCP/UDP头部,IP头部,帧头(MAC头部),帧尾(tcp分段,ip分片)2.网卡向CPU发起硬件中断,CPU收到中断请求,根据中断表查找中断处理函数,调用中断处理函数。6.触发网卡发送,发送成功,触发硬件中断,释放sk_buff和ringbuffer内存。5.从帧头取出IP协议,判断是IPv4还是IPv6,去掉帧头,帧尾。3.中断处理函数将屏蔽中断,发起软件中断。

2025-04-16 22:33:21 1380

原创 无锁队列--知识分享

特点:需要处理多个消费者之间的并发问题,保证多个消费者能够安全地从队列中取出元素。含义:多生产者多消费者队列,意味着有多个线程可以同时向队列中添加元素(生产者),也有多个线程可以同时从队列中取出元素(消费者)。含义:单生产者多消费者队列,只有一个线程可以向队列中添加元素,但是有多个线程可以同时从队列中取出元素。含义:多生产者单消费者队列,多个线程可以同时向队列中添加元素,但只有一个线程可以从队列中取出元素。含义:单生产者单消费者队列,即队列只有一个生产者线程和一个消费者线程。SPSC(单生产者,单消费者)

2025-04-16 21:21:51 548

原创 原子操作CAS(Compare-And-Swap)和锁

原子操作指的是在执行过程中不可被中断的操作,该操作要么完整地执行完毕,要么完全不执行,不存在执行到一半的中间状态。在多线程或者多进程环境里,原子操作能够保证在同一时刻仅有一个线程或者进程可以对共享资源进行访问和修改,从而避免数据竞争和不一致的问题。

2025-04-13 10:29:17 1214

原创 池式结构---内存池

内存池是在程序运行初期,预先从系统申请一块较大连续内存空间的池式结构。负责管理内存空间的分配与回收工作,当程序需要小块内存时,直接从内存池中取出合适的部分交付,而不是频繁向系统请求;当程序释放内存时,内存池将其回收,等待下次再分配,而非立刻归还给系统。减少因频繁系统调用带来的开销,提高内存分配的效率。同时降低内存碎片的产生,因为系统调用分配内存相对耗时,且零散的内存分配易产生碎片,内存池通过集中管理内存,有效解决了这些问题。

2025-04-12 18:57:06 1149

原创 池式结构--MYSQL连接池

它在系统初始化时创建一定数量的数据库连接对象,并将这些连接维护在一个池中。当应用程序需要与 MySQL 数据库进行交互时,无需重新创建新的连接,而是从连接池中获取一个已有的连接;:连接池可以对连接进行统一管理,当出现连接泄漏(即应用程序获取连接后未正确归还)等问题时,连接池能够进行一定程度的检测和处理,避免因连接问题导致应用程序崩溃,从而提升了应用的稳定性。:通过复用连接池中的连接,避免了重复的连接创建过程,大大缩短了数据库操作的响应时间,在高并发场景下,显著提升了系统的整体性能。

2025-04-10 11:35:32 918

原创 池式结构---线程池

线程池是什么? 简单的说,就是一个管理一定数量线程的池式结构。线程池解决的问题? 解决了异步执行耗时任务(不过度占用核心线程),充分利用多核的特点。线程池如何解决问题的?以生产消费模型 生产者(线程)搞清楚原理后,我们就开始手搓线程池了首先,在纯C语言中,我们常常用struct结构体,和callback回调函数进行配合,在c++中引入了函数对象functional和lambda表达式来写线程池

2025-04-07 11:21:47 554

原创 TCP/UDP做可靠传输

2.当发送方收到接收窗口win=0时,这时发送方停止发送报文,并且同时开启一个定时器,每隔一段时间去发送测试报文去询问接受方,打听是否可以继续发送数据。APQ即自动重传请求,是传输层的错误纠正协议之一,它通过使用确认和超时两个机制,在不可靠的网络上实现可靠的信息传输。2.如果缓存区满了发送方还在疯狂发送数据,接收方只能把收到的数据包丢掉,大量的丢包会极大的浪费网络资源。3.当数据包没有被接受方接受,接收方不会发送ACK,这样发送方在等待一定时间后,重新发送数据包。1.发送方的速率与接收方的速率不一定相等。

2025-04-06 16:17:47 743

原创 tcp/ip:TCP知识点分享

TCP知识分享

2025-04-06 11:26:49 1042

原创 TCP连接(一线程一连接和基于epoll的一对多连接)

TCP旨在适应支持多网络应用的分层协议层次结构,互连的计算机通信网络中成对的应用程序进程之间能够依靠TCP提供可靠的通信服务来传输字节流。TCP支持双向数据流,应用程序也可以仅单向发送数据。在主机之间,TCP使用端口号标识应用程序服务并且可以多路传输数据流。

2025-04-02 14:00:00 381

原创 基于线程池实现异步DNS请求

多线程和DNS请求

2025-04-01 16:00:00 298

原创 线程池(简易版 Linux环境)

在Linux环境下简单实现一个线程池

2025-04-01 11:45:03 449

原创 DNS的使用

DNS的简单应用

2025-03-31 21:52:36 581

原创 Shell脚本基础

shell 是一种脚本语言脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译)shell 既是应用程序 又是一种脚本语言(应用程序 解析 脚本语言)打开文本编辑器(vi/vim),新建一个文件first.sh,扩展名为sh(sh代表shell)。扩展名并不 影响脚本执行。运行Shell脚本方式1. 作为可执行程序 将上面的代码保存为first.sh,并cd到相应目录: $ chmod +x first.sh $ ./first.s

2025-03-30 16:52:17 640

原创 C++ 中的异常处理

使用。

2025-03-28 18:00:00 376

转载 try..catch

是 JavaScript 中处理错误的一种机制,可以让程序在发生错误时优雅地处理,而不是直接崩溃。通过,开发者可以编写更加健壮的代码,并提高用户体。

2025-03-27 19:49:01 53

原创 Qt多线程编程指南

多线程编程基础

2025-03-24 14:52:00 726

原创 Qt Ui文件复制与集成指南

ui文件的复制

2025-03-23 16:23:19 366

原创 QtCreator改变背景和主题颜色

首先看一下默认的: 更改后的主题:具体步骤:1.打开Qt Creator工程,点击工具->外部->配置2. 左边选择环境,右边选择 Theme 中的 Dark 3. 左边选择文本编辑器,右边选择 Dark,并点击复制, 4 . 出现 Dark复制,然后选择“前景颜色” 后面的矩形框,就可以编辑颜色了

2025-03-18 11:46:50 801 1

原创 Qt读取json文件

json 文件里基本有三类:数组、键值对、对象。其中对象内部为一系列的键值对,数组内部比较宽泛,可以是对象,字符串,数字等。

2025-03-16 21:21:40 209

原创 Qt读写ini文件

所有的parameters都是以sections为单位结合在一起的。对于一个section没有明显的结束标志符,一个section的开始就是上一个section的结束,或者是end of the file。很多系统配置使用INI文件,其实INI文件就是简单的文本文件,只不过这种txt文件要遵循一定的INI文件格式。当然INI file的后缀名也不一定是".ini"也可以是".cfg",“.conf ”或者是”.txt"。所有的所有的注释语句不管多长都是独占一行直到结束的。ini文件由节,键,值组成。

2025-03-16 21:03:24 355

原创 QML之常用控件

需要导入QtQuick.Controls 2.xx,例如import QtQuick.Controls 2.12。onCanceled的触发方式:按着按钮,同时按着Alt+Tab,让他失去焦点。3.RadioButton(单选按钮)1.Text(显示普通文本和富文本)7.Filckable(滑动窗口)4.CheckBox(多选按钮)6.ComboBox(下拉选项)2.Button(按钮控件)5.Calendar(日历)8.ListView(列表)9.Grad(网格布局)

2025-03-15 19:05:40 285

空空如也

空空如也

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

TA关注的人

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