Android 面试题(2)-- 操作系统篇

来源:互联网 发布:域名注册机构有哪些 编辑:程序博客网 时间:2024/05/29 08:46

操作系统篇:

Android 是基于Linux的移动操作系统,一般在面试中,关于操作系统相关的问题,其实就集中在线程和进程。

1. 线程和进程的关系和区别?

(1)进程是系统进行资源分配和调度的一个独立单位,线程是CPU调度和分派的基本单位。

(2)进程和线程的关系: 
1> 一个线程 只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。 
2> 资源分配 给进程,同一进程的所有线程共享该进程的所有资源。 
3> 线程在执 行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。 
4> 线程是指 进程内的一个执行单元,也是进程内的可调度实体。

(3)线程与进程的区别: 

1> 调度:线 程作为调度和分配的基本单位,进程作为拥有资源的基本单位。 
2> 并发性: 不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行。 
3> 拥有资 源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。 
4>系统开销:在创建或撤销进程的时候,由于系统都要为之分配和回收资源,导致系统的明显大于创建或撤销线程时的开销。但进程有独立的地 址空间,进程崩溃后, 在保护模式下不会对其他的进程产生影响,而线程只是一个进程中的不同的执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的 地址空间,一个线程死 掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但是在进程切换时,耗费的资源较大,效率要差些。

2.  线程之间如何进行同步?

(1).同步方法。即有synchronized关键字修饰的方法。 
(2).同步代码块。即有synchronized关键字修饰的语句块。
(3).使用特殊域变量(volatile)实现线程同步 
a.volatile关键字为域变量的访问提供了一种免锁机制, 
b.使用volatile修饰域相当于告诉虚拟机该域可能会被其他线程更新, 
c.因此每次使用该域就要重新计算,而不是使用寄存器中的值 ,
d.volatile不会提供任何原子操作,它也不能用来修饰final类型的变量。

(4).使用重入锁实现线程同步 

(5).使用局部变量实现线程同步 

详细地址:点击打开链接


3. 线程切换如何做?(Android中UI线程与后台线程交互设计的6种方法)

(1)、handler

(2)、Activity.runOnUIThread( Runnable )

(3)、View.Post( Runnable )

(4)、View.PostDelayed( Runnabe , long )

(5)、AsyncTask

(6)、RxJava ( 自行加上的方法 )

详细地址:点击打开链接

4. Android中的进程间通信方式有哪几种?

(1)、Activity、
(2)、Content Provider、
(3)、Broadcast、
(4)、Service(AIDL)

详细地址:点击打开链接


5. 死锁如何造成的,如何避免?

产生死锁的原因主要是: 
(1) 因为系统资源不足。 
(2) 进程运行推进的顺序不合适。 
(3) 资源分配不当等。 
产生死锁的四个必要条件: 
(1)互斥条件:一个资源每次只能被一个进程使用。 
(2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 
(3)不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 
(4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。 
避免死锁: 
死锁的预防是通过破坏产生条件来阻止死锁的产生,但这种方法破坏了系统的并行性和并发性。 
死锁产生的前三个条件是死锁产生的必要条件,也就是说要产生死锁必须具备的条件,而不是存在这3个条件就一定产生死锁,那么只要在逻辑上回避了第四个条件就可以避免死锁。 
避免死锁采用的是允许前三个条件存在,但通过合理的资源分配算法来确保永远不会形成环形等待的封闭进程链,从而避免死锁。该方法支持多个进程的并行执行,为了避免死锁,系统动态的确定是否分配一个资源给请求的进程。 
预防死锁 :具体的做法是破坏产生死锁的四个必要条件之一。













0 0
原创粉丝点击