- 博客(145)
- 收藏
- 关注
原创 [ 数据结构 -- 手撕排序算法第二篇 ] 冒泡排序
手撕排序算法第二篇:冒泡排序!从本篇文章开始,我会介绍并分析常见的几种排序,例如像插入排序,冒泡排序,希尔排序,选择排序,快速排序,堆排序,归并排序等等!这篇文章我先来给大家手撕一下冒泡排序!C语言手撕排序算法正文开始!冒泡排序的特性总结:1.冒泡排序的思想容易理解。2.时间复杂度为O(n^2);3.空间复杂度为O(1);4.稳定性:稳定(本章完!)
2022-12-17 16:21:58
495
1
原创 [ 数据结构 -- 手撕排序算法第一篇 ] 插入排序
手撕排序算法第一篇:插入排序!从本篇文章开始,我会介绍并分析常见的几种排序,例如像插入排序,冒泡排序,希尔排序,选择排序,快速排序,堆排序,归并排序等等!这篇文章我先来给大家手撕一下插入排序!C语言手撕排序算法正文开始!直接插入排序的特性总结:1.元素越接近有序,直接插入排序算法是一种效率比较高的排序算法2.时间复杂度为:O(n^2)3.空间复杂度为:O(1),它是一种稳定的排序算法。(本篇完!)下一篇我来给大家讲解关于希尔排序,希尔排序是基于插入排序的一种延展。
2022-12-17 12:51:14
345
1
原创 [Linux]----初始网络
了解网络发展背景,对局域网/广域网的概念有基本的认识。了解网络协议的意义,重点理解TCP/IP五层结构模型。学习网络传输的基本流程,理解封装和分用。正文开始!(本章完!)
2022-12-13 21:44:39
662
原创 C++异常详解
正文开始!实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了。// 服务器开发中通常使用的异常继承体系 class Exception {public :// 描述错误信息 int _id;// 错误编码 //堆栈信息 };public :};
2022-12-12 10:58:59
736
原创 详解C++11
每日一句:请不要相信,胜利就像山坡上的蒲公英一样唾手可得。但是请相信,世上总有一些美好值得我们全力以赴,哪怕粉身碎骨!正文开始!在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。
2022-12-11 16:47:44
2392
原创 [Linux]------线程池的模拟实现和读者写者锁问题
正文开始!单例模式是一种"经典的,常用的,常考的"设计模式。IT行业这么或,涌入的人很多。俗话说林子大了啥鸟都有。大佬和菜鸡们两极分化越来越严重。为了让菜鸟们不太拖大佬的后退,于是大佬们针对一些经典的常见的场景,给定了一些对应的解决方案,这个就是设计模式。至此,Linux的线程内容结束!下章开始网络的原理和网络编程!(本章完!)
2022-12-08 22:49:14
447
原创 [Linux]------线程同步和信号量
线程互斥,他是对的,但他不一定合理。因为互斥有可能导致饥饿问题。所谓饥饿问题就是一个执行流,长时间得不到某种资源。这小章我来基于条件变量带大家认识线程同步。唤醒线程由系统唤醒变为让程序员自己唤醒。条件变量必须要和互斥锁mutex一同使用。代码实现条件(对应的共享资源的状态)—>程序员要判断资源是否满足自己操作的要求条件变量(条件满足或者不满足的时候,进行wait或signal的一种方式)由于解锁和等待不是原子操作。调用解锁之后,pthread_cond_wait之前,如果已经有其他线程获取到互斥量
2022-12-08 11:55:03
870
1
原创 [Linux]------初识多线程
本节重点!!!了解线程概念,理解线程与进程的区别和联系。学会线程控制,线程创建,线程终止,线程等待。了解线程分离与线程安全概念。学会线程同步学会使用互斥锁,条件变量,POSIX信号量以及读写锁。理解基于读写锁的读者写者问题。正文开始!在进程内部运行的执行流线程比进程粒度更细,调度成本更低线程是CPU调度的基本单位CPU看到的所有的task_struct都是一个进程CPU看到的所有的task_struct都是一个执行流(线程)进程是调度的基本单位!(本小节完!)
2022-11-30 12:05:04
539
原创 [Linux]-----进程信号
正文开始!生活中的信号有哪些呢?红绿灯,下课铃声,信号枪,烽火台,旗语…上面所说的所有信号的产生,最终都要有OS来进行执行,为什么?—>OS是进程的管理者!信号的处理是否是被立即处理的?–>在合适的时候信号如果不是被立即处理,那么信号是否需要暂时被进程记录下来?记录在哪里最合适呢?一个进程在没有收到信号的时候,能否知道,自己应该对合法信号作何处理呢?如何理解OS向进程发送信号?能否描述一下完整的发送处理过程?(本章完!)
2022-11-27 21:04:39
802
3
原创 [Linux]----进程间通信之共享内存
基于上篇我们利用管道进行进程间通信的使用和实现,本篇将带大家通过共享内存进行进程间通信!正文开始临界资源和信号量的主要内容会在线程部分着重带大家理解!这里是带大家浅浅的认识一下!有个了解即可!(本章完!)
2022-11-22 11:20:41
650
原创 [Linux]----进程间通信之管道通信
首先我基于通信背景来带大家了解进程间通讯!!!进程是具有独立性的!—>进程间想交互数据数据,成本会非常高!—>如果我们多进程需要协同处理一件事情我们要明确一个点,进程独立了,不是彻底独立,有时候,我们需要双方能够进行一定程度的信息交互。正文开始!管道只能用来进行具有血缘关系的进程之间,进行进程间通信。常用于父子通信管道只能单向通信(内核的实现决定)—半双工的一种特殊情况管道自带同步机制(pipe满,writer等,pipe空,reader等)—自带访问控制管道是面向字节流的。
2022-11-19 18:51:06
1836
2
原创 [Linux]----文件系统
之前我们理解到的文件描述符等内容,全部都是在内存中!因为文件被访问必须得先加载到内存中!但不是所有的文件都被打开了,还有大量的文件就在磁盘上静静的躺着。这批文件非常的多,并且杂和乱。磁盘基本的文件管理,本质工作和快递点的老板做的工作是一样的。我们把做这部分的工作的操作系统模块成为文件系统!所以我们这节需要把视角从内存迁移到磁盘上。磁盘使我们电脑上唯一的一个存储的机械设备。但是,我们目前的笔记本或者电脑可能已经不使用磁盘了。而是SSD(固态硬盘)。磁盘一个面对应一个磁头!机械式+外设=磁盘一定是很
2022-11-09 17:47:33
333
原创 [Linux]下制作myshell
本小节是完善我们上次完成[Linux]下制作简易myshell这篇博客。上次因为我们的知识还不是很完善,所以留了一些小尾巴,本篇博客来将我们的myshell完成。
2022-11-05 20:36:09
1169
1
原创 [Linux]----文件操作(重定向+缓冲区)
本节继续基于上节文件描述符继续往下拓展,讲一讲关于文件操作的重定向和缓冲区。正文开始!首先来基于上节课的问题close(1);return 1;} fprintf(stdout , "打开文件成功,fd=%d" , fd);}我们发现既没有往显示器打印,也没有往文件里面打印!然后我们将fflush()这一行代码取消注释后我们可以发现打印内容到了文件中了。至于为什么要用fflush()函数,需要了解到缓冲区的内容,接下来带大家理解!那我有一个问题了?
2022-11-04 22:59:48
824
1
原创 [Linux]----文件操作(复习C语言+文件描述符)
今天这个小结节,我来大家来了解Linux下的文件操作。首先我们来复习一下C语言的文件操作,基于C语言的文件操作我们对Linux的学习就会方便很多了!我带大家首先来了解文件相关系统的接口和文件描述符,并且理解重定向!最后在基于重定向,在下一小节将我上节写的myshell完善一下!正文开始!C默认会打开三个输入输出流,分别是stdin,stdout,stderr仔细观察发现,这三个流的类型都是FILE*,fopen返回值类型,文件指针返回值打开文件的选项。
2022-11-02 18:31:40
1112
3
原创 [Linux]下制作简易myshell
本小节将基于上篇博客的内容制作一个简易的shell脚本。大家有什么不理解的可以先去了解上篇博客的内容,链接如下进程控制!!!正文开始!!!我们先来考虑下面这个与shell典型的互动:根据命令行shell,我们可以发现他就是一个死循环,可以让我们输入命令,来进行相应的操作。1024128相比于系统的shell我们还有很多命令没有完成,例如内建命令和重定向,这些内容以后再带大家实现!(本章完!)
2022-10-30 19:38:20
528
3
原创 [ Linux ] 进程控制(下)----进程等待与进程程序替换
本小节继续承接上文进程控制继续对进程控制中的进程等待和进程程序替换内容进行讲解!正文开始。
2022-10-29 18:18:57
1106
原创 哈希----unordered_xxx的使用和模拟实现
本篇先来讲讲关于unordered_set和unordered_map的简单使用和模拟实现!下一篇博客我们再来讲讲位图和布隆过滤器的使用。正文开始!!!unordered_set在线文档说明1.无序集无序集是不按特定顺序存储惟一元素的容器,并且允许基于它们的值快速检索单个元素。2.在unordered_set中,元素的值与唯一标识它的键同时存在。键是不可变的,因此unordered_set中的元素一旦进入容器就不能被修改——但是它们可以被插入和删除。
2022-10-23 20:45:35
378
原创 [ Linux ] 进程地址空间
看到本章内容进程地址空间大家可以没有太了解或者听到过,但是学过C语言的我们都知道程序地址空间(C/C++程序地址空间),因此我们先复习一下程序地址空间!正文开始。
2022-10-20 00:01:53
443
5
原创 C++------map和set的模拟实现
在之前的讲解中我们了解到了关于set和map的简单使用set和map的模拟使用,本次我们来基于上节课的模拟实现的红黑树来对对map和set进行模拟实现!!!正文开始。
2022-10-12 22:01:11
611
1
原创 [ Linux ] 进程优先级 和 环境变量
在上篇文章我们了解了进程的状态及Linux系统的进程状态,本篇我们主要了解进程优先级及环境变量。正文开始!!!1.RI值越小越快被执行,那么加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice。2.这样,当nice值为负值的时候,那么该程序将会优先级值将变小,即其优先级会变高,则其越快被执行。3.所以,调整进程优先级,在Linux下,就是调整进程nice值。4.nice其取值范围是-20至19,一共40个级别。
2022-10-11 22:28:00
605
6
原创 [ Linux ] Linux进程状态
Linux内核源代码中,进程的状态是用数字来表示的,为了弄明白正在运行的进程是什么意思,我们需要知道进程的不同状态。一个进程可以有几个状态(在Linux内核里面,进程有时候也叫任务)/*R运行状态(running):并不意味着进程一定在运行中,它表明进程要么是在运行中,要么是在运行队列里。S睡眠状态(sleeping):意味着进程在等待事件完成(这里睡眠有时候也叫做可中断睡眠(intterruptible sleep)).
2022-10-10 16:44:45
1705
5
原创 红黑树RBTree的模拟实现
在上篇文章我们了解了第一种平衡二叉搜索树AVL树,我们知道AVL树是通过平衡因子来控制左右子树高度差,从而将二叉树变成一颗平衡二叉搜索树。但是平衡二叉搜索树因为只要不满足平衡因子的差值就需要旋转,导致旋转的次数太对了,效率可能没有那么好。本篇文章我们将要了解另外一种平衡规则控制的二叉搜索树–红黑树(RBTree)!正文开始//节点的颜色,类型为枚举类型 };在上述红黑树节点的定义中,新节点的_col默认给成红色是有意为之还是红黑色都可以呢?
2022-10-07 22:06:50
898
10
原创 [ Linux ] 进程概念,pcb,查看进程,pid,ppid,fork
父进程有自己的tast_struct+父进程的代码和数据,创建进程系统多了一个进程,子进程也应该有自己的tast_struct+子进程的代码和数据。类比到这里就是父进程必须有标识子进程的方案,fork之后,给父进程返回子进程的pid!我们在Linux中要终止一个程序可以使用ctrl+C,我们学习了进程之后,如果一旦获取到进程的pid,我们也可以通过kill命令杀掉该进程(其中-9 为9号信号)几乎我们在命令行上所执行的所有的指令(你的cmd)都是bash进程的子进程!这些都是进程的内部属性!
2022-10-06 20:43:21
924
原创 C++-----AVL树的模拟实现
上篇文章我们了解到了map/multimap/set/multiset进行了简单的介绍,在其文档介绍中发现,这几个容器有个共同点是:其底层都是按照二叉搜索树来实现的,但是二叉搜索树有其自身的缺陷,假如往树中插入的元素有序或者接近有序,二叉搜索树就会退化成单支树,时间复杂度会退化成O(N),因此map、set等关联式容器的底层结构是对二叉树进行了平衡处理,即采用平衡树来实现。正文开始!!!//该节点的左孩子 AVLTreeNode < K , V > * _right;
2022-10-04 00:41:03
447
1
原创 C++-----set和map的模拟使用
今天是十月一日,也是祖国母亲的生日,五星闪耀皆为华夏,色彩斑斓的秋天,最耀眼的是中国红!!!祝伟大的祖国母亲73岁生日快乐,愿祖国更加繁荣昌盛!!!本来这篇博客打算中午去写,赶上了今天中午女篮和美国的决赛,可能有很多的因素,输掉了这场比赛,但我认为女篮虽败永荣,为国争光!!!继续加油!!!接下来,讲讲关于本章的内容,今天主要来讲讲关于set和map的简单使用,先来了解这两个容器的简单接口和使用,到了下篇文章,我来基于AVL树和红黑树来介绍关于set和map的简单模拟实现。正文开始set的文档介绍。
2022-10-02 00:20:51
355
原创 C++----二叉树的进阶
这章我们来学习二叉树的进阶之搜索二叉树,为了更好的学习C++的map和set容器做的铺垫,这节课我们需要先了解二叉搜索树的特性,之前使用C语言去完成有些OJ可能非常困难,结合今天的学习,我们也可以对初阶的二叉树进行收尾。正文开始(本章完!)
2022-09-30 19:46:48
652
2
原创 Linux---冯诺依曼体系结构和操作系统
正文开始!计算机管理硬件描述起来,用struct结构体组织起来,用链表或其他高效的数据结构(本章完!)
2022-09-26 21:45:16
1587
6
原创 Linux下调试工具---gdb和Linux下git的上传
接着上篇文章,我们继续来讲Linux调试工具中gdb的语法和使用方法以及在Linux下上传自己的文件到Gitte码云之上。正文开始!!!(本章完!)
2022-09-22 15:56:46
453
1
原创 Linux下调试工具---yum,vim,gcc/g++
本章我们来讲述关于Linux下开发工具的讲解,文章涉及到了yum工具介绍和使用,vim编辑器的语法,gcc,g++编译器的使用和调试功能正文开始!在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.
2022-09-21 23:29:06
796
原创 C++面向对象三大特性之一------多态(下)
本章来了解关于单继承和多继承虚函数表,本章我们是进入内存中剖析虚函数表存的函数指针,内容可能有些复杂,请大家认真开完!正文开始(本章完)
2022-09-20 17:26:09
297
1
原创 C++面向对象三大特性之一------多态(上)
今天我们来讲面向对象三大特性的最后一个叫做多态,多态的特性相比于封装和继承两个特性比较,不容易理解,今天我来带大家一步一个脚印,"踏平"多态!!!需要声明的,本节课件中的代码及解释都是在vs2022下的x86程序中,涉及的指针都是4bytes。如果要其他平台下,部分代码需要改动。比如:如果是x64程序,则需要考虑指针是8bytes问题等等。正文开始多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。
2022-09-19 22:43:27
104
原创 C++面向对象三大特性之一------继承
C++这门作为面向对象的语言,继承这个特性可少不了,本篇博客内容丰富,介绍了很多部分,内容可能稍微有点难度和抽象,我给大家花了图,方便大家理解。接下来进入正片!!!正文开始继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。
2022-09-13 11:05:46
590
原创 Linux---权限的理解
上次博客写了一些关于Linux的一些基本指令的用法,本文讲一下Linux中关于权限的理解正文开始目录的可执行权限是表示你可否在目录下执行命令。如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目录, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。(本章完!)
2022-09-09 23:34:15
166
原创 Linux----常见的基本指令详解
今天我们就开始关于Linux的学习之中,我之前对Linux就很少,只知道使用一个操作系统,并且里面的内容是开源的,具体怎么使用也是不知道的,通过这几天的学习,也了解了不少指令,今天就来和大家分享一下。其次我使用Linux系统是自己买了一个云服务器,上面选的操作系统是centos的版本,然后通过Xshell去进行操作的。正文开始。
2022-09-04 16:45:00
117
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