能够操作内存中数据类型的是?

  1. 不管有没有出现异常,finally块中代码都会执行;
  2. finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,仍然是之前保存的值),所以函数返回值是在finally执行前确定的;
  3. finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。

中的类型,后者是C#中对这些类型的别名。

CLR:Common Language Runtime 公共语言运行时,.NET Framework 提供了一个称为公共语言运行库的运行时环境,它运行代码并提供使开发过程更轻松的服务。

CLS:Common Language Specification 通用语言规范,要和其他对象完全交互,而不管这些对象是以何种语言实现的,对象必须只向调用方公开那些它们必须与之互用的所有语言的通用功能。为此定义了公共语言规范 (CLS),它是许多应用程序所需的一套基本语言功能。

环境中运行的任何代码都是受管制的代码(managed code),.Net外部的代码也运行在windows上,这些代码称为未受管制的代码(unmanaged code)。
使用基于公共语言运行库的语言编译器开发的代码称为托管代码;托管代码具有许多优点,例如:跨语言集成.跨语言异常处理.增强的安全性.版本控制和部署支持.简化的组件交互模型.调试和分析服务等。

定义:.Net FrameWork类似于JVM(虚拟机),他是微软Web Services的引擎。我们习惯的叫做.NET框架,同时我们写的C#,框架上运行。
组成:.Net FrameWork由两部分组成,分别是公共语言运行时(CLR),统一类库集(FCL)。
公共语言运行时(CLR):包括两部分分别为,公共语言规范(CLS)及公共类型规范(CTS)。
统一类库集(FCL):涵盖了我们以后开发中要用到的基本框架类, Framework维护了一个字符串池(暂存池、常量池),用以对使用过的字符串进行缓存。当为字符串类型的变量赋值时,此值同时被放入常量池中,在以后需要创新新的字符串时,CLR会首先检查池中是否存在相同值的字符串对象,如果存在,就将变量指向池中已经存在的对象,那么旧的对象又得以重用了,这个过程称为“字符串驻留”。而常量池缓存字符串对象的原则是:直接出现在代码中的字符串都会被放入“常量池”,而动态创建的字符串对象并不会被放入。可使用类型即是CTS类型;
string 是 .NET 框架中 框架下,这个操作实在是划不来。因为系统先是把两个字符串写入内存,接着删除原来的String对象,然后创建一个String对象,并读取内存中的数据赋给该对象。这一来二去的,耗了不少时间。而使用中所有可序列化的类都被标记为_____?

中提供释放非托管资源的方式,他们的主要区别在于执行者和执行时间不同:

  • finalize无需担心因为没有调用finalize而使非托管资源得不到释放,而dispose必须手动调用。
  • finalize不能保证立即释放非托管资源,Finalizer被执行的时间是在对象不再被引用后的某个不确定的时间;而dispose一调用便释放非托管资源。
  • 只有class类型才能重写finalize,而结构不能;类和结构都能实现IDispose。

另外一个重点区别就是终结器会导致对象复活一次,也就说会被GC回收两次才最终完成回收工作,这也是有些人不建议开发人员使用终结器的主要原因。

中的托管堆中是否可能出现内存泄露的现象?

  • 不正确的使用静态字段,导致大量数据无法被GC释放;
  • 没有正确执行Dispose(),非托管资源没有得到释放;
  • 不正确的使用终结器Finalize(),导致无法正常释放资源;
  • 其他不正确的引用,导致大量托管对象无法被GC释放;

中会存在内存泄漏吗,请简单描述。
所谓内存泄露就是指一个不再被程序使用的对象或变量一直被占据在内存中。.Net中有垃圾回收机制,它可以保证一对象不再被引用的时候,即对象变成了孤儿的时候,对象将自动被垃圾回收器从内存中清除掉。虽然.Net可以回收无用的对象,但是.Net仍然存在由于使用不当导致的内存泄露问题。.Net中的内存泄露的情况:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是.Net中内存泄露的发生场景,通俗地说,就是程序员可能创建了一个对象,以后一直不再使用这个对象,这个对象却一直被引用,即这个对象无用但是却无法被垃圾回收器回收的,这就是.Net中可能出现内存泄露的情况,例如,缓存系统,我们加载了一个对象放在缓存中(例如放在一个全局Dictionary对象中),然后一直不再使用它,这个对象一直被缓存引用,但却不再被使用。扩展:使用弱引用那么即使被引用也可以被回收。

