自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 消息队列

 消息队列提供了一个从一个进程向另一个进程发送数据块的方法 每个数据库都被认为是一个类型,接收者进程接收的数据块可以有不同的类型值 消息队列也有管道一样的不足,就是每个消息的最大长度是有上限的,每个消息队列的总的字节数也是有上限的,系统上消息队列的总数也有一个上限 消息队列的特点: 消息队列...

2018-08-16 20:43:46 97 0

原创 进程间通信——管道

进程间通信 进程间通信的目的: 数据传输:一个进程需要将它的数据发生给另一个进程 资源共享:多个进程之间共享同样的资源 通知事件:一个进程需要向另一个或一组进程发生消息,通知他发生了某种事件(如进程终止时要通知父进程) 进程控制:有些进程行为完全控制另一个进程的执行,此时控制进程希望能够...

2018-08-16 18:23:12 73 0

原创 浅析软,硬链接

硬链接: 通过文件系统,我们知道,真正找到磁盘上文件的并不是文件名,而是inode。但是我们的Linux可以使多个文件名对应于同一个inode 创建一个硬链接:ln 源文件名 链接名 我们发现abc和bcd指向了同一个inode,inode中记录了文件的所有信息,改动其中一个使,另一个也...

2018-08-15 11:53:12 82 0

原创 浅析文件系统

文件系统: Linux提供了层次结构的目录和文件,文件系统将磁盘划分为每1024(或512)个字节为一组的块。编号从0到整个磁盘空间的最大块数 当我们使用ls -来查看时,我们发现,除了看到文件名,还能看到文件元数据 每行包含7列:模式,硬链接数,文件所有者,组,大小,最后修改事件,...

2018-08-15 11:09:06 128 0

原创 文件相关系统调用,文件描述符

  1.open函数: 函数原型: #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h> int open(const char *pa...

2018-08-15 10:19:06 130 0

原创 线程的同步与互斥

mutex(互斥量) 大部分情况,线程使用的数据都是局部变量,变量的地址空间在线程栈空间内。这种情况,变量对数单个线程,其他线程无法获得这种变量 但有时候,很多变量都需要在线程间共享,这样的变量称为共享变量,可以通过数据的共享,完成线程之间的交互 多线程并发的操作共享变量,会带来一些问题,因...

2018-08-13 17:37:14 57 0

原创 线程id与进程id

内核标识的线程ID-LWP,在系统级别有效 在Linux中,线程被称为轻量级进程(light weighted process),每一个用户态的线程,在内核中都对于一个调度实体,也称为进程描述符(task_struct结构体) 没有线程之前,一个进程对于内核里的一个进程描述符,对于一个进程ID...

2018-08-13 15:10:58 2516 4

原创 线程控制

线程控制: 线程的控制与进程控制不同,由于内核中根本没有写出的概念,因此也就不存在线程相关的“系统调用”,于是大佬在用户层封装了一个线程库,我们就可以在用户层来完成线程的创建,销毁以及其他控制 posix线程库: 与线程有关的函数构成了一个完整的系列,绝大多数函数的名字都以“pthread_...

2018-08-12 20:32:57 61 0

原创 线程初识

线程初识:  什么是线程? 线程是操作系统能够进行运算调度的最小单位 线程包含在进程之中,是进程中的实际运行单位,一切进程至少都有一个执行线程 线程是指进程中的一个单一顺序的控制流 一个进程中可以并发多个线程,每条线程并行执行不同的任务 一个程序中的一个执行路线就叫做线程。线程就是一个在...

2018-08-12 18:37:05 66 0

原创 进程终止,进程等待

进程终止: 进程退出的场景: 代码运行完毕,结果正常 代码运行完毕,结果不正常 代码异常终止 进程常见的退出方式: 1.正常终止: 从main()函数返回 调用exit _exit 正常终止,可以通过echo $?来查看进程的退出码 2.异常退出: ctrl+c,信号终止   ...

2018-08-12 10:30:49 83 0

