知识点总结
文章平均质量分 82
为了找到一份好的工作,总结大学三年学习的知识,顺便复习
大多数知识点来源于平时学习的笔记
RONGYI AINI
不摆不摆
展开
-
Linux 多线程
线程什么是线程?在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程线程在进程内部运行,本质是在进程地址空间内运行在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流线程的优点:创建一个新线程的代价要比创建一个新进程小得多与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少很多线程原创 2020-08-19 17:37:12 · 77 阅读 · 0 评论 -
进程间通信
进程间通信是什么?每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。进程间通信的目的是什么?数据传输: 一个进程需要将它的数据发送给另一个进程资源共享: 多个进程之间共享同 样的资源。通知事件: 一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。进程控制:原创 2020-08-19 16:49:02 · 125 阅读 · 0 评论 -
进程概念
冯诺依曼体系结构: 输入设备,输出设备,运算器,控制器,存储器操作系统: 任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。进程课本概念:程序的一个执行实例,正在执行的程序等内核观点:担当分配系统资源(CPU时间,内存)的实体。描述进程 - PCB: 进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合进程创建:pid_t ret = fork();if(ret < 0){ perror("fork");}else if (ret == 0){ pr原创 2020-08-18 19:52:20 · 93 阅读 · 0 评论 -
STL容器
vectorvector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是一个相对代价高的任务,因为每当一个新的元素加入到容器的时候,ve原创 2020-08-17 16:46:29 · 68 阅读 · 0 评论 -
C++中拷贝构造函数的深拷贝和浅拷贝
什么是拷贝构造函数及拷贝构造函数的应用?什么是拷贝构造函数每个类都有6个默认成员函数(构造函数,析构函数,拷贝构造函数,赋值重载函数,取地址运算符重载函数,const修饰的取地址运算符重载函数)也就是说即使你创建一个空类,也会存在这6个函数其中构造函数只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰)在用已存在的类类型对象创建新对象时由编译器自动调用class sol...原创 2019-11-17 19:08:25 · 381 阅读 · 0 评论 -
C/C++中的const修饰符用法总结
const的基本含义在 C/C++ 语言中,const关键字是一种修饰符。所谓“修饰符”,就是在编译器进行编译的过程中,给编译器一些“要求”或“提示”,但修饰符本身,并不产生任何实际代码。就 const 修饰符而言,它用来告诉编译器,被修饰的这些东西,具有 “只读” 的特点。 在编译的过程中,一旦我们的代码试图去改变这些东西,编译器就应该给出错误提示。所以,const修饰符的作用主要是利用...原创 2019-11-17 17:45:42 · 227 阅读 · 0 评论 -
C/C++中内存区域的划分与内存管理
C/C++中内存区域的划分一个由C/C++编译的程序占用的内存分为以下几个部分:1、栈区(stack) 由编译器自动分配释放存放为运行函数而分配的局部变量、函数参数、返回数据、返回地址等。当栈区需要扩容的时候向低地址扩容,其操作方式类似于数据结构中的栈。(内存分配时,与堆相向而生,因此申请内存是有限的,运用不当,会出现栈溢出)2、堆区(heap) 一般由程序员分配释放, 若程序员不...原创 2019-11-17 16:03:56 · 218 阅读 · 0 评论 -
进程调度算法
什么是调度算法在 操作系统中调度是指一种资源分配,因而调度算法是指:根据系统的资源分配策略所规定的资源分配算法。对于不同的的系统和系统目标,通常采用不同的调度算法,例如,在 批处理系统中,为了照顾为数众多的段作业,应采用短作业优先的调度算法;又如在 分时系统中,为了保证系统具有合理的响应时间,应当采用轮转法进行调度。目前存在的多种调度算法中,有的算法适用于 作业调度,有的算法适用于 进程调度;但...原创 2019-11-15 22:38:45 · 380 阅读 · 0 评论 -
c++继承笔记
一、什么是继承?C++允许一个类继承另外一个类的所有内容提高了代码的复用性二、继承的方式public :2 可访问 可继承protected :1 不可访问 可继承private :0 不可访问 不可继承派生类中继承来的元素是什么权限,取决于继承方式和基类成员权限的较小值。基类的private成员在派生类中不可访问三、隐藏当派生类中存在和基类重名的成员变量或成员函数,...原创 2019-10-28 22:03:07 · 63 阅读 · 0 评论 -
c++模板以及动态内存分配
一、动态内存分配1、new定位表达式new(指针) 类型返回的地址一定是括号里的指针指向的地址,而且会调用构造函数一般是依托于内存池的2、malloc/free 与 new/delete的区别前者不调用构造/析构函数,后者调用前者为函数,后者为运算符前者失败返回NULL,后者会抛异常或者调用失败处理函数3、如何创建一个只能在堆上实例化对象的类1、构造函数私有2、公有的静态成员...原创 2019-09-18 10:37:52 · 453 阅读 · 0 评论 -
c/c++内存管理
动态内存分配一、内存区域1、栈、堆、全局区、常量区、代码区栈:系统自动分配的空间,只要不特殊声明,就定义在栈区,函数的区域也在栈上。栈是向下增长的堆:使用动态内存分配的方式可以申请堆空间,用完要手动释放全局区:静态变量、全局变量(static)常量区:代码中的数字、字符等常量,例如’a’,-1.2等代码区:存放可执行代码,避免频繁的读硬盘。2、data、bss、textdata:...原创 2019-09-18 10:35:18 · 89 阅读 · 0 评论 -
C++类和对象
一丶类和对象的引入1, 类和对象的初步认识C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。2,类的引入C语言中,结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。3,类的定义class className{// 类体:由成员函数和成员...原创 2019-09-05 22:47:53 · 80 阅读 · 0 评论 -
封装,继承,多态
1. 类与对象类的初步认识C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。类的定义class className{ // 类体:由成员函数和成员变量组成 }; // 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号。类中的元素称为类的成员:类中的数据称为类的属性或者成员变量; 类中的函数称为类原创 2020-08-15 18:47:25 · 123 阅读 · 0 评论 -
八大排序的基本实现
排序排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。内部排序:数据元素全部放在内存中的排序。外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。常见的排序算法原创 2020-08-13 20:20:58 · 255 阅读 · 0 评论 -
二叉树的前序遍历,中序遍历,后序遍历以及层序遍历
二叉树的前序遍历前序遍历(Preorder Traversal 亦称先序遍历)——访问根结点的操作发生在遍历其左右子树之前。oj链接: https://leetcode-cn.com/problems/binary-tree-preorder-traversal/submissions/递归实现:class Solution {public: vector<int> preorderTraversal(TreeNode* root) { vector<in原创 2020-08-12 21:58:35 · 200 阅读 · 0 评论 -
数据结构之二叉树和堆
树树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树节点的度:一个节点含有的子树的个数称为该节点的度;叶节点或终端节点:度为0的节点称为叶节点;非终端节点或分支节点:度不为0的节点;双亲节点或父节点:若一个节点含有子节点,则这个节原创 2020-08-12 19:40:00 · 227 阅读 · 0 评论 -
数据结构之栈和队列和相关笔试题
栈一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。特点: 先入后出栈的实现: 栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小。队列只允许在一端进行插入数据操作,在另一端进行删除数据操作的特原创 2020-08-12 17:16:36 · 156 阅读 · 0 评论 -
数据结构之顺序表和链表
1.线性表线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物 理上存储时,通常以数组和链式结构的形式存储。2. 顺序表顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。 顺序表一般可以分为:静态顺序表:使用定长数组存储。动原创 2020-08-11 20:18:07 · 316 阅读 · 0 评论 -
深度优先算法和广度优先算法
1、深度优先算法遍历规则:不断地沿着顶点的深度方向遍历。顶点的深度方向是指它的邻接点方向。最后得出的结果为:ABDECFHG。类似于二叉树的前序遍历2、广度优先算法:遍历规则:先访问完当前顶点的所有邻接点。(应该看得出广度的意思)先访问顶点的邻接点先于后访问顶点的邻接点被访问。最后得出的结果为:ABCDEFGH。类似于二叉树的层序遍历...原创 2020-08-11 19:44:38 · 2628 阅读 · 0 评论 -
时间复杂度和空间复杂度
1. 什么是算法?算法就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算过程,用来将输入数据转化为输出结果。2. 算法的效率算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已原创 2020-08-11 19:35:14 · 69 阅读 · 0 评论 -
动态内存管理以及malloc,free和new,delete的区别
为什么存在动态内存分配?开辟空间的方式有两个特点:空间开辟大小是固定的。数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道,那数组的编译时开辟空间的方式就不能满足了。 这时候就只能试试动态存开辟了。C/C++中的内存分布栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共.原创 2020-08-11 19:08:06 · 135 阅读 · 0 评论 -
字符函数与字符串函数的介绍
C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在 常量字符串中或者 字符数组 中。 字符串常量 适用于那些对它不做修改的字符串函数函数介绍strlen函数功能: 计算字符串的长度size_t strlen ( const char * str );字符串已经 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。参数指向的字符串必须要以 ‘\0’ 结束。函数的返回值为size_t,是无符号的.原创 2020-08-11 18:39:05 · 122 阅读 · 0 评论 -
数据在内存中的存储以及大端模式和小端模式的介绍和区分代码
数据类型的介绍c语言中的数据类型char //字符数据类型 1个字节short //短整型 2个字节int //整形 4个字节long //长整型 32位机4个字节 64位机8个字节long long //更长的整形 8个字节float //单精度浮点数 4个字节double //双精度浮点数 8个字节类型的意义:1. 使用这个类型开辟内存空间的大小(大小决定了使用范围)。2. 如何看原创 2020-08-11 18:07:08 · 336 阅读 · 0 评论 -
指针与引用
1. 什么是指针?在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。总结:所以指针是一个变量,用来保存内存地址的变量。指针是用来存放地址的,地址是唯一标示一块地址空间的。指针的大小在32位平台是4个字节,在64位平台是8个字节。2. 指针类型和解引用指针的定义方式是: t原创 2020-08-11 17:44:16 · 119 阅读 · 0 评论