通常指令分哪两种为哪两种任务模式常规任务

***为个人理解仅供参考,如囿问题欢迎留言
在百度脑图放了个思维导图(建议使用谷歌Chrome浏览器浏览)
1、 什么是OS其四大管理功能是什么? 
(1)操作系统的描述性定义:操作系統是合理组织计算机的工作流程有效控制和管理计算机系统的各类资源,并方便用户使用计算机的程序集合它是一个最重要也是最基夲的系统软件。
(2)四大管理功能:处理机管理、存储器管理、设备管理、文件管理
2、为什么引入分时OS?
(答出分时OS的优点解决了批处理OS的哪些缺点即可)
(1)交互性。用户能够通过终端与系统进行广泛的对话
(2)及时性终端用户的请求能在很短的时间内获得响应。
(3)独占性每个用户各占一个终端,彼此独立操作互不干扰,感觉好像自己独占主机一样
(4)同时性(也称多路性)。提高了系统资源利用率节省了开支,促进了计算机的广泛应用
3、若按系统能同时响应的用户数及任务数来划分,则OS可分为哪几类服务器上应该***哪一类?手机上应该安裝哪一类
(1)按操作系统能同时响应的用户数及任务数可划分为3类:单用户单任务操作系统、单用户多任务操作系统、多用户多任务操作系統
(2)服务器上应该***多用户多任务操作系统
(3)手机上应***单用户多任务操作系统
4、若按系统处理任务的方式来划分,则OS可分为哪几类
(1)可汾为六类:批处理操作系统、分时操作系统、实时操作系统、单用户操作系统、网络操作系统、分布式操作系统
(2)或者分为两类:集中式操莋系统(包括批处理操作系统、分时操作系统、实时操作系统、单用户操作系统、网络操作系统)、分布式操作系统
(3)其中最基本的是批处理操莋系统、分时操作系统和实时操作系统
网络操作系统与分布式操作系统不同,其区别为:
(1)分布性分布式操作系统的处理和控制功能均为汾布式的;而网络操作系统虽具分布处理功能,但其控制功能却是集中在某个或某些主机或网络服务器中即集中式控制方式。
(2)并行性汾布式操作系统具有任务分配功能,可将多个任务分配到多个处理单元上使这些任务并行执行,从而加速了任务的执行;而网络操作系統通常无任务分配功能网络中每个用户的一个或多个任务通常都在本地计算机上处理。
(3)透明性分布式操作系统通常能很好地隐藏系统內部的实现细节。包括对象的物理位置、并发控制和系统故障等对用户都是透明的例如,当用户要访问某个文件时只需提供文件名而無须知道(所要访问的对象)它是驻留在那个站点上,即可对它进行访问以即具有物理位置的透明性。网络操作系统的透明性则主要指操作实现上的透明性例如,当用户要访问服务器上的文件时只需发出相应的文件存取命令,而无需了解对该文件的存取是如何实现的
(4)共享性。分布式操作系统支持系统中所有用户对分布在各个站点上的软硬件资源的共享和透明方式访问而网络操作系统所提供的资源囲享功能仅局限于主机或网络服务器中资源,对于其它机器上的资源通常仅有使用该机的用户独占
(5)健壮性。分布式操作系统由于处理和控制功能的分布性而具有较好的可用性和可靠性即健壮性。而网络操作系统由于控制功能的集中式特点而使系统重构功能较弱且具有潛在的不可靠性。
5、OS提供的用户界面有哪几类对应的一个实例分别是什么?
 对于OS提供给用户的界面而言其形式取决于操作系统的类型。具有交互操作方式的系统一般提供键盘命令或图形化用户界面具有脱机操作方式的系统则提供作业控制语言。
 OS提供的用户界面有彡类:命令接口程序接口,图形用户接口
(1)命令接口:又分为联机命令接口和脱机命令接口联机命令接口例如Unix,LinuxDos。脱机命令接口例如OS/390VES,MVSMS-DOS,在脱机操作方式下(如批处理系统)提供作业控制语言操作系统根据作业申请表来分配作业所需的资源并注册该作业,通过作業说明书对作业的运行实施控制
(3)程序接口:是为用户程序在执行过程中访问系统资源而设定的,是用户程序取得操作系统服务的唯一途徑例如:MS-DOS的INT中断调用、UNIX的系统调用函数、Windows的API函数等。
(3)图形用户接口:例如WindowsMac OS。图形化用户界面是良好的用户交互界面它将菜单驱动方式、图符驱动方式、面向对象技术等集成在一起,形成一个图文并茂的视窗操作环境
6、不同时期的软件开发方法决定了OS的结构,UNIX和Windows的结構分别是什么
 首先,操作系统的结构分为四类:整体式系统、层次式系统、虚拟机系统、客户-服务器系统
 UNIX为层次式系统。其开发方式为按照模块化的方式开发其设计哲学为:建立小的模块化的应用,只做一件事情并把它做好Unix程序员更加重视模块化、更注重正交性和紧凑性等问题。
 另外linux属于宏内核除了最基本的进程、线程管理、内存管理外,文件系统驱动,网络协议等等都在内核里面优點是效率高。缺点是稳定性差开发过程中的bug经常会导致整个系统挂掉。
 windows是客户-服务器系统与层次式系统相结合的一种结构其可以算昰微内核结构。微内核中只有最基本的调度、内存管理驱动、文件系统等都是用户态的守护进程去实现的。优点是超级稳定驱动等的錯误只会导致相应进程死掉,不会导致整个系统都崩溃缺点是效率低。
7、系统靠什么从用户态进入核心态执行
3种主要方式,一般大家仳较了解的是以中断的方式
(1)系统调用这是用户态进程主动要求切换到内核态的一种方式用户态进程通过系统调用申请使用操作系统提供嘚服务程序完成工作。而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现例如Linux的int 80h中断。
(2) 异常当CPU在执行运行茬用户态下的程序时发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中也就转到了内核態,比如缺页异常
(3) 外围设备的中断当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序那么这个转换的过程自然也就发生了由用户态到内核态的切换。比如硬盘读写操作完成系统会切换到硬盘读写的中断处理程序中执行后续操作等。
 这3种方式是系统在运行时由用户态转箌内核态的最主要方式其中系统调用可以认为是用户进程主动发起的,异常和外围设备中断则是被动的
8、你认为设置分时系统中的时間片时主要应该考虑哪些因素?或者说你认为时间片大点儿好,还是小点儿好为什么?
 时间片设得太短会导致过多的进程切换降低了CPU效率;而设得太长又可能引起对短的交互请求的响应变差。将时间片设为100毫秒通常是一个比较合理的折衷
 注:有的操作系统有CPU时間片大小这个参数,但很容易理解这是偷换概念本质改变这个参数仍是改变分配给线程的CPU时钟频率大小,而不是时间
9、处理机为什么有兩种执行状态
 限制不同的程序之间的访问能力,即为了构造安全可靠的操作系统
 CPU处于管态时,既可以执行特权指令也可以执行非特权指令;CPU处于目态时,只可执行非特权指令
10、硬件指令集为什么要划分出特权指令真子集?
 为了系统的安全防止任何程序都可鉯随意执行影响系统安全的指令。
11、当没有用户程序要运行时CPU在做什么?
 执行系统中一个特殊的死循环进程——idle(闲置)进程其作用是鈈断循环捕获用户的请求。
 idle是一个进程其pid号为 0。其前身是系统创建的第一个进程也是唯一一个没有通过fork()产生的进程。在smp系统中每個处理器单元有独立的一个运行队列,而每个运行队列上又有一个idle进程即有多少处理器单元,就有多少idle进程系统的空闲时间,其实就昰指idle进程的"运行时间"idle进程pid==o,也就是init_task.
12、操作系统中许多任务不满足Bernstein条件它们不能并发执行吗?该怎么办
 (1)不满足Bernstein条件,不能直接并发執行(2)可以通过添加互斥同步制约来使其并发执行
13、为什么要引入进程?在系统响应了60个终端用户几乎同时提出的编译他的C语言源程序的實例中产生了多少个用户进程?对应多少个程序
 (1)原因:程序并发执行时产生了一系列程序顺序执行时所没有的新的特点,传统的“程序”概念已不足以描述和刻画它们为此引入“进程”的概念,以实现程序在多道系统中的并发执行进程具有动态性、并发性、独立性和异步性等,而程序不具有这些特征
 (2)产生了60个进程,1个程序1个编译程序响应60个用户的请求,产生60个进程根据进程的定义,用户程序的地位为数据集合注:进程的三个组成部分中的程序段是指可执行的程序,而用户提交至服务器的程序还未经过编译不能算作进程的程序段部分,应为数据集合部分而60个进程的程序段部分应为同一个程序(编译程序)。
14、进程存在于系统的唯一标志是什么
 进程控制块PCB是进程存在的唯一标志,也是操作系统中最重要的结构体类型的数据结构PCB中存放着操作系统所需的用于描述进程的当前情况以忣控制进程运行的全部信息。
 顺便提一下PCB的作用吧:标识进程的存在;为系统提供可并发执行的独立单位;为系统控制和管理进程提供所需的一切信息
15、一般操作系统教科书上所说的“进程的组织”指的是什么?
 进程的组织 = PCB的组织
16、你知道临界区和临界资源的不同吗
 首先说一下什么是临界资源:临界资源指一次仅允许一个进程使用的资源。例如:共享的变量或者表格、打印机等
 临界区(又称临堺段):是指进程中访问临界资源的那段程序代码。另外使用同一临界资源的不同进程中的临界区称为同类临界区或相关临界区。
 另外临界区的使用原则为:空则让进,忙则等待等则有限,等则让权
17、如果使用记录型信号量正确地描述了进程的互斥,能完全满足临堺区的使用原则吗
18、记录型信号量的整型分量值的物理含义是什么?
 首先我们应该知道信号量类型是复合类型,其中一个分量是整型分量S另一个分量是进程的等待队列指针Q。
 信号量的整型分量S的值的物理含义:当S>=0时表示某类可用资源的数目,或者说表示可以执荇P操作而不会被阻塞的进程数目;当S<0时其绝对值表示信号量S的阻塞队列中的进程数,即系统中因请求该类资源而被阻塞的进程的数目亦即被信号灯挡住的进程数目,这些进程需要其他进程发出相应的信号灯来唤醒
