时间片

京东后台面试(很全面,很符合现在的面试!!)

有些话、适合烂在心里 提交于 2019-12-15 14:09:31
Java笔试面试目录(一个大佬的总结) https://blog.csdn.net/weixin_41835916/article/details/81413498 1.自我介绍。 2.画出项目的架构图,对每层进行解释,为何用MVC分层。 3.exception异常处理结构,常见异常,多catch处理顺序。 4.对多个表的操作,用事务操作如何实现,写代码 5.maven了解吗 6.死锁 OPPO面筋集合14题: https://blog.csdn.net/weixin_39345957/article/details/89000440 7.tomcat如何部署,war包结构,发布工具. 8.jvm相关原理,垃圾回收算法。 常用的垃圾回收算法有: 1. 引用计数法(经典算法) 对于对象设置一个引用计数器,每增加一个对该对象的引用,计数器+1,引用失效则-1.当计数器为0时,对象死亡,被回收。 存在问题: 对象内部频繁的加减操作,会一定程度上增加系统消耗 无法解决对象循环引用的问题(A中引用B,B中引用A,此时两个对象的计数器均不为0,A=NULL,B=NULL本该无效了,但是却无法回收,导致内存泄漏) 2. 标记清除法 该方法分为两个阶段:标记和清除 标记阶段:通过可达性算法,跟踪对象,标记所有和GCRoots节点相关联的对象,剩余没有被标记的对象则为需要回收的对象。 清除阶段

线程调度及进程调度

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-05 09:06:02
一、Java线程调度    1.抢占式调度: 指的是每条线程执行的时间、线程的切换都由系统控制。 系统控制指的是在系统某种运行机制下,可能每条线程都分同样的执行时间片,也可能是某些线程执行的时间片较长,甚至某些线程得不到执行的时间片。在这种机制下,一个线程的堵塞不会导致整个进程堵塞。    2.协同式调度: 指某一线程执行完后主动通知系统切换到另一线程上执行。 线程的执行时间由线程本身控制,线程切换可以预知,不存在多线程同步问题,但它有一个致命缺点:如果一个线程编写有问题,运行到一半就一直阻塞,那么可能导致整个系统崩溃。    3.JVM的线程调度的实现(抢占式调度): Java使用的线程调度使用抢占式调度,Java中线程会按优先级分配CPU时间片运行,且优先级越高越优先执行,但优先级高并不代表能独自占用执行时间片,可能是优先级高得到越多的执行时间片,反之,优先级低的分到的执行时间少但不会分配不到执行时间。    4.线程让出CPU的情况:     1)当前运行线程主动放弃CPU,JVM暂时放弃CPU操作(基于时间片轮转调度的JVM操作系统不会让线程永久放弃CPU,或者说放弃本次时间片的执行权),例如调用yield方法。     2)当前运行线程因为某些原因进入阻塞状态,例如阻塞在IO上。     3)当前运行线程结束,即运行完run方法里面的任务。 实例: 1 public

Lab6:进程的调度

雨燕双飞 提交于 2019-12-05 07:30:58
CPU调度 从就绪队列中挑选下一个占用CPU运行的进程,从多个可用CPU中挑选就绪进程可使用的CPU资源 调度策略 比较调度算法的准则 CPU使用率 吞吐量 周转时间 就绪等待时间 响应时间 吞吐量与延迟 低延迟:喝水的时候想要一打开水龙头水就流出来 高带宽:给游泳池充水时希望从水龙头里同时流出大量的水,并且不介意是否存在延迟 处理机调度策略的响应时间目标 减少响应时间 减少平均响应时间的波动 增加吞吐量 减少等待时间 调度算法 先来先服务算法(First Come First Served, FCFS) 依据进程进入就绪状态的先后顺序排列,进程进入等待或结束状态时,就绪队列中的下一个进程占用CPU 但是FCFS的平均等待时间波动较大,I/O资源和CPU资源的利用率较低 短进程优先算法(SPN) 选择就绪队列中执行时间最短进程占用CPU进入运行状态,用历史的执行时间来预估未来的执行时间,短进程优先算法具有最优平均周转时间 但是连续的短进程流会使长进程无法获得CPU资源 最高响应比优先算法(HRRN) 选择就绪队列中响应比R值最高的进程 R=(w+s)/s w: 等待时间(waiting time) s: 执行时间(service time) 时间片轮转算法(RR, Round-Robin) 利用时间片作为分配处理机资源的基本时间单元,时间片结束时,按FCFS算法切换到下一个就绪进程

Operating System: Process Scheduling

