1、进程间的通信方法
管道通信
- 有名管道——一种半双工的通信方式,它允许无亲缘关系进程间的通信。
- 无名管道——一种半双工的通信方式,它只允许有亲缘关系进程间的通信。
信号量
一个计数器,用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。
信号量用于进程间同步,若要在进程间传递数据,则需要结合共享内存。
信号量基于操作系统的PV操作,程序对信号量的操作都是原子操作。
信号
- 一种比较复杂的通信方式,用于通知接受某个事件已发生。
消息队列
消息的连接表,存放在内核中,并由队列标识符标识。
消息队列是面向记录的,其中的消息具有特定的格式,以及特定的优先级。
消息队列独立于发送和接受进程,进程终止时,消息队列及其内容并不会被删除。
消息队列可以实现消息的随机查询。
可以实现任意进程间的通信,无需考虑同步问题。
共享内存
指两个或多个进程共享一个给定的存储区。
共享内存是最快的一种进程通信方式,因为进程是直接对内存进行存取。
因为多个进程可以同时操作,所以需要同步。
socket套接字
- 可用于不同机器间的进程通信。
- 适合于客户端与服务器端的信息实时交互。
- 传输数据时间短、效率高。
2、一个进程可以访问另一个进程的内存吗?
- 进程与进程之间的内存地址是相互独立的,可以通过通信进行传递消息。
3、C++中的多态是怎么实现的?
- 多态,顾名思义就是同一事物的在不同场景下的多种状态,可以分为静态多态和动态多态。
- 静态多态包括函数重载和泛型编程。下面代码就是函数重载:
int Add(int left, int right) { return left + right; } double Add(double left, int right) { return left + right; } int main() { Add(10, 20); //Add(10.0, 20.0); //这是一个问题代码 Add(10.0,20); //正常代码 return 0; }
- 可以发现,函数重载是在编译期间完成的,编译器会根据实参类型调用相应的函数,如果有合适的函数就调用,没有就发出警告或错误。
动态多态——重点
- 在程序运行时,根据基类的引用(指针)指向的对象,来确定自己具体该调用哪个类型的函数。
动态多态的条件
- 基类中必须包含虚函数,并且要在派生类中对该虚函数进行重写。
- 通过基类对象的引用或指针调用虚函数。
重写
- 基类中被重写的函数必须是虚函数。
- 基类和派生类的原型必须保持一致(返回值类型、函数名称及参数列表)。
扩展——以下函数不能作为虚函数:
友元函数
静态成员函数(没有this指针)
构造函数、拷贝构造函数
全局函数
扩展——抽象类
- 包含纯虚函数的基类,即为抽象类。
纯虚函数
- 在虚函数的基础上,让虚函数等于0。相当于一个接口,所在类也叫接口类。纯虚函数必须在派生类中实现重写,否则无意义。
4、const的作用是什么?
阻止一个变量被改变。在定义const变量时,必须对其进行初始化,因为const对象一旦创建就不能修改。
对指针来说,可以指定指针本身是const,即常量指针,int *const p;也可以指定指针所指的数据为const,即指针常量,int const *p;。
在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值。
对于类的成员函数,若指定其为const类型,则表明它是一个常函数,不能修改类的成员变量,类的常对象只能访问类的常成员函数。
对于类的成员函数,有时候必须制定其返回值为const类型,以使得其返回值不是左值。
const成员函数可以访问非const对象的非const数据成员、const数据成员,也可以访问const对象内部的所有数据成员。
非const成员函数可以访问非const对象的任意数据成员,而不能访问const对象的任意数据成员。
const类型可以通过类型转换符const_cast将const类型转换为非const类型。
5、Linux中的find命令怎么使用?
find命令的作用:
- 在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。当不设置任何参数时,find命令在当前目录下查找子目录与文件,并将查找到的子目录和文件全部显示。
find命令格式:
- find path -option [-print] [-exec -ok | xargs | grep] [commond {};]
find命令的参数:
path——要查找的目录路径
- ~ 表示HOME目录
- . 表示当前目录
- / 表示根目录
options——查找方式
-name filename 查找名为filename的文件
-perm 按执行权限来查找
-user username 按文件属主来查找
-group groupname 按组来查找
-mtime -n +n 按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n 按文件访问时间来查找文件,-n指n天以内,+n指n天以前
-ctime -n +n 按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup 查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser 查无有效属主的文件,即文件的属主在/etc/passwd中不存在
-type b/d/c/p/l/f 查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] 查长度为n块[或n字节]的文件
-mount 查文件时不跨越文件系统mount点
-follow 如果遇到符号链接文件,就跟踪链接所指的文件
-prune 忽略某个目录
print——表示将结果输出到标准输出
exec——对匹配的文件执行该参数所给出的shell命令。形式为command {} ;
ok——与exec作用相同,区别在于,执行命令前会给出提示,让用户确认是否执行。
|xargs——与exec作用相同,起承接作用。区别在于|xargs主要用于承接删除操作,而-exec都可用,如复制、移动等。
6、Linux中的grep命令怎么使用?
grep的作用
- 用于搜索文本文件的内容。
命令格式
grep 待搜索文本 文本名
grep -n 显示匹配行及行号
grep -v 显示不包含匹配文本的所有行
grep -i 忽略大小写
grep允许对文本文件进行模式查找,即正则表达式。
- ^a——行首,搜索以a开头的行
- ke$——行尾,搜寻以ke结尾的行
7、解释一下tcp中的滑动窗口?
滑动窗口是用来实现流量控制的一种技术。
发送端的发送窗口大小不能超过接收端的滑动窗口大小。
当接收端的滑动窗口值降为0时,发送端不再发送数据。此时启动持续计时器,当计时器时间结束时,发送端向接收端发送一个探测报文段,接收端收到探测报文段之后,发送新的窗口值,如果新的窗口值仍为0,则发送端重启持续计时器。