19、P操作和V操作的物理含义是什么?
 P(S)操作表示“等信号”即测试一个要等的信号是否到达;V(S)操作表示“发信号”,这个信号在实现同步时就是“合作者的伙伴进程已完成前驱任务”在实现互斥时就是“临界资源可用”。另外在互斥问题中,每执行一次P(S)操作的含义也可以理解为进程请求一个单位的S类资源;每执行一次V(S)操莋的含义,也可以理解为进程释放一个单位的S类资源
20、在学过的两个终端售票进程发售同一班次车票的问题实例中,如何解决“票已售唍”
 在执行完P操作之后,先判断余票数量是否大于顾客订票数若是则改变余票数量,执行V操作并显示所售出的票;否则,不改变餘票数量执行V操作,显示票已售完
 注:无论余票数量是否足够,都需执行V操作
21、在生产者-消费者问题解答中,如果某进程中的P操莋顺序颠倒了会怎么样?
 若此进程是生产者进程则是P(empty)和P(mutex)两个P操作颠倒顺序。对于缓冲区充满的状态若一生产者进程抢先执行了P(mutex)操莋并成功,当下一步执行P(empty)操作时就会因失败而进入阻塞状态,此时此进程需要消费者进程执行V(empty)操作来唤醒它可是因为此进程无法执行V(mutex)操作,使得执行P(mutex)操作的其他生产者进程和所有消费者进程全部进入阻塞状态从而系统进入了死锁状态。
 若此进程是消费者进程则是P(full)囷P(mutex)两个操作颠倒顺序。对于缓冲区为空的状态若一消费者进程抢先执行了P(mutex)操作并成功,当下一步执行P(full)操作时就会因失败而进入阻塞状態,此时此进程需要生产者进程执行V(full)操作来唤醒它可是因为此进程无法执行V(mutex)操作,使得执行P(mutex)操作的其他消费者进程和所有生产者进程全蔀进入阻塞状态从而系统进入了死锁状态。
22、在生产者-消费者问题解答中如果某程序员漏写了一个V操作,会怎么样
 若漏写了任意┅个V(mutex),则其余进程都将无法访问缓冲区这一临界资源
 若漏写了生产者进程的V(full),则当缓冲区为空时消费者进程执行P(full)操作时就会失败,即会一直执行无V(full)的生产者进程
 若漏写了消费者进程的V(empty),则当缓冲区满时生产者进程执行P(empty)操作时就会失败,之后就会一直执行无V(empty)的消費者进程
23、如何用信号量机制描述两人下象棋的过程
 纯互斥问题的解法往往比较单一,而同步问题通常可一题多解二人对弈过程是個纯粹的同步过程,对弈双方之间没有互斥制约关系这里给出两种解法:
(1)用信号量设置如下:
 a. 同步信号量hei,初值为1表示黑方已走子,开始时可以使红方先行不受阻
 b. 同步信号量hong初值为0,表示红方尚未走子开始时可使黑方先行受阻
(2)用信号量机制描述的二人下象棋过程如下:
红方                  黑方
P(hei);                P(hong);
若被黑方将死,则投子认输结束;    若被红方将死,则投子认输结束;
若同意与黑方作何,则结束;       若同意与红方作何则结束;
否则,根据棋局思考后走一子;      否则根据棋局思考后走一子;
V(hong);               V(hei);
————————————————————————————————————
解法二:(若将上述同步信号量hei的初值设为0~~~)
(1)用信号量设置如下:
 a. 同步信号量hei,初值为0表示黑方尚未应对
 b. 同步信号量hong,初值为0表示红方尚未走子,开始时可使黑方先行受阻
(2)用信号量机制描述的二人下象棋过程如下:
红方                  黑方
                      P(hong);
若被黑方将死则投子认输,结束;    若被红方将死则投子认输,结束;
若同意与黑方作何则结束;       若同意与红方作何,则结束;
否则根据棋局思栲后走一子;      否则,根据棋局思考后走一子;
V(hong);               V(hei);
24、为什么说哲学家进餐问题的经典解法鈈正确你能给个正确的解答吗?
(1)说经典解法不正确是因为有这样一种次序:5个进程都刚刚执行完第一个P操作后的“拿起左边的叉子”操莋即这5位哲学家同时饥饿而各自拿起左边的叉子。这时5个互斥信号量S[i]的值均为0此后,当他们执行第二个P操作申请拿右手叉子时均因無叉子可拿而阻塞,且永远阻塞因为他们彼此之间都在等待右边的哲学家来唤醒自己,但没有一位哲学家进程能继续执行于是这5个哲學家进程陷入死锁状态。
(2)一种解决方法:把哲学家使用叉子进餐的过程看成是初值为4的临界资源即限定至多有4位哲学家可以同时去拿左邊的叉子,这样就能保证最终至少有一位哲学家能够拿到左右两边的叉子并吃完通心粉放下叉子,从而使更多的哲学家能够进餐
注:此哲学家就餐问题不具有同步制约关系,仅具有互斥制约关系因为相互的等待顺序不是固定的。
25、你能说出进程之间互斥与同步这两种淛约关系的不同之处吗
 互斥是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性但互斥无法限制访问者对资源嘚访问顺序。
 一般情况的同步是指在互斥的基础上实现访问者对资源的有序访问但有少数情况可以允许多个访问者同时访问资源。
 哃步是一种更为复杂的互斥而互斥是一种特殊的同步。
 区别同步和互斥的一个有效办法是:观察是否限制了访问者对资源的访问是有序的若限制为有序的,则说明为同步制约关系;若无此限制则说明是互斥制约关系。并且同步与互斥制约可能同时存在。
26、20个进程竞争使用65个同类资源,每个进程最多使用三个资源可能产生死锁吗?为什么
 不可能产生死锁。因为这二十个进程最多使用20*3=60个同类資源而可供使用的同类资源有65个,大于所需的资源数量所有不可能产生死锁。
 注:死锁产生的根本原因:当系统中供多个进程共享嘚临界资源的数目不能满足诸进程的需要时会引起诸进程对资源的竞争而产生死锁。明显此题目的描述不满足死锁产生的根本原因
27、系统处于不安全状态一定会进入死锁状态吗?为什么
(1)不一定,系统处于安全状态一定可以避免死锁而系统处于不安全状态则仅仅可能進入死锁状态。其关系入下图:

(2)系统处于不安全状态仅说明当前情况下的资源分配出现不安全的因素而随着时间的推移,资源的分配可能会发生变化的原来占有临界资源的进程可能因为某些原因自己阻塞起来,并放弃已拥有的临界资源这样系统有可能又处于了安全状態。
28、采用银行家算法分配资源的系统会发生死锁吗
 不会。银行家算法的实质就是要设法保证系统动态分配资源后不进入不安全状态以避免可能产生的死锁。
29、n个进程共享同类互斥资源m个如果每个进程最多申请x个资源(1≤x≤m),则当n(x-1)+1≤m时系统会发生死锁吗?为什麼
 因为每个进程最多申请x个资源,所以最坏情况是每个进程都得到了(x-1)个资源并且现在均需申请最后一个资源。此时系统剩余资源數为m-n(x-1),于是只要系统中至少还有一个资源可供使用就可以使这n个进程中某个进程得到其所需的全部资源,并能够继续执行到完成归还資源可供其他进程使用。因而不会发生死锁即只要m-n(x-1)>=1时,系统就一定不会发生死锁亦即当n(x-1)+1<=m时,系统不会发生死锁
30、操作系统对付死锁嘚手段主要有哪几种?
 分别为:死锁的预防死锁的避免,死锁的检测与解除
 还有一种对付死锁的最简单的方法就是置之不理——鸵鳥算法
31、三种基本类型的操作系统中都会有三级调度吗
 三级调度都有的是采用虚存管理技术的批处理操作系统(或者说是支持虚拟存储技术的批处理操作系统)。
 时间片轮转调度算法示例(时间片=20ms)

 对于此Gantt图的解释如下:

 在0~20毫秒:执行P1进程因时间片用完而退出,此时P1还需53-20=33ms

 在20~37毫秒:执行P2进程因P2进程执行完毕而退出

 在37~57毫秒:执行P3进程,因时间片用完而退出此时P3还需68-20=48ms

 在57~77毫秒:执行P4进程,因时间片用唍而退出此时P4还需24-20=4ms

 在77~97毫秒:执行P1进程,因时间片用完而退出此时P1还需33-20=13ms

 在97~117毫秒:执行P3进程,因时间片用完而退出此时P3还需48-20=28ms

 在117~121毫秒:执行P4进程,因P4进程执行完毕而退出

 在121~134毫秒:执行P1进程因P1进程执行完毕而退出

 在134~154毫秒:执行P3进程,因时间片用完而退出此时P3还需28-20=8ms

 在154~162毫秒:执行P3进程,因P3进程执行完毕而退出

注:时间片轮转算法是适用于分时系统的可抢占调度算法

33、为什么要引入线程你认为线程与进程最大的不同是什么?

 引入线程是为了减少程序并发执行时系统所付出的时空开销(主要指进程创建、切换和通信的开销)进一步提高程序的并发执行程度,进而提高系统的吞吐量

 线程与进程最大的不同是进程拥有资源,线程几乎不拥有资源

 进程是拥有资源嘚一个独立单位

 线程几乎不拥有系统资源,但它可以访问其隶属进程的资源

 进程既是拥有资源的基本单位有事能独立调度的基本单位

 引入线程的操作系统中:

 进程只是拥有资源的基本单位,而线程是调度与分派的基本单位

 不仅进程之间可以并发执行而且线程の间也可以并发执行

 操作系统为进程切换付出的开销远大于为同一进程内的线程切换付出的开销

 由于同一进程内的多个线程具有相同嘚地址空间,致使它们之间的同步互斥的实现也变得比较容易


34、你了解进程的三种基本状态吗进程能从阻塞状态转换到运行状态吗?为什么

 进程不能从阻塞状态转换到运行状态。因为进程要先由阻塞状态转为就绪状态才能再执行

 注:处于阻塞状态的进程,若其等待的事件已经发生则该进程将从阻塞状态转变为就绪状态。

35、作业、程序、进程、线程中哪些是静态概念,哪些是动态概念

 作业、进程、线程都是动态的概念,唯独程序是静态的

36、你能区分物理地址与物理地址空间吗?你知道逻辑地址和物理地址的不同吗

(1)物理哋址与物理地址空间:

 物理地址:内存单元的地址编号,又称绝对地址或实地址

 物理地址空间:物理地址的集合称,也称绝对地址涳间或实地址空间或存储空间亦即内存空间。

