- 博客(81)
- 收藏
- 关注
原创 【Linux】序列化和反序列化
在网络编程中,直接使用结构体进行数据传输会出错,因为本质上socket无法传输结构体,我们只有将结构体装换为字节数组,或者是字符串格式来传输。同时,将数据保存到磁盘上,也是无法直接保存一个对象的,也要将结构体对象中的数据按照一定的格式转化为字符串然后保存。
2023-09-01 18:28:37
486
原创 【Linux】socket 编程基础
套接字(socket)是 Linux 下的一种进程间通信机制(socket IPC),使用 socket 编程可以使得在不同主机上的应用程序之间进行通信(网络通信),当然也可以是同一台主机上的不同进程之间进行通信。其主要可以分为 UDP SOCKET 编程和 TCP SOCKET 编程。
2023-08-26 18:49:45
687
原创 【C++】智能指针
RAII(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的简单技术。在对象构造时获取资源,接着控制对资源的访问使之在对象的生命周期内始终保持有效,最后在**对象析构的时候释放资源**。
2023-08-07 19:00:00
609
原创 【C++】C++ 11 新特性
C++11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全,不仅功能更强大,而且能提升程序员的开发效率。同时,C++11增加的语法特性非常篇幅非常多,没办法一 一讲解,本文主要讲解实际中比较实用的几个语法。
2023-07-20 16:58:42
617
原创 【C++】位图和布隆过滤器
位图,就是用每一个比特位位来存放某种状态,适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的。布隆过滤器可以告诉我们 “某样东西一定不存在或者可能存在”,也就是说布隆过滤器说这个数不存在则一定不存,布隆过滤器说这个数存在可能不存在
2023-07-15 19:15:00
301
原创 【C++】unordered_map、unordered_set 模拟实现
unordered_map内部实现了一个哈希表,也叫散列表,通过把关键码值映射到Hash表中一个位置来访问记录,查找的时间复杂度可达到O(1),其在海量数据处理中有着广泛应用。因此,其元素的排列顺序是无序的。unordered_set底层也是哈希表,只是存储的是value,而不是
2023-07-11 17:09:44
245
原创 【C++】哈希
开散列法又叫链地址法(开链法),首先对关键码集合用散列函数计算散列地址,具有相同地址的关键码归于同一子集合,每一个子集合称为一个桶,各个桶中的元素通过一个单链表链接起来,各链表的头结点存储在哈希表中。取到一个数据的哈希值之后,还要 mod 当前容器的大小,当前容器的大小也是有讲究的,经过研究,最好是素数,有很多的哈希素数可供选择,在 GetNextPrime() 中依次递增。对元素的关键码进行同样的计算,把求得的函数值当做元素的存储位置,在结构中按此位置取元素比较,若关键码相等,则搜索成功。
2023-06-27 20:42:16
283
原创 磁盘调度算法(期末复习版)
假设在队列中有两个请求,分别针对柱面 14 和 186,而当处理来自 14 的请求时,另一个靠近 14 的请求来了,这个新的请求会下次处理,这样位于 186 的请求需要等待。如此,会处理位于柱面 14 的请求,接着 98,122,124,最后183(图 2)。磁头连续来回扫描磁盘。SCAN 算法有时称为电梯算法,因为磁头的行为就像大楼里面的电梯,先处理所有向上的请求,然后再处理相反方向的请求。SCAN 算法有时称为电梯算法,因为磁头的行为就像大楼里面的电梯,先处理所有向上的请求,然后再处理相反方向的请求。
2023-06-21 14:52:17
470
原创 【Linux】信号
信号是进程之间事件异步通知的一种方式,属于软中断。本文将从信号的产生、信号的保存、信号的处理这三方面,来详细阐释 Linux 中的信号机制。相信看完之后一定会有所收获!
2023-06-08 17:30:39
519
原创 【C++】Map、Set 模拟实现
map、set 是 C++ 中的关联式容器,由于 map 和set所开放的各种操作接口,RB-tree 也都提供了,所以几乎所有的 map 和set的操作行为,都只是转调红黑树的操作行为。本文对 Map、Set 进行模拟实现,可以深入的理解这两个关联式容器的底层原理!
2023-05-28 16:51:12
1266
1
原创 【Linux】动静态库
在我们写程序的时候,一直在使用各种语言的标准库,比如我们写 C/C++ 程序的时候,#include< iostream > 使用的就是 C/C++ 的标准库。但是实际上,我们引入的只是头文件,而头文件里面只是有对方法的声明,方法的具体实现,是在库里面的。头和库是有对应关系的,是要组合在一起使用的。这篇文章讲述了如何使用第三方库/自己写的库。
2023-05-19 20:30:05
844
原创 【C++】红黑树的实现
红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。map 、set 两个关联式容器的底层就是红黑树。
2023-05-16 20:52:09
695
原创 【C++】搜索二叉树
有了二叉树的概念,就可以继续学习二叉搜索树,这是为了学习 AVL 树、红黑树打下基础,其中,二叉搜索树的删除是需要特别注意的地方。
2023-05-12 20:47:02
628
原创 【Linux】进程间通信 —— 共享内存
进程间通信,除了通过管道这一种技术,还可以通过共享内存来实现。虽然技术不同,但是其本质都是一样的,都是让两个进程看到同一份“资源”,这里将详细介绍共享内存完成进程间通信的方式。
2023-05-09 20:43:26
942
原创 【Linux】进程间通信 —— 管道
进程是独立的,但是当两个就进程之间要进行信息的传递,就需要进程间通信,需要用到特殊的技术,本文主要介绍匿名管道和命名管道的方法!
2023-05-08 19:00:02
673
原创 【Linux】文件系统
我们可以对磁盘进行分区,以便于管理。但是,再细节一点的分组呢?当我们创建一个文件的时候,对应分组的内容有哪些变化?文件所处的目录,代表着什么?目录存储的又是什么…………
2023-05-03 20:15:12
592
原创 【C++】多态
封装、继承、多态 是面向对象的三大特性。多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。这篇文章介绍了多态的一些使用规则,及其实现原理。
2023-04-29 19:51:47
840
原创 【Linux】如何理解缓冲区
对于 Linux 上运行的程序,是存在缓冲区的,以C语言程序为例,不仅有 Linux 中文件的缓冲区,也有 C 库自己的缓冲区,这两者要进行区分!通过阅读本篇文章,可以对此有所了解!!
2023-04-25 20:27:23
497
原创 【C++】继承
继承是 面向对象程序设计 使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。本文对继承的基本语法做了介绍,并且对一些特殊用法,比如友元、静态继承、菱形继承也有一定程度的涉猎。
2023-04-23 17:24:47
623
原创 【Linux】文件描述符
你知道什么是文件描述符吗?如何理解“Linux” 下一切皆文件? > 输入重定向 >> 追加重定向 等等,如何理解其本质呢? 进程创建的时候,会打开哪三个标准流?这些问题都将在本文详细解答,相信本篇博客的内容不会让你失望!
2023-04-15 17:28:02
702
原创 【Linux】进程控制——程序替换
程序替换可以让一个进程执行一段全新的代码,将原有的全部代码和数据,替换成新的代码和数据。可是,对于编译之后的可执行程序而言,代码并不可以修改,那么是如何实现程序替换的呢?这就需要了解程序替换的原理,并且熟悉exec 函数簇。
2023-04-07 11:23:53
495
原创 【Linux】 进程控制
Linux 的进程控制,与几个函数有着非常重要的关系。比如,fork() 创建子进程,wait()、waitpid() 两个进程等待的函数。进程终止分为哪些情况,返回什么?这些都属于进程控制的范畴,本文详细介绍了这些函数,相信有助于理解进程控制这一块的内容!!
2023-04-04 23:30:13
479
原创 【C++】STL—— list 模拟实现
vector 是一个和数组类似的容器,list 实际上就是和链表类似的容器。它对数据的操作,本质上就是对链表的增删查改,底层是双向链表。其实现并不是很难,难的是实现 list 的迭代器,以及反向迭代器,这里就需要借鉴 STL 中的思想。
2023-03-30 10:04:05
342
原创 【Linux】进程地址空间
当一个C语言程序被执行的时候,如果打印一些数据的地址,那么我们所看到的地址,是物理地址吗?进程的地址空间是怎样划分的?页表又是什么?父子进程的数据有什么关系?如果对这些问题,你都充满疑惑,那么本文就是为你而准备的!请一定要认真阅读!!
2023-03-27 19:32:21
630
原创 【C++】容器适配器
适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。这篇文章介绍了 stack 、queue、priority_queue 通过容器适配器来实现的原理。
2023-03-24 21:07:26
286
原创 【Linux】 Linux 环境变量
在Linux中,环境变量是一个比较重要的内容,它以字符指针数组的形式组织起来,以NULL代表结束。常用的环境变量有 PATH、USER、PWD 等等。
2023-03-22 20:28:01
423
原创 【Linux】进程概念(下)
进程有着各种各样的状态,比如就绪、运行、等待,但这是操作系统宏观而言,对于具体的每一个操作系统,其状态也是不一样的,本文以Linux 操作系统为例,介绍了Linux 系统的几个状态。
2023-03-20 19:09:46
375
原创 【C++】STL—— vector 模拟实现
vector 是 C++ 的 STL 标准库中的一个容器,它主要使用的是泛型编程的思想,即使用模板。这篇blog用自己的方法实现了vector这个容器,同时对模板的使用也有所感悟。
2023-03-17 18:45:45
795
1
原创 【Linux】进程概念、fork() 函数 (干货满满)
操作系统进行“管理”的本质是——先描述、再组织。描述是一个面向对象的过程,组织是使用数据结构的过程。而进程也是被操作系统管理的,操作系统也要对其先描述,后组织。本文详细讲述了操作系统是如何描述并组织起一个进程的,让你对进程的创建有一个深刻理解。
2023-03-14 16:34:19
476
1
原创 【C++】运算符重载练习——Date 类
日期类是用来描述具体日期的,涉及到 年、月、日,当然,也可以有多个日期之间的关系。这个类对于运算符重载的练习帮助很大,几乎所有的成员函数都是运算符重载。
2023-03-11 14:45:56
468
原创 【C++】STL——string类的模拟实现
C++ 中,string类是比较常用的处理字符串的标准库,里面包含了众多的函数。本文对其中的一些函数进行模拟实现,简单地自己实现了string类。
2023-03-07 20:24:59
433
原创 【C++】inline 内联函数
C++的内联函数在有些场景非常有用,可以极大地提高程序运行效率,本文对其用法进行了一些介绍,也说明了需要注意的地方,相信对你有所帮助!
2023-03-01 16:49:51
421
原创 【Linux】程序员的易筋经——冯诺依曼体系结构
对于冯诺依曼体系结构的理解,是一名程序员的必经之路,本文对该体系结构作了一个简单的介绍,同时对操作系统也略微讲解了一点内容。
2023-02-28 19:26:28
512
原创 【C++】 C & C++ 内存管理
C++ 是一门面向对象的语言,C语言是面向过程的,两者这样的区别,注定了他们在内存管理的时候,会有很大的不同之处。这篇文章详细介绍了C++ 中 new/delete 的用法,同时也对C语言中的 malloc/free 进行区分。
2023-02-13 15:19:32
3014
2
原创 【C++】 类和对象 (下)
类和对象部分,除了六个默认构造函数,还有其他一些零碎的知识,比如初始化成员列表、友元等等。此外,了解编译器的优化机制,可以让我们写出更优质的代码。
2023-02-09 11:40:39
559
3
原创 【C++】万字深剖 类和对象(中)
C++ 的类和对象部分,有六个默认成员函数,即使我们不实现,编译器也会自动生成,但是自己实现与否,区别巨大,本篇文章详细介绍了这六个默认成员函数。
2023-02-06 21:51:41
1327
8
原创 【C++】揭开“引用”的庐山真面目
引用是C++新增的,它不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。
2023-02-03 15:05:49
396
原创 【数据结构】归并排序、快速排序(递归法和非递归法)
排序算法是基础,但是,对于归并排序和快速排序,其思想方法的理解是重中之重,而且不光要掌握递归法,对非递归法也要有所了解。本文详细介绍了归并排序,以及三种实现快速排序的方法。与此同时,对两种排序算法的非递归法也进行了细致的分析,相信看完一定有所收获!
2023-02-01 22:39:47
1356
17
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人