- 博客(54)
- 收藏
- 关注
原创 进程与线程
进程与线程总结1.什么是进程?进程其实是一个运行中的程序,从操作系统的角度来看,进程是一个pcb,是对运行程序的描述,在linux下,这个pcb其实是一个task_struck{…}结构体2.什么是线程?线程是进程的一条执行流,是进程的一个实体,一个进程中可以有多条线程,同一个进程中的线程共享进程中的大多数资源,因此,线程可以说是一个轻量级进程。3.进程与线程的区别根本区别:进程是资源调度和分配的基本单位;线程是cpu调度的基本单位;从资源开销方面讲:进程有自己独立的代码和空间,进行进程
2021-03-21 11:22:29
192
原创 c++面经2
11.什么是inline内联函数,使用内联函数有什么优缺点,什么是宏,宏和inline函数有什么区别内联函数是用inline关键字修饰的,定义在类体外的成员函数,内联函数会在函数编译阶段进行展开,少了函数调用的开销以提高代码运行的效率内联函数的优点:它通过避免函数调用开销来加速程序的运行当函数调用发生时,它可以节省堆栈上变量push/pop的开销它节省了函数调用返回的开销内联函数的缺点:由于代码扩展,它增加了可执行文件的大小可能到时内存崩溃宏的优缺点:宏包括宏常量和宏函数宏常量优点:一改
2020-10-19 10:35:50
327
原创 c++之继承
1.子类对象可以直接赋值给父类对象#include<iostream>using namespace std; class Parent{private: int a;public: }; class Child :public Parent{private: int b;public: }; int main(){ Child c; Parent p; p = c; //子类对象可以直接赋值给父类对象 return
2020-10-19 09:45:54
294
原创 linux之进程间通信
进程间通信进程间通信(IPC):操作系统为用户提供的几种进程间通信:主要因为进程之间具有独立性(每个进程都有自己的虚拟地址空间),因此无法直接通信所以才需要操作系统提供进程间通信方式,实现进程间通信访问的都是自己的虚拟地址,而不是直接访问物理内存,无法访问同一块区域,因此无法实现时数据通信操作系统针对不同的通信场景提供了多种不同的通信方式:数据传输–管道/消息队列;数据共享–共享内存 进程控制—信号量从unix而来的管道;systemV标准的共享内存/消息队列/信号量;管道:本质:内核中的一
2020-10-18 21:46:52
157
原创 LeetCode 349
LeetCode:349https://leetcode-cn.com/problems/intersection-of-two-arrays/题目给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。题解:class So
2020-10-17 11:21:11
129
原创 c++面经1
1.数组和链表的区别二者都属于一种数据结构从逻辑上看:1):数组是一种线性表数据结构。他用一组连续的内存空间,来存储一组具有想同类型的数据,最大的特点是支持随机访问,但数组必须事先定义固定的长度(元素个数),不能适应数据动态增加的情况,当数据增加时,可能超过原先定义的元素个数;当数据减少时,造成内存浪费;数组可以根据下标直接存取2):链表是一种物理存储单元上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的,链表由一系列节点组成,链表动态地进行存储分配,可以适应数据动态地增
2020-10-17 10:29:44
190
原创 linux之基础IO
基础IO基础IO:文件的输入输出操作–回顾标准库的IO接口/学习linux下系统调用IO接口/文件描述符的理解/重定向的理解/文件系统/库文件回顾标准库的IO接口–都是库函数–库函数就是对系统调用接口的封装:fopen/fwrite/fread/fseek/fclosefopen–打开一个文件 FILE *fopen(char filename,char mode);(文件名称,打开方式)打开方式:“r-只读 r±读写 w-只写 w±读写 a-追加写 a±追加读写 b-二进制操作”追加写:每次写
2020-10-15 09:30:19
144
原创 进程控制
进程控制:进程创建/进程终止/进程等待/程序替换进程创建:pid_t fork(void);–创建一个进程–父子进程数据独有,代码共享进程创建采用写时拷贝技术,目的是为了提高进程的创建效率原因:按理说每个进程都应该有自己独有的内存空间,但是若创建子进程时直接开辟空间拷贝数据,将会比较慢,并且拷贝过来的数据子进程从来都不用写时拷贝技术:子进程赋值父进程,一开始与父进程指向同一块物理内存;因此看起来父子进程完全相同;但是进程之间具有独立性,意味着当这块物理内存中的数据即将发生改变时会重新给子进程开辟物
2020-10-09 16:07:16
112
原创 进程概念2
进程状态:就绪/运行/阻塞linux下的状态:运行态 R:就绪/运行可中断休眠态 S:当前的阻塞能够被中断唤醒不可中断休眠态 D:当前的阻塞不会被中断唤醒,等待条件满足自己醒来停止态 T:停止运行,什么也不干僵死态 Z:进程已经退出了但是资源没有完全被释放的一种状态僵尸进程:处于僵死状态的进程,进程已经退出没有运行,但是资源没有释放僵尸进程是怎么产生的?在子进程先于父进程退出,父进程没有进行进程等待,导致无法获取子进程的退出状态,因此操作系统无法直接释放子进程的资源子进程退出之后并没有
2020-09-23 18:33:25
127
原创 进程概念1
1.认识冯诺依曼体系结构冯诺依曼体系结构:现代计算机硬件体系结构输入设备:键盘输出设备:显示器存储器:内存条运算器:中央处理器:cpu控制器:硬件结构决定了软件行为/所有的设备都是围绕存储器工作的2.简单认识操作系统操作系统:内核+应用功能:管理计算机软硬件资源定位:搞管理的软件目的:让计算机更加好用库函数与系统调用接口的关系:库函数封装了系统调用接口;上下级的调用关系3.进程概念进程概念:什么是进程:运行中的程序,站在操作系统的角度,进程就是pcb,是操作系统对一个运行
2020-09-21 21:43:55
176
原创 linux常用工具
常用工具:软件包管理工具:yum编程相关工具:vim,gcc/g++,gdb项目相关工具:make/Makefile,git软件包管理工具:yum查看软件包:yum list|grep key安装软件包:yum install package_name移除软件包:yum remove package_name编辑器:vimvim中的操作模式:12种,常用的有三种:普通模式:主要是使用命令进行文件内容操作插入模式:插入数据底行模式:用于文件内容的保存和退出模式切换:普通->插
2020-09-18 14:32:36
264
原创 linux权限
linux权限权限:用户对操作系统所进行的操作进行权利限制:管理员-root/普通用户文件的权限:对文件操作进行的用户分类:文件所有者u 文件所属组g 其他用户o用户对文件进行的操作分类:可读r(可浏览) 可写w(是否可在目录下创建/删除文件) 可执行x(是否可进入目录)例子:所有者可读可写可执行,所属组可读可写,其他用户可执行 rwxrw—x(761)umask:查看/设置文件默认创建权限的掩码chmod:修改一个文件的权限 chmod[ugoa] +/- [rwx]
2020-09-18 13:48:59
97
原创 linux基础指令
linux基础指令命令的使用格式:命令名称 [功能选项] [操作对象]1.目录相关命令 ls 浏览目录内容,默认浏览当前所在目录 -a 查看所有文件(包括隐藏文件) linux以.开头的文件都是隐藏文件 -l 查看文件的详细信息 pwd:显示当前所在目录的路径(绝对路径) 绝对路径:唯一路径(起始路径从根目录表达的路径) 相对路径:起始
2020-09-17 11:07:11
99
原创 LeetCode 841 钥匙和房间
题目描述:有 N 个房间,开始时你位于 0 号房间。每个房间有不同的号码:0,1,2,…,N-1,并且房间里可能有一些钥匙能使你进入下一个房间。在形式上,对于每个房间 i 都有一个钥匙列表 rooms[i],每个钥匙 rooms[i][j] 由 [0,1,…,N-1] 中的一个整数表示,其中 N = rooms.length。 钥匙 rooms[i][j] = v 可以打开编号为 v 的房间。最初,除 0 号房间外的其余所有房间都被锁住。你可以自由地在房间之间来回走动。如果能进入每个房间返回 tr
2020-09-02 00:04:56
106
原创 LeetCode 486 预测赢家
题目描述:给定一个表示分数的非负整数数组。 玩家 1 从数组任意一端拿取一个分数,随后玩家 2 继续从剩余数组任意一端拿取分数,然后玩家 1 拿,…… 。每次一个玩家只能拿取一个分数,分数被拿取之后不再可取。直到没有剩余分数可取时游戏结束。最终获得分数总和最多的玩家获胜。给定一个表示分数的数组,预测玩家1是否会成为赢家。你可以假设每个玩家的玩法都会使他的分数最大化。示例 1:输入:[1, 5, 2]输出:False解释:一开始,玩家1可以从1和2中进行选择。如果他选择 2(或者 1 ),那么玩
2020-09-01 23:53:35
580
原创 c++项目,制作GIF动态图
项目目录项目背景项目简介项目可行性分析第三方库以及项目工具介绍项目总体设计流程图项目详细设计项目测试项目结果项目源代码项目背景在很多时候,人们所说的一句话在不同的的环境和状态下回有不同的含义,但是,我们有时候并不能表达出的信息并不是自己想要的结果,尤其是在我们在虚拟网络上聊天时,仅仅依靠文字我们并不能很好地看出对方的情况,而随着互联网的不断发展与进步,有时候一个简简单单的表情也许能比很长一段文字能更好地表现出来对方想让我们知道的信息,这样就更加方便彼此之间的交流。在我们上网聊天时,“一言不合就斗图”的情
2020-08-29 13:28:36
5999
1
原创 c/c++内存分配方式
数据段:数据段通常是指用来存放程序中已初始化的全局变量和静态变量的一块内存区域。数据段属于静态内存分配,可以分为只读数据段和读写数据段。 字符串常量等,但一般都是放在只读数据段中 。代码段:代码段通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等,但一般都是放在只读数据段中 。栈区:由系统自动分配,当函数执行结束时由系统自动释放。存放局部.
2020-08-24 10:42:59
152
原创 网络基础--传输层
传输层:负责应用程序之间的数据传输 TCP/UDP协议UDP协议特性:无连接,不可靠,面向数据报无连接:通信的时候,不需要建立连接,只需要知道对方的地址信息,就可以直接发送数据不可靠:通信过程中,并不保证数据安全可靠以及有序的到达对端数据报传输:无连接的,不可靠的,有最大传输长度限制的一种传输方式有最大传输长度限制:udp报文头部中有一个数据报长度字段,最大数字为65535,限制一个完整的报文长度不得超过64kUDP报文16位源端口/16为目的端口:描述数据从哪个进程发送到哪个进程–负责实
2020-08-18 18:11:09
288
原创 linux网络基础
1.网络覆盖范围:局域网/城域网/广域网 互联网/因特网 以太网/令牌环网—组网方式2.在网路中必须唯一标识每一台主机,才能实现点到点的精确通信ip地址:uint32_t 无符号4个字节的整数网络通信中的每条数据都必须具备:源IP地址/目的IP地址–表示数据从哪个主机来,到哪个主机去目的IP地址:能够让网络中的路由器为每一条数据根据目的地址选择不同的路径准确到达对端主机源IP地址:能够让对端主机知道数据是谁发送,一遍回复数据3.IP地址使网络中实现主机与主机之间的通信,但是主机是哪个
2020-08-15 19:50:37
140
原创 C++之STL
C+之STLSTL:C++标准模板库 对常见数据结构的封装+通用的算法:与数据类型无关(template)与数据结构无关详细解释:六大组件* 容器:管理数据的一个集合–>常见的数据结构(按照template方式封装)* 迭代器:作用:让算法对数据结构透明化–不关心数据采用的是什么数据结构* 算法 :与具体数据结构相关的算法+通用类型的算法* 适配器:stack,queue priprity_queue* 仿函数(函数对象):可以向函数使用的 对象 作用:让算法更加的灵活* 空间配置
2020-08-15 18:58:21
175
原创 c++内联函数
内联函数1.什么是内联函数在C语言中,如果一些函数被频繁调用,不断的有函数入栈,即函数栈,会造成栈空间和栈内存的大量消耗,为了解决这一问题,特别引入了inline修饰符,表示为内联函数。2.为什么要引入内联函数引入内联函数是为了解决程序中函数调用的效率问题,因为函数的调用有一定时间和空间方面的开销,将会影响其效率,特别是对于一些函数代码不是很大, 但又频繁调用的函数来讲,解决其效率更加重要...
2019-12-06 17:26:31
285
转载 宏的定义,宏与函数的区别以及优缺点比较
宏的定义,宏与函数的区别以及优缺点比较1.宏定义c程序提供的预处理功能之一。包括带参数的宏定义和不带参数的宏定义。具体是指用一个指定的标志符来进行简单的字符串替换或者进行阐述替换。宏书写形式:#define<宏名>(<参数列表>)<宏体>宏名:在以上定义中的标识符称为宏名宏展开:在c程序编译时将宏名替换为字符串的过程称为宏展开,宏展开发生在编译时...
2019-12-06 16:21:02
1967
原创 红黑树的概念及其基本操作
1.红黑树的概念红黑树,是一种二叉搜索树,但在每个节点上增加一个存储位表示结点的颜色,可以是Red或Black,通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因而是接近平衡的2.红黑树的性质每个节点不是红色就是黑色根结点是黑色的如果一个节点是红色的,则它的两个孩子都是黑色的每条路径上的黑色结点数目相同每个叶子结点都是黑色的(这里...
2019-10-30 17:45:46
394
原创 c++之AVL树
AVL树及其基本操作1.AVL树概念二叉搜索树岁可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于顺序表中搜元素,效率低下。AVL树是一颗平衡二叉搜索树,在AVL树中,任何结点的两个子树的高度差的绝对值不超过1(需对树中的结点进行调整),即可降低树的高度,从而减少平均搜索长度。2.AVL树的性质它的左右子树都是AVL树左右子树的高度差(简称平衡因子)的绝...
2019-10-29 21:39:05
376
原创 c++之二叉搜索树
二叉搜索树及其基本操作1.二叉搜索树的概念二叉搜索树又称为二叉排序树,它或者是一颗空树,或者是具有以下性质的二叉树:若它的左子树不为空,则其左子树上所有节点的值都小于其根结点的值若它的右子树不为空,则其右子树上所有节点的值都大于其根结点的值它的左右子树也都是二叉搜索树2.二叉搜索树的基本操作2.1二叉搜索树的查找原理:若根结点不为空:如果根结点key==查找key 返回t...
2019-10-26 21:25:44
220
原创 c++之智能指针
1.什么是RAIIRAII是一种利用对象生命周期来控制程序资源(如内存,文件句柄,网络连接,互斥量等等)的简单技术。在对象构造时获取资源,接着控制对象的访问是指在对象的生命周期内始终保持有效,最后在对象析构时释放资源,借此,我们实际上是把管理一份资源的责任托管给了一个对象,这种做法有两大好处:不需要显式的释放资源采用这种方式,对象所需的资源在其生命期呃逆始终保持有效2.智能指针2.1...
2019-10-17 16:48:24
145
原创 c++之异常
1.什么是异常异常一般指的是程序运行期发生的非正常情况,异常一般是不可预测的,如:内存不足:打开文件失败,范围溢出等 异常处理的核心思想是,把功能模块代码与系统中可能出现错误的处理代码分离开来,以此来达到使我们的代码组织起来更美观,逻辑更清晰,并且从根本上上来提高我们软件系统长时间稳定运行的可靠性。2.C语言处理异常的传统方法2.1基于goto语句的异常处理goto语句有非常多的...
2019-10-14 17:48:44
184
原创 c++STL之string类
1.为何要学习string类符合面向对象的思想,而且底层空间不需要用户自行控制,不会发生越界访问的情况2.string类的接口2.1string类对象的常见构造函数名称 功能说明string() 构造空的string类对象,即空字符串string...
2019-10-06 19:42:59
128
原创 C++之多态
1.多态的概念同一件事物,在不同场景下表现出的不同的状态举例:买票行为,学生半价,普通人全价,军人优先分类:静态多态和动态多态静态多态:编译器在编译时确定具体调用哪个函数。体现:函数重载,模板动态多态:编译时无违法确定调用哪个函数,只有在代码运行时才知道具体应该调用哪个函数 体现:虚函数+重写动态多态的实现2.1C++中实现多态的条件>>在继承体系中,基类中必须有虚...
2019-10-02 15:54:53
216
原创 c++之初识模板
初识模板模板:函数模板和类模板一:函数模板1:概念 函数模板代表了一个家族,在使用时被参数化,根据实参类型产生函数的特定类型模板。2:函数模板格式:template<typename T1,typename T2,...,typename Tn>返回值类型 函数名(参数列表){}template<typename T>void Swap(T& ...
2019-09-02 20:38:09
164
原创 数组指针,指针数组,函数指针,指针函数的分析
数组指针,指针数组,函数指针,指针函数的分析一:数组指针数组指针(也称行指针)定义:int(*p)[n],是指针,指向数组的指针()的优先级高,首先说明p是一个指针,指向一个整形的一维数组,这个一维数组的长度为n,也可以说是p的步长,也就是说,当p执行p+1操作时,p要跨过n个整形数据的长度。int main() { int a[5] = { 1,2,3,4,5 }; int(*p)[...
2019-09-02 17:31:41
295
原创 时间空间复杂度分析
时间空间复杂度一:时间复杂度1:什么是时间复杂度?算法的时间复杂度是一个函数,它定性的描述了该算法的运行时间,一个算法执行所消耗的时间。一个算法所花费的时间与其中语句的执行次数成正比,算法中基本操作的执行次数,为算法的时间复杂度。2:时间复杂度为什么看的是最差情况?理由如下:最坏时间复杂度,实在任意输入下的运行时间界限,保证算法任何时候的运行时间都不会比它长。在某些情况下,最坏情况...
2019-08-31 14:17:44
382
原创 链表面试题
链表面试试题1:编写一个程序,找到两个单链表相交的起始节点/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */typedef struct ListNode Node;struct ListNode *get...
2019-08-26 16:35:21
201
原创 链表的基本操作
链表的基本操作一:链表的概念链表是一种物理存储单元上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表上的指针链接次序实现的。链表由一系列结点(链表中的每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。二:链表的种类实际中链表多种多样,以下情况组合起来就有八种:1:单链表,双向链表2:带头,不带头...
2019-08-24 17:46:21
188
原创 栈与队列的实现
栈和队列一:栈1:栈的概念栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作,进行数据插入和删除的一端称为栈顶,另一端称为栈底。栈中的元素遵守先进后出的原则。2:栈的基本操作push 向栈底添加元素pop 从栈顶取出元素size 判断栈中元素个数Empty 判断栈是否为空top 返回栈顶元素3:代码实现用链表实现栈#defi...
2019-08-22 18:19:50
249
原创 顺序表的实现
顺序表的实现一:c语言实现test.h#pragma oncetypedef struct SeqList{ int* array; int capacity; int size;}SeqList;//初始化void SeqListInit(SeqList* seq);//销毁void SeqListDestroy(SeqList* seq);//头插void Seq...
2019-08-11 16:11:12
109
原创 类与对象-----下篇
类与对象-----下篇1:再谈构造函数1.1构造函数初始化列表:构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式,例如://构造函数初始化列表Date::Date(int year, int month, int day) :_year(year) ,_month(month) ,_day(day){}//构造函数赋值...
2019-08-01 16:46:53
99
原创 类与对象-----中篇
类与对象-----中篇1:类的6个默认成员函数2:构造函数1):概念一个特殊的成员函数,名字与类名相同,创建类类型对象的时候,由编译器自己调用,在对象的生命周期中且调用一次,以保证每个数据成员都有一个合适的初始值2):构造函数的特性:函数名与类名相同没有返回值有初始化列表(可以不用)对象实例化时编译器自动调用对应的构造函数构造函数可以重载test.hclass Dat...
2019-07-31 17:51:08
496
原创 类与对象-----前篇
类与对象-----前篇1:类与对象的初步认知1.1 类定义一个类,实际上是定义一个数据类型的蓝图,这实际上并没有定义任何数据,但它定义了类的名称意味着什么,也就是说,它定义了类的对象包含了什么,以及可以在这个对象上执行哪些操作。类定义是以关键字class开头,后跟类的名称,类的主体是包含在一对花括号中,类定义后面必须跟着分号或声明列表,例如,我们使用关键字class定义一个Date类,如...
2019-07-31 15:36:57
112
原创 初识c++
初识c++1:c++关键字asmdoifreturntrycontinueautodoubleinlineshorttypedefforbooldynamic_castintsignedtypeidpublicbreakelselongsizeofthrowtypenamecaseenummutablestati...
2019-07-24 16:32:22
144
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人