原创 进程创建——fork,vfork

fork()函数: 在Linux中fork函数是一个非常重要的函数,它从已存在的进程中创建一个新的进程,而新进程位子进程,原进程位父进程 函数原型: #include<unistd.h> pid_t fork(viod); 返回值:成功子进程中返回0,父进程...

2018-08-11 11:27:25 67 0

原创 程序的地址空间

研究背景:32位平台 计算机物理内存的大小是固定的,就是计算机主板内存槽上的实际物理内存,cpu可以直接进行寻址,物理内存的容量是固定的,但是寻址的空间取决于cpu地址线的数量。在32位系统上,线性地址空间可达4G(2^32);这4G一般是按照3:1的比例进行分配,用户进程享有3G的空间,而内核...

2018-08-10 20:18:08 2886 0

原创 僵尸进程,孤儿进程

Z(zombie)——僵尸进程 僵尸状态是一个比较特殊的状态,当进程退出并且父进程没有读取到子进程退出的返回代码时,就会产生僵尸进程 僵尸进程会以终止状态保持在进程表中,并且一致在等待父进程读取退出状态代码 所以,子进程退出,但是父进程没有读取子进程状态,子进程加入Z状态 系统调用exit...

2018-08-10 12:09:37 82 0

原创 进程初始(二)——进程优先级,环境变量

程序优先级: 基本概念: 进程在被cpu分配到资源优化才能运行,但是资源是有限的,cpu分配资源的先后顺序,就是进程的优先权 优先权(优先执行的权利)和优先级值不一样,优先权高的进程有优先执行的权力,配置进程优先权对多任务环境的Linux很有用,可以改善系统性能 还可以把进程运行到指定的C...

2018-08-10 10:20:10 85 0

原创 初识进程(一)——操作系统,进程管理,进程状态

一、冯诺依曼体系结构 目前我们认识的计算机都是由一个个硬件组成 输入单元:键盘,鼠标,扫描仪等 输出单元:显示器,打印机 中央处理器(cpu):含有运算器和控制器 关于冯诺依曼体系,必须强调几点: 存储器是指内存 不考虑缓存的情况,cpu只能对内存进行读写,不能访问外设 外设要输...

2018-08-09 17:14:59 680 0

原创 Mysql——内外连接,事物,索引

表的内外连接: 表的连接分为内连和外连 内连接: 内连接实际上就是利用where语句对俩个表形成的笛卡儿积进行筛选,我们前面学的所有连接都是内链接 语法:select 字段名 from 表1 inner join 表2 on 连接条件 and 其他条件 例:显示SMITH的名字和部门名称...

2018-08-09 12:45:07 146 0

原创 MySQL——表的约束,数据类型,增删查改

数据类型 数值类型: tinyint:1字节,-128~127,0~255 smallint:2字节,-32768~32767,0~65535 mediumint:3字节 ,-8388608~8388607 ,0~16777215 int :4字节,-2147483648~2147483...

2018-08-09 10:52:23 101 0

原创 MySQL对表和库的一些基本操作

启动mysql:service mysqld start 关闭mysql:service mysqld stop 连接到mysql:mysql -u root -p 退出连接:exit 库的操作 创建数据库: 创建数据库company1:create database company1...

2018-08-09 10:16:12 92 0

原创 模板的偏特化,全特化