GC是.Net的垃圾收集器,可以进行内存资源的回收,程序员无需关心资源的回收,当一个对象没有任何引用的时候就可以被回收了。一个对象可以被回收并不意味着一定会被立即回收,GC会选择时机进行回收。可以调用中就有很多的异步编程支持,比如很多地方都有BeginXXX、EndXXX的方法,就是一种异步编程支持,她内部有些是利用多线程,有些是利用硬件的特性来实现的异步编程。

8.4 线程池的优点有哪些?又有哪些不足?
优点:减小线程创建和销毁的开销,可以复用线程;也从而减少了线程上下文切换的性能损失;在GC回收时,较少的线程更有利于GC的回收效率。
缺点:线程池无法对一个线程有更多的精确的控制,如了解其运行状态等;不能设置线程的优先级;加入到线程池的任务(方法)不能有返回值;对于需要长期运行的任务就不适合线程池。

8.5 Mutex和lock有何不同?一般用哪一个作为锁使用更好?
Mutex是一个基于内核模式的互斥锁,支持锁的递归调用,而Lock是一个混合锁,一般建议使用Lock更好,因为lock的性能更好。

}

1、简述操作系统的定义。 
    操作系统是计算机系统的一种系统软件,它统一管理计算机系统的资源和控制程序的执行。 
2、在多道程序设计技术的系统中,操作系统怎样才会占领中央处理器? 
    只有当中断装置发现有事件发生时,它才会中断当前占用中央处理器的程序执行,让操作系统的处理服务程序占用中央处理器并执行之。 
3、简述“删除文件”操作的系统处理过程。 
    用户用本操作向系统提出删除一个文件的要求,系统执行时把指定文件的名字从目录和索引表中除去,并收回它所占用的存储区域,但删除一个文件前应先关闭该文件。 
4、对相关临界区的管理有哪些要求? 
    为了使并发进程能正确地执行,对若干进程共享某一变量(资源)的相关临界区应满足以下三个要求: 
① 一次最多让一个进程在临界区中执行,当有进程在临界区中时,其他想进入临界区执行的进程必须等待; 
② 任何一个进入临界区执行的进程必须在有限的时间内退出临界区,即任何一个进程都不应该无限逗留在自己的临界区中; 
③ 不能强迫一个进程无限地等待进入它的临界区,即有进程退出临界区时应让下一个等待进入临界区的进程进入它的临界区。 
5、简述解决死锁问题的三种方法。 
① 死锁的防止。系统按预定的策略为进程分配资源,这些分配策略能使死锁的四个必要条件之一不成立,从而使系统不产生死锁。 
② 死锁的避免。系统动态地测试资源分配情况,仅当能确保系统安全时才给进程分配资源。 
③ 死锁的检测。对资源的申请和分配不加限制,只要有剩余的资源就呆把资源分配给申请者,操作系统要定时判断系统是否出现了死锁,当有死锁发生时设法解除死锁。 
6、从操作系统提供的服务出发,操作系统可分哪几类? 
    批处理操作系统、分时操作系统、实时操作系统、网络操作系统、分布式操作系统。 
7、简述计算机系统的中断机制及其作用。 
    中断机制包括硬件的中断装置和操作系统的中断处理服务程序。 
    中断装置由一些特定的寄存器和控制线路组成,中央处理器和外围设备等识别到的事件保存在特定的寄存器中,中央处理器每执行完一条指令,均由中断装置判别是否有事件发生。 
    若无事件发生,CPU继续执行;若有事件发生,则中断装置中断原占有CPU的程序的执行,让操作系统的处理事件服务程序占用CPU,对出现的事件进行处理,事件处理完后,再让原来的程序继续占用CPU执行。 
8、选择进程调度算法的准则是什么? 
    由于各种调度算法都有自己的特性,因此,很难评价哪种算法是最好的。一般说来,选择算法时可以考虑如下一些原则: 
