• 操作系统 面试题(二)


    PART1

    1.乐观锁和悲观锁的区别是什么?

    2.乐观锁和悲观锁的实现方式分别有哪些?

    3.平均周转时间如何计算?

    4.银行家算法是什么?

    5.IO多路复用是什么?

    6.HTTP的头部包含哪些内容?

    7.TCP如何保持连接?

    8.如何让UDP协议变得可靠?

    9.多进程和多线程之间的区别?

    10. HTTP中get和post的区别

    PART2

    1.乐观锁和悲观锁的区别是什么?

    乐观锁认为每次访问共享数据时,其他线程不会修改该共享数据,所以不加锁,只在更新该共享数据时,检查该共享数据在此期间是否被修改。适用于写较少的情况。

    悲观锁认为每次访问共享数据时,其他线程会修改共享数据,所以加锁 ,独占共享数据,直到使用完毕才释放锁。适用于写较多的情况。

    2.乐观锁和悲观锁的实现方式分别有哪些?

    乐观锁:

    CAS算法:保留最初访问时共享数据的值,更新前,核对该数据是否与内存中数据相等,若相等,则修改。若不相等,则不修改。比较和替换是一个原子操作。这是一个自旋操作,即不停地重试。

    版本号机制:更新数据前,核对版本号,版本号代表数据更新次数,若最初读取数据时的版本号和提交更新时的版本号一致,则修改数据,且版本号加一。否则,不修改。

    悲观锁:

    java中synchronized关键字,每次只允许一个线程访问synchronized修饰的函数或代码块,其他线程被阻塞。

    数据库SQL语句后加for update,锁定该条数据,使得其他用户无法进行增删查改。

    3.平均周转时间如何计算?

    周转时间 = 作业完成时间 - 作业到达时间

    平均周转时间 = 所有作业周转时间/作业数量

    4.银行家算法是什么?

    当一个进程申请资源时,先试探性地分配给它,然后通过安全性算法判断分配后的系统是否处于安全状态。若不处于,则不分配给该进程,该进程继续等待。

    安全性算法:给申请资源的进程分配资源后,查看剩余可用的资源能否使某个进程执行完毕。若没有进程可以执行完毕,那么系统处于不安全状态。若有进程可以执行完毕,则收回该进程的资源,继续判断是否有进程可以执行完毕,直到所有进程都执行完毕,按照进程执行完毕的顺序,可以得到一个安全序列,使得系统处于安全状态,避免死锁。

    5.IO多路复用是什么?

    IO多路复用是一种同步的I/O模型,允许单个线程处理多个IO请求。通过一次系统调用,检查多个文件描述符。若有文件描述符就绪,就返回该文件描述符,否则阻塞调用进程,直到某个文件描述符就绪或者阻塞时长超出阈值。

    6.HTTP的首部包含哪些内容?

    HTTP的首部包含了请求行和报文头。

    请求行中包括请求方法、URL和HTTP协议和版本。

    报文头中包含多个字段(字段名:字段值)

    例如Accept指定了可以接收的数据类型

    Referer表明了该请求的来源是哪个网页(点击了Referer指明的这个网址来发起的请求)

    详细见图:

    7.TCP如何保持连接?

    有两种方法:

    1)在客户端和服务器端设置一个超时时间,在超时时间内如果没有发送数据,就发送一个心跳包来保持连接,同时也可也侦测连接是否异常断开。

    2)设置TCP的 keep alive属性,设置方法心跳包的事件间隔。这样TCP会在底层定时发送心跳包,服务器端收到心跳包直接丢弃,这样就保持了长连接。

    8.如何让UDP协议变得可靠?

    UDP协议没有流控制,没有应答确认机制,不能解决丢包,重发,乱序等问题。

    为了实现UDP协议的可靠性,我们可以从以下几点考虑:

    1)重传机制:丢包需要进行重传,使用ACK或者NACK来进行应答确认。

    2)重排机制:收到乱序数据,使用一个缓冲区来进行数据重拍

    3)超时机制:长时间未收到对方回复,需要进行重试。

    9.多进程和多线程之间的区别?

    多进程多线程
    数据共享、同步数据共享复制,需要进行进程间通信。数据分开存储,每个进程有自己独立的地址空间,同步简单。多个线程共享了进程的数据,共享简单,同步复杂。
    内存、CPU占用内存多,进程间切换开销大,CPU利用率低占用内存少,切换简单,CPU利用率高
    创建销毁创建销毁的开销大,速度慢创建销毁的开销小,速度块
    可靠性进程间不会互相影响一个线程奔溃,会影响其他线程
    编程调试编程调试简单编程调试复杂
    分布式适合多核、多机分布式适合多核分布式

    优先使用线程:

    • 频繁创建销毁
    • 大量计算
    • 强相关的任务

    10. HTTP中get和post的区别

    getpost
    请求参数直接附在URL的后面,用户可以在浏览器地址栏看见请求参数放在请求体中
    数据容量有限,因为请求参数是附在URL之后的请求体中的数据容量没有限制
    浏览器会主动缓存get请求浏览器不会主动缓存post请求
    只会发送一个TCP包会发送两个TCP包,先发送报文头,收到服务器的响应后,再发送报文体
    进行回退和刷新不会产生任何影响进行回退和刷新会重新提交请求
    可以收藏书签不可以收藏书签

  • 相关阅读:
    软件工程理论与实践 (吕云翔) 第五章 面向对象方法与UML课后习题及其答案解析
    在CDH的hue上的oozie出现,提交 Coordinator My Schedule 时出错
    22-Docker-常用命令详解-docker pull
    云计算-私有云-国产-华为-FusionCloud
    机器学习分类问题标签如何做编码
    内在不足外需存疑,是谁给了波司登继续涨价的“勇气”?
    【Transformers】第 4 章:自回归和其他语言模型
    Taro React 系列文章 - 总目录
    2022年11月21日13:32:00——T5——JS对象与Date日期函数
    Explain详解
  • 原文地址:https://blog.csdn.net/jmqxnxg/article/details/132558915