学习与总结
懒洋洋
这个作者很懒,什么都没留下…
展开
-
C语言文件操作相关函数
在实际程序运行中,我们往往需要从文件中读取数据,或者需要往文件中写入数据,那如何完成这些操作?我们就需要掌握一些文件操作函数了。文件名一个文件要有一个唯一的文件标识,以便用户识别和引用。文件名包含:文件路径+文件名主干+文件后缀在电脑中一个文件名为:但在程序中,为了与一些转移字符区分开,会这样表示一个文件名: D:/SHDownload/lrc 即将““换为”/".文件指针每...原创 2019-04-22 11:41:20 · 9654 阅读 · 2 评论 -
【Linux】僵尸进程与孤儿进程
1、僵尸进程什么是僵尸进程?处于僵死状态的进程-----(危害)会造成资源泄漏僵尸进程的产生原因:子进程先于父进程退出,因为要保留退出原因,因此操作系统不能直接释放所有资源,通知父进程获取退出原因,允许操作系统释放资源,但是父进程没有关注这个通知导致子进程退出后无法释放所有资源,处于僵死状态成为僵尸进程。如何避免:进程等待出现了僵尸进程如何处理:结束掉父进程,僵尸进程也就结束了...原创 2019-05-29 19:21:45 · 199 阅读 · 0 评论 -
【Linux】fd与FILE结构体
【问题描述】:练习open/read/write/close等文件相关系统调用接口,纵向对比fd与FILE结构体标准库中的IO接口:fopen(path, mode(" r:只读 r+:可读可写 w:只写,文件不存在时创建,写入时会发生截断 w+:可读可写 a:追加写 a+:可读可写"))、fwrite/fread、fseek、fclose ...原创 2019-06-10 15:17:04 · 282 阅读 · 0 评论 -
【Linux】进程间通信的几种方式总结
介绍与总结以下几种进程间通信方式:管道:匿名管道 命名管道System V进程间通信共享内存 消息队列 信号量管道:半双工通信(可选方向的单向传输)。本质是内核中的一块缓冲区。实现进程间通信的原理:让多个进程通过访问到相同的缓冲区来实现通信。管道实现通信使用的是系统调用的IO接口(这也遵循了一切皆文件的思想)。1、匿名管道及代码实现匿名管道只能用于具有亲缘...原创 2019-06-21 17:26:26 · 1017 阅读 · 0 评论 -
【C++】类与对象知识点整理
1、类的6个默认成员函数空类:如果一个类中什么成员都没有,形如下面这样,我们就称其为空类。class Date { };那空类中什么都没有吗?并不是,任何一个类,在我们不写内容的情况下都会自动生成6个默认成员函数。2、构造函数1、概念构造函数是一个特殊的成员函数,名字和类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命...原创 2019-06-17 21:14:58 · 376 阅读 · 0 评论 -
【C++】入门知识点整理
1、C++关键字在C++98中,有63个关键字。(注意不能遗漏标准名称,任何不带标准名称来说关键字个数都是耍流氓。。)2、命名空间1、定义命名空间,需要用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。普通的命名空间 命名空间嵌套 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个空间。注意:一个命名空间就定义了...原创 2019-06-12 11:49:29 · 393 阅读 · 0 评论 -
【Linux】信号相关知识点整理
信号概念是一个软件中断,通知进程发生了某件事情,中断进程当前操作,让进程去处理这个事件。信号有很多种:62种信号,两大类型:可靠信号:34~64/非可靠信号:1~31.进程必须识别这些信号。查看信号种类:kill -lkill杀死进程的原理:向进程发送信号--通知事件,让进程自己退出信号生命周期:信号的产生--->在进程中注册--->在进程中注销--->...原创 2019-06-24 14:04:30 · 241 阅读 · 0 评论 -
【C++】深拷贝以及string类的其传统版与现代版写法
浅拷贝:浅拷贝,也称为拷贝,编译器只是将对象中的值拷贝过来。如果对象中管理资源,最后会导致多个对象共享同一份资源,当一个对象销毁时就会将该资源释放掉,而此时另一些对象不知道该资源已经被释放,还是按照正常的状态来处理,所以当继续对资源项操作时,就会发生访问违规。要解决浅拷贝问题,C++中引入了深拷贝。深拷贝:如果一个类中涉及到资源的管理,其拷贝构造函数、赋值运算符重载以及析构函数必须要显...原创 2019-07-08 17:18:13 · 178 阅读 · 0 评论 -
【Linux】线程概念及线程控制
1、进程与线程什么是线程?在一个程序里的一个执行路线就叫做线程,即线程是“一个进程内部的控制序列” 一切进程至少都有一个执行线程 线程在进程内部运行,本质是在进程地址空间内运行 在Linux系统中,在cpu眼中,看到的pcb都要比传统的进程更加轻量化 线程是一个执行流,用来运行代码,处理数据。线程概念:先说进程:在传统操作系统中使用pcb来描述一个程序的运行---pcb就是进...原创 2019-07-15 16:33:38 · 161 阅读 · 0 评论 -
【C++】继承定义及基类与派生类对象赋值转换
1.继承概念继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。具体定义格式如下:继承关系与访问限定符有:继承方式:public继承、protected继承、privat...原创 2019-07-23 16:21:09 · 711 阅读 · 0 评论 -
【C++】实现一个不能被继承的类
【常见面试题】实现一个不能被继承的类思路:如何让一个类不能被继承?我们知道如果一个类被继承,派生类要生成其类对象,就需要调用其构造函数,而派生类的构造函数必须调用基类的构造函数基类的构造函数初始化基类的那一部分成员。那如果我们将一个类的构造函数给成私有的呢? 给成私有限定后,确实不能被继承了,可是这个类本身也不能创建对象了。 把构造函数设为private限定类型,在类中定义一个静态函数...原创 2019-07-23 16:36:37 · 264 阅读 · 0 评论 -
【C++】菱形继承及菱形虚拟继承
什么是菱形继承?首先,我们看一下单继承,以及多继承是什么?单继承:一个子类只有一个直接父类时称这个继承关系为单继承多继承:一个子类有两个或以上直接父类时称这个继承关系为多继承菱形继承:菱形继承是多继承的一种特殊情况菱形继承的问题:从下面的对象成员模型构造,可以看出菱形继承有数据冗余和二义性的问题。在Assistant的对象中Person成员会有两份。虚拟继承...原创 2019-07-31 17:47:07 · 255 阅读 · 0 评论 -
【C++】智能指针
内容:为什么需要智能指针? 几种智能指针的使用及原理1、为什么需要智能指针?malloc,或者new出来的空间没有进行释放,存在内存泄漏的问题; 异常安全问题。如果在malloc和free之间(或者new与delete)存在抛异常,那么内存泄漏还是会发生,这种问题就叫做异常安全。2、智能指针的使用及原理2.1 RAIIRAII是一种利用对象生命周期来控制程序资源(如内存、文...原创 2019-08-27 11:31:14 · 253 阅读 · 0 评论 -
【C++】shared_ptr的线程安全及循环引用问题
std::shared_ptr的线程安全问题shared_ptr的线程安全分为两方面:智能指针对象中引用计数是多个智能指针对象共享的,两个线程中智能指针的引用计数同时++或--,这个操作不是原子的,引用计数原来是1,++了两次,可能还是2,这样引用计数就错乱了。会导致资源未释放或者程序崩溃的问题。所以智能指针中引用计数++、--是需要加锁的,也就是说引用计数的操作是线程安全的。 智能指针...原创 2019-08-27 12:04:17 · 805 阅读 · 0 评论 -
【网络】在浏览器地址栏输入一个url,按下回车之后会发生什么?用到哪些协议?用到哪些层?
在浏览器地址栏键入URL,按下回车之后会经历哪些流程?1、DNS解析,得到IP地址;DNS是什么?DNS是一种组织成域层次结构的计算机和网络服务命名系统,用于TCP/IP网络,所提供的服务是用来将主机名和域名转换成IP地址的工作。DNS解析过程:主机查询DNS缓存,如果没有就会给本地DNS发送查询请求; 本地的DNS服务器向根域名服务器发送查询请求,根域名服务器返回该域名的一...原创 2019-10-06 12:12:52 · 1998 阅读 · 0 评论 -
【Linux】popen与system函数
首先我们来看一下popen函数:用man命令来查看popen会看到这样的介绍:Name:popen,pclose--pipe stream to or from a processSynopsis:#include <stdio.h>FILE* popen(const char * command,const char * type);int pclose(FI...原创 2019-06-05 18:45:57 · 369 阅读 · 0 评论 -
【Linux】进程的创建、等待与终止
进程创建使用fork函数来创建进程,它可以从已存在的进程中创建一个新进程,新进程为子进程,原进程为父进程。进程调用fork,当控制转移到内核中的fork代码后,内核:分配新的内存块和内核数据结构给子进程 将父进程部分数据结构内容拷贝至子进程 添加子进程到系统进程列表中 fork返回,开始调度器调度进程创建的代码:运行结果:可以从结果看出新产生了一个pid为406...原创 2019-06-05 16:32:52 · 337 阅读 · 0 评论 -
时间复杂度与空间复杂度
如何衡量一个算法的好坏?即算法的效率问题,分为两种:一种是时间效率(被称为时间复杂度),一种是空间效率(空间复杂度)。时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间。现如今,计算机行业不断发展,我们已经不需要再去特别关注一个算法的空间复杂度。时间复杂度1、定义:算法中的基本操作的执行次数,为算法的时间复杂度。2、O的渐进表示法计算一下Func基本操...原创 2019-04-22 18:10:48 · 245 阅读 · 0 评论 -
C语言思维导图
回顾与总结C语言部分知识点,通过画思维导图的方式来加深印象,查漏补缺。原创 2019-04-24 14:43:10 · 333 阅读 · 0 评论 -
【C语言】const关键字用法
const 是constant的缩写,是恒定不变的意思,也常翻译为常量、常数等。很不幸,正是因为这一点,很多人都认为被const修饰的值是常量。这是不精确的,精确的说应该是只读的变量,其值在编译时不能被使用,因为编译器在编译时不知道其存储的内容。那么这个const 关键字有什么用处和意义呢?const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点。1、const修饰的...转载 2019-04-29 12:04:57 · 302 阅读 · 0 评论 -
线性结构之顺序表(实现顺序表基本功能)
1、什么是线性结构?有什么特点?线性结构是n个数据元素的有序集合。这个集合有以下特点:1、集合中必存在唯一的一个"第一个元素";2.集合中必存在唯一的一个"最后的元素";3.除最后元素之外,其它数据元素均有唯一的"后继";4.除第一元素之外,其它数据元素均有唯一的"前驱"。数据结构中线性结构指的是数据元素之间存在着“一对一”的线性关系的数据结构。如(a0,a1,a2,…,an),a0...原创 2019-04-25 09:55:29 · 548 阅读 · 0 评论 -
【Linux】Linux下目录权限与部分重要目录了解
1、进入目录需要哪些权限, 在目录中执行增删查(cd, touch, ls, rm, mv等)改文件动作, 需要哪些权限?Linux中的多人多任务环境是其最优秀的地方之一,为了保证各个使用者具有较保密的文件数据,在Linux中权限管理就尤为重要了。Linux一般将档案可存取的身份分为三个类别,分别是owner/group/others,即使用者/群组/其他人。且这三种身份各有r/w/x等权限,代...原创 2019-05-08 17:29:06 · 203 阅读 · 0 评论 -
【数据结构】用C语言实现一个动态栈
1、什么是栈?栈有什么特性?栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的元素遵守后进先出LIFO(last in first out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。2、栈的实现栈的实现一般可以用数组或者链表实现,相对而...原创 2019-05-14 20:59:24 · 317 阅读 · 0 评论 -
【数据结构】用栈来将递归转换成循环
为什么将递归转换成循环需要用到栈?递归其实是在每次调用自己来进入新的状态,直到最后一次的状态能够满足递归的结束条件,然后返回到上次的状态。我们都知道栈有着后进先出的特性,那这样是不是就可以理解为递归每调用一层就压入栈,直到最后满足递归结束条件,再一层层弹出栈,那么用栈来将递归改为循环,就可以理解了。下面我们看一个例子,逆序打印链表:递归实现:void ReversePrint(N...原创 2019-05-15 16:30:52 · 461 阅读 · 0 评论 -
【数据结构】用C语言实现一个队列
1、什么是队列?队列有什么特性?只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表。队列具有先进先出FIFO(First in First Out)。入队列:进行插入操作的一端称为队尾。出队列:进行删除操作的一端称为队头。2、栈和队列有什么区别?队列先进先出,例如排队。栈后进先出。 对插入和删除操作的“限定”不同。栈只能在一端进行数据的插入和删除。而队列是在一...原创 2019-05-15 17:51:27 · 2519 阅读 · 0 评论 -
【数据结构】堆排序问题及其时间复杂度
【问题描述】:关于排序的问题,我们之前见过冒泡排序,其时间复杂度为O(N^2),效率很低,那有没有高效一点的排序方法?我们就要说到堆排序了,本博客中主要讨论堆排序的实现,以及其时间复杂度分析。【解题思路】:我们知道如果一个二叉树满足堆的特性,那么堆顶元素则一定是整个堆中最大或最小的元素(这取决于大堆或小堆),那如果我们需要将一组数据进行升序排序,那么我们将这组元素拿来创建一个大堆,堆顶元素为整...原创 2019-05-24 18:12:34 · 1081 阅读 · 0 评论 -
【Linux】了解以下重要命令:du, df, top, free, pstack, su, sudo(sudo -, sudo -s), adduser, password
刚开始进入Linux部分的学习,在认识了一些基础的指令后,针对Linux中一些重要命令,初步查阅资料学习:1、df和dudf功能:列出文件系统的整体磁盘使用量。格式:df [-ahikHTm] [目录或文件名]选项与参数:-a:列出所有的文件系统,包括系统特有的/proc等文件系统;-k:以KBytes的容量显示各文件系统;-m:以MBytes的容量显示各文件系统;-h:以人们较...原创 2019-05-11 17:00:44 · 274 阅读 · 0 评论 -
【Linux】如何使用命令安装gcc/g++, gdb, vim
1、安装gcc/g++查找。通过yum list命令可以罗列出当前一共有哪些软件包,由于包的数量可能非常多,这里我们需要使用grep命令筛选出我们需要的包。 yum list | grep lrzsz安装。通过yum,使用一条命令完成gcc的安装。sudo yum install lrzsz卸载软件。也可以通过一条命令来删除软件。sudo yum remove lrzsz...原创 2019-05-11 18:05:32 · 491 阅读 · 0 评论 -
【数据结构】树相关知识点整理
1、树的基本概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一颗倒挂的树,也就是说它是根朝上,而叶朝下的。特点:每个结点有零个或多个子结点; 没有父结点的结点称为根结点; 每一个非根结点有且只有一个父结点; 除了根结点外,每个子结点可以分为多个不相交的子树。2、树的相关概念下图为一个树,其中:节...原创 2019-05-21 21:10:47 · 1540 阅读 · 0 评论 -
【数据结构】堆的概念及接口实现
1、堆的概念及特性如果有一个关键码的集合K={k0,k1,k2,...,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki<=K2i+1且Ki<=K2i+2(Ki>=K2i+1且Ki<=K2i+2)i=0,1,2...,则称为小堆(或大堆)。将根结点最大的堆叫做最大堆或大根堆,根结点最小的堆叫做最小堆或小根堆。堆的性质:堆中某...原创 2019-05-22 22:29:44 · 288 阅读 · 0 评论 -
【Linux】常见的几种进程调度算法
什么是进程调度?为什么要进行进程调度?操作系统管理了系统的有限资源,当有多个进程(或多个进程发出的请求)要使用这些资源时,因为资源的有限性,必须按照一定的原则来选择进程(请求)来占用资源。这就是调度。目的是控制资源使用者的数量,选取资源使用者许可来占用资源。调度算法要求:高资源利用率、高吞吐量、用户满意等原则。进程调度所采用的算法是与整个系统的设计目标相一致的:1).批处理系统:增...原创 2019-05-28 11:21:32 · 2487 阅读 · 0 评论 -
【C++】总结static关键字的作用
1、全局静态变量在全局变量前加上关键字static,全局变量就定义成一个全局静态变量。会被存放在静态存储区,在整个程序运行期间一直存在。初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化);作用域:作用域改变,为当前文件中。2、局部静态变量在局部变量之前加上关键字static,局部变量就成为了一个局部静态变量。存放在静态存储区。初始...原创 2019-10-07 18:31:06 · 358 阅读 · 0 评论