java开发实战经典答案百度云,含面试题+答案
1、上下文切換
上下文定義
cpu發(fā)生進(jìn)程或者線程切換時,所依賴的數(shù)據(jù)集合,比如一個函數(shù)有外部變量,函數(shù)運行時,必須獲取外部變量,這些變量值的集合就是上下文。
引發(fā)問題
對于CPU密集型任務(wù),多線程處理會發(fā)生上下文切換,會影響到執(zhí)行速度,如果時IO密集型,多線程技術(shù)優(yōu)點盡顯。
如何減少上下文切換
- 無鎖并發(fā)編程,鎖的獲取與釋放會發(fā)生上下文切換,多線程時會影響效率。無鎖并發(fā)編程就是將數(shù)據(jù)分塊,每個線程處理各自模塊。比如LongAdder中部分代碼。
- CAS算法,并發(fā)編程時通過CAS算法更新數(shù)據(jù),而不必加鎖。如Java的atomic包下的工具類。
- 使用最少線程,減少不必要的線程創(chuàng)建,自定義線程池。
- 使用協(xié)程,在單線程中維護(hù)多任務(wù)調(diào)度,處理任務(wù)間切換,Golang對于協(xié)程的使用很強(qiáng)大。
2、死鎖
死鎖定義
死鎖是進(jìn)程死鎖的簡稱,是由Dijkstra于1965年研究銀行家算法時首先提出來的。
系統(tǒng)發(fā)生死鎖現(xiàn)象不僅浪費大量的系統(tǒng)資源,甚至導(dǎo)致整個系統(tǒng)崩潰,帶來災(zāi)難性后果。
產(chǎn)生死鎖原因
- 系統(tǒng)資源不足
- 進(jìn)程推進(jìn)順序不當(dāng)
- 資源分配不合理
死鎖產(chǎn)生的必要條件
- 互斥條件:一個資源只能被一個進(jìn)程或者線程使用。
- 請求和保持條件:一個進(jìn)程或者線程,請求資源的時候發(fā)生阻塞,對已經(jīng)獲取的資源保持不放。
- 不可剝奪條件:進(jìn)程或者線程以獲得的資源,在未使用完成時,不能強(qiáng)行剝奪。
- 循環(huán)等待條件:若干進(jìn)程或者線程形成一種頭尾相接的循環(huán)等待的資源關(guān)系。
這四分條件是死鎖產(chǎn)生的必要條件,只要發(fā)生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發(fā)生死鎖。
如何避免死鎖
Lock接口提供了boolean tryLock(long time, TimeUnit unit) throws InterruptedException方法,該方法可以按照固定時長等待鎖,因此線程可以在獲取鎖超時以后,主動釋放之前已經(jīng)獲得的所有的鎖。
最后
針對最近很多人都在面試,我這邊也整理了相當(dāng)多的面試專題資料,也有其他大廠的面經(jīng)。希望可以幫助到大家。
下面的面試題答案都整理成文檔筆記。也還整理了一些面試資料&最新2021收集的一些大廠的面試真題(都整理成文檔,小部分截圖),有需要的可以戳這里免費領(lǐng)取
最新整理電子書
[外鏈圖片轉(zhuǎn)存中…(img-7iOtNfLv-1624947253361)]
最新整理電子書
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的java开发实战经典答案百度云,含面试题+答案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java开发学生管理系统,看这篇足矣了!
- 下一篇: lol有哪些利害的英雄不怎样吃设备的