java基础面试题

面试题

1.     线程和进程之间的区别?

简而言之,一个程序至少有一个进程,一个进程至少有一个线程.

线程的划分尺度小于进程,使得多线程程序的并发性高。

另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能   够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。

例子1:

例子2:


1.       导致死锁的原因?

死锁是指多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程都将永远不能再向前推进。原因有如下三个:

(1)因为系统资源不足。

(2)进程运行推进的顺序不合适。

(3)资源分配不当等。

 

java 死锁产生的四个必要条件:

1、互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用

2、不可抢占,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放。

3、请求和保持,即当资源请求者在请求其他的资源的同时保持对原有资源的占有。

4、循环等待,即存在一个等待队列:P1占有P2的资源,P2占有P3的资源,P3占有P1的资源。这样就形成了一个等待环路。

 

 

2.       解决死锁的方法?

1. 撤消陷于死锁的全部进程。

2.逐个撤消陷于死锁的进程,直到死锁不存在。

3.从陷于死锁的进程中逐个强迫放弃所占用的资源,直到死锁消失。

4.从另外一些进程那里强行剥夺足够数量的资源分配给死锁的进程,以解除死锁状态。

 

3.       什么是同步?什么是异步?

 

答:同步:发送一个请求,等待返回,然后再发送下一个请求 。

 

异步:发送一个请求,不等待返回,随时可以再发送下一个请求 。

 

同步可以避免出现死锁,读脏数据的发生,一般共享某一资源的时候用,如果每个人都有修改权限,同时修改一个文件,有可能使一个人读取另一个人已经删除的内容,就会出错,同步就会按顺序来修改。

异步则是可以提高效率了,现在cpu都是双核,四核,异步处理的话可以同时做多项工作,当然必须保证是可以并发处理的。

这些都是对的。

 

同步和异步最大的区别就在于。一个需要等待,一个不需要等待。

比如广播,就是一个异步例子。发起者不关心接收者的状态。不需要等待接收者的返回信息。电话,就是一个同步例子。发起者需要等待接收者,接通电话后,通信才开始。需要等待接收者的返回信息。

下面这个例子:


脏数据:脏数据在临时更新(脏读)中产生,事物A更新了某个数据项X,但是由于某种原因,事物A出现了问题,于是要把A回滚,但是在回滚之前,另一事物B读取了数据项X的值(A更新后),A回滚了事物,数据项恢复了原值,事物B读取的就是数据项X的就是一个"临时"的值,就是脏数据

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章