① 处理器利用率; 
在选择调度算法前,应考虑好采用的准则,当确定准则后,通过对各种算法的评估,从中选择出最合适的算法。 
9、独占设备采用哪种分配方式? 
即在一个作业执行前,将作业要使用的这类设备分配给作业,在作业执行期间均归该作业占用,直到作业执行结束才归还。 
10、产生死锁的原因是什么? 
① 系统资源不足; 
② 进程推进顺序不合适。 
在早期的系统中,由于系统规模较小,结构简单,以及资源分配大多采用静态分配法,使得操作系统死锁问题的严重性未能充分暴露出来。但今天由于多道程序系统,以至于数据系统的出现,系统中的共享性和并行性的增加,软件系统变得日益庞大和复杂等原因,使得系统出现死锁现象的可能性大大增加。 
11、何谓批处理操作系统? 
    用户准备好要执行的程序、数据和控制作业执行的说明书,由操作员输入到计算机系统中等待处理。操作系统选择作业并按作业说明书的要求自动控制作业的执行。采用这种批量化处理作业的操作系统称为批处理操作系统。 
12、对特权指令的使用有什么限制? 
    只允许操作系统使用特权指令,用户程序不能使用特权指令。 
13、影响缺页中断率有哪几个主要因素? 
① 分配给作业的主存块数多则缺页率低,反之缺页中断率就高。 
② 页面大,缺页中断率低;页面小缺页中断率高。 
③ 程序编制方法。以数组运算为例,如果每一行元素存放在一页中,则按行处理各元素缺页中断率低;反之,按列处理各元素,则缺页中断率高。 
④ 页面调度算法对缺页中断率影响很大,但不可能找到一种最佳算法。 
14、磁盘移臂调度的目的是什么?常用移臂调度算法有哪些? 
    磁盘移臂调度的目的是尽可能地减少输入输出操作中的寻找时间。 
① 先来先服务算法 
② 最短寻找时间优先算法 
④ 单向扫描算法。 
15、常用的作业调度算法有哪些? 
① 先来先服务算法 
② 计算时间短的作业优先算法 
③ 响应比最高者优先算法 
④ 优先数调度算法 
16、计算机系统的资源包括哪些? 
    硬件资源主要有中央处理器、主存储器、辅助存储器和各种输入输出设备。 
    软件资源有编译程序、编辑程序等各种程序以及有关数据。 
17、CPU在管态和目态下工作有何不同? 
    当中央处理器处于管态时,可以执行包括特权指令在内的一切面器指令,而在目态下工作时不允许执行特权指令。 
18、何为页表和快表?它们各起什么作用? 
    作用:页式存储管理在用动态重定位方式装入作业时,要利用页表做地址转换工作。 
    快表就是存放在高速缓冲存储器的部分页表。它起页表相同的作用。 
    由于采用页表做地址转换,读写内存数据时CPU要访问两次主存。有了快表,有时只要访问一次高速缓冲存储器,一次主存,这样可加速查找并提高指令执行速度。 
19、作业在系统中有哪几种状态? 
    一个作业进入系统到运行结束,一般要经历进入、后备、运行和完成四个阶段,相应地,作业亦有进入、后备、运行和完成四种状态。 
① 进入状态:作业的信息从输入设备上预输入到输入井,此时称为作业处于进入状态。 
② 后备状态:当作业的全部信息都已输入,且由操作系统将其存放在输入井中,此时称作业处于后备状态。系统将所有处于后备状态的作业组成后备作业队列,等待作业调度程序的调度。 
③ 运行状态:一个后备作业被作业调度程序选中,分配了必要的资源,调入内存运行,称作业处于运行状态。 
④ 完成状态:当作业正常运行完毕或因发生错误非正常终止时,作业进入这完成状态。 
20、用fork创建新进程,它要做哪些工作? 
① 在进程表proc[ ]中为子进程找一个空闲的表项,用来存放子进程的proc结构; 
② 为子进程分配一个唯一的标识号; 
③ 把父进程中的字段复制到子进程的proc中,并把p – pid置为分配到的进程标识号,把p-pid置为父进程的标识号,把p-stat置为创建状态; 
④ 按父进程中p-size所示的长度为子进程申请分配内存。若有足够的内存,则把父进程的user结构、栈和用户数据区全部复制到子进程的空间中;若无足够的内存,则在磁盘对换区中分配存储空间,然后复制到对换区中,置于进程状态为就绪状态。 
21、为什么说批处理多道系统能极大地提高计算机系统的工作效率? 
① 多道作业并行工作,减少了处理器的空闲时间。 
② 作业调度可以合理选择装入主存储器中的作业,充分利用计算机系统的资源。
③ 作业执行过程中不再访问低速设备,而直接访问高速的磁盘设备,缩短执行时间。 
④ 作业成批输入,减少了从操作到作业的交接时间。 
22、操作系统为用户提供哪些接口? 
23、什么是线程?多线程技术具有哪些优越性? 
    线程是进程中可独立执行的子任务,一个进程可以有一个或多个线程,每个线程都有一个惟一的标识符。线程与进程有许多相似之处,往往把线程又称为“轻型进程”,线程与进程的根本区别是把进程作为资源分配单位,而线程是调度和执行单位。 
