- 博客(40)
- 收藏
- 关注
原创 线程池
1.线程池概念线程池:在服务器启动的时候,就创建大量线程+创建一个线程安全的队列作为线程池任务来了,就将任务泡入线程池的任务队列中,线程池中的一个线程会循环去任务队列中获取任务进行处理作用:避免线程大量创建/销毁的时间成本;避免资源耗尽的风险场景:对有大量业务请求进行多任务并行/并返处理针对每个任务创建线程进行处理存在的问题:1.若任务过多,有可能创建线程过多,导致资源耗尽2.每个线...
2020-03-23 16:13:07
216
原创 生产者与消费者模型
生产者与消费者模型:一种设计模式—大佬针对典型场景一个场所,两种角色,三种关系生产者与生产者:互斥消费者与消费者:互斥生产者与消费者:同步+互斥生产者与消费者模型解决的问题:1.解耦合2.支持并发3.支持忙闲不均生产者与消费者模型的实现:生产者与消费之只是不同角色的执行流:只需要实现线程安全的队列,然后各自创建不同角色的执行流就可以实现这个模型线程安全的阻塞队列的实现:使...
2020-03-20 20:35:08
205
原创 线程安全
7.线程安全7.线程安全概念线程安全:多个执行流对临界资源进行争抢访问,而不会造成数据二义或者逻辑混乱称这段争抢访问的过程是线程安全。7.2 实现线程安全的实现:如何保证多个执行流对临界资源进行争抢访问而不会造成数据二义同步:通过条件判断,实现对临界资源访问的时序合理性互斥:通过唯一访问,实现对临界资源访问的安全性实现互斥原理:只要保证同一时间只有一个执行流能够访问资源临界资源进行...
2020-03-19 12:50:34
157
原创 linux之线程
1.线程1.1 概念说线程之前,要先来说一下进程:进程是一个pcb,pcb就是操作系统对运行中程序一个描述,在linux下这个描述是一个task_struct结构体,这个结构体中描述了一个程序的所有运行信息,操作系统可以通过这个描述实现对一个程序的调度运行,因此进程是一个pcb。线程:1.线程是进程中的一条执行流,但是linux下实现进程中的执行流的时候,使用pcb实现,2.因此就是li...
2020-03-18 12:58:42
133
原创 进程信号
1.进程信号1.1 信号的作用通知别人,发生了某件事情,尽快去处理这件事情(操作系统通知进程发生了某个事件,打断进程当前操作,去处理这个事件)1.2 信号种类查看操作系统中定义好的信号:是有kill-l可以查看信号种类用户所能看到的信号共有62种,两大分类:1-31号信号:每个信号都有具体对应的事件----非可靠信号34-64号信号:在操作系统中当前就没有具体的对应实践,因此命名比较...
2020-03-16 19:51:28
207
原创 进程间通信
进程间通信:操作系统为进程之间提供的几种通信方式。进程之间不能直接通信的原因:每个进程都有自己独立的虚拟地址空间,操作的都是自己的地址,因此进程之间具有独立性,无法直接通信,因此才需要操作系统提供通信方式。操作系统提供通信方式:实际上是提供一块公共的媒介,能够让多个进程都能访问到这个媒介实现通信管道通信(一种半双工通信)本质:操作系统在内核中创建的一块缓冲区,多个进程通过访问同一块缓冲区就...
2020-03-14 23:19:01
307
原创 进程中的IO
1.文件相关系统调用接口1.1 标准库IO接口:fopen()/fwrite()/fread()/fseek()/flcose()(1)fopen函数:FILE *fopen(char *filename,char *mode);参数:filename:要打开的文件名称mode:r:只读/r+:读写/w:只写会清空文件原有内容/w+:写+读,会清空文件原有内容/a:写在文件末尾/a+:...
2020-03-10 16:35:55
479
原创 项目之动态图片的制作
1.动态图片制作的背景随着微信的发展,越来越多的人们喜欢斗图并且使用动态图片,我的做出来一个可执行程序,可以通过这个可执行程序来制作动图。...
2020-03-07 21:55:51
1085
原创 Linux下的常用工具
1.Linux软件包管理工具 yum首先我们先来了解一下什么是软件包,为什么需要管理?1.在Linux下安装程序通常的办法是下载到程序的源代码,并且进行编译,得到可执行程序,但是这样太麻烦了,于是有些人把一些常用的软件提前编译好,做成软件包放在一个服务器上,通过软件包管理器可以很方便的获取到这个编译好的软件包直接进行安装。2.软件包和软件包管理器,就好比“APP”和“应用商店”这样的关系,而...
2020-03-02 21:19:50
261
原创 linux下基础指令
Linux下基础指令1.关于目录的指令1.ls指令语法:ls [选项][目录或文件]功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。常用选项:-l 列出文件的详细信息-a 列出目录下所有文件,包括以.开头的隐含文件-d 将目录像文件一样显示,而不是显示其下的文件-r 对目录反向排序-t 以时间排序-i 输出文件的 i 节点的索引信息...
2020-02-29 22:24:18
725
原创 树形结构的关联式容器
树形结构的关联式容器1.关联式容器&&键值对1.关联式容器:用来存储数据的,与序列式容器不同的是,其里面存储的<key,value>结构的键值对,在数据检索时比序列式容器效率高。2.键值对:用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值,value表示与key对应的信息。2.树形结构的关联式容器根据应用场景...
2019-12-13 19:09:51
150
原创 C++的类型转换
C++的类型转换1.C语言的类型转换隐式类型转换和显示类型转换int main(){ int i = 1; //隐式类型转换 double d = i; printf("%d, %.2f\n", i, d); int *p = &i; //显示的强制类型转换 int address = (int)p; printf("%x,%d\n", p, address);...
2019-12-11 20:32:55
110
原创 智能指针
智能指针今天我们主要就是来说一下智能指针,在前面的c语言阶段,我们就没有接触过这些东西,但是通过对c++知识的进一步了解,我们会发现c++存在内存泄露问题和在上一篇博客中提到的异常问题。1.智能指针的引入首先来看一下这段代码,分析一下他有没有什么内存问题。#include <iostream>#include <vector>using namespace st...
2019-12-11 18:24:44
155
原创 string类的模拟实现
string类的模拟实现在前两篇博客,C++之string类中我们已经把string类的接口,以及用法介绍过了,今天我们就主要来说string类的实现如果还有不懂的可以去看看上一篇博客。...
2019-11-30 21:53:19
133
1
原创 string类的深浅拷贝
string类模拟实现在上一篇博客,C++之string类中我们已经把string类的接口,以及用法介绍过了,今天我们就主要来说string类的实现如果还有不懂的可以去看看上一篇博客。1.string中的经典问题大家先看一下这一段代码:class String{public: String(const char* str = "") { //构造string类对象时,如果传递n...
2019-11-15 17:29:15
149
原创 C++之异常
1.C语言传统的处理错误的方式在说C++中异常之前,我们先来看看C语言的问题。传统的错误处理机制:1.**终止程序。如assert,**缺陷:用户难以接受,如发生内存错误,除0错误时就会终止程序。2.返回错误码,缺陷:需要程序员自己去查找对应的错误。如系统的很多库的接口函数都是通过把错误码放到errno,表示错误。3.C标准库中的setjmp和longjmp组合。实际中C语言基本都是使...
2019-11-14 21:51:07
257
原创 C++之多态
C++的多态1. 多态的概念多态:在继承的基础上·,同一件事物,在不同场景下表现出不同的状态。通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。举个例子:比如买票这个行为,当普通人买票时,是全价买票;学生买票时,是半价买票;军人买票时,是优先买票。2.多态的定义即实现2.1多态的构成条件多态是在不同继承关系的类对象,去调用同一个函数,产生的不同行...
2019-11-08 21:59:31
210
1
原创 C++的继承
C++的继承1. 继承的概念和使用1.1继承的概念继承是面向对象程序设计使用代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称为派生类。...
2019-10-09 21:23:56
169
原创 C++之string类
今天我们就来说说C++中的string类吧,再说string类之前,就先说说它怎么来的吧。STL1.什么是STL解答:STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且 是一个包罗数据结构与算法的软件框架。2.STL的六大组件(1)容器:常见的数据结构(2)算法:与具体的数据结构相关的算法+通用算法(...
2019-09-29 10:00:55
111
原创 顺序表与链表
线性表在说顺序表和链表之前,我们先来说说线性表吧。(1)线性表:是具有n个相同特性的数据元素的有限序列,线性表是在实际中广泛使用的数据结构。(2)常见的线性表:顺序表,链表,字符串,栈,队列(3)结构:线性表在逻辑上是线性结构,也就说是一条连续的直线。但是在物理结构上并不一定是连续的,线性表在物 理上存储时,通常以数组和链式结构的形式存储。顺序表1.概念和结构(1)顺序表:用一段物...
2019-08-01 20:21:07
231
原创 链表的基本功能实现
上一篇博客已经介绍了链表的性质,在这里就不多说了,直接上代码,有问题的可以评论直接问,会给解答的哟。(1)无头单向不循环链表// 链表的初始化 void SListInit(SList* pl){ Node *pHead = NULL;}// 在链表中尾插值为data的节点 void SListPushBack(SList* pl, SDataType data){ Node...
2019-08-01 20:18:56
170
原创 C++之模板
模板再说模板之前我们先来说一个例子吧,例如在C++中我们要写一个函数来计算一下不同类型数的加法。int Add(int left, int right){ return left + right;}double Add(double left, double right){ return left + right;}char Add(char left, char right)...
2019-08-01 17:11:32
108
原创 内存泄漏
1.内存泄漏1.1 概念内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。1.2 内存泄漏的危害(1)长期运行的程序出现内存泄漏,会使程序占用的内存一直增加,最后就会出现内存耗尽而导致宕机。(2)...
2019-08-01 14:19:07
126
原创 C++内存管理
C++内存管理1.内存分布在C++中的内存分布主要是:(1)栈又叫堆栈,存储非静态局部变量、函数参数、返回值等(2)内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可以使用系统接口创建共享共享内存,做进程间的通信。(3)堆用于程序运行时动态内存分配(4)数据段—存储全局数据和静态数据(5)代码段—可执行的代码/只读常量2.C语言中动态内存管理方式2.1 ma...
2019-07-31 17:22:40
78
原创 类与对象 (2)
类与对象(2)1.列表初始化(1)列表初始化的引入在创建对象时,编译器通过调用构造函数,给对象各个成员变量一个合适的初始值,class Date{public: Date(int year = 2019, int month = 7, int day = 27) { _year = year; _month = month; _day = day; }pri...
2019-07-29 21:26:01
63
原创 类与对象之类的6个默认成员函数
类的6个默认的成员函数1.构造函数1.1 概念构造函数:是一个特殊成员函数,名字与类相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只调用一次。1.2 特点(1)函数名与类名相同。(2)无返回值。(3)对象实例化时编译器自动调用对应的构造函数。(4)构造函数可以重载。(5)如果类中没有显示定义构造函数,则编译器会自动生成一个无...
2019-07-27 17:53:10
109
原创 栈和队列
栈1.栈的概念及结构栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作,进行数据插入和删除操作的一段称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈,出数据也在栈顶。2.栈的实现栈的实现一般可以使用数组或者链表,相对而言数组的结构实现...
2019-07-25 21:57:11
98
原创 类与对象(1)
类与对象(1)1.类与对象的初步认识C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事拆分为不同的对象,靠对象之间的交互完成。而类的定义是在C++主要是对主观世界的抽象的分类,而类通过实例化就是变成对象。那么什么是类呢?在C语言中,结构体中只能定义变量//在c语言中结构体的定义struct Node{...
2019-07-25 15:49:35
129
原创 初识C++之C++中的小知识点
1.什么是C++1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。因此:C++是基于C语言而产生的,它既可以进行C语 言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。2.C++中的关键字(C++98)3.命名空间在C++...
2019-07-24 17:55:44
717
原创 二叉树链式存储结构代码实现
上一篇博客已经介绍过实际内容了,这一篇直接上干货代码了。结构体前面写的是用c语言写的,用的也是递归的方法typedef char BTDataType;typedef struct BTNode{ struct BTNode* left; struct BTNode* right; BTDataType data;}BTNode;1、创建二叉树typedef struct ...
2019-07-23 22:47:33
5192
4
原创 树与二叉树
树1.树的概念:是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。2.树的特点:(1)每个结点有零个或多 个子结点(2)没有父结点的结点称为根结点(3)每一个非根结点有且只有一个父结点(4)除了根结点外,每个子结点可以分为多个不相交的子树 。3.树与非树的区别:(1)子树是不予相交(2)除了根结点外,每个结点有且仅有一个父结点(3)一颗N个...
2019-07-23 22:25:09
160
原创 关于堆知识点的整理
堆首先堆不是内存中的一片区域,而是一种数据结构。1.堆的概念:如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储 在一个一维数组中,并满足:Ki <= K2i+1 且 Ki<= K2i+2 (Ki >= K2i+1 且 Ki >= K2i+2) i = 0,1,2…,则称为 小堆(或大堆)。将根节点最大的堆叫...
2019-07-22 16:58:37
543
原创 排序之简单排序的整理
1.排序的概念排序:所谓排序就是使一串记录,按照其中的某个或者某些关键字的大小,递增或者递减起来的操作。内部排序:数据元素全部放在内存中的排序。外部排序:数据元素太多不能同时放在内存中,根据排序过程中的要求不能在内外存之间移动数据的排序。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次 序保持不变,即在原序列中,r[i]=r[j],且r[i]在...
2019-07-20 23:41:31
197
原创 操作符总结
操作符总结通过一段时间的学习,我今天要给大家总结一下操作符。首先呢,操作符分为算术操作符移位操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符条件操作符逗号表达式下标引用、函数调用和结构成员接下来要具体介绍这些操作符有哪些作用,还有那些要注意的事项。1.算术操作符+ - * / %除了%操作符之外,其他的几个操作符可以作用于整数和浮点数,并且%...
2019-05-10 14:42:53
107
原创 用c语言简单实现小游戏——扫雷
用c语言简单实现小游戏——扫雷扫雷是大家小时候大家在电脑上都玩过的单机游戏,它点开一个可能会展开一大片,你要通过这个数字判断他周围的雷个数。首先扫雷要写三个文件:头文件:game.h //包含函数各种声明,宏定义源文件:test.c //主要负责测试整个代码源文件:game.c //包含各种函数的定义整体思路1.玩游戏之前,首先我们需要一个菜单,来确定你是不是要玩游戏。void m...
2019-05-07 23:29:06
515
原创 程序员进阶之路----三子棋
程序员进阶之路----三子棋三子棋是大家小时候都玩过的游戏,它就是一方连成一条线,就可以赢。首先写三子棋分为:头文件:game.h //包含函数各种声明,宏定义源文件:main.c //主要负责测试整个代码源文件:game.c //包含各种函数的定义整体思路...
2019-04-28 18:54:13
160
原创 菜鸟的学习开始
这是我的第一篇博客,有点不知道要写点啥,内心还有点小激动。作为一个计算机系大二的学生,自己的编程能力…真是不好说,而编程是我未来几年每天都要接触的东西,当时报计算机的时候就很犹豫,因为以前就没有接触过,学习了一年之后,感觉编程的思维很重要,因为有可能有些东西对于女生来说就是想不到。我有点害怕,但是我觉得“世上无难事只怕有心人”,只要我去坚持努力的做一件事,那肯定会收获到想要的结果的。学习是一个...
2019-04-03 21:27:27
529
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人