自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux自旋锁和读写锁

在前面的文章中我们已经介绍了有关互斥锁的概念与使用,本篇将开始介绍在 Linux 中的自旋锁和读写锁。这三种锁分别用于在不同的应用场景之中,其中互斥锁最为常用,但是我们需要了解一下其他的锁。 对于自旋锁和读写锁都介绍了其原理以及接口使用,并且给出了样例代码。

2024-08-24 10:17:17 241

原创 应用程自定义协议与序列化反序列化

本篇将主要介绍在应用层中自定义的协议,自定义协议的同时还需要将我们的数据继续序列化和反序列化,所以本篇的重点为序列化、反序列化的原因以及如何自定义协议,接着探讨了关于为什么 tcp 协议可以支持全双工协议。还根据用户自定义协议结合 tcp socket 编写了一份三层结构(应用层、表示层、会话层)的网络计算器代码。

2024-08-23 19:19:48 758

原创 Linux网络基础

从本篇开始将进入介绍 Linux 中的网络知识,本篇是先对网络中的一些基础概念做介绍。其中主要介绍了 OSI 七层协议(TCP/IP 五层协议),以及网络传输的流程,其中主要介绍了局域网传输和广域网(跨网络)传输,其中很重要的一点是关于数据包的封装和分用,最后介绍了关于端口号和 socket,得出了网络间通信的本质是进程间通信。

2024-08-21 11:24:26 993

原创 UDP/TCP --- Socket编程

本篇将使用 Linux 中的系统调用来实现模拟 TCP 和 UDP 的通信过程,其中只对 UDP 和 TCP 进行了简单的介绍,本篇主要实现的是代码,至于 UDP 和 TCP 的详细讲解将会在之后的文章中给出。 本篇给出的 tcp 和 udp 的代码中的 echo 都是测试连接是否成功的代码,之后的代码都是在 echo 代码的基础上修改实现了不同功能的代码。

2024-08-19 20:01:04 963

原创 Linux线程thread详解(线程池)

多线程就可以让我们的代码并行运行起来,本篇从线程的基本概念开始介绍,然后比较了多线程与多进程之间的区别。接着介绍了在 Linux 系统下的线程控制,介绍了在 Linux 系统下使用多线程的函数接口。然后讲解了线程的互斥,需要使用锁互斥,同时揭示了互斥的缺点,然后引入了线程同步,需要使用条件变量来解决。在介绍完条件变量之后,我们又介绍了在多线程中常用的生产消费模型,实现了两种经典的生产消费模型:阻塞队列(使用条件变量和互斥锁完成)和环形队列(使用信号量和互斥锁完成)。同时还介绍了线程安全和可重入以及死锁的概念

2024-08-13 09:27:23 887

原创 日志Log程序(C++)

使用 C/C++ 代码实现一个日志程序,便于我们在调试程序的时候,打印出对应的日志信息,同时也可以重定向然后记录我们的日志信息。

2024-08-11 21:19:45 355

原创 Linux地址空间详解

本篇通过对物理内存和页表详细的讲解,对 Linux 系统下的地址空间做了深度的剖析。

2024-08-02 19:42:02 911

原创 键盘输入数据的过程

其实如上的从硬件中读取数据,硬件发送硬件中断(信号),然后由 CPU 记录,接着让操作系统执行已经设定好的方法,其实和我们在 Linux 系统中的信号体系很类似,因为 Linux 系统中的信号体系,就是模拟中断实现的。当我们在键盘中按下按键的时候,键盘会向我们的 CPU 发送硬件中断(也就是给 CPU 特定的针脚发送信号),该硬件中断。(OS维护的一个函数指针数组)中找到对应读键盘数据的方法,然后软件就可以从键盘中读出数据了。,然后 CPU 内的寄存器就会记录下该中断号,然后会在操作系统中的。

2024-07-30 21:56:18 137

原创 Linux中信号体系