① 创建速度快、系统开销小:创建线程不需要另行分配资源; 
② 通信简洁、信息传送速度快:线程间的通信在统一地址空间进程,不需要额外的通信机制; 
③ 并行性高:线程能独立执行,能充分利用和发挥处理器与外围设备并行工作的能力。 
24、UNIX系统中的优先权和优先数有什么关系?如何确定进程的优先权和优先数? 
    UNIX中每个进程都有一个优先数,就绪进程能否占用处理器的优先权取决于进程的优先数,优先数越小则优先权越高。 
    UNIX以动态方式确定优先权,如核心的进程优先权高于进入用户态的进程;降低用完一个时间片的进程的优先权;对进入睡眠的进程,其等待事件越急优先数越高;降低使用处理器时间较长的进程的优先权。 
    UNIX中确定进程优先数的方法有两种:设置方法和计算方法。前者对要进入睡眠状态的进程设置优先数,若等待的事件急迫,则设置较小的优先数;后者用户进程正在或即将转入用户状态运行时确定优先数。 
25、主存空间信息保护有哪些措施? 
① 程序执行时访问属于自己主存区域的信息,允许它既可读,又可写; 
② 对共享区域中的信息只可读,不可修改; 
③ 对非共享区域或非自己的主存区域中的信息既不可读,也不可写。 
26、共享设备允许多个作业同时使用,这里的“同时使用”的含义是什么? 
    “同时使用”的含义是多个作业可以交替地启动共享设备,在某一时刻仍只有一个作业占有。 
27、简述“打开文件”操作的系统处理过程。 
    用户要使用一个已经存放在存储介质上的文件前,必须先提出“打开文件”要求。这时用户也必须向系统提供参数:用户名、文件名、存取方式、存储设备类型、口令等。系统在接到用户的“打开文件”要求后,找出该用户的文件目录,当文件目录不在主存储器中时还必须把它读到主存储器中;然后检索文件目录,指出与用户要求相符合的目录项,取出文件存放的物理地址。 
    对索引文件还必须把该文件的索引表存放在主存储器中,以便后继的读写操作能快速进行。 
28、什么是“前台”作业、“后台”作业?为什么对“前台”作业要及时响应? 
批处理操作系统实现自动控制无需人为干预,分时操作系统实现了人机交互对话,这两种操作系统具有各自的优点。为了充分发挥批处理系统和分时系统的优点,在一个计算机系统上配置的操作系统往往既具有批处理能力,又有提供分时交互的能力。这样,用户可以先在分时系统的控制下,以交互式输入、调试和修改自己的程序;然后,可以把调试好的程序转交给批处理系统自动控制其执行而产生结果。这些由分时系统控制的作业称为“前台”作业,而那些由批处理系统控制的作业称为“后台”作业。 
    在这样的系统中,对前台作业应该及时响应,使用户满意;对后台作业可以按一定的原则进行组合,以提高系统的效率。 
29、存储型设备和输入输出型设备的输入输出操作的信息传输单位有何不同? 
    存储型设备输入输出操作的信息传输单位是“块”,而输入输出型设备输入输出操作的信息传输单位是“字符”。 
30、简述信号量S的物理含义。 
    S=0时,表示无资源可供使用;或表示不允许进程再进入临界区; 
    S<0时,-S表示等待使用资源的进程个数;或表示等待进入临界区的进程个数; 
    当S>0时,调用P(S)的进程不会等待;调用V(S)后使可用资源数加1或使可用资源的进程数加1; 
    当S<0时,调用P(S)的进程必须等待;调用V(S)后将释放一个等待使用资源者或释放一个等待进入临界区者。 
31、简述“关闭文件”操作的系统处理过程。 
    执行“关闭”操作时先要检查读到主存中的文件目录或索引表是否被修改过,若被修改过,则应把修改过的文件目录或索引表重新保存好。 