c++中的模板分为类模板和函数模板 模板的特化分为俩种:全特化和偏特化 全特化: 举一个简单的例子 template<class T> class AA { public: AA() :_a(0) {} ~AA() { cout &lt...

2018-08-08 18:12:33 128 0

原创 模板参数,模板分离编译

模板的形参: 1.类型形参: template<class T> void h(T a) {//……}  类型形参是指:class T/ typename T中的T,类型形参的名字由用户自己定义,模板的形参(T)表示一个未知的类型。 模板类型形参可以作为...

2018-08-08 17:17:16 95 0

原创 C++——模板

概念: 模板是泛型编程的基础,所谓泛型编程就是编写与类型无关的逻辑代码,是一种复用的方式。模板将类型定义为参数,从而实现了真正的代码可采用性 模板分为模板函数和模板类 一、模板函数 假设现在要实现一个比较俩个数是否相等的重载函数 int IsEqual(int a, int b) { ...

2018-08-08 16:12:31 48 0

原创 C++——多态

1.什么是多态? 多态简单的讲就是“一个接口,多种方法”,程序在运行时才决定调用的函数,他是面向对象的核心概念。当多态应用形参的数据交,可以接受更多的类型,当多态用于返回值类型的时候,可以返回更多类型的数据,多态可以让你的代码拥有更好的扩展性 构成多态的条件 继承的存在 子类要重写父类的虚...

2018-08-07 13:03:41 64 0

原创 虚函数,虚函数表

一、虚函数: 虚函数——类成员函数前面加virtual关键字,则这个成员函数称为虚函数 虚函数重写:当在子类里定义了一个和父类完全相同的虚函数时,则称子类的这个函数重写(覆盖)了父类的这个虚函数。 重写就是将子类里面虚函数表里的被重写的父类函数地址全都改成了子类函数的地址 虚函数覆盖(重写)...

2018-08-07 10:48:35 85 0

原创 菱形继承,虚继承

一、单继承和多继承 单继承:一个子类只有一个直接父类时,称这个继承为单继承 多继承:一个子类有俩个或以上的直接父类时称这个继承关系为多继承 单继承: 可以有多个父类,但是只能由一个直接父类 多继承: 二、菱形继承:  菱形继承的例子: class person { pu...

2018-08-06 23:21:15 174 0

原创 继承关系里的六个默认成员函数

在继承关系里,如果子类里没有显示定义这六个成员函数,编译器会默认合成的函数 实现一个继承关系里的默认成员函数 class person { public: person(const char* name) :_name(name) { cout <&lt...

2018-08-06 21:31:35 67 0

原创 c++继承,隐藏(重定义)

继承是面向对象复用的重要手段,通过继承定义一个类,继承是类型之间的关系模型。共享公有的东西,实现各自本质的不同的东西。 一、三种继承关系 public:公有继承 protected:保护继承 private:私有继承 实现一个简单的继承关系: 继承是一种复用的手段,在继承关系里基类(父...

2018-08-06 20:42:23 160 0

原创 C++动态内存管理——new/delete

1.c语言的动态内存管理 malloc:动态开辟指定大小的空间,返回值是void* ,所以要自己指定返回的数据类型 int *ptr = (int*) malloc (10*sizeof(int)); calloc:动态开辟指定大小的空间,与malloc不同的是它会进行初始化 int*...

2018-08-06 18:18:26 54 0

原创 构造函数,拷贝赋值函数的N种调用情况

一、  class Date { public: Date()//构造函数 { cout << "Date()" << endl; } Date(const Date& d)//拷贝构造 ...

2018-08-06 12:13:40 51 0

原创 C++——内联,友元

一、内联(inline) 以inline修饰的函数叫内联函数,编译时c++编译器会在调用内联函数的地方将其展开,没有函数压栈的开销,内联函数提升程序运行的效率。 inline时一种以时间换空间的做法,省去调用函数的开销,所以代码很长或内部有循环,递归的函数不适宜使用内联 inline对编译器...

2018-08-06 11:00:16 68 0

原创 测试方法的七种分类

一、按开发阶段分: 测试金字塔与业务测试分析 1.UI界面层: 比较复杂,需要一定的数据库,操作系统方面的基础知识 功能验证测试 兼容性测试与用户测试:兼容性测试与平台有关,web(浏览器),APP(操作系统) 2.业务逻辑层 客户端模拟测试:APP测试 内外接口测试: 内部:n个...

2018-08-05 16:24:05 1105 0

原创 测试——水杯的测试用例

水杯: 1.功能: 水倒容量的一半 水倒至安全刻度线以上 水倒满且流出来 水杯的容量刻度与其他水杯一致 烫手验证 2.性能: 使用的最大次数或时间 杯盖拧紧到什么程度水倒不出来 掉到地上不易损坏 保温时长 杯子的耐热性 杯子的耐寒性 长时间置放水不会漏出来 杯子上放置重...

2018-08-05 12:46:21 1647 0

原创 函数栈帧(调用过程)

函数栈帧就是在调用函数是为其在栈空间上开辟了一段空间,指向过程调用,一个过程调用包括将数据(以过程参数和返回值的形式)和控制从代码的一部分传递到另一部分。 栈是向下生长的,从高地址到低地址延伸的 每个函数的每次调用的过程,都有它自己独立的一个栈帧结构,用于变量的保存,现场的保护 要维护这个栈...

2018-08-05 11:20:51 128 0

原创 结构体,枚举,联合

一、结构体: 1.结果体是一些值的集合,这些值称为成员变量。结果的每个成员可以是不同类型的变量,可以是数组,指针,甚至其他结构体 2.结构体的声明: struct Stu {      char name[20];      int age;      char sex[5]; }...

2018-08-04 19:26:27 55 0

原创 malloc,calloc,realloc及动态开辟内存常见错误

1.为什么存在动态内存管理? 我们已经掌握的内存开辟方式有: int val = 20;//在栈空间上开辟四个字节 char arr[10] = {0}; //在栈空间上开辟10个字节的连续空间 但是这些开辟空间的方式开辟的空间大小是固定的,数组在声明的时候,也是必须指定大小。他们所需要的...

2018-08-04 16:46:48 655 0

原创 数组指针,指针数组

1.指针数组: 指针数组是一个数组,但数组内的每一个元素都是一个指针 int *arr[10] char *arr2[4]; 2.数组指针: 数组指针式一个指针,指针有能力指向一个数组 int (*p)[10]; 3.我们如何区别数组指针和指针数组呢? int *a[10]; //...

2018-08-04 13:25:34 51 0

原创 c语言指针详解

1.什么是指针? 指针是一个变量,用来存放地址,存放在指针中的值都被当成地址来处理 2.为什么存在指针? 从内存说起,计算机中的程序要运行起来首先要将程序加载到内存,那如何合理的分配时使用内存呢? 我们将内存分成多个小的单元,每个单元都对应一个独一无二的地址,这样就一个地址标识一块空间 ...

2018-08-04 13:06:35 83 0

原创 memcpy,memmove的实现

1.memcpy()的实现 内存拷贝函数,指定拷贝count个字节,与类型无关。 memcpy按字节拷贝,并不是只能拷贝字符串,所以没有‘\0’结束标志,按指定是字节数大小拷贝 str家族函数只能处理字符串类型的数据,而mem可以处理任意类型的数据 void* my_memcpy(voi...

2018-08-04 12:10:02 49 0

原创 递归函数,可变参数列表

递归 1.什么是递归? 递归就是函数或过程在其定义或声明的中有直接或间接调用自身的一种方式。他通常将一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。 2.递归的主要思想:大事化小 求第n个斐波那契数(不考虑溢出) int fib(int n) { if (n &a...

2018-08-04 11:57:33 256 0

原创 字符串相关函数的实现

1.strlen():求字符串长度函数,遇到'\0'结束 函数原型:size_t strlen(const char * str) 参数指向的字符串必须以‘\0’结尾 返回值size_t是无符号的 1)使用一个计数器 int my_strlen(const char...

2018-08-03 22:58:42 164 0

原创 头文件包含方式,main函数的参数解析

条件编译: 在编译一个程序的时候我们如果要将一条(一组)语句编译或放弃是很方便的因为我们有条件编译 比如调试性的代码,删除可惜,保留又碍事,我们就可以选择条件编译 常见的条件编译语句: 1. #if 常量表达式 //…… #endif //常量表达式由处理器求值,因为变量在运行事才...

2018-08-03 20:34:19 330 0

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