美团一面

1.进程跟线程的区别

进程是操作系统分配的基本单元,线程是CPU操作的基本单元,进程包含线程,一个进程可以包含多个线程;

进程是有独立的内存空间,通信不方便,线程的内存空间是共享的,通信方便;

2.进程的临界区

临界区:一次只允许一个进程使用的共享资源称为临界区。保证任意时刻只有一个进程能访问临界区。如果有多个进程试图同时访问临界区,那么在一个进程进去后,其他试图进入临界区的进程必须等待。

程序的调度原则:

  1.如果有若干进程要求访问临界区,一次只允许一个进程进入

  2.任何时候,处于临界区的进程不多于一个。

  3.进入临界区的进程要在有限时间内退出

  4.如果进程不能进入,要让出CPU

3.进程间同步的方法:

  1.信号量:是允许同一时刻有多少个进程可以访问该资源。就是一个计数器。控制同时访问此资源的最大线程数,大于0时,表示当前可用资源的数量,小于0时,表示等待使用该资源的进程个数

  2.互斥锁:是保证同一时刻对共享资源进行独占式访问。采用互斥机制,只有拥有互斥锁的对象才能访问同步资源。

  3.临界区:一次只能有一个进程可以访问的共享资源称为临界区。

  4.事件:用来通知来保持同步。一个线程在处理完一个任务之后,主动唤醒另外一个线程执行任务。

4.进程之间的通信方式:1.管道通信,2.消息缓冲通信 3.共享内存通信

  管道通信:发送信息的是写进程,接收信息的是读进程,通信方式的中间介质是文件(管道文件)。像管道一样,将两个进程连在一起,实现通信。写进程通过写入端向管道文件中写入信息,读进程通过读出端从管道文件中读出信息。

    使用PIPE()创建无名管道,使用MKNOD()创建有名管道。

    无名管道:是一种非永久性的管道通信,当访问的进程终止时,也会被撤销,只能在有亲缘的进程之间通信

    有名管道:可以长期存在系统中,可以给任意关系的进程使用。

      调用WRITE()和READ()实现对管道的读写,调用CLOSE()关闭管道文件

  消息缓冲通信:多个进程之间使用消息缓冲机制来通信。使用的中间介质的消息缓冲区。消息缓冲区一般为消息队列,是进程共享的。

    发送消息的进程可以在任意时刻发送任意个消息到消息队列,并检查是否有进程在等待,若有,则唤醒。接收消息的进程可以在需要的时候到指定的消息队列获取消息,若没有消息,则睡眠。

  共享内存通信:消息缓冲需要占用CPU进行消息复制,共享内存是进程间直接进行数据交换。

    允许多个进程使用供一个内存段进行通信。进程间可以直接访问同一个内存,就像访问自己的私有空间一样。最快捷的方式,但是必须在同一个计算机系统上才行。

优缺点:

  1.管道通信:无名管道:简单方便,只能在亲缘之间通信,有名管道:长期存在系统中,使用不当会出错

  2.消息缓冲通信:允许任意进程共享消息队列来实现进程间的通信,而且也不需要用户来考虑同步问题,但是信息的复制需要额外的CPU时间,不适宜做信息量大或者频繁的操作

  3.共享内存通信:利用内存缓冲区进行直接通信,无序复制,快速,信息量大。但是因为是多个进程直接操作共享内存,需要考虑读写操作的同步问题。另外,由于要使用共享的物理内存,所以要处于同一个计算机系统的进程共享。不方便网络通信。

进程间通信的方法:管道,命名管道,信号,消息队列,共享内存,内存映射,信号量,socket

5.死锁的概念和条件

  死锁:多个进程的运行期间,由于互相竞争资源而造成的一种僵局,如果没有外力的作用,它们都无法继续向前推进,

  死锁产生的必要条件:1.互斥条件 2.请求保持条件 3.不可剥夺条件 4.循环等待条件。

6.常用的Linux命令

7.中断时,CPU会做什么事:当一个外部IO出现,或高优先级的命令需要马上执行的时候,CPU保存当前执行的现场,然后去执行产生中断的请求,执行完之后,再将之前执行的现场恢复回来,继续执行后面的指令。

8.操作系统的调度策略:

  先来先服务(FCFS),短作业优先,最高优先权优先,最短剩余时间优先,高响应比优先,时间片轮转法

9.进程同步与互斥的区别:

  互斥:互斥是进程之间的制约关系,当一个进程进入临界区之后,另外的进程只能等待,是排他性的访问。

  同步:也是进程之间的制约关系,是他们为了完成某个任务,需要协调他们的工作次序而等待,传递信息的制约关系。

比如:进程A需要从缓存中读取B的信息,但是当缓冲区为空时,进程A读取不到信息而阻塞,当进程B产生信息放入缓冲区时,进行A才被唤醒。

10.同步与阻塞的关系:

  同步与异步:是消息的通信机制,是一个调用在没有得到结果之前不返回,一旦返回,就得到返回值。异步是相反的,当异步调用发生后,调用者不会立即得到结果,而是直接返回。最后通过被调用者通过状态或回调函数来通知调用者。

  阻塞与非阻塞:关注的是程序在等待调用结果时的状态,阻塞是指调用结果在返回之前,线程会被挂起,只有返回结果之后才继续执行。非阻塞是指在得到调用结果之前,调用不回阻塞当前线程。

11.同步原则:

  1.空闲让进:当临界区空闲时,允许一个请求进入临界区的进程进入临界区

  2.忙则等待:当有进程在临界区时,其他试图访问临界区的进程必须等待,互斥的访问临界资源

  3.有限等待:对于要求访问临界区的进程,要保证进程能在有限的时间进入临界区

  4.让权等待:当进程不能进入临界区,则要释放掉CPU,以免陷入忙等。

12.操作系统角度线程同步方式:互斥量,信号量和事件

13.http是网络七层协议中的哪一层:

14.TCP UDP的区别:

15.TCP的协议有哪些:

16.UDP的协议有哪些:

TCP的可靠性如何保证:

校验方式:

17.三次握手:

18.输入网址之后的过程

19.session和cookie的区别

20.数据库的事务的特性:

21.解释持久性

22.where, order by, group by, having

23.mysql索引的数据结构:

24.B树和B+树的区别,哪个更优

猜你喜欢

转载自www.cnblogs.com/SkyeAngel/p/9508772.html