Jason Koo

      Stay hungry, Stay foolish!

导航

一些面试的问答题

Posted on 2013-09-14 19:02  Jason Koo  阅读(581)  评论(0编辑  收藏  举报

1. 进程与线程的区别

     任务(task) 是最抽象的, 是一个一般性的术语, 指由软件完成的一个活动。一个任务既可以是一个进程,也可以是一个线程。简而言之,它指的是共同达到某一目的的一系列操作。例如,读取数据并将数据放入内存中。这个任务可以作为一个进程来实现,也可以作为一个线程(或作为一个中断任务)来实现。

  进程(process)常常被定义为程序的执行。可以把一个进程看成是一个独立的程序,在内存中有其完备的数据空间和代码空间。一个进程所拥有的数据和变量只属于它自己。

  线程(thread)则是某一进程中一路单独运行的程序。也就是说,线程存在于进程之中。一个进程由一个或多个线程构成,各线程共享相同的代码和全局数据,但各有其自己的堆栈。由于堆栈是每个线程一个,所以局部变量对每一线程来说是私有的。由于所有线程共享同样的代码和全局数据,它们比进程更紧密,比单独的进程间更趋向于相互作用,线程间的相互作用更容易些,因为它们本身就有某些供通信用的共享内存:进程的全局数据。

 

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。


2. 检查型异常(checked exception)和非检查型异常(unchecked exception)之间的区别

检查型异常和非检查型异常的主要区别在于其处理方式。检查型异常需要使用 try, catch和finally关键字在编译期进行处理,否则会出现编译器会报错。对于非检查型异常则不需要这样做。Java中所有继承自 java.lang.Exception类的异常都是检查型异常,所有继承自RuntimeException的异常都被称为非检查型异常。

 

3. Exception与Error的区别

都继承自java.lang.Throwable, Exception用于处理程序错误,而Error用于处理系统错误。

4. Java中的NullPointerException和ArrayIndexOutOfBoundException之间有什么相同之处?

这两个异常都是非检查型异常,都继承自RuntimeException。该问题可能会引出另一个问题,即Java和C的数组有什么不 同之处,因为C里面的数组是没有大小限制的,绝对不会抛出ArrayIndexOutOfBoundException。