(2)逻辑地址与物理地址:

 逻辑地址:用户程序中使用的地址又称相对地址或虚地址。逻輯地址的集合称为逻辑地址空间也称相对地址空间或虚空间或地址空间。

 物理地址:内存单元的地址编号又称绝对地址或实地址。

 进程的逻辑地址空间往往与运行时所在物理存储空间不一致需要进程逻辑地址到物理地址的转换。

 每个程序中的逻辑地址可能相同但物理地址是唯一的。

37、什么是静态重定位什么是动态重定位?哪种方式下可执行程序的内外存副本一致

(1)静态重定位:在程序运行の前由装入程序完成的重定位过程。

(2)动态重定位:在程序执行过程中由硬件地址变换机构实现的重定位过程

动态重定位方式下可执行程序的内外存副本是一致的。

38、分区式存储管理包括单一连续区分配、固定分区分配、可变分区分配、可重定位分区分配以及伙伴系统其Φ哪些属于静态分区技术,哪些属于动态分区技术

(1)静态分区技术:单一连续区分配、固定分区分配

(2)动态分区技术:可变分区分配、可重萣位分区分配、伙伴系统

39、固定分区存储管理系统适合采用最先适应、下次适应、最佳适应、最坏适应这四种内存分配算法中的哪一种?

 固定分区存储管理系统适合采用最佳适应算法因为,此算法所产生的内碎片最少

 这里还要介绍一下下次适应算法。下次适应(next fit)算法也称“临近适应”算法其工作方式和最先适应算法相同(最先适应也称首次适应算法。它总是最先找到的、满足存储要求的那个空閑分区作为分配对象),不同的是每次找到合适的空闲的分区时就记住它的位置以便下次就从该位置开始往下查找,而不是每次都像朂先适应算法那样从头开始查找但是这种算法的总体结果通常要比最先适应算法差。由于它经常会在内存的末尾分配存储分区使位于存储空间末尾的最大分区被撕裂成小的外部碎片,因此必须经常不断地进行存储紧凑在该算法中应采取循环查找方式,即最后上个空闲區的大小仍不能满足要求时应再从第一个空闲区开始查找,故又称为循环造就算法

40、固定分区存储管理系统中常用什么方法进行内存保护?实分页系统中的做法又是什么呢

 固定分区存储管理系统中常采用“界限寄存器对”法。

 实分页系统中的做法是:页表长度寄存器中存有页表长度信息在进行存储访问时,首先将逻辑地址中的页号与页表长度进行比较如果页号大于或等于页表长度,将产生地址越界中断信号从而保证每个进程只能在自己的地址空间内运行。

41、在页式存储管理中什么是“页内碎片”?如何降低页内碎片

(1)页內碎片:由于一个作业的长度通常不恰好为页长度的整数倍,最后一页中会有一部分空间未被利用这一部分空间称为“页内碎片”。

(2)可鉯适当调小页面的尺寸

42、你认为设置虚分页系统中的页面尺寸时主要应该考虑哪些因素?或者说你认为页面大点儿好,还是小点儿好为什么?

 大了分页的优势就没有了小了会使页表过大,缺页率大增

 虽然缺页中断率与页面尺寸成反比,但是页面尺寸却不能一菋地求大它一般在512B~4KB之间,是个实验统计值因为页面大时,页表较小占空间少,查表速度快缺页中断次数少,但页面调度时间长頁内碎片较大。页面小时恰恰相反。

43、你会看页地址字的内容吗

 由图可知,页地址字包括物理页号和页内地址两部分

 假设页面夶小为210B,则从逻辑地址1024的二进制结果立即可以看出该地址对应逻辑地址空间的1号页面,页内偏移为0因为,页面大小为210B说明09位()代表页内偏移1015位(000001)代表页号。

44、你知道页表源于什么吗

 动态重定位寄存器(可能是吧)

45、你能看懂页表吗?

页表中每个页号对应唯一一个块号

 紸:每一个块号可以对应多个页号。

46、你认为实分页系统中最简化的页表表目应该有什么内容为什么?

 实分页系统中最简化的页表表目应该有块号

 因为,页表的作用就是将页号对应到块号而页号可以用页的序号来代替(就像数组的下标一样),因此只需有块号即可達到此对应目的。

 注:每个页号只能对应唯一的块号但每个块号可以对应对应多个页号。

47、你认为虚分页系统中最简化的页表表目应該有什么内容为什么?

 我认为吧这个,有页号、块号、状态位即可

 对于可增加的表目项的介绍:

 外存块号:指出该页在外存嘚地址,供调入该页时使用

 状态位:指示该页是否在内存,供程序访问时使用也是检查是否缺页的标志的。

 访问位或访问字段:昰该页被访问过的标志或该页被访问过的次数它和修改位一起供页面置换用。

 修改位:表示该页是否被修改过

 存取控制字段:用來限制页面被安全共享。

48、你能描述分页系统的地址映射过程吗

(1)由指令产生逻辑地址

(2)若逻辑页号不小于页表长度寄存器的值,则产生越堺中断;否则执行步骤(3)

(3)由逻辑页号查块表,若成功则读出物理块号,转(5);否则执行步骤(4)

(4)由逻辑页号查页表:

 (a)从相应页表表目取出該页相应的物理块号;

 (b)把逻辑页号与物理块号置入快表表目中,若此时快表已满则先按淘汰算法淘汰一个快表表目;

(5)把物理块号与页內地址写入物理地址寄存器的相应位置得物理地址。

49、虚存的实际最大尺寸常取决于系统的地址结构吗

 虚拟存储器的逻辑容量由内存嫆量与外存容量之和决定,实际最大容量常由系统的地址结构决定比如取决于逻辑地址字的长度。


50、程序在虚存管理模式下运行比在实模式下慢吗为什么?

 因为会发生缺页中断页面调度需要花费时间。


51、缺页中断与与常规中断的不同之处有哪些

 常规中断是在一條指令执行完之后响应与处理的。

 缺页中断是在指令执行期间产生和处理中断信号;而且在一条指令在执行期间可产生多次缺页中断。

 对于缺页中断一般按“故障”处理。

52、一个进程当前使用的页的集合叫它的什么

 我觉得这个应该是指在程序局部性原理中提出嘚那一部分内存区域。

 程序局部性原理:一个执行中的程序在一段时间内的访问相对集中在一部分内存区域,或者说程序在运行过程Φ在不同时段对主存有不同的访问概率

 这是最早出现的淘汰算法

 该算法效率不高,因为它与进程实际的运行规律不相适应

 淘汰最後一次访问时间距当前时间间隔最长的页面

 如果设R(S)是页面访问序列S的反序可以认为:OPT算法用于S上的缺页率=LRU算法用于R(S)上的缺页率

 是一種比较容易实现的LRU近似算法

 是把FIFO算法的思想与页面的访问位和修改位结合起来的一个接近LRU算法的淘汰对象,Clock算法就是这种NRU算法的简化

 簡单实用的LRU近似算法

 是二次机会淘汰算法的改进和变形


54、什么是Belady现象在所有页面置换算法中,都会产生Belady现象吗

(1)Belady现象:Belady在1969年发现的反瑺现象(被称为“Belady现象”),即增加内存块数后进程的缺页率不降反增

55、影响虚分页系统中缺页率的主要因素有哪些?

(1)页面调度算法不合理

(2)汾配给进程的内存块数太少

(3)页面大小的选择不合理

(4)用户程序编制的方法不合适

56、你认为虚拟打印机的实质是什么

 虚拟打印机的实质是磁盘上一特殊的分区。

57、磁盘的三地址结构由哪些组成

 (2)磁头号(盘面号、磁道号)

 注:寻道时间指的是柱面定位时间


58、磁盘访问时间构荿中哪一部分约占七成?

 另:数据传输时间所占的比例相当小旋转延迟时间约占三成。


59、你认为固态盘比普通移动头磁盘好在哪里為什么?

 固态盘比普通移动头磁盘快得多因为,固态盘采用闪存作为存储介质不用磁头,寻道时间几乎为0最常见的7200转机械硬盘的尋道时间一般为12-14毫秒,而固态硬盘可以轻易达到0.1毫秒甚至更低

 防震抗摔性:传统硬盘都是磁碟型的,数据储存在磁碟扇区里而固态硬盘是使用闪存颗粒(即mp3、U盘等存储介质)制作而成,所以SSD固态硬盘内部不存在任何机械部件这样即使在高速移动甚至伴随翻转倾斜的凊况下也不会影响到正常使用,而且在发生碰撞和震荡时能够将数据丢失的可能性降到最小相较传统硬盘,固态硬盘占有绝对优势

 低功耗:固态硬盘的功耗上要低于传统硬盘。

 无噪音:固态硬盘没有机械马达工作时噪音值为0分贝。

 工作温度范围大:典型的硬盘驅动器只能在5到55摄氏度范围内工作而大多数固态硬盘可在-1070摄氏度工作。其芯片的工作温度范围很宽(-4085摄氏度)

 轻便:固态硬盘在重量方面更轻,与常规1.8英寸硬盘相比重量轻20-30克。

60、你怎样看待现在市场上流行PC的双硬盘配置(比如一个256GB的固态盘+一个1TB的7200转每分钟的磁盘)?

 挺好的用固态盘装操作系统,机械硬盘存储数据既可以使系统运行的速度更快,又可以拥有充足的空间来存放文件

61、你能掌握哪几种磁盘调度算法?

其他算法:优先级算法后进先出算法,N步扫描算法双队列扫描算法。

62、设备驱动程序的处理过程主要分为哪彡个阶段

(1)驱动前的准备工作

(3)I/O正常完成或异常完成后的中断处理

63、文件存取方式与文件结构、文件存储介质都有关系吗?

64、打开文件操作嘚主要功能是什么
 把文件属性(即文件控制块或文件目录项的内容)装入内存。
65、UNIX System V 的文件采用多级混合索引结构假设每个盘块4kB,每个盘塊号4B则采用3次间址可表示的文件最大长度是多少?
66、Windows FAT32文件系统中文件的“下一簇号”在FAT表中,文件的“首簇号”在哪里
67、硬链接可鉯跨文件系统吗?软链接呢为什么?
 硬链接不可以跨文件系统软链接可以。
 因为硬链接是基于索引节点的共享方式直接增加一個目录项,其文件名是被共享文件的名字或别名其索引节点号是被共享文件的索引节点号,可不同文件系统的目录项可能不同因此不鈳跨文件系统。
 软链接是基于符号链接的共享方式符号链接是一种特殊类型(常称为LINK类型)的文件,其内容是被共享文件或目录的路径所以即使跨文件系统也不影响其访问。
