亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

15個(gè)Java線(xiàn)程并發(fā)面試題和答案

  發(fā)布時(shí)間:2019-08-27 15:44:56   作者:牽著java走   我要評(píng)論
這篇文章主要介紹了15個(gè)Java線(xiàn)程并發(fā)面試題和答案,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

1. 現(xiàn)在有線(xiàn)程 T1、T2 和 T3。你如何確保 T2 線(xiàn)程在 T1 之后執(zhí)行,并且 T3 線(xiàn)程在 T2 之后執(zhí)行?
這個(gè)線(xiàn)程面試題通常在第一輪面試或電話(huà)面試時(shí)被問(wèn)到,這道多線(xiàn)程問(wèn)題為了測(cè)試面試者是否熟悉 join 方法的概念。答案也非常簡(jiǎn)單——可以用 Thread 類(lèi)的 join 方法實(shí)現(xiàn)這一效果。

2. Java 中新的 Lock 接口相對(duì)于同步代碼塊(synchronized block)有什么優(yōu)勢(shì)?如果讓你實(shí)現(xiàn)一個(gè)高性能緩存,支持并發(fā)讀取和單一寫(xiě)入,你如何保證數(shù)據(jù)完整性。
多線(xiàn)程和并發(fā)編程中使用 lock 接口的最大優(yōu)勢(shì)是它為讀和寫(xiě)提供兩個(gè)單獨(dú)的鎖,可以讓你構(gòu)建高性能數(shù)據(jù)結(jié)構(gòu),比如 ConcurrentHashMap 和條件阻塞。
這道 Java 線(xiàn)程面試題越來(lái)越多見(jiàn),而且隨后的面試題都基于面試者對(duì)這道題的回答。
我強(qiáng)烈建議在任何 Java 多線(xiàn)程面試前都要多看看有關(guān)鎖的知識(shí),因?yàn)槿缃耠娮咏灰紫到y(tǒng)的客戶(hù)端和數(shù)據(jù)交互中,鎖被頻繁使用來(lái)構(gòu)建緩存。

3. Java 中 wait 和 sleep 方法有什么區(qū)別?
我們來(lái)看看另一個(gè)經(jīng)常被問(wèn)到的線(xiàn)程面試題。這道題常出現(xiàn)在電話(huà)面試中。兩者主要的區(qū)別就是等待釋放鎖和監(jiān)視器。sleep方法在等待時(shí)不會(huì)釋放任何鎖或監(jiān)視器。wait 方法多用于線(xiàn)程間通信,而 sleep 只是在執(zhí)行時(shí)暫停??梢钥次伊硪黄嘘P(guān)Java 中 wait 和 sleep的文章。

4. 如何在 Java 中實(shí)現(xiàn)一個(gè)阻塞隊(duì)列?
這是一道相對(duì)困難的 Java 多線(xiàn)程面試題,考察點(diǎn)很多。它考察了面試者是否真正寫(xiě)過(guò) Java 多線(xiàn)程代碼,考察了面試者對(duì)并發(fā)場(chǎng)景的理解。并且可以根據(jù)面試者的代碼問(wèn)很多后續(xù)問(wèn)題,如果他用 wait() 和 notify() 方法成功實(shí)現(xiàn)了阻塞隊(duì)列,可以讓他用 Java 5 的并發(fā)類(lèi)重新實(shí)現(xiàn)一次。

5. 如何在 Java 中編寫(xiě)代碼解決生產(chǎn)者消費(fèi)者問(wèn)題?答案
和上面有關(guān)線(xiàn)程的問(wèn)題相似,這個(gè)問(wèn)題在工作中很典型,但有時(shí)面試官會(huì)問(wèn)這類(lèi)問(wèn)題,比如“在 Java 中如何解決生產(chǎn)者消費(fèi)者問(wèn)題?”其實(shí),有很多解決方式。我分享過(guò)用 Java 中 BlockingQueue 的解決方案。有時(shí)他們甚至?xí)屇憬o出哲學(xué)家進(jìn)餐問(wèn)題的解決方案。

6. 寫(xiě)一段死鎖代碼。你在 Java 中如何解決死鎖?
這是我最喜歡的 Java 多線(xiàn)程面試題,因?yàn)榧词顾梨i在多線(xiàn)程并發(fā)編程中十分常見(jiàn),許多面試者仍然抓耳撓腮,不能寫(xiě)出無(wú)死鎖的代碼。
只需要問(wèn)他們?nèi)绻?N 個(gè)資源和 N 個(gè)線(xiàn)程去執(zhí)行某個(gè)操作,然后請(qǐng)求所有資源。
這里的 N 可以是 2 作為最簡(jiǎn)單的情況,也可以是個(gè)很大的數(shù)字讓問(wèn)題變復(fù)雜。有關(guān)死鎖的更多信息可以看這篇文章Java 中如何避免死鎖。

7. 什么是原子操作?Java 中有哪些原子操作?
這是個(gè)簡(jiǎn)單的 Java 線(xiàn)程面試題。另一個(gè)緊隨其后的問(wèn)題將是:你需要同步原子操作嗎?你可以看這篇文章了解更多Java 同步。