谁都会走 提交于 2019-12-05 04:07:39
本文主要参考《计算机操作系统(第四版)》(西安电子科技大学出版社)以及清华大学操作系统公开课(向勇、陈渝),整理操作系统的基本概念,供自己复习查阅。 处理机调度 内存中进程的数目往往多于处理机的数目,这就要求操作系统按照某种算法把处理机动态地分配给处于就绪状态的某个进程,这就是 处理机调度(Process Scheduling) 。调度的实质就是一种 资源分配 。 调度层次 高级调度 ,又称 作业调度 ,调度对象是作业,主要功能是决定将外存上处于后备队列的哪些作业调入内存、为它们创建进程分配资源,并将它们放入就绪队列。(高级调度主要存在于多道批处理系统。) 中级调度 ,又称 内存调度 ,主要目的是提高内存利用率和系统吞吐量。该调度会把那些暂时无法运行的进程调到外存等待,此时被调进程的状态称为绪驻(挂起)状态;当它们符合继续运行的条件而且内存也有足够的空间时会被重新调入内存,此时为就绪状态,挂在就绪队列等待,中级调度实质上就是存储器管理中的 对换Swap 功能。 低级调度 ,又称 进程调度 ,调度对象是进程或者内核级线程,该调度决定就绪队列中的哪个进程应获得处理机,并由分派程序把处理机分配给被选中的进程。进程调度是最基本的调度,即多道批处理、分时、实时系统,都应该配置这类调度。 调度算法的目标 调度算法的选择和设计取决于操作系统的类型,在批处理系统、分时系统和实时系统中

进程调度算法spf,fpf,时间片轮转算法实现