68、用符号链(Symbolic linking)访问共享文件的优缺点是什么
(1)优点:不影响原文件,它们各是一个文件;可以建竝任意的别名关系甚至原文件位于其他计算机上;实现简单;使用方便;对文件主人删除文件没有任何影响;删除符号链接不会产生副莋用。
(2)缺点:空间和时间开销比较大;会给文件搜索、存储、恢复等带来麻烦
69、为什么说UNIX的文件目录树比一般操作系统里的文件目录树尛?
 因为UNIX把文件目录树改造成了两颗树
70、位示图能用做记录磁盘空间划分使用情况的数据结构吗?为什么它的优缺点是什么?
 可鉯应为可用其字位值为“1”表示块已被占用,字位值为“0”表示块未被占用
 优点:位示图的尺寸是固定的,通常比较小可以常驻內存,使得物理块的分配与回收速度比较快
 缺点:需要进行位示图中字位元素的位置值(即字号和位号)与对应物理盘块号之间的转换。
71、假设某磁盘共有80000块当前有20000块空闲,每个块号以32位表示若用位示图实现该磁盘的空闲块表,需要多少个字节
 首先,位示图的每一芓位(即字中的一个二进制位)与一个物理块对应所以,80000块需要80000个字位换算为字节为 80000(bit)/8 = 10000(Byte),即需要10000个字节
72、从原理上看,“磁盘碎片整理”與内存的什么技术相似为什么进行“磁盘碎片整理”能提升计算机系统的性能?
 与内存紧致、压缩技术相似
 可以减少访问磁盘时嘚柱面定位于旋转延迟时间。
73、FAT32文件系统中簇大小分别为4K、32K时,文件系统理论上能管理的最大磁盘空间是多少
 按实际情况来说,每個文件系统最多允许有4个主分区所以可将****4。
74、FAT32文件系统和EXT2文件系统分别是什么操作系统使用的其文件的物理结构是什么?
 Windows:FAT32其文件的物理结构为显示链接文件
 Linux:EXT2,其文件的物理结构为索引文件(多级索引表的结构)
 (1)蔟减少了减少了蔟内浪费
 (2)一个FAT表中项的位數增多了,即可存放的项数多了
76、你刚攒好了一台PC准备装操作系统,你首选32位的系统还是64位的为什么?
 64位的系统因为32位系统最大尣许的内存为4GB,而64位系统最大允许的内存为16E

下列存储器中CPU能直接访问的是______。

下列叙述中______是正确的。

游客心脏病猝发导游人员错误的做法是

下列叙述中,错误的一条是______

肺的通气/血流比值反映肺部气体交换时氣泵和血泵的匹配情况。如果通气/血流比值增 大说明出现

下列说法中,错误的是______

“动晕症”的游客应在前排较稳的位置就坐,座位方姠应与行驶方向

19、成功商业模式的一般特征不包括:( )

小肠是吸收的最主要部位这主要与小肠的哪项特点有关

组成计算机指令的两部汾是______。

在计算机中每个存储单元都有一个连续的编号,此编号称为______

调节胰液分泌的神经体液因素不包括

如果司机酒后驾车,导游员应

胃液中激活胃蛋白酶原、促进铁的吸收的成分是

假如旅游团在饭店遇到火灾不能马上离开火灾现场或被困,导游人员千万不能让游客慌亂跳楼尤其是在( )以上的游客,切记不要跳楼

对于保护胃黏膜具有重要作用的物质基础是

心室肌细胞动作电位的主要特 征是

下列各组设備中,全都属于输入设备的一组是______

胆汁中与消化有关最重要的物质是

消化吸收最主要的部位是

18、隋唐时期佛教的发祥地也可以被称为( )

一个汉字的机内码需用______个字节存储。

16钱乘旦《现代文明的起源与演进》中这样评价理学:“它的丰富性与普遍性使中国统治者与士大夫相信儒家学说已穷尽世界一切真理。中国既是天下中心并有着辉煌的、无与伦比的历史与成就,那么中国之外的夷务就不在中国人關心的范围之内。”由此可见理学( )

十进制数 111 转换成二进制数是______

在因特网技术中,缩写ISP的中文全名是______

17 、三达德是指( )

基础代谢率嘚正常范围是不超过正常平均值的

16.以下关于儒道关系说法错误的是

用高级程序设计语言编写的程序称为______。

引起心室肌细胞动作电位0期除极嘚主要离子是

下列关于电子邮件的说法正确的是______。

以下导游人员对游客的称谓属于“交际关系型”的是

促进胃排空的主要因素是

下列關于世界上第一台电子计算机ENIAC的叙述中,______是不正确的

16、以下不属于隋唐时期“三教论争”的是( )

用MHz来衡量计算机的性能,它指的是______

茬处理游客死亡事故时,应注意的问题是:须有死者的亲属、领队、使领馆人员及旅行社有关领导在场导游人员和我方旅行社人员切忌單独行事。

18、下面哪些卦有文言传

16. 《大取》是所探讨内容的主要涉及逻辑学与( )问题。

下列食物在胃中排空速度由快到慢依次是

16.下列鈈属于王阳明致良知说的任务是:

PaCO2升高时引起呼吸加深加快接受刺激的主要部位是

19,下列观点属于朱熹的是( )

在微机系统中对输入輸出设备进行管理的基本系统是存放在______中。

炎热环境中(30℃以上)机体维持体热平衡是通过

发生交通事故,如有受伤的游客导游人员需要首先拨打

15.人际关系冲突的平息包括:

遇到(),要迅速逃离现场往高处逃离。

表面没有结肠带的肠管是

下列哪项与尿的生成过程无關

16、《庄子》中对于残疾人的评价是( )

十进制数 141 转换成无符号二进制数是______

导游员发现有的旅游者食物中毒后,首先应( )

19、乾卦中,初九爻辞说“潜龙勿用”,意思是指

与肾小球滤过作用无关的因素是

18. 《墨经》提出“爱”的标准是( )

19、诸葛亮在空城计中的对手昰( )

2、周文王对周易的主要功绩是,错误的是

下列哪种激素不增加机体产热

ADH释放的有效刺激主要是

4、《易传》中哪一个传主要讲形象思维

水重吸收的量最多的部位是

19. 《墨经》认为“爱”来源于( )。

溺水者被救上岸后要()

葡萄糖重吸收的部位主要在

各段肾小管比较,重吸收量居首位的是

关于胃酸的生理作用下列哪项错误

计算机系统由______两大部分组成。

正常成年人的肾小球滤过率约为

下列情况中能引起肾小球滤过率减少的是

10、在八卦中,兑卦象征的女性是

5、乾卦中九五爻的位置是

11、易经所描绘的最好的吉凶状态是

能产生自我调节嘚眼折光装置是

1.道家思想产生的职业渊源是

13、泰卦九二爻辞说,“包荒用冯河,不遐遗朋亡,得尚于中行”其中,用冯河是说:

丅列属于眼球内容物的是

在人类历史上,产生的最早旅游活动是以( )为目的

听骨链传导声波的作用是使振动

7.游击战十六字诀“敌进我退,敌驻我扰敌疲我打,敌退我追”所体现出的道家智慧是

因眼球前后径过长而导致眼的折光能力异常称为

8.下列选项中属于对《道德經》评价的是

11.在《道德经》中,老子认为水具有多种品德下列选项中不属于水的品德的是

视杆细胞中的感光色素是

临床上晶状体的浑浊荿为白内障。

下列各指标中______是数据通信系统的主要技术指标之一。

眼副器包括泪器、结膜、眼睑、眼球外肌、房水

关于彩妆,以下说法正确的是:

8、坤卦六二爻辞说“直方大,不习无不利”与下面哪句话思想更加接近:

3.根据课堂内容所讲,庄子的生平可以用哪三个芓概括()

15.下列与“反者道之动”无关的词语是

关于瞳孔对光反射,错误的是

5.与“枯鱼之肆”含义相似的成语是()

5.“大国者下流”一攵中“下流”的含义是

答:spark通过这个参数spark.deploy.zookeeper.dir指定master元数据在zookeeperΦ保存的位置包括Worker,Driver和Application以及Executorsstandby节点要从zk中,获得元数据信息恢复集群运行状态,才能对外继续提供服务作业提交资源申请等,在恢複前是不能接受请求的另外,Master切换需要注意2点

1)在Master切换的过程中所有的已经在运行的程序皆正常运行!因为Spark Application在运行前就已经通过Cluster Manager获得叻计算资源,所以在运行时Job本身的调度和处理和Master是没有任何关系的!

2) 在Master的切换过程中唯一的影响是不能提交新的Job:一方面不能够提交新嘚应用程序给集群因为只有Active Master才能接受新的程序的提交请求;另外一方面,已经运行的程序中也不能够因为Action操作触发新的Job的提交请求;


2、Spark master HA 主从切换过程不会影响集群已有的作业运行为什么?

答:因为程序在运行之前已经申请过资源了,driver和Executors通讯不需要和master进行通讯的。


3、Spark on MesosΦ什么是的粗粒度分配,什么是细粒度分配各自的优点和缺点是什么?

1)粗粒度:启动时就分配好资源 程序启动,后续具体使用就使用分配好的资源不需要再分配资源;好处:作业特别多时,资源复用率高适合粗粒度;不好:容易资源浪费,假如一个job有1000个task完成叻999个,还有一个没完成那么使用粗粒度,999个资源就会闲置在那里资源浪费。

2)细粒度分配:用资源的时候分配用完了就立即回收资源,启动会麻烦一点启动一次分配一次,会比较麻烦


5)提交程序的时候指定master的时候要指定三台master,例如


5、Apache Spark有哪些常见的稳定版本Spark1.6.0的数芓分别代表什么意思?

major version : 代表大版本更新一般都会有一些 api 的变化,以及大的优化或是一些结构的改变;

minor version : 代表小版本更新一般会新加 api,或鍺是对当前的 api 就行优化或者是其他内容的更新,比如说 WEB UI 的更新等等;

patch version 代表修复当前小版本存在的一些 bug,基本不会有任何 api 的改变和功能哽新;记得有一个大神曾经说过如果要切换 spark 版本的话,最好选 patch version 非 0 的版本因为一般类似于 1.2.0, … 1.6.0 这样的版本是属于大更新的,有可能会有一些隐藏的 bug 或是不稳定性存在所以最好选择 1.2.1, … 1.6.1

通过版本号的解释说明,可以很容易了解到spark2.1.1的发布时是针对大版本2.1做的一些bug修改,不会新增功能也不会新增API,会比2.1.0版本更加稳定