本篇中主要讲解关于 Linux 中关于信号的知识。首先先介绍了信号的自定义捕捉和信号的常用表示形式,接着就是本篇的重点:信号的产生、信号的保存以及信号的处理。信号的产生主要讲述了信号的五种产生方式以及探讨了关于为什么大多信号直接终止信号;信号的保存中主要讲述信号在内核中的表示(两个位图和一个函数指针数组),以及位图的操作方法;信号的处理主要讲述了捕捉信号、用户态和内核态以及 Core 与 Term 的区别。

2024-07-29 23:34:23 855 2

原创 Linux中的System V通信标准--共享内存、消息队列以及信号量

关于 System V 标准,一共有三种通信方式,分别为:共享内存、信号量和消息队列三种通信方式。本篇将较为详细的讲解三种通信方式的实现原理,以及介绍在 Linux 系统下调用这三种的通信方式的接口,其中以共享内存为例,较为详细的讲解和用代码实现这种通信方式。 最后我们得出这三种通信方式存在很大的共同点,以及总结了操作系统对这三种通信方式的管理。

2024-07-23 20:36:27 1117 2

原创 Linux中进程间通信--匿名管道和命名管道

本篇将会进入 Linux 进程中进程间通信,本篇简要的介绍了 Linux 中进程为什么需要通信,进程间通信的常用方式。然后详细的介绍了 Linux 进程间的管道通信方式,管道通信分为匿名管道和命名管道,本篇分别介绍了其实现的原理,以及使用 Linux 中的系统调用,用代码实现了这两种通信方式。 还详细的介绍了关于管道通信的五种特征和四种情况。

2024-07-19 19:54:19 1128

原创 Hash表(C++)

本篇将会开始介绍有关于 unordered_map 和 unordered_set 的底层原理,其中底层实现其实就是我们的 Hash 表,本篇将会讲解两种 Hash 表,其中一种为开放定址法,另一种为 hash 桶,在unordered_map 和 unordered_set 的底层实现中主要是使用的是 hash 桶。 本篇分别介绍了 hash 表的两种实现方法,接着讲解 hash 冲突、扩容与 hash 函数的设计原则。最后使用代码实现 hash 表的数据结构。

2024-07-13 16:22:50 743

原创 红黑树/红黑树迭代器封装(C++)

本篇将会较为全面的讲解有关红黑树的特点,插入操作,然后使用代码模拟实现红黑树,同时还会封装出红黑树的迭代器。 在 STL 库中的 set 和 map 都是使用红黑树封装的,在前文中我们讲解了 AVL树,对于红黑树和 AVL 树来说,这两种树都是效率很高的搜索二叉树,但是相对而言 AVL 树会更加接近平衡二叉树,但是用于封装 set 和 map 的却是红黑树,这是因为虽然红黑树不是很接近平衡二叉树,但是和 AVL 树的搜索效率相比较其实相差不是很多,相反而言,对于红黑树在插入时

2024-06-10 09:24:23 1427

原创 AVL树 ---(C++)

本篇讲全面的讲解 AVL 树的插入,旋转以及验证 AVL 树的性能(本篇未实现删除代码)。至于为什么会有 AVL 树,这是因为简单的二叉搜索树并不能直接的保证搜索的效率,因为当我们在二叉搜索树中插入一段有序的序列的时候,二叉搜索树就会退化为单枝树,这个时候进行搜索的时候,时间复杂度就变为了 O(n^2),

2024-06-10 09:23:30 1440

原创 map和set

在本篇中,我们将要介绍两个常用的 STL 库中的两个数据结构,set 和 map,这两个函数的底层都是由红黑树实现的。本篇不会实现其底层原理,本篇只会将其其中的要点和使用时应该注意的地方。然后还会介绍关于 set 和 map 的两个扩展容器:multiset 和 multimap。

2024-06-03 09:49:58 1647

原创 Linux进程替换 && 自主shell程序