最后都变了- 提交于 2019-12-05 02:38:24
调度的基本概念:从就绪队列中按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程并发地执行。 进程信息 1 struct node { 2 string name;//进程名称 3 int id;//进程id 4 int time;//进程服务时间 5 int rtime;//进程服务时间(主要用于时间片轮转算法) 6 int level;//进程优先级 7 int start;//进程提交时间 8 int lst;//进程调度时间 9 }; 1 set<string> pname;//存放进程名称,防止创建重复进程 2 queue<node> qq;//时间片轮转时用到的就绪队列 3 queue<node> pp;//进程的执行队列 4 queue<node> db;//时间片算法中的调度顺序 5 priority_queue<node, vector<node>, cmpspf> spf;//短时间优先算法队列 6 priority_queue<node, vector<node>, cmpfpf> fpf;//优先级算法队列 7 vector<node> ready;//就绪队列 8 vector<node> emy;//已删除的进程 用vector容器存放就绪的进程(每插入一个,sort一下,依据进程提交时间升序排列) spf(短作业优先算法) 算法思想

进程调度

那年仲夏 提交于 2019-12-04 09:07:02
进程调度 要想多个进程交替运行,操作系统必须对这些进程进行调度,这个调度也不是随即进行的,而是需要遵循一定的法则,由此就有了进程的调度算法。 一、先来先服务调度算法 先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。FCFS算法比较有利于长作业(进程),而不利于短作业(进程)。由此可知,本算法适合于CPU繁忙型作业,而不利于I/O繁忙型的作业(进程)。 二、短作业优先调度算法 短作业(进程)优先调度算法(SJ/PF)是指对短作业或短进程优先调度的算法,该算法既可用于作业调度,也可用于进程调度。但其对长作业不利;不能保证紧迫性作业(进程)被及时处理;作业的长短只是被估算出来的。 三、时间片轮转法 时间片轮转(Round Robin,RR)法的基本思路是让每个进程在就绪队列中的等待时间与享受服务的时间成比例。在时间片轮转法中,需要将CPU的处理时间分成固定大小的时间片,例如,几十毫秒至几百毫秒。如果一个进程在被调度选中之后用完了系统规定的时间片,但又未完成要求的任务,则它自行释放自己所占有的CPU而排到就绪队列的末尾,等待下一次调度。同时,进程调度程序又去调度当前就绪队列中的第一个进程。 显然,轮转法只能用来调度分配一些可以抢占的资源。这些可以抢占的资源可以随时被剥夺,而且可以将它们再分配给别的进程。CPU是可抢占资源的一种

浅谈单片机应用程序架构

落爺英雄遲暮 提交于 2019-12-04 01:29:52
对于单片机程序来说,大家都不陌生,但是真正使用架构,考虑架构的恐怕并不多,随着程序开发的不断增多,本人觉得架构是非常必要的。前不就发帖与大家一起讨论了一下《 谈谈怎样架构你的单片机程序 》,发现真正使用架构的并不都,而且这类书籍基本没有。 本人经过摸索实验,并总结,大致应用程序的架构有三种: 1. 简单的前后台顺序执行程序,这类写法是大多数人使用的方法,不需用思考程序的具体架构,直接通过执行顺序编写应用程序即可。 2. 时间片轮询法,此方法是介于顺序执行与操作系统之间的一种方法。 3. 操作系统,此法应该是应用程序编写的最高境界。 1. 顺序执行法: 这种方法,这应用程序比较简单,实时性,并行性要求不太高的情况下是不错的方法,程序设计简单,思路比较清晰。但是当应用程序比较复杂的时候,如果没有一个完整的流程图,恐怕别人很难看懂程序的运行状态,而且随着程序功能的增加,编写应用程序的工程师的大脑也开始混乱。即不利于升级维护,也不利于代码优化。本人写个几个比较复杂一点的应用程序,刚开始就是使用此法,最终虽然能够实现功能,但是自己的思维一直处于混乱状态。导致程序一直不能让自己满意。 这种方法大多数人都会采用,而且我们接受的教育也基本都是使用此法。对于我们这些基本没有学习过数据结构,程序架构的单片机工程师来说,无疑很难在应用程序的设计上有一个很大的提高

BVT(Borrowed Virtual Time )调度算法

匿名 (未验证) 提交于 2019-12-03 00:39:02
BVT是一种CPU时间调度算法 基本原理 BVT是一种公平性优先的调度算法,该算法将时间分为实际时间和虚拟时间,其中实际时间为硬件计时器记录的时间,虚拟时间为对实际时间经过某种规则计算后得到的时间值。 该算法用虚拟时间来监控进程的执行时间,每次总是调度具有最早的有效虚拟时间的VCPU。这这种调度算法考虑到了运行实时和交互件的应用程序的一些Guest操作系统,允许这些操作系统“借”一些时间片,就是说:在一定范围内将未来分配给它运行的时间片先“借”过来用一段时间。这种“借”过来的虚拟时间片只能是当前真实的时间片中的某个虚拟时间片,不能借下一个真实时间 片中的虚拟时问片。在系统初始化时,每个VCPU将分配一个权值来代表该VCPU能获得的处理器份额。 VCPU根据其权值来实现处理器的公平共享。系统用实际虚拟时间和有效虚 拟时间来记录VCPU运行状态。其计算方式如下: Ai =At + t/wi Ei <― Ai - (warp?wi:0) 其中,t表示VCPU实际运行时长(由真实时间计算);wi表示该VCPU的权值大小;Ei表示有效虚拟时间;Ai表示实际虚拟时间;warp为时间偏移标记,表示VCPU能否提前运行;即为VCPU能提前运行的虚拟时间长度。 VT算法是一种抢占式的working-conserving模式算法。该算法通过warp值来调整EVT使VCPU获得处理器的时间提前

窗函数

匿名 (未验证) 提交于 2019-12-03 00:27:02
数字信号处理的主要 数学工具 是傅里叶变换.而傅里叶变换是研究整个 时间域 和 频率域 的关系。不过,当运用计算机实现工程 测试信号处理 时,不可能对无限长的信号进行测量和运算,而是取其有限的时间片段进行分析。做法是从信号中截取一个时间片段,然后用截取的信号时间片段进行 周期延拓 处理,得到虚拟的无限长的信号,然后就可以对信号进行傅里叶变换、相关分析等数学处理。无限长的信号被截断以后,其频谱发生了畸变,原来集中在f(0)处的能量被分散到两个较宽的频带中去了(这种现象称之为频谱能量泄漏)。 文章来源: 窗函数

Mark : spark streaming去重

匿名 (未验证) 提交于 2019-12-03 00:22:01
spark体系除其spark core外,还有spark streaming实时计算、spark SQL结构化数据、MLib机器学习、GraphX图计算四大组件。其中spark streaming用对数据按时间分片的方式,来实现近似的流计算,我们在项目中用来对日志数据进行处理。 问题场景 由于客观原因,后台系统在记录的日志中有重复数据,重复数据的生成时间一般间隔在1s之内,在spark对日志数据进行消费处理时,需要对数据去重,减少对HBase的写入。 问题的难点在于一个batch的数据,除了自身内要去重外,还要和相邻时间分片的batch数据进行去重。更具体一点:当前时间片的一条数据,若上一时间片存在,则丢弃;若上一时间片不存在,则存储。 本文给出两种思路,均已验证能稳定运行: window + time方式 remember+ subtract(或leftOuterJoin)方式 window+time方式 和相邻时间片的数据进行计算,spark提供了window的方式。常用的如groupByKeyAndWindow、reduceByKeyAndWindow等。 在该处运用window时,稍稍复杂一点,就是需要区分出待计算的数据是上一时间片的还是当前时间片的,这就需要用到spark提供的time机制了。常用的带time的操作有transform、transformToPair等。