8. Java 中 volatile 關(guān)鍵字是什么?你如何使用它?它和 Java 中的同步方法有什么區(qū)別?
自從 Java 5 中調(diào)整 volatile 關(guān)鍵字和 Java 內(nèi)存模型后,有關(guān) volatile 關(guān)鍵字的線(xiàn)程問(wèn)題越來(lái)越常見(jiàn)。掌握 volatile變量在并發(fā)環(huán)境中如何確??梢?jiàn)性、有序性和一致性非常重要。

9. 什么是競(jìng)態(tài)條件?你如何發(fā)現(xiàn)并解決競(jìng)態(tài)條件?
這個(gè) Java 多線(xiàn)程問(wèn)題一般出現(xiàn)在高級(jí)面試。多數(shù)面試官會(huì)問(wèn)你最近一次遇到的競(jìng)態(tài)條件,如何解決的,有時(shí)他們也會(huì)寫(xiě)點(diǎn)簡(jiǎn)單代碼讓你發(fā)現(xiàn)競(jìng)態(tài)條件??梢钥纯次业倪@篇文章Java 中的競(jìng)態(tài)條件。我認(rèn)為,這是最棒的 Java 線(xiàn)程面試問(wèn)題之一,而且可以測(cè)試出面試者解決競(jìng)態(tài)條件的經(jīng)驗(yàn),或是編寫(xiě)無(wú)數(shù)據(jù)競(jìng)爭(zhēng)、無(wú)其競(jìng)態(tài)條件的代碼經(jīng)驗(yàn)。

10. 在 Java 中你如何轉(zhuǎn)儲(chǔ)線(xiàn)程(thread dump)?如何分析它?
在 UNIX 中,你可以使用 kill -3 然后線(xiàn)程轉(zhuǎn)儲(chǔ)日志會(huì)打印在屏幕上,可以使用 CTRL+Break 查看。這只是一個(gè)較簡(jiǎn)單的線(xiàn)程面試題,狡猾一點(diǎn)的話(huà)他們會(huì)問(wèn)你如何分析轉(zhuǎn)儲(chǔ)日志。線(xiàn)程轉(zhuǎn)儲(chǔ)日志對(duì)于分析死鎖情況非常有用。

11. 既然 start() 方法會(huì)調(diào)用 run() 方法,為什么我們調(diào)用 start() 方法,而不直接調(diào)用 run() 方法?
這是一個(gè)基本的 Java 多線(xiàn)程面試題。最初,我剛開(kāi)始多線(xiàn)程編程時(shí)對(duì)此還有些困惑。如今我一般在 Java 中級(jí)面試的電話(huà)面試或一輪面試中遇到。

這道問(wèn)題的答案是這樣的。當(dāng)你調(diào)用 start() 方法時(shí),它會(huì)新建一個(gè)線(xiàn)程然后執(zhí)行 run() 方法中的代碼。如果直接調(diào)用 run() 方法,并不會(huì)創(chuàng)建新線(xiàn)程,方法中的代碼會(huì)在當(dāng)前調(diào)用者的線(xiàn)程中執(zhí)行??梢钥催@篇文章了解更多線(xiàn)程中 Start 和 Run 方法的區(qū)別。

Java面試:投行的15個(gè)多線(xiàn)程和并發(fā)面試題
12. Java 中你如何喚醒阻塞線(xiàn)程?
這是有關(guān)線(xiàn)程的一個(gè)很狡猾的問(wèn)題。有很多原因會(huì)導(dǎo)致阻塞,如果是 IO 阻塞,我認(rèn)為沒(méi)有方式可以中斷線(xiàn)程(如果有的話(huà)請(qǐng)告訴我)。另一方面,如果線(xiàn)程阻塞是由于調(diào)用了 wait(),sleep() 或 join() 方法,你可以中斷線(xiàn)程,通過(guò)拋出 InterruptedException 異常來(lái)喚醒該線(xiàn)程??梢钥催@篇文章了解有關(guān)處理阻塞線(xiàn)程的知識(shí)Java 中如何處理阻塞方法。

13. Java 中 CyclicBarriar 和 CountdownLatch 有什么區(qū)別?
最近的 Java 線(xiàn)程面試題多數(shù)在測(cè)試你對(duì) JDK 5 并發(fā)包的掌握程度。兩者區(qū)別之一就是 CyclicBarrier 在屏障打開(kāi)之后(所有線(xiàn)程到達(dá)屏障點(diǎn)),可以重復(fù)使用。而 CountDownLatch 不行。想了解更多可以參與課程Java 中的多線(xiàn)程和并行計(jì)算。

14. 什么是不可變類(lèi)?它對(duì)于編寫(xiě)并發(fā)應(yīng)用有何幫助?
盡管這道面試題和線(xiàn)程沒(méi)有直接關(guān)系,但間接影響也很大。如果面試官隨后讓你寫(xiě)一個(gè)不可變類(lèi),或問(wèn)你為什么 Java 中的 String 是不可變的,會(huì)讓面試題變得更加復(fù)雜。

15. 你在多線(xiàn)程環(huán)境中遇到的最多的問(wèn)題是什么?你如何解決的?
內(nèi)存干擾、競(jìng)態(tài)條件、死鎖、活鎖、線(xiàn)程饑餓是多線(xiàn)程和并發(fā)編程中比較有代表性的問(wèn)題。這類(lèi)問(wèn)題無(wú)休無(wú)止,而且難于定位和調(diào)試。

相關(guān)文章

最新評(píng)論