栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

【zs整理】

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【zs整理】

文章目录
  • 操作系统
    • 进程间通信的方式
      • 匿名管道
      • 命名管道
      • 信号
      • 消息队列
      • 共享内存
      • 信号量
      • Socket
    • 线程同步的方式
      • 1.同步方法
      • 2.同步代码块
      • 3.锁
      • 4.volatile
      • 5.信号量
    • 死锁的四个条件
    • 线程执行过程
    • cpu调度算法
    • 线程sleep和wait方法作用和区别
    • 页面置换算法
      • 先进先出置换算法
      • 最近最久未使用置换算法
  • 计算机网络
      • TCP三次握手
  • 未解决

操作系统 进程间通信的方式

匿名管道、命名管道、信号、消息队列、共享内存、信号量、Socket

匿名管道

是一种半双工通信方式,数据只能单向流动,且只能在有亲缘关系的进程之间进行通信。(亲缘关系进程:父子进程)。

命名管道

由于匿名管道只能用于亲缘关系进程之间的通信,为了克服这个缺点,提出了命名管道。
命名管道提供了一个路径名与之关联,以有名管道的文件形式存在于文件系统中,这样只要可以访问该路径,彼此就可以进行通信,因此无亲缘关系的进程之间也能进行通信。
命名管道严格遵守先进先出原则,对有名管道的读是从开始处读,对其写是从末尾开始写,内容放在内存中

信号

信号可以在任何时刻发送给进程,而无序直到进程的状态

  1. 若进程并未开始执行,则将该信号保存起来,直到进程恢复执行,传递给该进程。
  2. 若信号为阻塞信号,则将该信号的传递延迟,直达其阻塞被取消时,才被传递给进程。
消息队列
  1. 消息队列是存放在内核中的消息链表。(无名管道:存在于内存文件中。有名管道:存在于实际的磁盘介质或文件系统)
  2. 每个消息队列由消息队列标识符表示。
  3. 消息队列只有系统重启或者显示地删除消息队列,才会被真正地删除。
  4. 与管道不同的是,在某一个进程往消息队列写入消息之前,不需要另外一个进程在该消息队列上等待消息。并且实现消息的随机读取,可以按照消息的类型读取。
  5. 消息队列允许一个或多个进程向他写入与读取消息。
  6. 消息队列的通信数据遵循先进先出原则
  7. 克服了信号量承载信息少,管道只能承载无格式字节流以及缓冲区大小受限。
共享内存

进程间内存是相互隔离的,而共享内存相当于给两个进程开辟了一块二者都可以访问的空间,这时两个进程就可以共享一些数据。

  • 但是多个进程同时占用资源会带来以外,这时会采用信号量控制。
信号量

解决进程和线程间并发执行时的同步问题。
对信号量操作分别分为p操作和v操作,p操作将信号量-1,v操作将信号量+1.当信号量小于等于0之后,再进行p操作时,当前线程会被阻塞,直到另一个线程或进程进行v操作直到信号量大于0时。

Socket

是应用层和传输层之间的桥梁。可以看作是不同主机之间的进程进行双向通信的端点(套接字=ip地址+端口号)

线程同步的方式 1.同步方法

用synchornized关键字修饰的方法,在java中每个对象都有一个内置锁,当用该关键词修饰方法时,当某个线程要进入该方法前,先要取得内置锁,否则处于阻塞状态。

  • 当该关键词修饰静态方法时,此时如果调用静态方法,锁住的是整个类。
2.同步代码块

用synchornized关键字修饰的代码块,该代码块会被加上内置锁。

  • 同步是一个高开销操作,因此应减少同步的内容,通常没必要同步整个方法,同步代码块即可
3.锁 4.volatile

为域变量提供了一种免锁机制,使用volatile修饰域相当于告诉虚拟机,该域可能被其他线程更新,每次使用该域都要重新计算,而不是使用寄存器中的值,volatile不提供任何原子操作,也不能修饰final类型的变量。

5.信号量

同上

死锁的四个条件

1.互斥条件:一个资源只能被一个线程拥有
2.请求与保持条件:一个线程在阻塞时,对已有的资源保持不放
3.不可剥夺条件:一个进程已有的资源在未使用完之前,不能被剥夺。
4.循环等待

线程执行过程

线程生命周期:新建,可运行,运行,阻塞,死亡。

  1. 新建
    当new了一个线程后,该线程处于新建状态
  2. 可运行
    当线程对象调用了start方法之后,线程就处于可运行状态
  3. 运行
    当线程获得cpu时间片,才开始真正执行run方法的线程执行体
  4. 阻塞状态
    当线程在运行状态时,让出cpu并暂停自己的运行
  5. 死亡
  • run方法执行完成,线程正常结束
  • 线程抛出一个未捕获的exception或error。
  • 直接调用stop方法
cpu调度算法

先来先服务
最短作业优先
最高优先级
时间片轮转

线程sleep和wait方法作用和区别

1.sleep是thread中的静态方法,wait是object类中的成员方法;
2.sleep可以在任何地方使用,二wait只能在同步方法或同步代码块中使用
3.sleep不会释放锁,wait会释放锁。并需要通过notify或notifyAll来重新获得锁。

页面置换算法

先进先出置换算法
最近最久未使用置换算法

先进先出置换算法

每次选择淘汰的页面是最早进入内存的页面

最近最久未使用置换算法

每次淘汰的页面是最近最久未使用的页面

LRU的底层实现(哈希表和双向链表)

计算机网络 TCP三次握手

刚开始客户端处于closed状态,服务端处于listen状态

  1. 客户端向服务端发送一个syn请求报文,其中syn=1,并初始化客户端序列号seq=x,此时客户端处于syn_send状态。
  2. 服务端收到客户端发送的syn请求报文后,服务端需要对这个报文进行确认,设置ack=x+1,表示希望下一次收到的报文序列号为x+1。同时服务端也要发送一个syn请求报文,并初始化服务端序列号seq=y,服务端将上述报文封装到一个(ACK+SYN)报文段中,一并发送给客户端,此时服务端处于syn_recv状态。
  3. 客户端收到服务端发送的报文段后,会向服务端发送一个ACK报文,并设置ack=y+1,表示已经收到报文,并希望下一次收到的报文序列号为y+1,此时客户端处于established状态。
    当服务端收到ACK报文后也处于established状态。此时双方建起了连接。
未解决

长连接的保活机制、心跳包
怎么处理已经失效的连接

开放题:12306为什么不买很多服务器,但是抢票的时候还是不卡?(扯CAP,最后面试官说其实不买很多服务器的原因是一年抢票也就那么几次,考虑投入使用比)
高可用性的秒杀系统是怎么样的、使用情景(CAP舍弃C)
还投了哪些公司?拿到了哪些offer?怎么看互联网和银行、怎么选择?

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/871191.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号