1. 进程&线程

1.1 异步IO和同步IO区别?

如果是同步IO,当一个IO操作执行时,应用程序必须等待,直到此IO执行完。相反,异步IO操作在后台运行,IO操作和应用程序可以同时运行,提高系统性能,提高IO流量。

在同步文件IO中,线程启动一个IO操作然后进入等待状态,直到IO操作完成后才醒来继续执行。而异步文件IO中,线程发送一个IO请求到内核,然后继续处理其他事情,内核完成IO请求,将会通知线程IO操作完成。

1.2 进程间通信

方式 解释
管道,pipe 是 一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程之间使用,通常是父子进程
有名管道,named pipe 也是半双工通信方式,但是它允许用于无亲缘关系的进程之间的通信
信号量semaphore 是一个计数器,通常作为一个同步机制,用于进程和线程间的同步
消息队列message queue 是一个消息链表,存放在内核中并且由消息队列标识符标识。消息队列克服了信号传递信号少、管道只能承载无格式字节流以及缓存区大小受限的缺点
共享内存shared memory 一段能够被多个进程共同访问的内存,由一个进程创建。共享内存是最快的IPC方式,它是针对其他进程间通信方式运行效率低而设计的,往往与其他通信方式如信号量配合使用,来实现进程间同步和通信
套接字socket 可用于不同主机间的进程通信
信号signal 用于通知接收进程某个事件已经发生,是一种比较复杂的通信方式

1.3 进程的地址空间模型

![[Pasted image 20240417100925.png]]

1.4 进程的五种状态分别是?

![[Pasted image 20240417101258.png]]

1.5 子进程从父进程继承的资源有

1.6 什么是进程上下文、中断上下文

1.7 如何防止僵尸进程过多导致系统空间爆满?

每当子进程退出,父进程都会收到SIAGCHLD信号,故可在父进程中设置SIGCHLD信号的捕获函数,在捕获函数中回收子进程

void handler(int sig){
	int status;
	if(waitpid(-1, &status, WNOHANG) >= 0){
		printf("child is die\n");
	}
}

int main(){
	signal(SIGCHLD, handler);
	int pid = fork();
	if(pid > 0){
		while(1){
			sleep(2);
		}
	}
	else if(0 == pid){
		printf("i am child, i die");
		exit(0);
	}
}

1.8 /proc目录下,以数字命名的目录表示什么?

以数字命名的目录表示当前一个运行的进程,目录名即为进程PID,其内的目录和文件给出了一些关于该进程的信息

1.9 进程和线程有什么区别

1.10 什么时候用多进程?什么时候用多线程?

1.11 线程可以独立运行吗?

线程不能独立运行,但一个线程的崩溃不一定导致整个进程崩溃

1.12 写出下列线程、互斥锁、信号量的相关代码

定义一个线程ID变量 pthread_t tid;
创建线程 pthread_create(&tid, NULL, pthread_func, NULL)
等待子线程结束,并回收资源 pthread_join(tid, NULL);
与当前进程分离 pthread_detach(tid);
退出调用线程 pthread_exit(NULL);
取消线程 pthread_cancel(tid);
创建互斥锁 pthread_mutex mutex = PTHREAD_MUTEX_INITIALIZER
初始化一个互斥锁 pthread_mutex_init(&mutex, NULL);
对互斥锁上锁 pthread_mutex_lock(&mutext);
对互斥锁解锁 pthread_mutex_unlock(&mutex);
定义一个信号量 sem_t sem;
创建信号量并初始化它的值 sem_init(&sem, 0, 1);
信号量的值减1 sem_wait(&sem);
信号量的值加1 sem_post(&sem);

1.13 线程间通信和同步方式有哪些?

信号、信号量、互斥锁、条件变量、自旋锁、读写锁

1.14 如何防止同时产生大量的线程

1.15 互斥锁与信号量的区别?

1.16 孤儿进程是什么?

2 网络编程

2.1 列举一下OSI协议的各种分层

功能
应用层 在实现多个应用进程相互通信的同时,完成一系列业务处理所需的服务,比如电子邮件、文件传输、远程登录等
表示层
会话层
传输层
网络层
数据链路层
物理层

2.2 TCP/IP协议包括?

协议
应用层 FTP、SMTP、DNS
传输层 UDP、TCP
网络层 IP、ICMP、IGMP
网络接口层 ARP、RARP

2.3 TCP通信建立和释放的过程?端口的作用?

2.4 IP地址转换成物理地址的协议?反之?

2.5 IP地址的编码分为哪两个部分?

IP地址由两部分组成,网络号和主机号。不过是要和子网掩码按位与上之后才能区分哪些是网络位哪些是主机位

2.6 应用程序ping发出的是什么报文

应用程序ping发出的是ICMP请求报文
ping的原理是利用网络上机器IP地址的唯一性,给目标IP地址发送一个数据包,通过对方恢复的数据包来确定两台机器是否连接相通,时延是是多少

2.7 socket编程的流程是?

2.8 epoll是什么?

2.9 TCP、UDP的区别?

2.10 TCP、UDP分别有什么优点和缺点?

2.11 TCP、UDP各自的适用场景

2.13 TCP如何保证可靠传输

2.14 简述TCP三次握手的过程

![[Pasted image 20240417113955.png]]

2.15 为什么需要三次握手

2.16 为什么服务器端易受SYN攻击?

2.17 简述TCP四次挥手的过程

![[Pasted image 20240417114654.png]]

2.18 TCP四次挥手中,为什么客户端最后还要等待2*MSL Maximun Segment Lifetime

2.19 为什么连接是三次握手,关闭是四次挥手?

2.20 DNS服务器和客户机设置完毕后,有哪三个命令可以测试其设置是否正确?

2.21 网络编程的作用?

本质是用套接字进行进程间通信,但是这些进程是分布在不同主机上的进程,因此网络编程在物联网方面有比较大的作用

2.22 socket网络编程中,哪5个元素可以明确标识一条连接?

五元组:客户端端口、客户端IP、服务端端口、服务端IP、传输协议

2.23 什么是TCP粘包?

发送方发送的若干数据包到达接收方粘成一个包

2.24 TCP粘包的原因

同上

2.25 什么时候处理粘包现象

2.26如何解决粘包?

2.27 IP地址分类

A:政府机关
B:中等规模企业
C:任何
D:多播
E:实验

IP地址和MAC地址的相同点和不同点?

2.29 路由器、交换机、集线器的区别