部分面试题总结

1.死锁原因以及解决办法 

死锁原因和产生条件在另一篇转载的文章中有介绍: 死锁产生原因以及解决办法(转)

那么重点是主要思考一下死锁的解决办法有哪些:

这样想:死锁有4个产生的必要条件,只要打破其中一条,那么死锁就解决了

条件1:互斥条件。 指一个资源只能有一个线程占有使用,不可多个线程占用使用。

这个条件是取决于资源的属性,实际中,应该很少能通过修改资源的属性来解决死锁。独木桥就是独木桥,你总不能说改造成通天大道吧。 囧

条件2:不可抢占条件。指当一个线程占用此资源未使用完毕时,别的线程都不得占用或者说强行抢占该资源,必须由当前占有的线程主动释放,别的线程才可以使用该资源。

抢占!假如有个线程非常重要,优先级别非常高,那么是否可以根据线程的优先级别来判断是否可以抢占资源呢?

比如:一条正在道上的A车,正在按交通规则行驶,这时来了一辆救护车载着病人,需要赶快送往医院,那么A车就需要让开道路,让救护车先行。

条件3:占有且申请条件。指的是某线程已经至少占有一个资源了, 又去申请别的资源B。 而资源B已经被别的线程占用的,所以该线程就一直占有着已占有的资源不释放,一直等待资源B的释放。加若资源B也需要申请该线程所占有的其中一个线程,相当于只有一条道路只能容一辆车,A车左往右,B车从右往左,A和B车卡主了, 你不让我,我不让你。来,大家都不能过了。

总不能因为厕所里没有纸,所以就一直占的茅坑,不让别人自带纸巾的人上厕所吧。

既然申请不到资源,就应该先释放自己所占有的资源。 当然有可能一直都申请不到资源,导致该线程一直处于完成不了的状态,那么可能就需要加一些flag,一些判断来处理。

条件4:循环等待条件。指的是存在一个进程等待序列{P1,P2,...,Pn},其中P1等待P2所占有的某一资源,P2等待P3所占有的某一源,......,而Pn等待P1所占有的的某一资源,形成一个进程循环等待环。就像前面的过独木桥问题,甲等待乙占有的桥面,而乙又等待甲占有的桥面,从而彼此循环等待。

打破循环等待条件,实行资源有序分配策略。采用这种策略,即把资源事先分类编号,按号分配,使进程在申请,占用资源时不会形成环路。所有进程对资源的请求必须严格按资源序号递增的顺序提出。进程占用了小号资源,才能申请大号资源,就不会产生环路,从而预防了死锁。这种策略与前面的策略相比,资源的利用率和系统吞吐量都有很大提高,但是也存在以下缺点:

(1)限制了进程对资源的请求,同时给系统中所有资源合理编号也是件困难事,并增加了系统开销;

(2)为了遵循按编号申请的次序,暂不使用的资源也需要提前申请,从而增加了进程对资源的占用时间。

也就是安全系列的意思,将所需要的资源进行排序, 这样就不会出现循环等待的情况了.

死锁的避免 :标准点的解决回答有2个: 安全序列, 银行家算法. 

----------------------------继续了解补上----------------------------------

 

2.多线程同步——同步锁 

 

java多线程,可能会一个共享变量进行操作,例如数据库的增删改查, 例如爬虫中,会有一个待爬取队列和已爬取队列,多个爬虫线程会对这两个队列进行操作,

 

那么需要保证这两个队列在每一个每一次线程操作的时候,不出现数据混乱和错误。

 

那么就需要将这两个队列进行同步处理,就会运用到同步锁---关键字 synchronize 

 

synchronize 可以保证只有一个线程获取当前这个资源,或者对变量,类进行操作.

 

3.数据库范式

我觉得数据库范式 就是一个套规范,如何设计数据库表结构和表与表之间的关联的规范.

死记硬背说实话,真不太愿意,真正理解才是正确的,总不会让你设计表的时候, 你嘴里心里还在念念叨叨着1nf是,2nf是.. 太囧了吧.

https://www.zhihu.com/question/24696366

知乎上有很好的回答.详细看完回来记录记录.

posted @ 2017-05-18 00:48  YYfish  阅读(115)  评论(0)    收藏  举报