本篇将要讲解有关进程中最后一个知识点——进程替换,其中主要介绍有关进程替换的六个函数,直接从函数层面来理解进程替换(在使用函数的过程中,也会对进行替换进行解释)。本篇

2024-06-03 09:49:33 1822

原创 Linux进程控制

本篇将较为全面的介绍的 Linux 中的进程控制,其中主要分为三个模块:fork 创建进程、进程终止以及进程的等待。其中关于进程的终止包含如何终止进程、进程退出的三种状态,以及进程的异常退出。最后讲解了进程的等待方法,其中包括阻塞等待和非阻塞等待。

2024-05-27 14:06:25 1766

原创 二叉搜索树BST ——(C++)

本篇将会讲解有关二叉树的搜索原理,以及关于二叉搜索树的建立,以及二叉树搜索树的插入、删除和查找等基本操作。最后我们还会对二叉搜索树进行功能扩展,介绍有关搜索二叉树的 K 模型和 KV 模型。

2024-05-27 14:06:00 1274

原创 Linux进程地址空间

本篇首先抛出了为什么同一个地址空间的变量值会不一样的问题,然后就此问题对虚拟地址和写时拷贝进行了简单的介绍,接着又深入地址空间的组织形式,在这里进一步的探讨了虚拟地址,然后又探讨了页表和写时拷贝的组织形式。最后介绍了 Linux 中内核调度队列,在这真正的从底层探讨了进程在 Linux 中的调度形式。

2024-05-20 12:44:46 1320

原创 继承 —— 对象的三大特性之一(C++)

在C++中关于对象的三大特性,封装,继承和多态,本篇将要开始对继承进行详细的讲解与解析其中的难点。不过我们首先也将对封装进行总结。然后介绍了继承的概念定义、赋值转换、派生类中的默认成员函数还介绍了菱形继承的底层解决方式,最后分析了组合和继承这两种复用关系的选择

2024-05-20 12:44:23 1884

原创 Linux环境变量

本篇将进入到 Linux 中的环境变量。首先我们将会联系 main 函数中的参数来讲解命令行参数,首先先讲解了 main 函数中的两个参数 argc 和 argv,接着介绍了本篇的核心——环境变量,详细的讲解了如何使执行程序的时候,不带路径的方法,介绍了获取环境变量的三种方法,同时得出了 main 函数中的第三个参数:env,最后介绍了 Linux 中的内建命令。最后介绍了 shell 程序中的内建命令。

2024-05-13 08:55:49 1861

原创 template——模板进阶(C++)

​ 在之前的文章中,介绍了模板初阶:Cpp_桀桀桀桀桀桀的博客-CSDN博客 在本篇中将会对模板进一步的讲解。本篇中的主要内容为:非类型模板参数、函数模板的特化、类模板的特化(其中包含全特化和偏特化),最后讲解了模板的分离编译问题,以及出现链接错误的原因。

2024-05-13 08:54:54 1427

原创 Linux进程状态与优先级

本篇详细的讲解了 Linux 中进程会出现的各种状态,以及出现这些状态的原因,其中进程的阻塞、挂起和运行就是进程状态的体现。接着科普了一下进程的切换,然后讲解了进程的优先级,以及如何调整进程的优先级。最后对进程的特点进行了总结。

2024-05-06 08:49:34 2071 4

原创 stack&queue类——适配器模式 && 双端队列deque(C++)

接下来我们将实现 stack、queue 类的常用函数,其实对于 stack 和 queue 的常用函数实现可以说得上是非常简单,若想详细了解可以看这篇:栈和队列&循环队列(C/C++)_栈和循环队列-CSDN博客;在本篇中我们将使用容器适配器来实现栈和队列。

2024-05-06 08:49:03 1764 2

原创 Linux进程基础概念&子进程的创建

