zoukankan      html  css  js  c++  java
  • 0506操作系统和数据结构

    1.操作系统的功能

    • 接口:为用户提供使用接口
    • 管理:进程管理、内存管理、设备管理、文件管理
    • 抽象:抽象计算机硬件资源

    2.操作系统的特点

    • 并发:进程并发执行
    • 共享:内存中并发的进程共享系统资源
    • 虚拟:通过某种技术将一个物理实体转化成为若干个逻辑上的对应物
    • 异步:进程推进的速度不可预知

    3.进程、程序和线程的概念以及区别

    • 进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位。每一个进程都有一个自己的地址空 间,即进程空间或(虚空间)。
    • 线程,在网络或多用户环境下,一个服务器通常需要接收大量且不确定数量用户的并发请求,为每一个请求都创建一个进程显然是行不通的,——无论是从系统资源开销方面或是响应用户请求的效率方面来看。因此,操作系统中线程的概念便被引进了。线程,是进程的一部分,一个没有线程的进程可以被看作是单线程的。线程有时又被称为轻权进程或轻量级进程,也是 CPU 调度的一个基本单位。
    • 程序,是计算机指令的集合,是静态的。

    4.进程死锁发生的四个必要条件

    • 互斥条件:资源是独占的且排他使用,进程互斥使用资源,即任意时刻一个资源只能给一个进程使用,其他进程若申请一个资源,而该资源被另一进程占有时,则申请者等待直到资源被占有者释放。
    • 不可剥夺条件:进程所获得的资源在未使用完毕之前,不被其他进程强行剥夺,而只能由获得该资源的进程资源释放。
    • 请求和保持条件:进程每次申请它所需要的一部分资源,在申请新的资源的同时,继续占用已分配到的资源。
    • 循环等待条件:在发生死锁时必然存在一个进程等待队列{P1,P2,…,Pn},其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路,环路中每一个进程所占有的资源同时被另一个申请,也就是前一个进程占有后一个进程所深情地资源。

    5.银行家算法的思想以及它属于什么死锁策略

    • 避免死锁
    • 在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。一个进程请求资源,算法先对其进行判断,对比该进程的需求向量以及可用资源向量,如果满足请求则分配给他进行安全性算法。安全性算法则将资源按照一定顺序进行分配,如果找到一个顺序使得每个进程都可以得到其需求资源,则认为安全,可以分配,找不到则不分配。

    6.输入一个链表的头结点,从尾到头打印链表每一个结点的值。

    • 思路:从头结点开始,每经过一个结点,就将其放入栈中,当遍历完整个链表后,从栈顶逐个输出节点的值。
    • 时间复杂度O(n)
    • 空间复杂度O(n)

    7.快排算法以及其时间复杂度

    • 思路:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
    • 时间复杂度:平均O(nlogn),最坏情况下会退化成冒泡排序O(n*n)
    • 空间复杂度:递归栈,O(logn)

    8.内存中的堆和栈的概念以及数据结构中的堆和栈的概念以及区别

    • 数据结构中:逻辑上的数据存储结构,栈是一种操作受限的线性表,只允许一端进出,先进后出。栈分为顺序栈和链式栈,顺序栈使用数组实现,地址空间连续,链式栈使用链表实现,地址空间不连续。堆是一种特殊的完全二叉树,堆分为大顶堆和小顶堆。
    • 内存中:物理内存中真实存在的,内存空间在逻辑上分为三个区,代码区、静态数据区和动态数据区。代码区则存放方法体的二进制代码等,静态数据区存放全局变量,静态变量,常量,系统进行自动分配和回收,而动态数据区分为堆区和栈区,栈区存储运行方法的形参局部变量、返回值,系统自动分配和回收,堆区则是new一个对象时的引用或者地址存储在栈区,指向该对象存储在堆区的真实数据,需要程序员进行分配和释放(比如malloc分配动态内存之后,需要进行free,否则会产生内存泄漏)

    9.使用链表实现LRU缓存淘汰算法

    • LRU算法:即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。
    • 算法思路:一个有序链表,越靠近链表尾部的结点是越早之前访问的,当有一个数据被访问是,从头到尾遍历列表,如果此数据之前已经被缓存在链表中了,我们遍历得到对应的结点,并将其从原来的位置删除,然后再插入到链表的头部。如果没有在缓存链表中,分为两种情况,一是缓存未满,则将其插入到链表头部,二是缓存已满,则将链表尾部删除,将新的数据插入到链表的头部。

    10.图的深度优先遍历算法的思想

    • 深度优先遍历图的方法是,从图中某顶点v出发:
    (1)访问顶点v;
    (2)依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;

    (3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。

    时间复杂度:采用矩阵存储O(n*n),采用链表存储O(n+e),n个点,e条边

    空间复杂度:矩阵存储O(n*n),链表存储O(n)

     

  • 相关阅读:
    sass和compass的配置
    MAC apache配置
    js库
    Tomcat7 配置 ssl
    同一对象内的嵌套方法调用AOP失效原因分析
    Spring Boot文件无法下载问题排查过程记录
    Apache、Spring、Cglib的beancopy效率对比
    使用in作为查询条件优化SQL并使用set筛选结果集
    Java使用foreach遍历集和时不能add/remove的原因剖析
    Python爬虫实践——爬取网站文章
  • 原文地址:https://www.cnblogs.com/helloworldToDu/p/12839122.html
Copyright © 2011-2022 走看看