用户提出“关闭”要求时,必须说明关闭哪个文件。 
32、什么是计算机系统?它由哪几部分组成? 
    计算机系统是按用户的要求接收和存储信息,自动进行数据处理并输出结果信息的系统。 
    计算机系统由硬件系统和软件系统组成。硬件系统是计算机系统赖以工作的实体,软件系统保证计算机系统按用户指定的要求协调地工作。 
33、计算机系统怎样实现存储保护? 
    中央处理器在目态下执行系统中,对每个访问主存的地址都进行核对,若能满足:基址寄存器值≤访问地址≤基址寄存器值+限长寄存值,则允许访问,否则不允许访问。并且不允许用户程序随意修改这两个寄存器的值。这就实现了存储保护。 
34、给出系统总体上的中断处理过程。 
    CPU每执行完一条指令就去扫描中断寄存器,检查是否有中断发生,若没有中断就继续执行下条指令;若有中断发生就转去执行相应的中断处理程序。中断处理过程可粗略的分为以下四个过程: 
① 保护当前正在运行程序的现场; 
② 分析是何种中断,以便转去执行相应的中断处理程序; 
③ 执行相应的中断处理程序; 
④ 恢复被中断程序的现场。 
35、死锁发生的必要条件有哪些? 
    发生死锁的必要条件有四点:互斥条件、不可抢占条件、部分分配条件和循环等待条件。 
① 互斥条件:系统中存在一个资源一次只能被一个进程所使用; 
② 非抢占条件:系统中存在一个资源仅能被占有它的进程所释放,而不能被别的进程强行抢占。 
③ 占有并等待条件:系统中存在一个进程已占有了分给它的资源,但仍然等待其他资源。 
④ 循环等待条件:在系统中存在一个由若干进程形成的环形请求链,其中的每一个进程均占有若干种资源中的某一种,同时每个进程还要求(链上)下一个进程所占有的资源。 
36、用户程序中通常用什么方式指定要使用的设备?为什么? 
    用户程序中通常用“设备类、相对号”请求要使用的设备,即不具体指定要哪一台设备,而是提出要申请哪类设备多少台。 
    否则若用绝对号来指定设备,如果这台设备已被占用或有故障时,该作业就无法装入主存中。 
37、进程调度中“可抢占”和“非抢占”两种方式,哪一种系统的开销更大?为什么?
    可抢占式调度是严格保证任何时刻,让具有最高优先数(权)的进程占有处理机运行,因此增加了处理机调度的时机,引起为退出处理机的进程保留现场,为占有处理机的进程恢复现场等时间(和空间)开销增大。 
38、一个含五个逻辑记录的文件,系统把它以链接结构的形式组织在磁盘上,每个记录占用一个磁盘块,现要求在第一记录和第二记录之间插入一个新记录,简述它的操作过程。 
39、在SPOOL系统中设计了一张“缓输出表”,请问哪些程序执行时要访问缓输出表,简单说明之。 
40、试比较进程调度与作业调度的不同点。 
① 作业调度是宏观调度,它决定了哪一个作业能进入主存。进程调度是微观调度,它决定各作业中的哪一个进程占有中央处理器。 
② 作业调度是选符合条件的收容态作业装入主存。进程调度是从就绪态进程中选一个占用处理器。 
41、试说明资源的静态分配策略能防止死锁的原因。 
    资源静态分配策略要求每个过程在开始执行前申请所需的全部资源,仅在系统为之分配了所需的全部资源后,该进程才开始执行。 
    这样,进程在执行过程中不再申请资源,从而破坏了死锁的四个必要条件之一“占有并等待条件”,从而防止死锁的发生。 
42、简述操作系统提供的服务功能。 
43、简述中断装置的主要职能。 
① 检查是否有中断事件发生; 
② 若有中断发生,保护好被中断进程的断点及现场信息,以便进程在适当时候能恢复执行; 
③ 启动操作系统的中断处理程序。 
44、实现虚拟设备的硬件条件是什么?操作系统应设计哪些功能程序? 
    操作系统应设计好“预输入”程序,“井管理”程序,“缓输出”程序。 