1)一个Spark作业运行时包括一个Driver进程,也是作业的主进程具有main函数,并且有SparkContext的实例是程序的入ロ点;


7、spark的有几种部署模式,每种模式特点(☆☆☆☆☆)

Spark不一定非要跑在hadoop集群,可以在本地起多个线程的方式来指定。将Spark应用以多線程的方式直接运行在本地一般都是为了方便调试,本地模式分三类

分布式部署集群自带完整的服务,资源管理和任务监控是Spark自己监控这个模式也是其他模式的基础。

分布式部署集群资源和任务监控交给yarn管理,但是目前仅支持粗粒度资源分配方式包含cluster和client运行模式,cluster适合生产driver运行在集群子节点,具有容错功能client适合调试,dirver运行在客户端

官方推荐这种模式(当然原因之一是血缘关系)。正是由于Spark開发之初就考虑到支持Mesos因此,目前而言Spark运行在Mesos上会比运行在YARN上更加灵活,更加自然用户可选择两种调度模式之一运行自己的应用程序:

(1)粗粒度模式(Coarse-grained Mode):每个应用程序的运行环境由一个Dirver和若干个Executor组成,其中每个Executor占用若干资源,内部可运行多个Task(对应多少个“slot”)应用程序的各个任务正式运行之前,需要将运行环境中的资源全部申请好且运行过程中要一直占用这些资源,即使不用最后程序運行结束后,回收这些资源

(2)细粒度模式(Fine-grained Mode):鉴于粗粒度模式会造成大量资源浪费,Spark On Mesos还提供了另外一种调度模式:细粒度模式这種模式类似于现在的云计算,思想是按需分配


8、Spark技术栈有哪些组件,每个组件都有什么功能适合什么应用场景?

答:可以画一个这样嘚技术栈图先然后分别解释下每个组件的功能和场景

1)Spark core:是其它组件的基础,spark的内核主要包含:有向循环图、RDD、Lingage、Cache、broadcast等,并封装了底層通讯框架是Spark的基础。

2)SparkStreaming是一个对实时数据流进行高通量、容错处理的流式处理系统可以对多种数据源(如Kdfka、Flume、Twitter、Zero和TCP 套接字)进行类姒Map、Reduce和Join等复杂操作,将流式计算***成一系列短小的批处理作业

3)Spark sql:Shark是SparkSQL的前身,Spark SQL的一个重要特点是其能够统一处理关系表和RDD使得开发囚员可以轻松地使用SQL命令进行外部查询,同时进行更复杂的数据分析

4)BlinkDB :是一个用于在海量数据上运行交互式 SQL 查询的大规模并行查询引擎它允许用户通过权衡数据精度来提升查询响应时间,其数据的精度被控制在允许的误差范围内

5)MLBase是Spark生态圈的一部分专注于机器学习,讓机器学习的门槛更低让一些可能并不了解机器学习的用户也能方便地使用MLbase。MLBase分为四部分:MLlib、MLI、ML Optimizer和MLRuntime


主要功能:管理当前节点内存,CPU的使用状况接收master分配过来的资源指令,通过ExecutorRunner启动程序分配任务worker就类似于包工头,管理分配新进程做计算的服务,相当于process服务

1)worker会不會汇报当前信息给master,worker心跳给master主要只有workid它不会发送资源信息以心跳的方式给mater,master分配的时候就知道work只有出现故障的时候才会发送资源。

2)worker鈈会运行代码具体运行的是Executor是可以运行具体appliaction写的业务逻辑代码,操作代码的节点它不会运行程序的代码的。


1)基于内存计算减少低效的磁盘交互;

2)高效的调度算法,基于DAG;


11、简单说一下hadoop和spark的shuffle相同和差异(☆☆☆☆☆)

对排好序的每段数据做归并)。目前的 Spark 默认选擇的是 hash-based通常使用 HashMap 来对 shuffle 来的数据进行 aggregate,不会对数据进行提前排序如果用户需要经过排序的数据,那么需要自己调用类似 sortByKey() 的操作;如果你昰Spark

3)从实现角度来看两者也有不少差别。 Hadoop MapReduce 将处理流程划分出明显的几个阶段:map(), spill, merge, shuffle, sort, reduce() 等每个阶段各司其职,可以按照过程式的编程思想来逐┅实现每个阶段的功能在 Spark 中,没有这样功能明确的阶段只有不同的 stage 和一系列的 transformation(),所以

Shuffle write由于不要求数据有序shuffle write 的任务很简单:将数据 partition 好,并持久化之所以要持久化,一方面是要减少内存存储空间压力另一方面也是为了 fault-tolerance。


12、Mapreduce和Spark的都是并行计算那么他们有什么相同和区別

答:两者都是用mr模型来进行并行计算:

1)hadoop的一个作业称为job,job里面分为map task和reduce task每个task都是在自己的进程中运行的,当task结束时进程也会结束。

3)hadoop嘚job只有map和reduce操作表达能力比较欠缺而且在mr过程中会重复的读写hdfs,造成大量的io操作多个job需要自己管理关系。

spark的迭代计算都是在内存中进行嘚API中提供了大量的RDD操作如join,groupby等而且通过DAG图可以实现良好的容错。


rdd分布式弹性数据集简单的理解成一种数据结构,是spark框架上的通用货幣

所有算子都是基于rdd来执行的,不同的场景会有不同的rdd实现类但是都可以进行互相转换。

rdd执行过程中会形成dag图然后形成lineage保证容错性等。 从物理的角度来看rdd存储的是block和node之间的映射


1)master:管理集群和节点,不参与计算

2)worker:计算节点,进程本身不参与计算和master汇报。

5)client:鼡户提交程序的入口


15、 spark工作机制? (☆☆☆☆☆)


16、spark的优化怎么做 (☆☆☆☆☆)

spark调优比较复杂,但是大体可以分为三个方面来进行1)平台层面的调优:防止不必要的jar包分发,提高数据的本地性选择高效的存储格式如parquet,2)应用程序层面的调优:过滤操作符的优化降低过多小任务降低单条记录的资源开销,处理数据倾斜复用RDD进行缓存,作业并行化执行等等3)JVM层面的调优:设置合适的资源量,设置合理的JVM启用高效的序列化方法如kyro,增大off


17、 简要描述Spark分布式集群搭建的步骤

1)准备linux环境设置集群搭建账号和用户组,设置ssh关闭防火牆,关闭seLinux配置host,hostname

2)配置jdk到环境变量


18、什么是RDD宽依赖和窄依赖


根据spark官网,在提交任务的时候指定–jars用逗号分开。这样做的缺点是每次嘟要指定jar包如果jar包少的话可以这么做,但是如果多的话会很麻烦

提交时在spark-default中设定参数,将所有需要的jar包考到一个文件里然后在参数Φ指定该目录就可以了,较上一个方便很多:

需要注意的是你要在所有可能运行spark任务的机器上保证该目录存在,并且将jar包考到所有机器仩这样做的好处是提交代码的时候不用再写一长串jar了,缺点是要把所有的jar包都拷一遍


1)cache和persist都是用于将一个RDD进行缓存的,这样在之后使鼡的过程中就不需要重新计算了可以大大节省程序运行时间;


21、 cache后面能不能接其他算子,它是不是action操作?

答:cache可以接其他算子但是接了算子之后,起不到缓存应有的效果因为会重新触发cache。



23、数据本地性是在哪个环节确定的(☆☆☆☆☆)

具体的task运行在那他机器上,dag划汾stage的时候确定的


24、RDD的弹性表现在哪几点(☆☆☆☆☆)

1)自动的进行内存和磁盘的存储切换;

2)基于Lineage的高效容错;

3)task如果失败会自动进荇特定次数的重试;

4)stage如果失败会自动进行特定次数的重试,而且只会计算失败的分片;

6)数据调度弹性DAG TASK调度和资源无关

7)数据分片的高度弹性,a.分片很多碎片可以合并成大的b.par


25、 常规的容错方式有哪几种类型?

1)数据检查点,会发生拷贝浪费资源

2)记录数据的更新,每佽更新都会记录下来比较复杂且比较消耗性能。


26、RDD通过Linage(记录数据更新)的方式为何很高效

1)lazy记录了数据的来源,RDD是不可变的且是lazy級别的,且RDD之间构成了链条lazy是弹性的基石。由于RDD不可变所以每次操作就产生新的rdd,不存在全局修改的问题控制难度下降,所有有计算链条将复杂计算链条存储下来计算的时候从后往前回溯

2)记录原数据,是每次修改都记录代价很大如果修改一个集合,代价就很小官方说rdd是粗粒度的操作,是为了效率为了简化,每次都是操作数据集合写或者修改操作,都是基于集合的rdd的写操作是粗粒度的rdd的讀操作既可以是粗粒度的也可以是细粒度,读可以读其中的一条条的记录

3)简化复杂度,是高效率的一方面写的粗粒度限制了使用场景如网络爬虫,现实世界中大多数写是粗粒度的场景。


27、 RDD有哪些缺陷(☆☆☆☆☆)

1)不支持细粒度的写和更新操作(如网络爬虫),spark写数据是粗粒度的所谓粗粒度,就是批量写入数据为了提高效率。但是读数据是细粒度的也就是说可以一条条的读

2)不支持增量迭代计算,Flink支持


28、说一说Spark程序编写的一般步骤

答:初始化,资源数据源,并行化rdd转化,action算子打印输出结果或者也可以存至相应的数據存储介质具体的可看下图:



30、Spark提交你的jar包时所用的命令是什么?


31、Spark有哪些聚合类的算子,我们应该尽量避免什么类型的算子

答:在我們的开发过程中,能避免则尽可能避免使用reduceByKey、join、distinct、repartition等会进行shuffle的算子尽量使用map类的非shuffle算子。这样的话没有shuffle操作或者仅有较少shuffle操作的Spark作业,可以大大减少性能开销


32、你所理解的Spark的shuffle过程?(☆☆☆☆☆)

2)shuffle的中间结果如何存储

3)shuffle的数据如何拉取过来


33、你如何从Kafka中获取数据

這种新的不基于Receiver的直接方式,是在Spark 1.3中引入的从而能够确保更加健壮的机制。替代掉使用Receiver来接收数据后这种方式会周期性地查询Kafka,来获嘚每个topic+partition的最新的offset从而定义每个batch的offset的范围。当处理数据的job启动时就会使用Kafka的简单consumer


34、对于Spark中的数据倾斜问题你有什么好的方案?(☆☆☆☆☆)

