- 博客(117)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【C++ 实现】图论概念,最小生成树,单/多源最短路径实现
图论,最小生成树算法,单/多源最短路径算法实现。 Kruskal/Prim,Dijkstra/Bellman-Ford/FloydWarshall
2023-07-02 17:40:43
1192
3
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【C++实现】RPC框架的简单实现介绍
以下博客覆盖内容:集群和分布式概念原理;RPC远程调用过程和实现;为什么采用protobuf;分布式节点机器如何得知哪台机器部署哪个具体的服务?服务注册中心。ZooKeeper 分布式一致性协调服务应用以及编程muduo网络库编程;在进入正文之前,我们需要了解为什么需要RPC框架,什么时候使用RPC框架:1.为什么要使用分布式的架构?单机架构受限于硬件资源,单机的服务器不能承受太高的用户并发量。模块化的设计,当某个模块的内容需要修改的时候,需要编译整个项目。
2023-06-25 12:04:44
2725
3
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【C语言】动静态库为何有些函数可以不定义?
记录近期遇到的问题,以及相关的解决方案。我有一个A模块,A模块会生成一个静态库,供给最终的模块B使用,但是模块A需要用到模块B当中的类似func方法。此时这样进行编译会出现问题吗?不会的原因:模块A虽然需要用到模块B的func方法,那么生成静态库的时候,A肯定是拿不到B模块当中的实现了,但是A只要引了相应的头文件,那么编译过程是肯定不会有问题的,并且编译也会放行,因为编译过程并不需要一定能够找到函数的定义,只需要声明即可。那么链接呢?
2023-01-04 21:06:38
391
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【C++实现】线程池的设计与实现
线程池设计与实现,Linux,要求g++版本能够支持C++17以上;vs2019下开发,需要将C++标准调制C++17以上。熟悉C++11多线程编程 thread、mutex、atomic、condition_variable、unique_lock等。C++17和C++20标准的内容,C++17的any类型和C++20的信号量semaphore,项目上都我们自己用代码实现熟悉多线程理论:多线程基本知识、线程互斥、线程同步、原子操作、CAS等。
2022-11-23 12:06:22
1760
13
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【C++实现】 数据库连接池
mysql连接池实现,连接对象模块Connection模块,这个模块负责实现连接mysql的部分,进行数据库增删查改接口的封装。Connection初始化连接对象connect 绑定ip,端口,用户,密码,库名称update 传入string sql,进行实施query 进行select查询,这里用不到refreshAliveTime 设置每一个连接对象在队列里面呆着的起始时间getAliveTime 获取对象从refreshAliveTime到如今的时间,单位ms连接池模块模块。
2022-11-16 10:55:52
1826
4
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【C++实现】观察者模式
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。
2022-10-03 14:20:06
1175
21
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【Linux】如何在进程间加锁(实现互斥)
进程间加锁,mmap,共享内存,信号量,管道:建议先读完这篇。进程之间如何加锁,今天我们需要实现一个售票系统,我们需要对同一个num变量++。以往我们写过类似的代码,只需要用pthread_mutex_t 这把锁就可以实现一个进程内多个线程互斥。但是我们这里改变需求,假设是你和你的同学需要抢一张票,你们在不同的主机的相同进程抢票,那么要怎么做呢?实际上我个人偏向于mmap的这种方式,因为当进程crash的时候,mmap可以保存到文件,但他和shm面临着共享内存被锁上无法使用的问题。
2022-09-08 10:59:30
9355
25
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【C++实现】浅聊定时器的实现,最小堆配合map实现定时器
定时器的使用:定时器的使用:nginx,数据库的主从备份,心跳检测,游戏技能,武器的冷却,倒计时等等,其他需要使用超时机制的功能。定时器主要用于需要使⽤超时机制的功能。定时器的实现有两种方式:第⼀种是,⽹络事件和时间事件在⼀个线程当中配合使⽤;例如nginx、redis;第⼆种是,⽹络事件和时间事件在不同线程当中处理;例如skynet(轻量级的游戏开发框架)。
2022-09-03 12:13:40
2270
20
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【C++数据结构】采用数组模拟单链表
用数组模拟单链表,ne数组,ne的下标表示第几个节点,ne的值表示下一个节点的索引。e数组,e数组保存的是第几个节点当中的val值。int idx,idx指向的是尚未被使用的数组索引。int head,head指向的是头节点的位置。当头插的时候由于头节点会改变,但是我们模拟的时候不需要挪动数组让head一直在0号位置,只需要用head定位到头节点的位置。一开始head = -1,因为一开始head是nullptr,若我们需要遍历的时候也是从head开始遍历,通过ne[head],知道head = -1即可。
2022-08-25 16:28:51
317
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【C++数据结构】并查集的路径压缩
路径压缩实际上是在数据量太大的时候,访问一些数据可能在位于叶子位置,导致访问的效率不高,这个时候有两种方法进行提高效率:- 两颗树合并的时候,节点少的树往节点多的树合并。目的:为了使节点层数增多的节点相对减少。- 查找的时候对该路径上的节点进行路径压缩。 目的:使更多的节点在第二层。最好不要用递归的时候进行路径压缩,因为路径深可能导致栈溢出。...
2022-08-09 22:00:04
1986
23
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【C++数据结构】跳表
skiplist本质上也是一种查找结构,用于解决算法中的查找问题,跟平衡搜索树和哈希表的价值是一样的,可以作为key或者key/value的查找模型。
2022-08-06 15:07:41
1044
26
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【C/C++实现 MiniTcMalloc】高并发内存池项目
谷歌的tcmalloc 的简化实现,池化技术即一次申请过量的资源,拿的时候就不用频繁申请了。因为频繁调用malloc,new申请内存空间实际上是比较慢的thread cache是管理小块内存,如上图,0下标的桶后面挂着都是8字节的内存,是每一个线程都各自私有一个的,他是由线程本地存储(TLS)实现的,thread cache类似有多个定长内存池实现,用户若是需要小于256KB的内存现在这一层寻找,若是能够找到,立马返回,并且这一层的访问由于是每一个线程私有一份,所以不用加锁,效率很高(只涉及单链表的头删)。
2022-08-04 11:33:42
1567
33
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【Linux】详解自主实现HTTP服务器项目
自主实现HTTP服务器,剖析了浏览器发送请求报文到服务器端接受,解析,制造响应报文的全过程。
2022-07-31 10:39:35
2702
29
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【C++数据结构】B树概念及其实现(详解)
1970年,R.Bayer和E.mccreight提出了一种适合外查找的树,它是一种平衡的多叉树,称为B树。外查找即在不在内存当中查找,通常是在磁盘,磁盘数据通常挨着挨着存,所以只能通过建立索引的方式去找到对应的数据地址。由于AVL,红黑树的高度过高,采用这类数据结构会导致IO次数过多,所以我们通常选择层数更低的B树或者B+树。原理即是让每一层更多。并且B树天然平衡,呈现向右向上增长的趋势。B树的规则根节点至少有两个孩子既保持孩子比关键字多一个。.........
2022-07-21 09:59:46
2214
41
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【C++数据结构】一个简单的unordered_set/unordered_map实现(适合初学者)
关于哈希表的C++简单实现,适合0基础,初学C++的朋友学习~~
2022-07-16 15:41:35
1183
48
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【C++】红黑树详解(附迭代器以及插入实现),适合初学者
红黑树的简单实现附有迭代器实现,代码都有详细解释,适合于初学者和想要理解STL map/set原理的朋友观看。
2022-07-13 13:27:59
2447
38
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 0基础学会UDP/TCP,附代码编写
对于UDP/TCP的概念理解,旨在用简单话语帮助各位尽快掌握核心知识,会编写基本的套接字。适合0基础,以及想稍微理解深入一些的朋友!!
2022-06-14 13:37:05
831
36
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【Linux】HTTP/HTTPS
主要讲述了HTTP的协议字段,讲述了HTTPS与HTTP的不同,并且对于HTTPS如何保证安全性进行了叙述,适合于初学者。
2022-06-07 10:41:38
1643
48
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【Linux】select/poll/epoll/reactor 附代码详解
有关select,poll,epoll/reactor的具体代码编写,以及优缺点讲述,适合初学者。
2022-06-04 11:44:26
1267
39
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【Linux】信号
系统当中为每一种异常都提供了唯一的非负整数的异常号,在我们的系统启动就会被分配和初始化一张异常表的跳转表,这个表结构在后续也会讲述,这张表可以通过一些系统调用来修改,如signal,异常的处理实际上就是一个执行跳转代码的过程,与普通函数的最大的不同在于想要执行对应的异常标的代码需要在内核模式下去执行,当然如果是自定义的代码会跳转为用户层执行。
2022-03-15 09:56:59
1977
34
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【Linux】初识进程间通信
IPC是进程间通信(interprocess communication)的简称。传统上该术语描述的是运行在某个操作系统之上的不同进程间各种消息传递(message passing)的方式。本书还讲述多种形式的同步(synchronization),因为像共享内存区这样的较新式的通信需要某种形式的同步参与运作。......
2022-03-06 18:09:33
2400
40
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【Linux】IO细节不了解?一篇带你了解基础IO
I/O输入/输出(Input/Output),分为IO设备和IO接口两个部分。 在POSIX兼容的系统上,例如Linux系统 ,I/O操作可以有多种方式,比如DIO(Direct I/O),AIO(Asynchronous I/O,异步I/O),Memory-Mapped I/O(内存映射I/O)等,不同的I/O方式有不同的实现方式和性能,在不同的应用中可以按情况选择不同的I/O方式。
2022-02-26 11:52:39
2548
36
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【数据结构】二叉搜索树剖析(附源码)
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。二叉搜索树作为一种经典的数据结构,它既有链表的快速插入与删除操作的特点,又有数组快速查找的优势;所以应用十分广泛,例如在文件系统和数据库系统一般会采用这种数据结构进行高效率的排序与检索操作。
2022-02-13 19:03:42
1295
29
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【C语言】大小端剖析
在C语言的学习中我们初次涉及大小端的概念,实际上在两台不同的主机上要通信时我们都需要处理大小端的问题,不然会造成数据的不一致,所以我们往后学习网络时也会涉及大小端的问题,今天就让我们来看看大小端是什么!
2022-02-10 16:12:43
807
16
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【C++】多态原理剖析
本章主要讲述多态原理及关于多态的关键字。动态多态(dynamic polymorphism):通过类继承机制和虚函数机制生效于运行期。可以优雅地处理异质对象集合,只要其共同的基类定义了虚函数的接口。也被称为子类型多态(Subtype polymorphism)或包含多态(inclusion polymorphism)。在面向对象程序设计中,这被直接称为多态
2022-02-08 11:56:53
1480
22
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【C语言】可变参数列表
可变参数列表,使用起来像是数组,学习过函数栈帧的话可以发现实际上他也就是在栈区定义的一块空间当中连续访问,不过他不支持直接在中间部分访问,但是可以访问一半就结束。这篇文章博主带大家来学习学习可变参数的一些特性。
2022-02-03 21:39:27
3754
17
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【Linux】三万字学会进程控制
进程的有关的概念在上面那一章已经比较清晰的,那么这一章我们具体如何调用对应的系统接口进行进程的创建,以及更加深入的理解进程,以及进程为什么要等待,进程的组织方式为什么是这样的,这篇博客都会逐一叙说。
2022-01-31 10:54:22
2830
22
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【Linux】用最形象的例子学习进程,从入门到深入
狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈
2022-01-26 08:52:43
1213
29
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人