45、一个具有分时兼批处理功能的操作系统应怎样调度和管理作业? 
① 优先接纳终端作业,仅当终端作业数小于系统可以允许同时工作的作业数时,可以调度批处理作业; 
② 允许终端作业的批处理作业混合同时执行; 
③ 把终端作业的就绪进程排成一个就绪队列,把批处理作业的就绪进程排入另外的就绪队列中; 
④ 有终端作业进程就绪时,优先让其按“时间片轮转”法先运行。没有终端作业时再按确定算法选批处理作业就绪进程运行。 
46、简述死锁的防止与死锁的避免的区别。 
    死锁的防止是系统预先确定一些资源分配策略,进程按规定申请资源,系统按预先规定的策略进行分配从而防止死锁的发生。 
    而死锁的避免是当进程提出资源申请时系统测试资源分配仅当能确保系统安全时才把资源分配给进程,使系统一直处于安全状态之中,从而避免死锁。

 1、什么是进程(Process)和线程(Thread)?有何区别?

  进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行。

  进程与应用程序的区别在于应用程序作为一个静态文件存储在计算机系统的硬盘等存储空间中,而进程则是处于动态条件下由维护的系统资源管理实体。

  2、下的内存是如何管理的?

  Windows提供了3种方法来进行内存管理:虚拟内存,最适合用来管理大型对象或者结构数组;内存映射文件,最适合用来管理大型数据流(通常来自文件)以及在单个计算机上运行多个进程之间共享数据;内存堆栈,最适合用来管理大量的小对象。

  Windows操纵内存可以分两个层面:物理内存和虚拟内存。

  其中物理内存由系统管理,不允许应用程序直接访问,应用程序可见的只有一个2G地址空间,而内存分配是通过堆进行的。对于每个进程都有自己的默认堆,当一个堆创建后,就通过虚拟内存操作保留了相应大小的地址块(不占有实际的内存,系统消耗很小)。当在堆上分配一块内存时,系统在堆的地址表里找到一个空闲块(如果找不到,且堆创建属性是可扩充的,则扩充堆大小),为这个空闲块所包含的所有内存页提交物理对象(在物理内存上或硬盘的交换文件上),这时就可以访问这部分地址。提交时,系统将对所有进程的内存统一调配,如果物理内存不够,系统试图把一部分进程暂时不访问的页放入交换文件,以腾出部分物理内存。释放内存时,只在堆中将所在的页解除提交(相应的物理对象被解除),继续保留地址空间。

  如果要知道某个地址是否被占用/可不可以访问,只要查询此地址的虚拟内存状态即可。如果是提交,则可以访问。如果仅仅保留,或没保留,则产生一个软件异常。此外,有些内存页可以设置各种属性。如果是只读,向内存写也会产生软件异常。

  3、Windows消息调度机制是?

  A)指令队列;B)指令堆栈;C)消息队列;D)消息堆栈

  处理消息队列的顺序。首先Windows绝对不是按队列先进先出的次序来处理的,而是有一定优先级的。优先级通过消息队列的状态标志来实现的。首先,最高优先级的是别的线程发过来的消息(通过sendmessage);其次,处理登记消息队列消息;再次处理QS_QUIT标志,处理虚拟输入队列,处理wm_paint;最后是wm_timer。

  4、描述实时系统的基本特性

  在特定时间内完成特定的任务,实时性与可靠性。

  所谓“实时操作系统”,实际上是指操作系统时,其各种资源可以根据需要随时进行动态分配。由于各种资源可以进行动态分配,因此,其处理事务的能力较强、速度较快。

  5、中断和轮询的特点

  对I/O设备的程序轮询的方式,是早期的计算机系统对I/O设备的一种管理方式。它定时对各种设备轮流询问一遍有无处理要求。轮流询问之后,有要求的,则加以处理。在处理I/O设备的要求之后,处理机返回继续工作。尽管轮询需要时间,但轮询要比I/O设备的速度要快得多,所以一般不会发生不能及时处理的问题。当然,再快的处理机,能处理的输入输出设备的数量也是有一定限度的。而且,程序轮询毕竟占据了CPU相当一部分处理时间,因此,程序轮询是一种效率较低的方式,在现代计算机系统中已很少应用。

  程序中断通常简称中断,是指CPU在正常运行程序的过程中,由于预先安排或发生了各种随机的内部或外部事件,使CPU中断正在运行的程序,而转到为响应的服务程序去处理。

  轮询——效率低,等待时间很长,CPU利用率不高。

 6、什么是临界区?如何解决冲突?

  每个进程中访问临界资源的那段程序称为临界区,每次只准许一个进程进入临界区,进入后不允许其他进程进入。

  (1)如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入;

  (2)任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待;

  (3)进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区;

  (4)如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。

  7、说说分段和分页

  页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率;或者说,分页仅仅是由于系统管理的需要,而不是用户的需要。

  段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好的满足用户的需要。

  页的大小固定且由系统确定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而一个系统只能有一种大小的页面。段的长度却不固定,决定于用户所编写的程序,通常由编辑程序在对源程序进行编辑时,根据信息的性质来划分。

  分页的作业地址空间是一维的,即单一的线性空间,程序员只须利用一个记忆符,即可表示一地址。分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。

  8、说出你所知道的保持进程同步的方法?

  进程间同步的主要方法有原子操作、信号量机制、自旋锁、管程、会合、分布式系统等。

  9、Linux中常用到的命令

}

