併發與鎖常問的題

2022-09-17 12:24:13 字數 1814 閱讀 5681

1.volatile關鍵字, lock

併發程式設計中:原子性問題,可見性問題,有序性問題。

volatile關鍵字能保證可見性,字能禁止指令重排序,但是不能保證原子性。可見性只能保證每次讀取的是最新的值,但是volatile沒辦法保證對變數的操作的原子性。在生成的會變語句中加入lock關鍵字和記憶體屏障。

lock 實現提供了比使用synchronized 方法和語句可獲得的更廣泛的鎖定操作,它能以更優雅的方式處理執行緒同步問題。用sychronized修飾的方法或者語句塊在**執行完之後鎖自動釋放,而用lock需要我們手動釋放鎖

2.mysql常用優化(sql優化,表結構優化等)

sql優化、表機構優化、索引優化、快取引數優化

3.j**a每改一點都需要重新編譯打包部署,有沒有更好的方法

可以使用熱載入

4.程序間通訊有哪幾種方式?

5.sychronized修飾靜態方法,鎖定類本身而不是例項,非靜態方法鎖定例項。

6. 作業系統什麼情況下會死鎖?

所謂死鎖:是指多個程序在執行過程中因爭奪資源而造成的一種僵局。產生的原因:競爭資源:當系統中多個程序使用共享資源,並且資源不足以滿足需要,會引起程序對資源的競爭而產生死鎖。程序間推進的順序非法:請求和釋放資源的順序不當,也同樣會導致產生程序死鎖

7.產生死鎖的四個條件:

1.互斥條件(程序獨佔資源)2.請求與保持(程序因請求資源而阻塞時,對已獲得的資源保持不放) 3.不剝奪條件(程序已獲得的資源,在末使用完之前,不能強行剝奪) 4.迴圈等待(若干程序之間形成一種頭尾相接的迴圈等待資源關係)

8. 如何理解分布式鎖?

由於在平時的工作中,線上伺服器是分布式多台部署的,經常會面臨解決分布式場景下資料一致性的問題,那麼就要利用分布式鎖來解決這些問題。

9. 執行緒同步與阻塞的關係?同步一定阻塞嗎?阻塞一定同步嗎?

執行緒同步與否 跟 阻塞非阻塞沒關係,同步是個過程,阻塞是執行緒的一種狀態。多個執行緒操作共享變數時可能會出現競爭。這時需要同步來防止兩個以上的執行緒同時進入臨界區內,在這個過程中後進入臨界區的執行緒將阻塞,等待先進入的執行緒走出臨界區。

10. 同步和非同步有什麼區別?

同步和非同步最大的區別就在於。乙個需要等待,乙個不需要等待。同步可以避免出現死鎖,讀髒資料的發生,一般共享某一資源的時候用,如果每個人都有修改許可權,同時修改乙個檔案,有可能使乙個人讀取另乙個人已經刪除的內容,就會出錯,同步就會按順序來修改。

11. 執行緒池

根據系統自身的環境情況,有效的限制執行執行緒的數量,使得執行效果達到最佳。執行緒主要是通過控制執行的執行緒的數量,超出數量的執行緒排隊等候,等待有任務執行完畢,再從佇列最前面取出任務執行

12. 如何呼叫 wait()方法?使用 if 塊還是迴圈?為什麼?

wait() 方法應該在迴圈呼叫,因為當執行緒獲取到 cpu 開始執行的時候,其他條件可能還沒有滿足,所以在處理前,迴圈檢測條件是否滿足會更好。

wait(),notify()和notifyall()方法是j**a.lang.object類為執行緒提供的用於實現執行緒間通訊的同步控制方法。等待或者喚醒

13. 實現執行緒的幾種方法

(1)繼承thread類,重寫run函式

(2)實現runnable介面,重寫run函式

(3)實現callable介面,重寫call函式

14. 什麼是多執行緒環境下的偽共享(false sharing)?

偽共享是多執行緒系統(每個處理器有自己的區域性快取)中乙個眾所周知的效能問題。快取系統中是以快取行(cache line)為單位儲存的。快取行是2的整數冪個連續位元組,一般為32-256個位元組。最常見的快取行大小是64個位元組。當多執行緒修改互相獨立的變數時,如果這些變數共享同乙個快取行,就會無意中影響彼此的效能,這就是偽共享。

MySQL常問鎖的面試題

鎖 lock 在多人處理同乙個資料的時候,保證每次只有乙個人可以操作。mysql提供了頁鎖 全域性鎖 行鎖 表鎖。其中innodb採用的是行鎖和表鎖,myisam只支援表鎖。是指二個或者二個以上的程序在執行時候,因為爭奪資源造成相互等待的現象,程序一直處於等待中,無法得到釋放,這種狀態就叫做死鎖,批...

併發同步與鎖

1.乙個生產者和乙個消費者。存在資源競爭情況 1 生產者和消費者同時訪問fruit store的庫存量,及同時修改庫存量時,存在資源競爭。細分這種資源競爭的情況,至少會有如下兩種原因 1 當時fruit store庫存為0時,還未成功執行this.curfruitnum 消費者發現fuilt sto...

鎖php mysql 的讀寫鎖與併發控制

1.無論何時只要有多個查詢在同一時刻修改資料,都會產生併發控制的問題 2.討論mysql在兩個層面,伺服器層和儲存引擎層,如何併發控制讀寫 3.舉了個mbox郵箱檔案的例子,說如果有多個程序同時對mbox檔案寫東西,那麼在檔案的末尾會,交叉混亂的新增,比如程序1寫了幾行,程序2也寫了幾行,互相交叉,...