- 博客(50)
- 收藏
- 关注
原创 【C++新特性】:谈谈C++20的协程(10000字讲清楚C++协程)
本文记录了我对C++20协程了理解,从各种方面讲解了C++20协程的定义的方式,以及手把手带大家学习如果自定义协程框架
2025-11-01 18:05:27
920
原创 C++高性能网络编程:Boost.Asio
Boost.Asio是一个跨平台的C++高性能网络编程库,采用异步I/O模型实现高并发网络通信。本文介绍了Boost.Asio的核心概念(同步/异步操作、io_context事件循环)及其底层基于事件驱动的IO多路复用机制。通过一个异步TCP Echo服务器示例,展示了如何使用shared_ptr管理会话、async_read/async_write实现异步通信,以及acceptor处理新连接。该库封装了不同操作系统的I/O机制(epoll/kqueue/IOCP),为C++20网络标准奠定了基础
2025-10-24 18:11:15
752
原创 【Redis】:从应用了解Redis
Redis是一个高性能的内存数据库,支持字符串、散列、列表等五种数据类型,具备持久化(RDB/AOF)、事务、发布订阅等功能。通过主从复制和哨兵机制实现高可用性,哨兵节点监控集群状态并自动故障转移,确保服务稳定。Redis在内存操作的基础上结合硬盘存储优化性能,适用于需要高速读写的场景。
2025-09-22 20:13:38
1328
2
原创 MySQL中的事务隔离问题,为什么rr没有完全解决幻读问题?
MySQL通过MVCC解决快照隔离,next-key解决当前读隔离, 针对幻读没有解决的问题, 我认为这不是数据库的bug, 而是用户自己使用时候的不合理行为, 所以, 数据库设计在巧妙, 也是为了简化我们上层开发的设计。
2025-08-28 15:22:29
814
原创 【MySQL03】:MySQL约束
表中一定要有各种约束, 通过约束,我们能够未来保证数据库中的数据是合法的。约束的目标就是保证数据的完整性和可预期性。
2025-08-04 21:36:30
378
原创 【MySQL01】: 认识MySQL
MySQL是一个网络服务, 默认是3306mysqld是服务端, mysql是客户端mysql是一套给我们提供数据存取服务的网络程序数据库在磁盘(MySQL)或者内存(Redis)中进行存储的特定结构组织的数据在磁盘上数据存储的解决方案。
2025-08-04 21:30:39
557
原创 【MySQL基础01】:如何创建删除修改表和数据库
MySQL是一个网络服务, 默认是3306mysqld是服务端, mysql是客户端mysql是一套给我们提供数据存取服务的网络程序数据库在磁盘(MySQL)或者内存(Redis)中进行存储的特定结构组织的数据在磁盘上数据存储的解决方案。
2025-07-29 20:48:30
315
原创 高阶数据结构 -- 图(万字总结, 最全面)
通过边,节点构成的数据结构,我们称作图,树是一种特殊的图,但是树和图又不太一样,树更多的关注的是树的节点,比如。
2025-07-28 14:01:20
1045
原创 IO复用(多路转接)
select poll epoll的优缺点select : select适合简单的应用场景(当我们需要管理的文件描述符比较少的时候), select是一个简单的不错的选择, 但是select频繁的将数据从内核到用户之间频繁拷贝, 当涉及到的描述符多了之后, 就会显著降低效率poll : poll在select的基础之上进行了改进, 只能说在设计上更加的方便的, 但是轮询和用户内核之间的拷贝问题没有得到根本的解决。
2025-07-22 21:56:04
629
原创 【算法】:KMP算法 (包让你看明白)
对于模式串P,next[i]表示子串P[0…i-1]的最长公共前后缀长度。KMP算法通过预处理模式串构建next数组,利用已匹配的信息避免不必要的回溯,将字符串匹配的时间复杂度从O(n*m)优化到O(n+m)。理解KMP算法的关键在于理解最长公共前后缀的概念和next数组的构建过程。虽然KMP算法不是最简单的字符串匹配算法,但它在很多实际应用中提供了优异的性能。。
2025-07-02 20:09:11
886
原创 【数据结构】:一文帮你完全弄懂哈希(hash) , 并且帮你手搓std::unordered_map
文章谈论了哈希的思想以及如何实现哈希表,其实哈希是一种很简单的数据结构,我们只不过站在了巨人的肩膀上。
2025-06-12 18:00:00
1382
原创 【C++语法】:过来人的总结,类和对象 2
类和对象还有很多的细节知识,比如移动拷贝,移动构造,为什么拷贝必须const但是作为一个C++初学者,了解这么多已经暂时足够了,如果想要了解更多关于C++, 可以关注我,我会只需更新。
2025-06-11 21:02:05
777
原创 【C++语法】(过来人的总结)类和对象 1
int day_;int year_;这是一个简单呢的累的定义如果将class改成struct ,那么他和我们C语言中的结构体没有什么区别。那么我们C++ class和C struct 有什么区别吗?当然有啦,而且区别可不是一般的大。本篇简单谈谈了类,读者已经建立了一个针对类和对象以及面相对象的一个感性的简单的认识,在下一篇中我将具体谈到如果操作一个类,或者说如何设计出一个类。
2025-06-11 19:51:30
1008
原创 深入解析Google多线程环境下的空间配置器——TCMalloc
TCMalloc通过三级缓存架构与精细化锁策略线程缓存解决高频小内存的无锁快速分配。中心缓存平衡线程间内存资源,避免饥饿。页缓存对接操作系统,处理大块内存的分配与回收。这种设计不仅显著降低了多线程竞争带来的性能损耗,还通过内存对齐、Span管理和批量操作等技术,优化了内存利用率与分配速度。
2025-05-27 20:54:28
973
原创 【C++】C++异步编程四剑客:future、async、promise和packaged_task详解
C++的异步编程工具提供了不同层次的抽象,从简单的std::async到更灵活的和,开发者可以根据具体需求选择合适的工具。理解这些工具的特性和适用场景,能够帮助我们编写出更高效、更健壮的并发程序。
2025-05-24 21:01:02
942
原创 【算法】:动态规划--背包问题
这里列举了常见的基础背包问题的解法,再往后学习就是竞赛难度的背包问题,这里我们不再继续赘述,读者想要了解更加复杂的背包问题,可以自行继续探索。
2025-05-24 20:50:35
845
2
原创 【c++】: c++11线程库
这里总结介绍了C++11线程三板斧std::thread , std::mutex, std::condition_variable,帮助我们能够更加方便的实现线程操作,同时抹平了操作系统的差异,还是比较有用的。
2025-05-23 20:24:07
855
原创 【算法】: 前缀和算法(利用o(1)的时间复杂度快速求区间和)
前缀和的数学定义通俗来讲,前缀和就是从某个位置到最开始的所有数据的和我们可以称作前缀和一维前缀和的概念从当前位置到数组开始的所有数据的和。二维前缀和的概念从当前位置到矩阵和开始((0,0))构成的局部矩阵的所有元素之和。
2025-05-23 19:47:43
743
原创 C++ CRTP技术(奇异递归模版模式)
最近了解到C++的CRTP技术,通过博客来这里记录一下。我们首先可以了解一下什么是CRTP技术。CRTP是C++的一种高级模版变成模式。
2025-05-07 15:58:43
675
原创 【Linux操作系统】:信号
首先我们可以简单理解一下信号的概念,信号,顾名思义,就是我们操作系统发送给进程的消息。举个简单的例子,我们在写C/C++程序的时候,当执行a / 0类似的操作的时候,程序直接就挂了,这是什么原因呢?其实本质就是CPU在计算的时候出现异常,触发硬件中断,然后我们操作系统发送了对应的信号给进程,然后我们进程默认就退出了。这一系列东西,我都将在后续的文章中具体的提到。
2025-04-08 20:16:36
1288
原创 【Linux内核】从文件层面理解socket建立的方式(优雅的C风格多态)
通过本文的分析,我们从内核层面深入理解了 Socket 的创建和连接机制。从到,再到文件系统与套接字的关联,每一步都体现了 Linux 内核设计的精妙之处。理解这些底层机制,不仅有助于我们更好地掌握网络编程,还能为性能优化提供思路。希望这篇博客能帮助你更好地理解 Socket 的底层实现!
2025-03-19 15:06:06
1183
1
原创 【程序员小技巧】git的常用操作(图解)
user.name 用户名user.email 用户的邮箱–global让我们整台机器的git都使用user.name user.email作为config–l–unset: 重置加上–global就是变成全局的。
2025-03-12 15:08:00
988
1
原创 【计算机网络03】网络层协议IP(详细)
IP协议作为TCP/IP协议族的核心,扮演着互联网通信基石的角色。它如同一位尽职尽责的邮差,在网络世界中穿梭,将数据包准确无误地送达目的地。
2025-03-03 15:14:15
1517
2
原创 【c++语法基础】继承和多态
c++为什么基类指针可以指向派生类的函数,我们知道如果只是普通的函数重写,这种情况下同名的函数构成的覆盖,基类指针通过赋值兼容转换只能调用基类的那个函数不能调用派生类的函数。
2025-02-26 09:13:04
659
原创 【c++语法基础】c/c++内存管理
c和c++在开辟空间的时候还是会有一些区别,毕竟C语言是面相过程,C++是面相对象,而且C++基于C语言引入了类的概念。很多初学者认为malloc和new没有什么区别,但是还是存在着一些明显的差异。
2025-02-26 08:28:19
418
原创 【计算机网络协议02】详解传输层协议TCP/UDP
我们知道TCP中的缓冲区是定长的,因此,16窗口大小表示当前缓冲区的剩余量。传输层协议(TCP/UDP)是网络通信中的核心,负责在源主机和目标主机之间提供可靠或高效的数据传输服务。TCP(传输控制协议)通过三次握手建立连接,确保数据的可靠性和顺序,适用于对数据完整性要求高的场景,如网页浏览和文件传输。UDP(用户数据报协议)则提供无连接服务,传输速度快但不可靠,适合实时性要求高的应用,如视频流和在线游戏。两者各有优劣,选择时需根据具体需求权衡可靠性与效率。
2025-02-24 17:22:08
1009
原创 【计算机网络协议01】应用层协议HTTP
应用层协议本来需要程序员自己去指定,但是HTTP等良好的协议值得我们程序员进行学习其中的思想或者直接作为项目协议进行利用。
2025-02-23 19:38:01
978
原创 Linux下多线程(通过系统接口实现封装 + c++11线程库实现封装)
本篇文章主要介绍了如何通过生产者消费者模型实现线程池,以及如何在Linux通过Linux,libpthread.so的动态库实现线程池,同时还加入了日志的编写。
2025-02-06 14:24:15
721
原创 Linux线程,锁
在程序的内部一个执行的路线叫做线程。更准确的定义叫做执行队列。用一个比较通俗易懂的理解,多进程就像是一个项目组有很多的人,每个人执行的分工。多线程就像是一个人同时做很多份工作。
2025-02-05 20:38:05
998
原创 深入理解进程(Linux操作系统下理解进程)
进程 = task_struct + 代码和数据个体 = 户口本 + 加上我们自己Linux中tast_struct中保存的信息的概念进程的状态变量R状态:运行时状态S状态: -- 阻塞等待状态 -- 可中断睡眠,浅睡眠 -- 可中断睡眠D状态 磁盘 -- 阻塞等待状态 -- 不可中断睡眠 -- 深度睡眠如果进程处于D状态,进程不能够被操作系统直接kill掉,这样保证了进程和磁盘io一定不会被操作系统失误的kill掉所以平时当我们查到D状态,要么就是系统快要挂了,要么就是高io的情况。
2024-12-25 22:57:57
721
原创 c++11 之 左右值引用(帮助你完全理解左右值和完美转发)
所以总结一下左右到底有什么用呢,无非就是c++在不断的发展的过程中发现了一些地方进行着没有必要的拷贝构造而进行的优化,如果你比较熟悉模版,这应该对你的提升代码的效率会有比较大的提升。这也可以解释你的一个疑惑(不知你们有没有)???最开始在刷leetcode的时候我很好奇为什么要直接返回一个vector,list之类的容器,而不是将vector<>&作为一个函数的参数,因为返回不会因为拷贝浪费很多的时间吗,学了这里,你应该就懂了,我们的vector拥有自己的移动构造函数,本质上就是将内部的指针进行了交换。
2024-12-05 10:59:05
254
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