有着上一节我们对操作系统和冯诺依曼体系结构的理解,本篇我们便可以开始对 Linux 中的进程开始讲解。在本篇中对进程的基本概念进行了简单的介绍,然后通过对描述进程的 PCB,与 Linux 中的 task_struct 的详细讲解,使得对进程的概念有了一个更加详细的理解。然后接着又介绍了 task_struct 中的内部属性 pid 与 ppid(剩下的 task_ struct 内部属性将会在后面的文章给出),接着还介绍了进程的创建方式和子进程的创建,最后介绍了 proc 查看当前进程信息数据。

2024-04-29 14:12:09 1634

原创 priority_queue类(仿函数实现C++)

本篇将讲解 priority_queue 的实现,叫做优先级队列,是包含在 头文件中的一种数据结构,虽然他叫做队列,但是该数据结构并不服从先进先出的特点,而是和我们的堆很相似。本篇中将多出一个仿函数的调用。

2024-04-29 14:11:05 1597

原创 Linux操作系统&冯诺依曼结构

从本篇开始,我们将进入 Linux 的进程篇章,但是我们将在进行对进程进行讲解前,我们先需要铺垫一些知识。所以我们将较为详细的讲解计算机中的基础常用体系——冯诺依曼体系,接着讲解有关整个操作系统的知识,先从操作系统开始讲起,然后向操作系统的下层讲解,将接完操作系统的下层之后,最后开始讲解操作系统的上三层,从中我们得出一个结论:操作系统存在的意义:对软硬件进行管理(手段),为用户提供良好(高效、稳定、安全的)的运行环境(目的)。

2024-04-22 14:16:53 1652

原创 list类——常用函数模拟

​本篇将对 list 类的常用函数进行模拟。其中主要要点为函数的模拟,另外还会对函数的功能和返回值进行讲解。但 list 可以说是 string vector stack queue …… STL 库中最难实现一个类,因为 list 的迭代器不是很好实现,所以本篇一个很重要的一个点便是 list 的迭代器。不仅仅实现了 list 的迭代器,还实现了 list 中常用的函数。

2024-04-22 14:16:30 1383

原创 vector类——常用函数模拟(C++)

在上一篇中我们介绍了 string 类的常用函数模拟,接下来我们将开始讲解 vector 类的常用函数的讲解以及模拟实现,相较于 string 来说,vector 的函数不那么冗余,用法也没有那么多,但是在 vector 中的函数使用和模拟中,也存在很多的细节,我们将在以下一一讲解。 我们将按照迭代器、容量、获取元素、修改、默认成员函数的顺序讲解和实现函数,在实现函数的时候,详细了给出实现该函数需要注意的事项。最后谈了谈迭代器失效的情况,给出了使用迭代器的使用注意事项。

2024-04-17 22:22:19 1814 2

原创 string类——常用函数模拟(C++)

本篇中,将会详细的介绍 Cpp 中 string 的使用,以及 string 类常用函数的模拟实现。对于 string 的内置函数来说,存在很多很冗余的用法,很多函数都有很多种用法,本篇将会讲解常用内置函数的常用用法,模拟函数的时候,也只是模拟常用的用法代码。本篇实现的 string ,仅仅只是通过一种很简单的方式实现的,对于 vs 、g++ 下的 string 相比都是小巫见大巫。

2024-04-15 21:53:08 1848 1

原创 template—模板初阶(C++)

本篇将会对 Cpp 中的模板进行一个简单的介绍,其中包括模板的使用:函数模板、类模板,以及对于泛型编程的理解。其中的重点为函数模板,介绍了函数模板的原理、隐式实例化和显示实例化、还有模板参数的匹配规则。

2024-04-09 11:03:54 1410 2

原创 内存管理new and delete(C++)

在本篇中,将会较为详细的介绍在 Cpp 中的两个新操作符 new 和 delete,将会介绍其中的底层原理,以及这两个操作符的使用方法。其中还介绍了 new/delete 操作符使用的细节,还扩展了一些有关定位 new 表达式的知识点。最后总结了 malloc/free 与 new/delete 的区别。