下列表述错误的是?()

  • int是基本类型,直接存数值,Integer是对象,用一个引用指向这个对象。
  • 在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过
  • 封装的主要作用在于对外隐藏内部实现细节,可以增强程序的安全性
  • final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性。

final不能修饰接口


下面这三条语句输出结果:

在java中,“+” 和 “+=” 是经过重载的运算符,而java不允许程序员进行运算符的重载。

如果 “+” 之前是String,那么此时,“+” 的作用就是连接两个字符串;若此时 “+” 后面是基本数据类型的话,可以直接进行连接,若是引用数据类型的话,则会调用该对象的toString()方法。


要使某个类能被同一个包中的其他类访问,但不能被这个包以外的类访问,可以( )

  • 让该类不使用任何关键字

default和protected的区别是:前者只要是外部包,就不允许访问;后者只要是子类就允许访问,即使子类位于外部包。
总结:default拒绝一切包外访问;protected接受包外的子类访问


以下描述错误的一项是( )?

  • 程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行 到了第几行,是线程隔离的
  • 原则上讲,所有的对象都是在堆区上分配内存,是线程之间共享的
  • 方法区用于存储JVM加载的类信息、常量、静态变量,即使编译器编译后的代码等数据,是线程隔离的
  • Java方法执行内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的

方法区和堆内存是线程共享的;程序计数器、虚拟机栈是线程隔离的


假设如下代码中,若t1线程在t2线程启动之前已经完成启动。代码的输出是()

new URL()时必须捕获检查异常,但这个异常是由于字符串格式和URL不符导致的,与网址是否存在无关。
URL的toString方法返回字符串,无论网址是否存在


从内存实现或者反射的角度来看,关于继承的说法正确的是()。 注:此处的继承不代表能调用

  • 子类将继承父类的所有的数据域和方法
  • 子类将继承父类的其可见的数据域和方法
  • 子类只继承父类public方法和数据域
  • 子类只继承父类的方法,而不继承数据域

在一个子类被创建的时候,首先会在内存中创建一个父类对象,然后在父类对象外部放上子类独有的属性,两者合起来形成一个子类的对象。
所以所谓的继承使子类拥有父类所有的属性和方法其实可以这样理解,子类对象确实拥有父类对象中所有的属性和方法,但是父类对象中的私有属性和方法,子类是无法访问到的,只是拥有,但不能使用


jdk1.8版本之前的前提下,接口和抽象类描述正确的有( )

  • 接口中的方法可以有方法体

下面的类哪些可以处理Unicode字符?

字符流是字节流根据字节流所要求的编码集解析获得的,可以理解为字符流=字节流+编码集;后缀是Stream的都是字节流,其他的都是字符流。


下面选项中,哪些是interface中合法方法定义?()



  • final类的方法肯定不能被同一个包的类访问
  • final类的方法能否被同一个包的类访问不是由final决定
  • final对象本身的引用和值都不能改变

final变量:如果是基本数据类型,则其数值一旦初始化后就不能被改变;
如果是引用类型的变量,则对其初始化后,便不能再指向另一个对象,但是其里面的值是可以改变的。



以下Java程序运行的结果是:

java中引用类型的实参向形参的传递,只是传递的引用,而不是传递的对象本身。


在各自最优条件下,对N个数进行排序,哪个算法复杂度最低的是? ()



以下哪些对长度为50的字符串数组声明是正确的

声明一个数组时,不能直接限定数组长度,只有在创建实例化对象时,才能对给定数组长度