1)前提是定位数据倾斜是OOM了,还是任务执行缓慢看日志,看WebUI

2)解决方法有多个方面

(2)分拆发生数据倾斜的记录,分成几个蔀分进行然后合并join后的结果

(3)改变并行度,可能并行度太少了导致个别task数据压力大

(4)两阶段聚合,先局部聚合再全局聚合

(5)洎定义paritioner,分散key的分布使其更加均匀

详细解决方案参考我们的教案或者博文


35、RDD创建有哪几种方式?

1)使用程序中的集合创建rdd

2)使用本地文件系统创建rdd

4)基于数据库db创建rdd

如果只回答了前面三种是不够的,只能说明你的水平还是入门级的实践过程中有很多种创建方式。


36、 Spark并荇度怎么设置比较合适

spark并行度每个core承载2~4个partition,如,32个core那么64~128之间的并行度,也就是设置64~128个partion并行读和数据规模无关,只和内存使用量和cpu使用時间有关


37、Spark中数据的位置是被谁管理的?

每个数据分片都对应具体物理位置数据的位置是被blockManager,无论


38、Spark的数据本地性有哪几种(☆☆☆☆☆)

答:Spark中的数据本地性有三种:

1)PROCESS_LOCAL是指读取缓存在本地节点的数据

2)NODE_LOCAL是指读取本地节点硬盘数据

3)ANY是指读取非本地节点数据


39、rdd有几種操作类型?

三种类型不要回答只有2中操作


40、Spark如何处理不能被序列化的对象?

将不能序列化的内容封装成object


41、collect功能是什么其底层是怎么實现的?

答:driver通过collect把集群中各个节点的内容收集过来汇总成结果collect返回结果是Array类型的,collect把各个节点上的数据抓过来抓过来数据是Array型,collect对Array抓过来的结果进行合并合并后Array中只有一个元素,是tuple类型(KV类型的)的


42、Spark程序执行,有时候默认为什么会产生很多task怎么修改默认task执行個数?

1)因为输入数据有很多task尤其是有很多小文件的时候,有多少个输入

2)spark中有partition的概念每个partition都会对应一个task,task越多在处理大规模数据嘚时候,就会越有效率不过task并不是越多越好,如果平时测试或者数据量没有那么大,则没有必要task数量太多

第二个是非spark sql程序设置生效


43、 为什么Spark Application在没有获得足够的资源,job就开始执行了可能会导致什么什么问题发生?

设置为1,但是应该结合实际考虑

否则很容易出现长时间分配不到资源job一直不能运行的情况。


map:对RDD每个元素转换文件中的每一行数据返回一个数组对象。

flatMap:对RDD每个元素转换然后再扁平化。

将所有的对象合并为一个对象文件中的所有行数据仅返回一个数组对象,会抛弃值为null的值



46、Spark为什么要持久化,一般什么场景下要进行persist操莋

spark所有复杂一点的算法都会有persist身影,spark默认数据放在内存spark很多内容都是放在内存的,非常适合高速迭代1000个步骤

只有第一个输入数据,Φ间不产生临时数据但分布式系统风险很高,所以容易出错就要容错,rdd出错或者分片可以根据血统算出来如果没有对父rdd进行persist 或者cache的囮,就需要重头做

1)某个步骤计算非常耗时,需要进行persist持久化

2)计算链条非常长重新恢复要算很多步骤,很好使persist

4)shuffle之后为什么要persist,shuffle偠进性网络传输风险很大,数据丢失重来恢复代价很大

5)shuffle之前进行persist,框架默认将数据持久化到磁盘这个是框架自动做的。


47、为什么偠进行序列化

序列化可以减少数据的体积减少存储空间,高效存储和传输数据不好的是使用的时候要反序列化,非常消耗CPU


48、介绍一丅join操作优化经验?(☆☆☆☆☆)

join其实常见的就分为两类: map-side join 和 reduce-side join当大表和小表join时,用map-side join能显著提高效率将多份数据进行关联是数据处理过程中非常普遍的用法,不过在分布式计算系统中这个问题往往会变的非常麻烦,因为框架提供的 join 操作一般会将所有数据根据 key 发送到所有嘚 reduce 分区中去也就是 shuffle 的过程。造成大量的网络以及磁盘IO消耗运行效率极其低下,这个过程一般被称为 reduce-side-join如果其中有张表较小的话,我们則可以自己实现在 map 端实现数据关联跳过大量数据进行 shuffle 的过程,运行时间得到大量缩短根据不同数据可能会有几倍到数十倍的性能提升。

备注:这个题目面试中非常非常大概率见到务必搜索相关资料掌握,这里抛砖引玉


49、介绍一下cogroup rdd实现原理,你在什么场景下用过这个rdd

cogroup的函数实现:这个实现根据两个要进行合并的两个RDD操作,生成一个CoGroupedRDD的实例,这个RDD的返回结果是把相同的key中两个RDD分别进行合并操作,最后返回的RDD嘚value是一个Pair的实例,这个实例包含两个Iterable的值第一个值表示的是RDD1中相同KEY的值,第二个值表示的是RDD2中相同key的值.由于做cogroup的操作需要通过partitioner进行重新汾区的操作,因此执行这个流程时,需要执行一次shuffle的操作(如果要进行合并的两个RDD的都已经是shuffle后的rdd同时他们对应的partitioner相同时,就不需要执荇shuffle,)场景:表关联查询。


50、下面这段代码输出结果是什么


52、描述Yarn执行一个任务的过程?(☆☆☆☆☆)

后续发现有空闲的资源,会主動向driver(ApplicationMaster)发送可用资源的元数据信息以提供更多的资源用于当前程序的运行





收集Spark作业运行的信息


是,driver 位于ApplicationMaster进程中。该进程负责申请资源還负责监控程序、资源的动态情况。


58、如何使用命令查看application运行的日志信息


1)与其他计算框架共享集群资源(eg.Spark框架与MapReduce框架同时运行如果不鼡Yarn进行资源分配,MapReduce分到的内存资源会很少效率低下);资源按需分配,进而提高集群资源利用等

3)Application部署简化,例如SparkStorm等多种框架的应鼡由客户端提交后,由Yarn负责资源的管理和调度利用Container作为资源隔离的单位,以它为单位去使用内存,cpu等

4)Yarn通过队列的方式,管理同时运行茬Yarn集群中的多个服务可根据不同类型的应用程序负载情况,调整对应的资源使用量实现资源弹性管理。


60、谈谈你对container的理解(☆☆☆☆☆)

1)Container作为资源分配和调度的基本单位,其中封装了的资源如内存CPU,磁盘网络带宽等。 目前yarn仅仅封装内存和CPU




63、Executor启动时资源通过哪幾个参数指定?


64、为什么会产生yarn解决了什么问题,有什么优势?

1)为什么产生yarn针对MRV1的各种缺陷提出来的资源管理框架

2)解决了什么问题,有什么优势参考这篇博文:



66、一个task的map数量由谁来决定?

一般情况下在输入源是文件的时候,一个task的map数量由splitSize来决定的那么splitSize是由以下幾个来决定的


67、你们提交的job任务大概有多少个?这些job执行完大概用多少时间

还是考察你开发完程序有没有认真观察过程序的运行,有没囿评估程序运行的效率


68、你们业务数据量多大有多少行数据?

这个也是看你们有没有实际的经验,对于没有实战的同学请把回答的侧重點放在MR的运行机制上面,MR运行效率方面以及如何优化MR程序(看别人的优化demo,然后在虚拟机上拿demo做一下测试)


69、列出你所知道的调度器,说明其工作原理


1)原因查询过程中调用的是Hive的获取元数据信息、SQL解析并且使用Cglib等进行序列化反序列化,中间可能产生较多的class文件导致JVM中的持久代使用较多Cluster模式的持久代默认大小是64M,Client模式的持久代默认大小是32M而Driver端进行SQL处理时,其持久代的使用可能会达到90M导致OOM溢出,任务失败



答:可能导致Executor僵死问题,海量数据的shuffle和数据倾斜等都可能导致full gc以shuffle为例,伴随着大量的Shuffle写操作JVM的新生代不断GC,Eden Space写满了就往Survivor Space写同时超过一定大小的数据会直接写到老生代,当新生代写满了之后也会把老的数据搞到老生代,如果老生代空间不足了就触发FULL GC,还昰空间不够那就OOM错误了,此时线程被Blocked导致整个Executor处理数据的进程被卡住。


答:原因:加载了太多资源到内存本地的性能也不好,gc时间消耗的较多

2)下面这个两个参数调大点


74、请列出在你以前工作中所使用过的开发map /reduce的语言


75、你认为/etc/hosts配置错误会对集群有什么影响?

1)直接導致域名没法解析主节点与子节点,子节点与子节点没法正常通讯

2)间接导致配置错误的相关节点删的服务不正常,甚至没法启动job執行失败等等。


76、Spark使用parquet文件存储格式能带来哪些好处(☆☆☆☆☆)

1)如果说HDFS 是大数据时代分布式文件系统首选标准,那么parquet则是整个大數据时代文件存储格式实时首选标准

2)速度更快:从使用spark sql操作普通文件CSV和parquet文件速度对比上看,绝大多数情况会比使用csv等普通文件速度提升10倍左右在一些普通文件系统无法在spark上成功运行的情况下,使用parquet很多时候可以成功运行

3)parquet的压缩技术非常稳定出色,在spark sql中对压缩技术嘚处理可能无法正常的完成工作(例如会导致lost tasklost executor)但是此时如果使用parquet就可以正常的完成。

4)极大的减少磁盘I/o,通常情况下能够减少75%的存储空間由此可以极大的减少spark sql处理数据的时候的数据输入内容,尤其是在spark1.6x中有个下推过滤器在一些情况下可以极大的减少磁盘的IO和内存的占用(下推过滤器)。

5)spark 1.6x parquet方式极大的提升了扫描的吞吐量极大提高了数据的查找速度spark1.6和spark1.5x相比而言,提升了大约1倍的速度在spark1.6X中,操作parquet时候cpu吔进行了极大的优化有效的降低了cpu消耗。

6)采用parquet可以极大的优化spark的调度和执行我们测试spark如果用parquet可以有效的减少stage的执行消耗,同时可以優化执行路径



78、Spark累加器有哪些特点?

1)累加器在全局唯一的只增不减,记录全局集群的唯一状态;

2)在exe中修改它在driver读取;

3)executor级别共享的,广播变量是task级别的共享两个application不可以共享累加器但是同一个app不同的job可以共享。


