這個線程問題通常會在第一輪或電話面試階段被問到,目的是檢測你對」join」方法是否熟 悉。這個多線程問題比較簡單,可以用 join 方法實現。
你需要實現一個高效的緩存,它允 許多個用戶讀,但只允許一個用戶寫,以此來保持它的完整性,你會怎樣去實現它? lock 接口在多線程和並發編程中最大的優勢是它們為讀和寫分別提供了鎖,它能滿足你寫 像 ConcurrentHashMap 這樣的高性能數據結構和有條件的阻塞。Java 線程面試的問題越來 越會根據面試者的回答來提問。我強烈建議在你去參加多線程的面試之前認真讀一下 Locks,因為當前其大量用於構建電子交易終統的客戶端緩存和交易連接空間。
通常會在電話面試中經常被問到的 Java 線程面試問題。最大的不同是在等待時 wait 會釋放 鎖,而 sleep 一直持有鎖。Wait 通常被用於線程間交互,sleep 通常被用於暫停執行。
這是一個相對艱難的多線程面試問題,它能達到很多的目的。第一,它可以檢測侯選者是 否能實際的用 Java 線程寫程序;第二,可以檢測侯選者對並發場景的理解,並且你可以根 據這個問很多問題。如果他用 wait()和 notify()方法來實現阻塞隊列,你可以要求他用最新 的 Java 5 中的並發類來再寫一次。
與上面的問題很類似,但這個問題更經典,有些時候面試都會問下面的問題。在 Java 中怎 麼解決生產者——消費者問題,當然有很多解決方法,我已經分享了一種用阻塞隊列實現 的方法。有些時候他們甚至會問怎麼實現哲學家進餐問題。
這是我最喜歡的 Java 線程面試問題,因為即使死鎖問題在寫多線程並發程序時非常普遍, 但是很多侯選者並不能寫 deadlock free code(無死鎖代碼?),他們很掙扎。只要告訴他 們,你有 N 個資源和 N 個線程,並且你需要所有的資源來完成一個操作。為了簡單這裡的 n 可以替換為 2,越大的數據會使問題看起來更複雜。通過避免 Java 中的死鎖來得到關於 死鎖的更多信息。
非常簡單的 java 線程面試問題,接下來的問題是你需要同步一個原子操作。
在 Java 中它跟 synchronized 方法有什 麼不同? 自從 Java 5 和 Java 內存模型改變以後,基於 volatile 關鍵字的線程問題越來越流行。應該 準備好回答關於 volatile 變量怎樣在並發環境中確保可見性。
這是一道出現在多線程面試的高級階段的問題。大多數的面試官會問最近你遇到的競爭條 件,以及你是怎麼解決的。有些時間他們會寫簡單的代碼,然後讓你檢測出代碼的競爭條 件。可以參考我之前發布的關於 Java 競爭條件的文章。在我看來這是最好的 java 線程面試 問題之一,它可以確切的檢測候選者解決競爭條件的經驗,or writing code which is free of data race or anyother race condition。關於這方面最好的書是《Concurrency practices in Java》。
你將如何分析 Thread dump? 在 UNIX 中你可以使用 kill -3,然後 thread dump 將會列印日誌,在 windows 中你可以使 用」CTRL+Break」。非常簡單和專業的線程面試問題,但是如果他問你怎樣分析它,就會很 棘手。
這是另一個非常經典的 java 多線程面試問題。這也是我剛開始寫線程程序時候的困惑。現 在這個問題通常在電話面試或者是在初中級 Java 面試的第一輪被問到。這個問題的回答應 該是這樣的,當你調用 start()方法時你將創建新的線程,並且執行在 run()方法裡的代碼。 但是如果你直接調用 run()方法,它不會創建新的線程也不會執行調用線程的代碼。閱讀我 之前寫的《start 與 run 方法的區別》這篇文章來獲得更多信息。
這是個關於線程和阻塞的棘手的問題,它有很多解決方法。如果線程遇到了 IO 阻塞,我並 且不認為有一種方法可以中止線程。如果線程因為調用 wait()、sleep()、或者 join()方法而 導致的阻塞,你可以中斷線程,並且通過拋出 InterruptedException 來喚醒它。我之前寫的 《How to deal with blocking methods in java》有很多關於處理線程阻塞的信息。
這個線程問題主要用來檢測你是否熟悉 JDK5 中的並發包。這兩個的區別是 CyclicBarrier 可 以重複使用已經通過的障礙,而 CountdownLatch 不能重複使用。
另一個多線程經典面試問題,並不直接跟線程有關,但間接幫助很多。這個 java 面試問題可以變的非常棘手,如果他要求你寫一個不可變對象,或者問你為什麼 String 是不可變 的。
你是怎麼解決它的? 多線程和並發程序中常遇到的有 Memory-interface、競爭條件、死鎖、活鎖和飢餓。問題 是沒有止境的,如果你弄錯了,將很難發現和調試。這是大多數基於面試的,而不是基於 實際應用的 Java 線程問題。
在這邊分享一些一線大廠Java面試題,希望能給後續想要去面試阿里巴巴等一線網際網路大廠的小夥伴一些幫助!學習技術內容包含有:Spring,Dubbo,MyBatis, RPC, 源碼分析,高並發、高性能、分布式,性能優化,微服務 高級架構開發等等。
下面這個,私聊資料 。即可獲得。
另外還有Java核心知識點+全套架構師學習資料和視頻+一線大廠面試寶典+面試簡歷模板可以領取+阿里美團網易騰訊小米愛奇藝快手嗶哩嗶哩面試題+Spring源碼合集+Java架構實戰電子書。