以下哪个类包含方法flush()?()

  • A 和B 选项都不包含

一般在读写流(stream)的时候,数据是先被读到了内存中,再把数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,因为还有一部分有可能会留在内存这个缓冲区中。
这时候如果你调用了close()方法关闭了读写流,那么这部分数据就会丢失,所以应该在关闭读写流之前先flush()


静态内部类不可以直接访问外围类的非静态数据,而非静态内部类可以直接访问外围类的数据,包括私有数据。( )


一个Java源程序文件中定义几个类和接口,则编译该文件后生成几个以.class为后缀的字节码文件。



Java.Thread的方法resume()负责重新开始被以下哪个方法中断的线程的执行()。

suspend() 和 resume() 方法:两个方法配套使用,suspend()使得线程进入阻塞状态,并且不会自动恢复,必须其对应的 resume() 被调用,才能使得线程重新进入可执行状态


下面关于面向对象的一些理解哪些是错误的( )

  • 面向对象的最重要的特性是支持继承、封装和多态
  • 系统设计应该遵循开闭原则,系统应该稳定不不可修改,但应支持通过继承、组合等方式进行扩展
  • 函数式的语言必然是面向对象的语言
  • 面向对象设计时,每个类的职责应该单一,不要再一个类中引入过多的接口
  • 过程式语言和面向对象的语言各有其优势,过程式语言更加灵活,面向对象语言更加强调抽象和封装
  • Java和C++都是静态类型的面向对象编程语言

  • Collection是java.util下的类,它包含有各种有关集合操作的静态方法
  • Collections是java.util下的类,它包含有各种有关集合操作的静态方法

下面的代码运行后,输出结果是什么?

  • 静态语句块中x为局部变量,不影响静态变量x的值——即x=5没有用
  • x和y为静态变量,默认初始值为0
  • java中自增操作非原子性

instanceof运算符能够用来判断一个对象是否为:

  • 一个实现指定接口的类的实例

一个对象是不是一个类的实例,是不是一个类的子类,是不是一个接口的实现类


下面代码运行结果是()

在运行sout这一行时:

  • 但在返回前,先将43存储在栈内,然后执行finally内的代码块——输出“finally语句块”;
  • 然后才返回43,输出“和是:43”

同理:try代码块中会返回1,在执行finally代码块前,将a=1存在临时栈中;finally中虽然a又赋值为2,但并没有改变临时栈中的值。所以最后返回的仍是栈中的“a=1”


以下java程序代码,执行后的结果是()

1、使用了匿名内部类,并重写了Object中的重写了equals()方法
2、o对象调用了equals方法,无论如何都是返回true



如果子类要调用父类的构造函数,则通过super()调用来实现。

  • 子类的每一个构造方法都必须显式或隐式调用父类的一个构造方法
  • 如果不显式调用, 则系统隐式调用super()
  • 调用父类构造方法(父类没有,系统提供)、被重写的方法是需要super关键字;其他不需要

抽象类方法的访问权限默认都是public。( )

  • JDK 1.8时,抽象类的方法默认访问权限变为default

下列Java代码中的变量a、b、c分别在内存的____存储区存放。

  • 堆区:只存放类对象,线程共享
  • 栈区:存放方法局部变量,基本类型变量区、执行环境上下文、操作指令区,线程不共享
  • 方法区:又叫静态存储区,存放class文件和静态数据,线程共享


以下类型为Final类型的为()

  • string的字符数组是final修饰的,所以字符数组不可以修改
  • stringbuffer的字符数组没有final修饰,所以字符数组可以修改
  • string与stringbuffer都是final修饰,只是限制他们所存储的引用地址不可修改

有如下一段代码,请选择其运行结果()

hotspot中 编译时"tao"+“bao"将直接变成"taobao”,b+c则不会优化,因为不知道在之前的步骤中bc会不会发生改变,而针对b+c则是用语法糖,新建一个StringBuilder来处理


  • 编译能通过,但是没有输出结果

当一个实体类继承于一个抽象类,必须实现抽象类的抽象方法,抽象类本身没有错误,但是cat类编译通不过


下面程序的运行结果是:( )**

t.run是调用的Thead类中的run()方法,t.start才是执行线程,所以这题就是执行普通run()方法,先输出pong,在输出ping

}

我要回帖

更多关于 数据库的数据模型一般分为 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信