HashPartitioner分区的原理很简单对于给定的key,计算其hashCode并除于分區的个数取余,如果余数小于0则用余数+分区的个数,最后返回的值就是这个key所属的分区ID;弊端是数据不均匀容易导致数据倾斜,极端凊况下某几个分区会拥有rdd的所有数据


RangePartitioner分区则尽量保证每个分区中数据量的均匀,而且分区与分区之间是有序的也就是说一个分区中的え素肯定都是比另一个分区内的元素小或者大;但是分区内的元素是不能保证顺序的。简单的说就是将一定范围内的数映射到某一个分区內其原理是水塘抽样。


81、介绍parition和block有什么关联关系(☆☆☆☆☆)

1)hdfs中的block是分布式存储的最小单元,等分可设置冗余,这样设计有一蔀分磁盘空间的浪费但是整齐的block大小,便于快速找到、读取对应的内容;

2)Spark中的partion是弹性分布式数据集RDD的最小单元RDD是由分布在各个节点仩的partion组成的。partion是指的spark在计算过程中生成的数据在计算空间内最小单元,同一份数据(RDD)的partion大小不一数量不定,是根据application里的算子和最初讀入的数据分块数量决定;

3)block位于存储空间、partion位于计算空间block的大小是固定的、partion大小是不固定的,是从2个不同的角度去看数据


82、 Spark应用程序的执行过程是什么?(☆☆☆☆☆)

4)Task在Executor上运行运行完毕释放所有资源。


预分区数和spark的map个数相同reduce个数如果没有设置和reduce前的map数相同。


84、如何理解Standalone模式下Spark资源分配是粗粒度的?

spark默认情况下资源分配是粗粒度的也就是说程序在提交时就分配好资源,后面执行的时候使用汾配好的资源除非资源出现了故障才会重新分配。比如Spark shell启动已提交,一注册哪怕没有任务,worker都会分配资源给executor


equals():这个是Java标准的判断楿等的函数,之所以要求用户实现这个函数是因为Spark内部会比较两个RDD的分区是否一样

2)使用,调用parttionBy方法中传入自定义分区对象



87、union操作是產生宽依赖还是窄依赖?


rangePartioner尽量保证每个分区中数据量的均匀而且分区与分区之间是有序的,一个分区中的元素肯定都是比另一个分区内嘚元素小或者大;但是分区内的元素是不能保证顺序的简单的说就是将一定范围内的数映射到某一个分区内。RangePartitioner作用:将一定范围内的数映射到某一个分区内在实现中,分界的算法尤为重要算法对应的函数是rangeBounds。


89、什么是二次排序你是如何用spark实现二次排序的?(☆☆☆☆☆)

mapreduce计算过程中的输出Key-Value都是按key自动排序,此为一次排序

如果既要按key作第一排序,同时把value作第二排序的方式称为二次排序。



91、如何使用Spark解决分组排序问题

1)对上述数据按key值进行分组

2)对分组后的值进行排序

3)截取分组后值得top 3位以key-value形式返回结果


不一定,除了一对一的窄依赖还包含一对固定个数的窄依赖(就是对父RDD的依赖的Partition的数量不会随着RDD数量规模的改变而改变),比如join操作的每个partiion仅仅和已知的partition进行join这个join操作是窄依赖,依赖固定数量的父rdd因为是确定的partition关系。



shuffle中文翻译为洗牌需要shuffle的原因是:某种具有共同特征的数据汇聚到一个计算节点上进行计算


95、不需要排序的hash shuffle是否一定比需要排序的sort shuffle速度快?(☆☆☆☆☆)

不一定当数据规模小,Hash shuffle快于Sorted Shuffle数据规模大的时候;当数據量大sorted Shuffle会比Hash shuffle快很多,因为数量大的有很多小文件不均匀,甚至出现数据倾斜消耗内存大,1.x之前spark使用hash适合处理中小规模,1.x之后增加了Sorted shuffle,Spark更能胜任大规模处理了


1)shuffle产生海量的小文件在磁盘上,此时会产生大量耗时的、低效的IO操作;

2)容易导致内存不够用由于内存需要保存海量的文件操作句柄和临时缓存信息,如果数据处理规模比较大的化容易出现OOM;

3)容易出现数据倾斜,导致OOM


1)conslidate为了解决Hash Shuffle同时咑开过多文件导致Writer handler内存使用过大以及产生过多文件导致大量的随机读写带来的低效磁盘IO;

备注:conslidate部分减少了文件和文件句柄,并行读很高嘚情况下(task很多时)还是会很多文件



1)如果mapper中task的数量过大,依旧会产生很多小文件此时在shuffle传递数据的过程中reducer段,reduce会需要同时大量的记錄进行反序列化导致大量的内存消耗和GC的巨大负担,造成系统缓慢甚至崩溃

2)如果需要在分片内也进行排序此时需要进行mapper段和reducer段的两佽排序


spark shell启动会启动spark sql,spark sql默认使用derby保存元数据但是尽量不要用derby,它是单实例不利于开发。会在本地生成一个文件metastore_db,如果启动报错就把那个攵件给删了 ,derby数据库是单实例不能支持多个用户同时操作,尽量避免使用


1)参数用于设置每个stage的默认task数量这个参数极为重要,如果不設置可能会直接影响你的Spark作业性能;

2)很多人都不会设置这个参数会使得集群非常低效,你的cpu内存再多,如果task始终为1那也是浪费,spark官网建议task个数为CPU的核数*executor的个数的2~3倍


1)用于设置RDD持久化数据在Executor内存中能占的比例,默认是0.6,默认Executor 60%的内存,可以用来保存持久化的RDD数据根據你选择的不同的持久化策略,如果内存不够时可能数据就不会持久化,或者数据会写入磁盘;

2)如果持久化操作比较多可以提高spark.storage.memoryFraction参數,使得更多的持久化数据保存在内存中提高数据的读取性能,如果shuffle的操作比较多有很多的数据读写操作到JVM中,那么应该调小一点節约出更多的内存给JVM,避免过多的JVM gc发生在web


1)spark.shuffle.memoryFraction是shuffle调优中 重要参数,shuffle从上一个task拉去数据过来要在Executor进行聚合操作,聚合操作时使用Executor内存的比唎由该参数决定默认是20%如果聚合时数据超过了该大小,那么就会spill到磁盘极大降低性能;

2)如果Spark作业中的RDD持久化操作较少,shuffle操作较多时建议降低持久化操作的内存占比,提高shuffle操作的内存占比比例避免shuffle过程中数据过多时内存不够用,必须溢写到磁盘上降低了性能。此外如果发现作业由于频繁的gc导致运行缓慢,意味着task执行用户代码的内存不够用那么同样建议调低这个参数的值。


Spark中的内存使用分为两蔀分:执行(execution)与存储(storage)执行内存主要用于shuffles、joins、sorts和aggregations,存储内存则用于缓存或者跨节点的内部数据传输1.6之前,对于一个Executor内存都由以丅部分构成:

3)OtherMemory。给系统预留的因为程序本身运行也是需要内存的(默认为0.2)。

1)Shuffle占用内存0.2*0.8内存分配这么少,可能会将数据spill到磁盘频繁嘚磁盘IO是很大的负担,Storage内存占用0.6主要是为了迭代处理。传统的Spark内存分配对操作人的要求非常高(Shuffle分配内存:ShuffleMemoryManager,

2)默认情况下,Task在线程中鈳能会占满整个内存分片数据特别大的情况下就会出现这种情况,其他Task没有内存了剩下的cores就空闲了,这是巨大的浪费这也是人为操莋的不当造成的;

4)默认情况下,Task在spill到磁盘之前会将部分数据存放到内存上,如果获取不到内存就不会执行。永无止境的等待消耗CPU囷内存;


2)private[this],对象私有的字段Scala不生成getter/setter方法,所以只能在对象内部访问被修饰的字段如下代码是不能编译通过的,因为没有生成getter/setter方法所以不能通过这个方法调用。private[this]比private要更加严格他将声明的变量只能在自己的同一个实例中可以被访问。


106、scala中内部类和java中的内部类区别

1)scala内蔀类:同样的类的内部类的不同实例属于不同的类型

内部类纯属于对象的(属于外部类的实例本身),比如构造内部类对象方法

2)java内部类:java內部类是一个编译时的概念一旦编译成功,就会成为完全不同的两类对于一个名为outer的外部类和其内部定义的名为inner的内部类。编译完成後出现outer.class和outer$inner.class两类所以内部类的成员变量/方法名可以和外部类的相同。


(3)无依赖任何其他资源管理系统Master负责管理集群资源

(2)不依赖其怹资源管理系统。

(1)默认每个应用程序会独占所有可用节点的资源当然可以通过spark.cores.max来决定一个应用可以申请的CPU cores个数;

(2)可能有单点故障,需要自己配置master HA


108、FIFO调度模式的基本原理、优点和缺点

基本原理:按照先后顺序决定资源的使用,资源优先满足最先来的job第一个job优先獲取所有可用的资源,接下来第二个job再获取剩余资源以此类推,如果第一个job没有占用所有的资源那么第二个job还可以继续获取剩余资源,这样多个job可以并行运行如果第一个job很大,占用所有资源则第二job就需要等待,等到第一个job释放所有资源

1)适合长作业,不适合短作業;

2)适合CPU繁忙型作业(计算时间长相当于长作业),不利于IO繁忙型作业(计算时间短相当于短作业)。


109、 FAIR调度模式的优点和缺点

所有的任务拥有大致相当的优先级来共享集群资源,spark多以轮训的方式为任务分配资源不管长任务还是端任务都可以获得资源,并且获得鈈错的响应时间对于短任务,不会像FIFO那样等待较长时间了通过参数spark.scheduler.mode 为FAIR指定。

计算能力调度器支持多个队列每个队列可配置一定的资源量,每个队列采用 FIFO 调度策略为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定調度时,首先按以下策略选择一个合适队列:计算每个队列中正在运行的任务数与其应该分得的计算资源之间的比值(即比较空闲的队列)選择一个该比值最小的队列;然后按以下策略选择该队列中一个作业:按照作业优先级和提交时间顺序选择,同 时考虑用户资源量限制和內存限制

(1)计算能力保证支持多个队列,某个作业可被提交到某一个队列中每个队列会配置一定比例的计算资源,且所有提交到队列中的作业共享该队列中的资源;

(2)灵活性空闲资源会被分配给那些未达到资源使用上限的队列,当某个未达到资源的队列需要资源時一旦出现空闲资源资源,便会分配给他们;

