1、标准IO与文件IO 的区别?
操作文件入口不同:
标准IO :FILE*(通过文件流操作)
文件IO:fd(通过文件描述符操作)
(open函数是Linux内核提供的。文件描述符是内核用来标识和打开文件的符号)。
缓存区有无:
标准IO:有缓存区
文件IO:没有缓存区
来源不同:
标准IO:来自于IO库
文件IO:来自于内核
2、进程与程序的区别?
进程与程序的区别:
1、 程序是指令的有序集合,是一个静态概念,其本事没有任何运行的含义。而进程是程序在处理机上的一次执行过程,是一动态的概念。
2、 程序可以作为一种软件资料长期保存,而进程则是有一定生命周期的,它能够动态的产生和消亡。
3、 进程是一个能独立运行的单位,能与其他进程并行活动。
4、 进程是竞争计算机系统有限资源的基本单位,也是进行处理机调度的基本单位。程序无此该概念。
5、 进程与程序之间无一一对应关系。不同的进程可以包含同一程序,同一程序在执行中也可以产生多个进程。
6、 程序是记录在介质上指令的有序集合,而进程则由程序、数据和进程控制块3部分组成。
或者写成:
程序是一个由指令和数据构成的一个二进制可执行文件,存储在磁盘中,没有执行的概念,是静态的。
进程是操作系统资源分配的最小单位(资源包括cpu资源和虚拟内存资源),存在于虚拟地址空间中,有执行的概念,是动态的。
3、引用和指针的区别?
1、指针是一个实体,需要分配内存空间。引用只是变量的别名,不需要分配内存空间。
2、引用在定义的时候必须进行初始化,并且不能够改变。指针在定义的时候不一定要
初始化,并且指向的空间可变。(注:引用的值不能为NULL) int &b=NULL;//错
3、有多级指针,int **p=&b;有多级引用,但只能有一级一级的引用。int &b=a;int &c=b;
4、指针和引用的自增运算结果不一样(指针是指向下一个空间,引用时引用的变量值加1)
int &b=a;
b++;//a+1
5、sizeof 引用得到的是所指向的变量(对象)的大小,而sizeof 指针得到的是指针本身的大小。
6、引用访问一个变量是直接访问,而指针访问一个变量是间接访问。
4、Tcp/Udp流程
Tcp
Server:socket(创建流式套接字)->bind->listen->accept->IO->close
Client: socket->connect->IO->close
Udp
接收端(server): socket(创建数据报套接字)->bind->recvfrom->close
[bind前准备一个bind的地址结构]。
发送端(client): socket->准备接收端的地址结构->sendto->close
- 进程间的六种通信机制
有名管道,无名管道,信号量,共享内存,消息队列,socket套接字。
放在共享内存中的数据最后还有,而消息队列最后的数据就没了。
- new/delete运算符与malloc/free区别:
1、new/delete是运算符,不需要加头文件,而malloc/free是函数,需要加头文件-》<stdlib.h>
2、malloc的返回值是void *型指针,需要强转才能使用;new的返回值是特定的数据类型指针,不需要强转。
3、new申请内存时已经确定了内存中存放的数据类型,new会做类型检查。即指针数据类型要和new后面的数据类型保持一致。
4、malloc申请内存大小需要手动计算,new只需要确定元素的个数和数据类型。
New int[5];这样就new出了连续的20个内存单元。
5、free的入参是内存的首地址,delete内存时后面跟指针或[ ]指针。Delete p或者delete[ ]p;
6、new一个对象时会自动调用该对象的构造函数,delete一个对象时会自动调用该类的析构函数。而malloc/free没有这个功能。
7、结构体和类的区别?
- 结构体中一般只有成员变量,没有成员函数,并且成员默认是共有的。
- 类中一般既有成员变量,有有成员函数,在成员变量和成员函数前都有访问限 定符,若类中前面没有访问限定符,默认是私有的。
8、无名信号量实现两个线程的同步
一个进程有多个线程,线程之间会存在互斥等关系。
Sem_t sema;----》sem_wait(&sema)----》p操作方法>0 的话sema-1,同时semwait返回,
等于0,semwait继续阻塞这个线程的返回
Sem_t semb;----》sem_post(&semb)----->v操作方法只对sempost所监控的信号量+1.
9、守护进程的创建步骤
守护进程:服务程序,运行不依赖任何shell终端,摆脱终端控制,在后台执行,从开机到关机。
10、函数重载、函数重写、函数隐藏三者区别
函数重载:是指函数名相同,参数不同(个数和类型),与返回值无关。
A相同的作用域。
B函数名相同
C参数不同
D没有virtual关键字
E返回值可以相同也可以不同
函数重写:成员函数覆盖(指派生类重新定义继承自基类的虚函数)
A不同的作用域(分别位于基类和派生类中)
B函数名相同
C参数相同
D函数体不同
E基类的函数前必须要有virtual关键字,子类的该函数可有可无。
F返回值一定是相同的。
G重写函数的访问限定符可以和基类的访问限定符不同。
函数隐藏:也称为同名覆盖,指的是成员函数隐藏
A不同的作用域(分别位于基类和派生类中)
B函数名相同,函数名前没有virtual关键字
C返回值可以相同,也可以不同。
D参数可以相同,也可以不同