- 博客(59)
- 收藏
- 关注
原创 进程间通信
进程间通信在不同的进程之间传播或交换信息,让不同的进程看到相同的文件资源进程间通信的目的数据传输:一个进程需要将它的数据局发送给另一个进程 资源共享:多个进程间共享同样的资源 通知事件:一个进程需要向另一个或一组进程发送消息,通知它或它们发生了某种事件(例:进程终止时通知父进程) 进程控制:有些进程希望完全控制另一个进程的执行,此时控制进程希望能够拦截另一个进程的所有陷入和异常,...
2019-07-16 11:18:09
158
原创 进程控制
进程创建fork函数原型#include <unistd.h>pid_t fork(void);//创建子进程内核执行流分配新的内存块和内核数据结构给子进程(创建task_struct) 将父进程部分数据结构内容拷贝至子进程(拷贝父进程的task_struct内容) 添加子进程到系统当中(分配新的内核堆栈、新的pid,再将子进程PCB添加到链表) fork返回...
2019-05-27 16:16:20
220
原创 进程环境
环境变量环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数常见环境变量PATH:指定命令的搜索路径 HOME:指定用户的主工作目录 HISTSIZE:保存历史命令记录的条数 SHELL:当前的shell,它的值通常是/bin/bash相关命令echo :显示某个环境变量的值 export:设置一个新的环境变量,设置的环境变量是临时的 env:显示所有环境变量...
2019-05-27 16:16:17
256
原创 计算机系统
冯诺依曼体系结构存储器指内存 在数据交流层面上,CPU只能和储存器打交道,外设只能和存储器交流,所以所有设备都只能直接和存储器打交道操作系统任何计算机系统系统都包含一个基本的程序集合称为操作系统操作系统包括内核:进程管理、内存管理、文件管理、驱动管理 其他程序:函数库、shell程序等操作系统的作用与硬件交互,管理所有的软硬件资源 为用户程序(应用程序)提供良...
2019-05-27 16:16:02
211
原创 常见命令及权限
Linux常用基本指令针对目录ls语法:ls [选项] [目录或文件] 功能:对于目录,列出该目录下所有子目录与文件;对于文件,列出文件名及其其他信息pwd语法:pwd 功能:显示用户当前所在目录cd语法:cd 目录名 功能:改变工作目录,将当前工作目录改变到指定目录下mkdir语法:mkdir [选项] 文件 功能:在当前目录下创建文件rmdir语法:...
2019-05-27 16:15:56
660
原创 进程基础
进程的概念课本:程序的一个执行实例,正在执行的程序等 内核:但当分配系统资源(CPU时间、内存)的实体管理进程描述进程进程信息被放在一个叫做进程控制块的数据结构中,称之为PCB Linux中描述进程PCB的结构体为task_struct,是内核的一种数据结构,会被装载到RAM中,并包含着进程的信息task_struct内容标识符pid:描述本进程的唯一标识符,区别其他进程...
2019-05-27 16:15:48
220
原创 STL
STLC++标准库的重要组成部分,不仅是一个可复用的组件库,还是一个包含数据结构和算法的软件框架STL的六大组件容器序列式容器:string、vector、list、deque、array(C++11)、forward_list(C++11) 关联式容器:set、multiset、unordered_set、unordered_multiset、map、multimap、unor...
2019-05-27 16:15:34
181
原创 智能指针
RAII利用对象生命周期控制程序资源的简单技术,在对象构造时获取资源,接着控制对资源的访问使之在对象的生命周期始终保持有效,在析构时释放资源,就是把管理资源的责任托管给了对象优点不需要显式释放资源 对象的资源在生命周期内始终有效智能指针的原理RAII特性 重载operator*和operator->,具有像指针一样的行为auto_ptrtemplate <...
2019-05-27 16:15:30
144
原创 异常
概念异常是一种处理错误的方式,当函数发现自己无法处理的错误就可以抛异常,让函数的直接或间接的调用者处理这个错误 thow:当问题出现时,程序会抛异常,通过thow关键字完成 catch:捕获异常,可以有多个catch进行捕获 try:try块中放置可能抛异常的代码,后面通常跟着一个或多个catch块异常的抛出和捕获异常的抛出和匹配原则异常是通过抛出对象而引发的,该类对象的类型决...
2019-05-27 16:15:25
170
原创 多态
多态的定义同一个行为,不同对象完成产生不同状态 调用函数必须是指针或者引用(虚函数在虚表中以指针的形式存在) 被调用的函数必须是虚函数(成员函数前加virtual),而且完成了虚函数的重写虚函数的重写派生类中有一个跟基类完全相同的虚函数,其返回值类型、函数名、参数完全相同 协变:重写的虚函数返回值不同,但必须分别是基类指针和派生类指针或基类引用和派生类引用,协变我们很少用 派生类...
2019-05-27 16:15:07
157
原创 继承
继承的定义class 派生类:继承方式 基类{};继承基类成员访问权限变化基类的private成员在派生类是不可见的,指基类的私有成员继承到了派生类中,但是语法限制派生类和类外不能访问 基类的protected成员不能被类外直接访问,但是可以被派生类访问 class默认的继承方式是private,struct默认为继承方式是public 一般使用的继承方式是public,pr...
2019-05-25 11:42:42
109
原创 深浅拷贝及类型萃取
浅拷贝也称为位拷贝、值拷贝,编译器只是将对象的值拷贝过来,编译器默认生成的构造函数和赋值运算符重载就是浅拷贝深拷贝一个类拥有资源(堆或者其他系统资源),这个类发生拷贝过程称为深拷贝,所以这个类的构造函数、赋值运算符以及析构函数必显式给出写时拷贝写时拷贝在深浅拷贝的基础上增加了引用计数的方式来实现,用来记录资源使用者个数。在构造时,将资源的计数给成1,每增加一个对象使用该资源,就...
2019-05-25 11:39:51
146
原创 模板
泛型编程编写与类型无关的通用代码,是代码复用的一种手段,模板是泛型编程的基础模板模板分为函数模板和类模板优点复用代码,节省资源,更快的迭代开发 增强了代码堆的灵活性缺点模板会导致代码膨胀,也可能导致编译时间变长 出现模板编译错误时,错误信息非常凌乱,不易定位错误函数模板函数怒班代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定...
2019-05-25 11:38:10
154
原创 特殊类的设计
C++建立对象静态建立对象时会将栈顶指针移动合适大小的空间,再到这个空间上直接调用对应的构造函数形成一个栈对象,当函数返回时会调用析构函数释放这个对象,再调整栈顶指针 动态建立对象时会调用new/delete只在堆上创建对象方法一将类的构造函数、析构函数权限设为protected,防止栈上生成对象 提供两个静态成员函数,在该静态成员函数中完成对象的创建和销毁#include ...
2019-05-25 11:30:07
158
原创 动态内存管理(C++)
内存管理方式C++通过new/delete操作符进行动态内存管理操作内置类型void Test{ int* ptr1 = new int; //动态申请一个int类型的空间 int* ptr2 = new int(10);//动态申请一个int类型的空间并初始化为10 int* ptr3 = new int[10];//动态申请10个int类型的空间...
2019-05-25 11:25:23
231
原创 类和对象(扩展)
const成员修饰类的成员变量与C语言中const修饰变量含义相同修饰类的成员函数实际修饰该成员函数隐藏的this指针,表示该成员函数不能对类的任何成员进行修改 (返回值类型 函数名()const{})经过编译器处理后为(返回值类型 函数名(cosnt 类名* this){}) cosnt对象不能调用非const成员函数,只能调用const成员函数 非const对象可以调用任...
2019-05-25 11:20:18
222
原创 类和对象(默认成员函数)
6个默认成员函数任何一个类在我们不写的情况下都会生成6个默认成员函数 构造函数完成初始化工作 析构函数完成清理工作 拷贝构造函数是使用同类对象初始化创建对象 赋值重载主要是吧一个对象赋值给另一个对象 取地址重载主要是普通对象和const对象取地址操作符重载构造函数构造函数不是开空间创建对象,而是初始化对象,更严谨的说是赋初值特性构造函数名与类名相同,无返回值,可重载 ...
2019-05-25 11:18:29
307
原创 类和对象(基础)
类的引入在C语言中结果欧体只能定义变量,在C++中结构体不仅可以定义变量,也可以定义函数,但C++中一般使用class代替struct类的定义class 类名{}; 类中的元素称为类的成员:数据称为类的属性或成员变量,函数称为类的方法或成员函数定义方式声明和定义全放在类中,成员函数如果在类中定义,编译器可能会将其当成内联函数处理 声明放在.h文件中,定义放在.cpp文件中,一...
2019-05-25 11:17:23
1179
原创 C++基础
关键字命名空间定义namespace 空间名 {//成员}使用作用域限定符(::) using引入命名空间成员 using namespace引入命名空间 命名空间可以嵌套 同一个工程可以存在多个相同名称的命名空间,编译器最后会合成同一个命名空间输入输出标准输入:cin>> 标准输出:cout<<函数重载同一作用域中,函数名...
2019-05-25 11:16:01
173
原创 C和C++区别
关键字数量C:32个 C++:63个文件名后缀C:.c C++:.cpp标准输入输出C:printf和scanf C++:cout和cin定义变量C:必须在域的开始 C++:任何位置函数的默认返回值C:int C++:void参数列表C:函数没有指定参数列表时,默认可以接受多个参数 C++:严格的参数类型检测,没有参数列表的函数,默认为void,不接受...
2019-05-25 11:13:46
1962
原创 程序环境
程序环境翻译环境:用于这个环境中源代码被转换为可执行的机器指令 执行环境:用于实际执行的代码翻译环境组成程序的每个源文件通过编译分别转换为目标代码 每个目标文件由链接器捆绑在一起,形成一个单一而完整的可执行程序 连接器同时会引入标准库和个人的程序库中的函数编译预处理:删除注释,宏替换,头文件展开,条件编译 编译:词法分析,语法分析,语义分析,符号汇总,生成汇编代码 汇编:...
2019-03-10 09:23:47
185
原创 数据在内存中的存储
整形在内存中的存储整形数据在内存中存放的是补码 在计算机系统中,数值一律用补码来表示和存储为何使用补码使用补码,可以将符号位和数值域统一处理 加法和减法可以统一处理 补码与原码的相互转换,其运算过程是相同的,不需要额外的硬件电路大小端大端:数据存高位储在低地址中,低位存储在高地址中 小端:数据高位存储在高地址中,低位存储在低地址中为何有大小端在计算机系统中以字节为单位...
2019-03-10 09:23:36
250
原创 预处理
预定义符号_FILE_:进行编译的源文件 _LINE_:文件当前的行号 _DATE_:文件被编译的日期 _TIME_:文件被编译的时间 _STDC_:如果编译器遵循ANSI C,其值为1,否则未定义宏定义#define:宏定义 #undef:移除宏定义宏替换调用宏时,检查参数知否包含#define定义的符号,如果是,首先替换,字符串常量的内容不被检查 随后替换后的文本插...
2019-03-10 09:23:25
90
原创 函数栈帧
概念函数调用的过程中计算器需要为函数开辟空间,用于本次函数的调用中临时变量的保存、现场保护,这块栈空间称为函数栈帧。 栈帧维护需要esp和ebp这两个寄存器,分别存放了这个栈的栈底指针和栈顶指针。调用过程 创建栈帧并初始化 创建局部变量,push参数(从右向左顺序依次压入) push下条指令的地址 再次创建栈帧,取参数计算,将返回值放入寄存器返回 销毁栈帧,pop寄存器...
2019-03-10 09:23:10
98
原创 输入输出函数
相关函数perror void perror (const char* str); 以一种简单统一的方式报告错误,如果perror参数str不是NULL,并指向一个字符串,perror函数先打印这个字符串,然后跟着输出一个分号赫尔一个空格,接着输出错误信息exitvoid exit (int status); 参数status返回给操作系统,用于提示程序是否正常完成,符号EXIT_...
2019-03-09 18:03:20
356
原创 动态内存管理
动态内存函数mallocvoid* malloc (size_t size); 申请一块size大小的虚拟内存,如果开辟成功,则返回开辟好空间的指针,如果开辟失败,则返回NULL指针,对返回值类型需做强制转换,如果参数size为0,malloc的行为标准是未定义的,取决于编译器freevoid free (void* ptr); 释放动态开辟的内存,但不会把指针置NULL,如果p...
2019-03-09 18:01:45
169
原创 字符函数和字符串函数
字符函数字符分类函数字符串函数strlensize_t strlen (const char *str); 返回字符串的长度,'\0'结束,不包括'\0'strcpychar* strcpy (char* detination, const cahr* source); 拷贝字符串,源字符串以'\0'结束,而且'\0'也拷贝,拷贝失败返回detinationstrc...
2019-03-09 18:01:06
129
原创 数组和指针
数组数组名存放首元素地址 &数组名和sizeof(数组名)表示整个数组 char arr[] = "abc"; sizeof(arr) = 4; 内存中存放的是'a','b','c','\0';char arr[] = {'a', 'b', 'c'};szieof(arr) = 3;内存中存放的是'a','b','c';char *p = "abc";内存中存放的是"abc"指针...
2019-03-09 17:59:08
98
原创 函数
函数的分类库函数:IO函数、字符串操作函数、字符操作函数、内存操作函数、时间/日期函数、数学函数、其他函数 自定义函数函数组成函数名、返回值类型、函数参数函数的参数实际参数(实参) 形式参数(形参),形参实例化是对实参的一份临时拷贝main函数参数int main (int argc, char* argv[], vhar* envp[]){} argc:整型变量,表...
2019-03-09 17:57:13
110
原创 操作符
算术操作符+:加-:减*:乘/:除%:取余移位操作符<<:左移操作符,左边抛弃,右边补零>>:右移操作符;逻辑移位(左边补零,右边抛弃)算术移位(左边用原有符号补充,右边抛弃)注:不移动负数位位操作符&:与|:或^:异或赋值操作符x = y:y值赋给xx += y:x = x + yx -= y:x...
2019-03-09 17:54:44
74
原创 语句结构
分支语句结构if语句if(条件判断){...}else if(条件判断){...}.else if(条件判断){...}else{...}switch语句switch(变量){ case 值:{...} break; ... case 值:{...} break; default:{...} ...
2019-03-09 17:54:04
149
原创 常量-变量
常量常量的分类字面常量 const定义的常量 #define定义的标识符常量 枚举常量变量命名规则必须以字母或下划线开头,后跟字母、数字、下划线 不能用关键字用作标识符关键字数据类型基本数据类型:void char int float double 类型修饰:short long signed unsigned 自定义类型: struct union enu...
2019-03-09 17:51:00
76
原创 C基础
函数入口:mainint main(){ return 0;}注释C:/*注释内容*/ C++://注释内容字符串由双引号引起来的一串字符:"hello!\n"转义字符数据类型void //无类型char //字符型 1short //短整型 2int //整型 4long //长整型 4float //单精度...
2019-03-09 17:46:21
120
原创 自定义类型
结构体(struct)结构体是一些值的集合,这些值称为成员变量,结构体没个成员可以是不同的类型结构体内存对齐规则第一个成员变量在与结构体变量偏移量为0的地址处 其他成员变量要对到对齐数的整数倍处,对齐数=编译器默认对齐数与该成员大小的较小值,vs中默认对齐数为8,linux默认对齐数为4 结构体大小为最大对齐数的整数倍 如果嵌套了结构体,嵌套结构体对齐到自己的最大对齐数的整数倍处...
2019-03-09 17:43:48
71
原创 string常用接口
一、stringstring是表示字符串的字符串类 头文件#include <string>还得写using namespace std; 底层typedef basic_string<char> string; 不能操作多字节或者变长字符的序列二、成员函数1、构造函数函数名称 功能说明 string(); 构造一个空字符串 stri...
2018-12-04 23:18:36
262
原创 C/C++内存管理面试题
一、题目1、 malloc/free和new/delete共同点和不同点共同点时都在堆上申请空间,都需要手动释放空间 malloc和free是函数,new和delete是操作符 malloc申请空间时需要手动计算申请空间大小,而new只需在后面跟上空间类型即可 malloc返回值时void*,在使用时强转,new不需要 malloc申请空间失败返回NULL,在使用时必须判断是否为空...
2018-11-10 16:51:46
2426
原创 日期类
一、功能计算出一个固定日期d在n天后/前的日期(n无限制,d不能比初始值小) 计算出d的前一天和后一天 计算出两个日期的相距天数二、源代码1、date.h#ifndef _DATE__H_#define _DATE__H_#include "iostream"using namespace std;class Date {public: Date(int yea...
2018-11-07 17:48:11
118
原创 海量数据面试题
1、给定100亿个整数,设计算法找到只出现一次的整数;先将100亿个整数切割到100个文件中,每个文件利用哈希表存储,找出每个文件中只出现一次的整数,再合并最后找出只出现一次的整数。2、给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集;和上题一样,先将两个文件都利用相同的散列函数各切割为100份,并且将两个文件的切割文件按一样的规律编号,再将相同编号的文件进行合...
2018-10-26 12:04:32
337
1
原创 位图
一、概念我们知道一个字节八个比特位,我们可以将每个字节的比特位看做一个哈希表,由低位到高位依次定下标,每个下标代表唯一的元素值,当比特位是0不存在,是1存在。例:int a[]={1,3,7,4,12,16,19,13,22,18}二、源代码1、bitmap.h#ifndef _BITMAP__H_#define _BITMAP__H_#include "stdio...
2018-10-26 12:01:09
100
原创 哈希表(链地址法)
一、概念我前面说过哈希表的开放定址法,现在说说链地址法又称开散列法,在利用毕散列时我们说到有哈希冲突,而开散列法正好避开了哈希冲突,每个下标所在位置就是桶口,每个桶可以看做是一个链表,我们把哈希冲突的元素放在同一个桶中。 虽然我们加设了一个指针,看起来增加了存储开销,但是毕散需要大量的空闲空间以保证搜索速度,而表所占的空间比指针要大得多,所以开散列反而比毕散列要节省存储空间。二、源代码...
2018-10-26 11:31:57
3396
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人