2024-04-08 21:10:24 1768

原创 类和对象(下)--- 初始化列表、explicit、友元、static、匿名对象和内部类

本篇将会对类和对象的主要知识收尾,先会对构造函数进行补充,分别补充了构造函数体赋值、初始化列表、explicit 关键字,然后介绍static 成员知识以及友元、内部类还有匿名对象等知识点

2024-04-01 13:16:13 1209

原创 Linux环境基础开发工具使用——gcc/g++、make/makefile and gdb

本篇将主要介绍三个 Linux 环境基础开发工具,gcc/g++、make/makefile and gdb。其中在介绍 gcc/g++ 的使用时,重点讲解了生成可执行文件的四个步骤:预处理、编译、汇编和编译,然后介绍了 gcc/g++ 的常用指令。介绍 make/makefile 的时候,我们分别介绍了 makefile 文件内部的原理、执行顺序、其中的内置符号以及在 makefile 中可以定义的变量。最后对于调试器 gdb 的使用,详细的介绍了 gdb 中常用的指令。

2024-04-01 13:15:34 1604

原创 类和对象(中)---构造、析构、拷贝构造、赋值重载、取地址重载

注:显示定义的意思为,由我们自己定义的。但是这个由编译器默认生成的构造函数,也。

2024-03-25 14:06:36 1674

原创 Linux环境基础开发工具使用——yum and vim

本篇将会介绍平时在Linux中开发常用到的一些工具,其中包括:软件包管理器 — yum,Liunx中的开发工具。具体的介绍了 yum 的相关操作以及 yum 源,同时还介绍了 windows与虚拟机如何进行的关联。然后对Liunx中的开发工具进行了详细的介绍,还详细的介绍了 vim 中的快捷命令集。

2024-03-25 14:05:59 1791

原创 类于对象(上)--- 类的定义、访问限定符、计算类和对象的大小、this指针

在本篇中将会介绍一个很重要和很基础的Cpp知识——类和对象。对于类和对象的篇目将会有三篇,本篇是基础篇,将会介绍类的定义、类的访问限定符符和封装、计算类和对象的大小、以及类的 this 指针。

2024-03-22 22:57:55 1777 2

原创 初见Cpp(C++)

从本篇开始,往后将开始更新C++有关的文章,本篇作为对C++的一个铺垫。将会较为详细的讲解一些有关C++的基本知识,便于读者从C语言阶段晋升到C++阶段。以下是对C++的一些介绍: C++是在C的基础上,容纳进去了面对对象的编程思想,并且增加了许多有用的库,以及编程范式等等。熟悉C语言之后,对C++学习有一定的帮助。所以本篇的主要目标为: 1.补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的;2.为后序类和对象的的文章打下基础。

2024-03-18 13:57:19 1841

原创 常见排序算法(C/C++)--- 动画演示

本篇将介绍一些常见的排序算法,如插入排序:直接插入排序、希尔排序;选择排序:选择排序、堆排序;交换排序:快速排序、冒泡排序;以及最后的归并排序。 对于以上的排序算法,我们总结了每种排序算法的特性,接着对直接插入排序进行了优化;然后实现了归并排序和快速排序的非递归形式;并且实现了快速排序的三种类型:Hoare、前后指针、挖坑法,以及如何优化快速排序。最后,我们还通过生成大量的随机数据,来测试每种排序算法消耗的时间。 还给出了每种算法的动画演示,便于读者理解

2024-03-11 15:34:48 3860

原创 Linux文件权限

本篇首先先介绍了Liunx中的shell指令,概述了为什么存在shell,以及shell的作用。接着开始详细介绍本篇的主要内容:权限,其中包括文件的权限和目录的权限。以及围绕权限开展的一些相关知识,如文件的所有者、所属组及其他用户,umask文件掩码,Linux中用户的切换、设置粘滞位、文件权限管理……

2024-03-04 09:02:26 1872

空空如也

空空如也

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

TA关注的人

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