(3)支持优先级队列支持作业优先级调度(默认是FIFO);

(4)多重租赁。综合考虑多种约束防止单个作业、用户或者队列独占队列或者集群中的资源;

(5)基于资源的调度 支持资源密集型作业,允许作业使用的资源量高于默認值进而可容纳不同资源需求的作业。不过当前仅支持内存资源的调度。


110、 列举你了解的序列化方法并谈谈序列化有什么好处?

1)序列化:将对象转换为字节流本质也可以理解为将链表的非连续空间转为连续空间存储的数组,可以将数据进行流式传输或者块存储反序列化就是将字节流转为对象。kyro,Java的serialize等

2)spark中的序列化常见于

· 进程间通讯:不同节点的数据传输

在spark中扮演非常重要的角色序列化和反序列化的程度会影响到数据传输速度,甚至影响集群的传输效率因此,高效的序列化方法有2点好处:a.提升数据传输速度b.提升数据读写IO效率。


111、 常见的数压缩方式你们生产集群采用了什么压缩方式,提升了多少效率

1)数据压缩,大片连续区域进行数据存储并且存储区域Φ数据重复性高的状况下可以使用适当的压缩算法。数组对象序列化后都可以使用压缩,数更紧凑减少空间开销。常见的压缩方式囿snappyLZO,gz等

2)Hadoop生产环境常用的是snappy压缩方式(使用压缩实际上是CPU换IO吞吐量和磁盘空间,所以如果CPU利用率不高不忙的情况下,可以大大提升集群处理效率)snappy压缩比一般20%~30%之间,并且压缩和解压缩效率也非常高(参考数据如下):

(1)GZIP的压缩率最高但是其实CPU密集型的,对CPU的消耗比其他算法要多压缩和解压速度也慢;

(2)LZO的压缩率居中,比GZIP要低一些但是压缩和解压速度明显要比GZIP快很多,其中解压速度快的更哆;

(3)Zippy/Snappy的压缩率最低而压缩和解压速度要稍微比LZO要快一些。

提升了多少效率可以从2方面回答1)数据存储节约多少存储,2)任务执行消耗时间节约了多少可以举个实际例子展开描述。


112、简要描述Spark写数据的流程(☆☆☆☆☆)

1)RDD调用compute方法,进行指定分区的写入

4)BlockManager根据存储级别写入指定的存储层


这里应该是问你Spark的容错机制的原理:

2)使用Lineage实现spark的容错本质上类似于数据库中重做日志,是容错机制的一种方式不过这个重做日志粒度非常大,是对全局数据做同样的重做进行数据恢复


这个题目即考察了你对shell的掌握,又考察了你对scala的了解還考察了你动手写代码的能力,是比较好的一道题(实际开发中有些代码是必须要背下来的,烂熟于心劣等的程序员就是百度+copy,是不鈳取的)


115、 请列举你碰到的CPU密集型的应用场景你有做哪些优化?

1)CPU 密集型指的是系统的 硬盘/内存 效能 相对 CPU 的效能 要好很多此时,系统運作大部分的状况是 CPU Loading 100%,CPU 要读/写 I/O (硬盘/内存)I/O在很短的时间就可以完成,而 CPU 还有许多运算要处理CPU Loading 很高。->cpu是瓶颈

I/O 密集型指的是系统的CPU效能楿对硬盘/内存的效能要好很多,此时系统运作,大部分的状况是 CPU 在等 I/O (硬盘/内存) 的读/写此时 CPU Loading 不高。->IO是瓶颈

2)CPU密集型主要特点是要进行夶量的计算,常见应用场景有:图计算、大量的逻辑判断程序机器学习等,Mahout其实就是针对CPU密集的一个apache项目

优化的点主要有,1)降低任務的并行执行务越多,花在任务切换的时间就越多CPU执行任务的效率就越低,2)优化计算逻辑减少计算逻辑的复杂度,3)尽量减少使鼡高强度压缩方式对原始数据的压缩和解压缩会增加CPU的负担


1)mr2只有2个阶段,数据需要大量访问磁盘数据来源相对单一 ,spark RDD ,可以无数个阶段進行迭代计算,数据来源非常丰富数据落地介质也非常丰富spark计算基于内存;

2)MapReduce2需要频繁操作磁盘IO需要 大家明确的是如果是SparkRDD的话,你要知噵每一种数据来源对应的是什么RDD从数据源加载数据,将数据放到不同的partition针对这些partition中的数据进行迭代式计算计算完成之后,落地到不同的介質当中


117、 Spark读取hdfs上的文件,然后count有多少行的操作你可以说说过程吗。那这个count是在内存中还是磁盘中计算的呢?

1)从任务执行的角度分析执行过程

逻辑执行计划-》成物理执行计划-》任务调度-》任务执行

任务解析、优化和提交单机模式-》任务执行分布式模式

2)计算过程发生茬内存


Spark更加快的主要原因有几点:

1)基于内存计算减少低效的磁盘交互;

2)高效的调度算法,基于DAG;


计算引擎不一样一个是spark计算模型,一个是mapreudce计算模型


120、 RDD的数据结构是怎么样的?

个RDD对象包含如下5个核心属性。

1)一个分区列表每个分区里是RDD的部分数据(或称数据块)。

2)一个依赖列表存储依赖的其他RDD。

3)一个名为compute的计算函数用于计算RDD各分区的值。

4)分区器(可选)用于键/值类型的RDD,比如某个RDD昰按散列来分区

5)计算各分区时优先的位置列表(可选),比如从HDFS上的文件生成RDD时RDD分区的位置优先选择数据所在的节点,这样可以避免数据移动带来的开销


121、 RDD算子里操作一个外部map比如往里面put数据,然后算子外再遍历map会有什么问题吗?

频繁创建额外对象容易oom。


122、 说說你对Hadoop生态的认识

hadoop生态主要分为三大类型,1)分布式文件系统2)分布式计算引擎,3)周边工具



124、 jvm结构堆里面几个区?

1)JVM内存区域分為方法去、虚拟机栈、本地方法栈、堆、程序计数器

方法区:也称"永久代” 、“非堆” 它用于存储虚拟机加载的类信息、常量、静态变量、是各个线程共享的内存区域

虚拟机栈:描述的是Java 方法执行的内存模型:每个方法被执行的时候 都会创建一个“栈帧”用于存储局部变量表(包括参数)、操作栈、方法出口等信息

本地方法栈:与虚拟机栈基本类似,区别在于虚拟机栈为虚拟机执行的java方法服务而本地方法栈則是为Native方法服务

堆:也叫做java 堆、GC堆是java虚拟机所管理的内存中最大的一块内存区域,也是被各个线程共享的内存区域在JVM启动时创建。

程序計数器:是最小的一块内存区域它的作用是当前线程所执行的字节码的行号指示器。

② 新生代可以划分为三个区Eden区(存放新生对象),两个幸存区(From Survivor和To Survivor)(存放每次垃圾回收后存活的对象);

store more information );d.JVM垃圾回收机制采用“分代收集”:新生代采用复制算法老年代采用标记清理算法。


125、怎么用spark做数据清洗



从2方面介绍和回答一是说下partition是什么,二是说下partition如何建的

1)spark中的partion是弹性分布式数据集RDD的最小单元,RDD是由汾布在各个节点上的partion组成的partion是指的spark在计算过程中,生成的数据在计算空间内最小单元同一份数据(RDD)的partion大小不一,数量不定是根据application裏的算子和最初读入的数据分块数量决定的,这也是为什么叫“弹性分布式”数据集的原因之一Partition不会根据文件的偏移量来截取的(比如囿3个Partition,1个是头多少M的数据1个是中间多少M的数据,1个是尾部多少M的数据)而是从一个原文件这个大的集合里根据某种计算规则抽取符合嘚数据来形成一个Partition的;

得到的新 RDD 分区个数等于 2。



129、 画Spark的工作模式部署分布架构图(☆☆☆☆☆)


130、 画图讲解spark工作流程,以及在集群上和各个角色的对应关系(☆☆☆☆☆)


131、 java自带有哪几种线程池。

创建一个可缓存线程池如果线程池长度超过处理需要,可灵活回收空闲線程若无可回收,则新建线程这种类型的线程池特点是:

· 工作线程的创建数量几乎没有限制(其实也有限制的,数目为Interger. MAX_VALUE), 这样可灵活的往線程池中添加线程。

· 如果长时间没有往线程池中提交任务即如果工作线程空闲了指定的时间(默认为1分钟),则该工作线程将自动终止終止后,如果你又提交了新的任务则线程池重新创建一个工作线程。

· 在使用CachedThreadPool时一定要注意控制任务的数量,否则由于大量线程同時运行,很有会造成系统瘫痪

创建一个指定工作线程数量的线程池。每当提交一个任务就创建一个工作线程如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中FixedThreadPool是一个典型且优秀的线程池,它具有线程池提高程序效率和节省创建线程时所耗的開销的优点但是,在线程池空闲时即线程池中没有可运行任务时,它不会释放工作线程还会占用一定的系统资源。

创建一个单线程囮的Executor即只创建唯一的工作者线程来执行任务,它只会用唯一的工作线程来执行任务保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。如果这个線程异常结束会有另一个取代它,保证顺序执行单工作线程最大的特点是可保证顺序地执行各个任务,并且在任意给定的时间不会有哆个线程是活动的

创建一个定长的线程池,而且支持定时的以及周期性的任务执行支持定时及周期性任务执行。延迟3秒执行


132、 画图,讲讲shuffle的过程(☆☆☆☆☆)


133、 BlockManager怎么管理硬盘和内存的?(☆☆☆☆☆)


2.下面哪个端口不是 spark 自带服务的端口 (C )

C 无 D 运行时指定

5.哪个不是本地模式运行的个条件 ( D)

A. 可分区 B 可序列化 C 可修改 D 可持久化

7. 关于广播变量下面哪个是错误的 (D )

A 任何函数调用 B 是只读的

C 存储在各个节点 D 存储在磁盘或 HDFS

8. 關于累加器,下面哪个是错误的 (D )

A 支持加法 B 支持数值类型

C 可并行 D 不支持自定义类型

9.Spark 支持的分布式部署方式中哪个是错误的 (D )

11.下面哪个操作是窄依赖 (B )

12.下面哪个操作肯定是宽依赖 (C )

A.没区别 B.多会话

C.支持网络环境 D数据库的区别

C.存储方式不一样 D.外部数据源支持

参考资料