自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 从字节面试题来看二级指针的使用

面试题:写一个函数实现一个:(分配指定大小的内存块,可以使用malloc)intmy_malloc(char **ptr,int size)使用下面的形式来用这个函数:*ptr=NULL;my_malloc(&ptr,10)正确解法:int my_malloc(char** ptr, int size) {char* temp = NULL; //ptr应该指向传递进来的指针,ptif (ptr == NULL) {...

2020-08-27 15:16:53 190

原创 简单了解一下大小端以及判断方法

大端模式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址端。小端模式,是指数据的高字节保存在内存的高地址中,低位字节保存在在内存的低地址端。网络通信中一般为大端模式,常用计算机CPU为小端模式。判断大小端的三种方法:1.利用联合体的性质int main() {union AA {int a;char b;}A; ...

2020-08-18 17:09:42 493

原创 简单理解一下#ifndef /#define /#endif的作用

作用:防止该头文件被重复引用! “被重复引用”是指一个头文件在同一个cpp文件中被include了多次,这种错误常常是由于include嵌套造成的。比如:存在a.h文件#include "c.h"而此时b.cpp文件导入了#include "a.h" 和#include "c.h"这种情况下C.h就会出现重复引用的状况!重复引用的后果:增加编译的工作量,编译效率下降,大型工程下会严重影响编译效率,可能存在大量的重复引用不是一定要用#ifnde xxx #define xxx...

2020-08-18 11:28:38 1123

原创 算法时间与空间复杂度杂谈

一、时间复杂度1.常量阶O(1)int i = 8;int j = 6;int sum = i + j; 只要代码的执行时间不随 n 的增大而增长,这样代码的时间复杂度我们都记作 O(1)。或者说,一般情况下,只要算法中不存在循环语句、递归语句,即使有成千上万行的代码,其时间复杂度也是Ο(1)。2.线性阶、平方阶、立方阶....int cal(int n) { int sum = 0; int i = 1; for (; i <= ...

2020-05-16 18:08:33 175

原创 malloc与new用法与区别

一、malloc()和free C语言中malloc函数向系统申请分配size个字节的内存空间。返回值类型是void* 类型。void* 表示未确定类型的指针。c,c++规定,void* 类型可以强制转换为任何其它类型的指针。void *malloc(size_t size);void free(void *ptr);eg:// char *Ptr = NULL; Ptr = (char *)malloc(100 * sizeof(ch...

2020-05-11 18:01:11 698

原创 C语言的内存管理以及堆和栈的区别

一、C语言的内存分配1.可执行文件存储时(没有调入到内存) 分为代码区(text)、数据区(data)和未初始化数据区(bss)3个部分。1)代码区:存放CPU执行的机器指令(machine instructions)。通常,代码区是可共享的(即另外的执行程序可以调用它),因为对于频繁被执行的程序,只需要在内存中有一份代码即可。代码区通常是只读的,使其只读的原因是防止程序意外地修改了它的指令。另外,代码区还规划了局部变量的相关信息。2)数据区:包含了被初始化的全局变量、静态变量(包括...

2020-05-11 11:25:45 632

原创 static、const、extern关键字的详解

一、static关键字1.局部变量中的static 普通局部变量就是在函数内部定义的变量(不加static修饰符)。编译器一般不对普通局部变量进行初始化,它的值在初始时是不确定的,除非对其显式赋值。普通的局部变量在栈空间上分配,这个局部变量所在的函数被多次调用时,每次调用这个局部变量在栈上的位置都不一定相同。局部变量也可以在堆上动态分配,但是记得使用完这个堆空间后要释放之。static局部变量叫静态局部变量。它与普通的局部变量的区别1)位置:静...

2020-05-09 22:15:12 917

原创 linux内核中的链表与常用链表的区别

一、链表1.常用的链表结构特点:每个链表的节点就是一个数据结构struct common_fox { unsigned long tail_length; //尾巴长度 unsigned long weight; //重量 bool is_fantastic; //这只动物奇妙吗? struct common_fox *next; st...

2020-05-07 22:41:19 595

原创 一维、二维动态数组的定义与其数值的输入(使用数组与vector)

一、一维数组1.动态数组来实现#include<iostream>#include<vector>using namespace std;int main() { //输入行数 int n; cin >> n; //一维动态数组的申请 int *a = new int[n]; //输入数组的每个元素 f...

2020-04-10 21:35:10 554

原创 操作系统的基本类型及其特点

典型的操作系统类型:批处理系统、分时系统、实时系统、分布式操作系统1.批处理操作系统(分为单道和多道批处理操作系统,一般指多批道) 是指用户将一批作业提交给操作系统后就不再干预,由操作系统控制它们自动运行。这种采用批量处理作业技术的操作系统称为批处理操作系统。优缺点:系统利用率高、系统吞吐量大 平均周转时间长、无交互能力2.分时操作系统 把计...

2020-03-07 16:26:47 14579

原创 I/O子系统

一、I/O特点1.设备接口类型1.1字符设备访问特征:以字节为单位顺序访问 I/O命令:get()、put()等,通常使用文件访问接口和语义。1.2块设备访问特征:均匀的数据块访问。 I/O命令:原始I/O或者文件系统接口、内存映射文件访问。1.3网络设备访问特征:格式化报文交换。 I/O命令:send/receive网络报文、通过网络节后支持多种网络协议。...

2020-03-07 15:52:49 450

原创 文件系统

一、文件系统1.文件与文件系统文件系统:是操作系统中管理持久性数据的子系统,提供数据存储和访问功能。文件:是具有符号名,有字节序列构成的数据项集合2.文件系统的功能3.文件属性4.打开文件和文件描述符文件描述符:操作系统在打开文件表中维护的打开文件状态和信息,它包括:文件指针:最近一次读写位置、每个进程分别维护自己的打开文件指针...

2020-03-07 13:37:48 178

原创 进程间通信

1.进程通信定义2.进程通信方法间接通信:两个进程的生命周期可以不一样。直接通信:两个进程必须同时存在。2.1直接通信2.2间接通信2.3阻塞通信与非阻塞通信2.4通信链路缓冲3.进程间通信的实现方式3.1信号3.2 管道3.3 消息队列一个进程可以创建消息队列,进程销毁时消息队列还可...

2020-03-06 18:36:08 109

原创 死锁

1.死锁的定义由于竞争资源或者通信关系,两个或者多个线程在执行中出现,永远相互等待只能有其他进程发起的事件。可重用资源:资源不可以被删除且在任何时刻只能有一个进程使用、进程释放资源后、其他资源可重用硬件:处理器、I/O通道、主妇存储器、设备等软件:文件、数据库和信号量等数据结构可能出现死锁消耗资源:资源创建和销毁。在I/O缓冲区的中断、信号和消息可能...

2020-03-06 18:04:34 174

原创 信号量与管程

一、信号量信号量是操作系统提供的一种协调共享资源访问的方法信号量的实现: 为什么信号量的实现就不会被中途打断呢,因为信号量是由操作系统来实现的,保证了PV操作的原子性,这也是其主要的优势。classSemaphore{ int sem; WaitQueue q;}Semaphore::P() { sem--; if(s...

2020-03-06 09:40:55 746

原创 同步互斥

一、背景eg:新进程分配标识符中可能错误:原子操作(Atomic Operation)二、同步问题家庭买面包问题,出现的问题:互斥:一个进程占用资源,其它进程不能使用。死锁:多个进程各占用部分资源,形成循环等待。饥饿:其它进程可能轮流占用资源,一个进程一直得不到资源。三、临界区(Critical Section)1.临...

2020-03-04 17:39:30 141

原创 优先级反转(反置)

一、优先级反置基于优先级的可抢占调度算法存在优先级反置解决方案:1.优先级继承:占用资源的低优先级进程继承申请资源的高优先级进程的优先级(只有战友资源的低优先级进程被阻塞时,才提高资源进程的优先级)2.优先级天花板协议...

2020-03-04 15:34:45 629

原创 实时调度和多处理器调度

一、实时操作系统二、多处理机调度算法

2020-03-04 15:22:26 188

原创 处理机调度

一、处理机调度概念进程切换:CPU资源的当前占用者切换 保存当前进程在PCB中的执行上下文(CPU状态) 恢复下一个进程的执行上下文处理器调度: 从就绪队列中挑选一个占用CPU运行的进程 从多个可用CPU中挑选就绪进程可用的CPU资源调度程序:挑选就绪进程的内...

2020-03-04 15:06:02 139

原创 进程切换、等待与退出

一、进程切换二、进程创建Windows的API:CreatProcessUnix进程创建系统调用:fork/exec:fork()把一个进程复制成两个进程、exec()用新程序来重写当前进程。fork()的实现原理:fork执行的时候做了一个复制,复制完了之后给它一个新的ID,接着往下执行,父进程由于pid不等于0就执行父进程的内容,子进程由于pid等于0就执行ex...

2020-03-02 14:41:10 177

原创 进程与线程的定义

一、进程1.进程的定义与组成定义:一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。组成:程序的代码、程序处理的数据、程序计数器中的值,指示下一条将运行的指令、 一组通用寄存器的当前值,堆、栈、一组系统资源。总之,进程包含了正在运行的一个程序的所有状态信息。特点:动态性、并发性、独立性、制约性2.进程与程序的联系联系:程序时产生进程的基础程序的每...

2020-03-01 16:18:37 177

原创 算法——简单算法的实现

1.二维数组相乘(n*n)#include <iostream>#include <vector>using namespace std;int main(){ int n; cout << "请输入数组维度:"; cin >> n; vector<vector<int>> c(n); vector&...

2019-10-24 11:01:46 868

原创 数据结构——图

注意的是:邻接矩阵使用矩阵来表示,邻接表和十字链表都是用来表示有向图的,最后一个邻接多重表用来表示无向图!二.邻接矩阵有权值得时候可以将1直接改为权值就好了!三.邻接表四.十字链表五.邻接多重表——链式存储无向图...

2019-10-24 11:00:55 77

原创 数据结构——链表(c++ 实现)

一.静态链表静态链表没有指针但是也可以实现链表的结构,可以通过数组来实现,如下图所示,头结点数为1,说明下一个指向1;然后1的头结点数是4,下一个元素便指向4号,4号的头结点数为2.。。。。。一.单链表代码实例:#include<stdlib.h>#include<iostream>using namespace std;cla...

2019-10-24 11:00:08 641

原创 排序方法总结

1.选择排序(时间复杂度固定为为O(n*n)与输入的数组内部顺序无关,数据移动是最少的,但不稳定)基本思想是首先将第一个和后面的元素比较将最小的放在第一个,然后将第二个同样操作。void select_Sort(int a[],int n){ int i, j; for (i = 0; i < n-1; i++) { for (j = i+1; j < n; j+...

2019-10-23 20:55:37 114

原创 数据结构——线性表(c 实现)

#include<stdlib.h>#include<iostream>using namespace std;class List{public: List(int size) { m_iSize = size; m_pList = new int[m_iSize]; m_iLength = 0; } ~List() { del...

2019-09-04 21:46:39 140

原创 数据结构——栈

一.什么是栈栈是一种机制:后进先出 LIFO:last in first out二.单一数据类型栈main函数文件:#include <iostream>#include"stdlib.h"#include"MyStack.h"using namespace std;/*******************************************...

2019-08-26 17:39:25 123

原创 数据结构——队列

1.什么是队列 队列,又称为伫列(queue),是先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。2.普通队列只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受...

2019-08-25 13:44:30 835

原创 c++学习——(18)标准模板库

一.标准模板库STL:Standard Template Lib 标准模板库1.vector向量本质:对数组的封装特点:读取能在常数时间完成eg1:我们首先创建一个向量变量,然后向其尾部插入一个10,然后再删掉尾部的10,最后打印向量的长度还是0。eg2:遍历向量(还可以使用迭代器)2.迭代器:iterator注意一下向量迭代器的定义:vect...

2019-08-21 22:18:56 123

原创 c++学习——(17)模板函数与模板类

一.函数模板1.函数模板的定义下图中我们三个函数实现的功能实际是一样的,只是数据的类型不同。我们可以通过函数模板来实现将类型作为参数传递就可以实现这三个函数。使用关键字:template typename class注意:typename和class可以混用,他们是一个意思。eg1:通过class来定义模板函数,下图中我们定义了一个max函数模板,并使用这个函数模板,当...

2019-08-21 21:39:15 278

原创 c++学习——(16)运算符重载

一.运算符重载的概念 概念:使原有的运算符赋予新的功能! 本质:函数重载eg1: 用“+”符号一般用来做加法,但是也可以用来拼接字符串。下图中“+”、“=”、“<<”都进行了重载。eg2:下图中我们可以让两个坐标相加得到一个新坐标,但是“+”本身并不具备这样的功能,可以通过运算符重载来让“+"有这样的功能;我们想直接输出一个坐标也可以通过重载输...

2019-08-21 16:42:57 310

原创 c++学习——(15)静态数据成员与静态成员函数

1.静态成员和静态成员函数的定义静态成员并不依赖于对象而是依赖于类,如果我们不实例化对象静态数据成员在内存中依旧存在。静态数据成员会在构造函数中实例化,它的实例化往往是单独进行的。看下图中我们静态数据成员的实例化就是:int Tank::s_iCount不需要加static关键字。2.静态数据成员与静态成员函数的调用访问的方法有两种:第一种不通过对象直接通过类来访问 ...

2019-08-21 11:10:58 252

原创 c++学习——(14)友元函数

一.友元函数1.全局友元函数的定义 友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。类授予它的友元特别的访问权。如下图所示,我们的友元用关键字friend来定义,可以通过定义好的友元函数来访问私有成员,如果printXY不是友元函数编译器会报错!2.友元成员函数 下图中我们将Cicle类的成员函数声明为Coordinate的友元函数...

2019-08-20 16:38:04 155

原创 c++学习——(13)异常处理和多态的应用

1.异常处理关键字关键字:try——catch:尝试(try)运行正常逻辑,如果在运行正常逻辑中出现异常就会用catch来进行捕获。(主逻辑放在try块里面异常处理逻辑放在catch里面) throw:抛出异常基本思想:主逻辑与异常处理逻辑分离。2.异常处理流程 如果我们定义三个函数f1、f2、f3。用f2来调用f1,用f3来调用...

2019-08-19 16:51:28 179

原创 c++学习——(12)纯虚函数与RTTI

一.纯虚函数1.纯虚函数的定义:2.纯虚函数的理解: 如果我们定义了一个Shape类,因为有虚函数和纯虚函数,座椅它一定有一个虚函数表,也就会有一个虚函数表指针。如果是一个普通的虚函数那么虚函数表中的函数指针就有一个有意义的值指向一个函数:但是如果是一个纯虚函数那么这个值就是0。3.抽象类:含有纯虚函数的类就叫做抽象类!抽象类是无法实例化对象的!...

2019-08-19 15:27:59 150

原创 c++学习——(11)多态与虚函数

一.多态1.多态的定义 指相同对象收到不同消息或不同对象收到相同消息时产生不同的动作2.静态多态(早绑定)VS动态多态(晚绑定)静态多态:以下图为例子,程序在编译前就确定了使用的是哪个calcArea函数,这就是早绑定也就是静态多态。动态多态:目前所指的对象类型在运行时才确定的。前面我们定义了三个类,在使用的时候:我们调用的cal...

2019-08-16 17:04:37 348

原创 c++学习——(10)继承与继承方式

一.什么是继承1.什么是继承c++中的继承和我们生活中所说的继承遗产,继承家业不是一个意思。c++中的继承指的是:面向对象程序设计中使代码可以复用的重要手段,它允许程序员在原有类特性的基础上进行扩展增加功能。这样产生的新的类叫派生类。2.为什么要继承当我们定义一个人类的类,然后定义了一个一个工人类的时候,我们发现工人类具有比人类更多的属性,而且他也具有了所有人类的属性,那么我...

2019-08-15 16:33:42 212

原创 c++学习——(9)常对象成员和常成员函数

一、常对象成员1.常对象成员的定义 我们前面讲到过的,讲类的数据成员用const来修饰那么我们初始化的时候,直接初始化赋值是不对的,但是可以通过初始化列表来赋值。 前面说的用const修饰的数据成员都是一些基本的数据成员,那么可不可以用const来修饰对象成员呢,答案是可以的我们把这种用const修饰的对象成员称为常对象成员,我们还是用线段的例子...

2019-08-11 14:13:11 494

原创 c++学习——(8)this指针

一.对象指针1.什么叫对象指针 顾名思义就是指向对象的指针,如下图我们在堆上实例化一个对象时,使用指针*p指向我们实例化的对象,那么我们对对象数据的访问方法有两种。一种是常见的p->m_iX,另为一种就是(*p).m_iY.思考能不能用指针指向在栈上实例化的对象呢?(肯定是可以的)具体实现如下图:Coordinate p1;Coordinate *p2 = ...

2019-08-09 16:41:34 156

原创 c++学习——(7)深拷贝浅拷贝

一.深拷贝和浅拷贝的定义1.浅拷贝 我们前面已经讲过拷贝构造函数的定义与使用了,这里我们简单地讲一下:当我们实例化arr1时采用的是构造函数Array()也就是将arr1中的数据成员m_iCount赋值为5.如果我们是用arr1来初始化art2,那么当arr2实例化的时候呢调用的就是它的拷贝构造函数Array(const Array& arr),里面的代码实现就相...

2019-08-08 20:55:28 230

空空如也

空空如也

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

TA关注的人

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