Java面試學問多,看看高級程序員面試題是什麼樣的

Java 面試跟着時刻的改動而改動。在以前的日子裏,當你知道 String 和 StringBuilder 的差異就能讓你直接進入第二輪面試,可是如今疑問變得越來越高檔,面試官問的疑問也更深入。 在以前初入職場的時分,類似於 Vector 與 Array 的差異、HashMap 與 Hashtable 的差異是最盛行的疑問,只需求記住它們,就能在面試中取得更好的時機,但這種景象已經不復存在。如今,你將會被問到許多 Java 程序員都沒有看過的範疇,如 NIO,規劃形式,老練的單元測驗,或許那些很難掌握的知識,如併發、算法、數據結構及編碼。

僞同享疑問很難被發現,由於線程也許拜訪完全不同的全局變量,內存中卻碰巧在很附近的位置上。如別的諸多的併發疑問,防止僞同享的最基本辦法是細心檢查代碼,根據緩存行來調整你的數據結構。

1)啥是 Busy spin?咱們爲啥要運用它?

Busy spin 是一種在不開釋 CPU 的基礎上等候事情的技術。它常常用於防止丟掉 CPU 緩存中的數據(假如線程先暫停,以後在別的CPU上運轉就會丟掉)。所以,假如你的作業要求低推遲,而且你的線程現在沒有任何次序,這麼你就能夠經過循環檢查行列中的新消息來替代調用 sleep() 或 wait() 辦法。它唯一的優點即是你只需等候很短的時刻,如幾微秒或幾納秒。LMAX 分佈式框架是一個高性能線程間通訊的庫,該庫有一個 BusySpinWaitStrategy 類即是根據這個概念完成的,運用 busy spin 循環 EventProcessors 等候屏障。

2)Java 中怎樣獲取一份線程 dump 文件?

在 Linux 下,你能夠經過指令 kill -3 PID (Java 進程的進程 ID)來獲取 Java 運用的 dump 文件。在 Windows 下,你能夠按下 Ctrl + Break 來獲取。這麼 JVM 就會將線程的 dump 文件打印到規範輸出或過錯文件中,它也許打印在控制檯或許日誌文件中,具體位置依靠運用的裝備。假如你運用Tomcat。

3)Swing 是線程安全的?

不是,Swing 不是線程安全的。你不能經過任何線程來更新 Swing 組件,如 JTable、JList 或 JPanel,事實上,它們只能經過 GUI 或 AWT 線程來更新。這即是爲啥 Swing 供給 invokeAndWait() 和 invokeLater() 辦法來獲取別的線程的 GUI 更新懇求。這些辦法將更新懇求放入 AWT 的線程行列中,能夠一向等候,也能夠經過異步更新直接回來成果。你也能夠在參考答案中檢查和學習到更具體的內容。

4)啥是線程局部變量?

線程局部變量是侷限於線程內部的變量,屬於線程自身一切,不在多個線程間同享。Java 供給 ThreadLocal 類來支撐線程局部變量,是一種完成線程安全的辦法。可是在辦理環境下(如 web 服務器)運用線程局部變量的時分要格外當心,在這種情況下,作業線程的生命週期比任何運用變量的生命週期都要長。任何線程局部變量一旦在作業完成後沒有開釋,Java 運用就存在內存泄露的危險。

5)用 wait-notify 寫一段代碼來解決生產者-消費者疑問?

請參考答案中的示例代碼。只需記住在同步塊中調用 wait() 和 notify()辦法,假如堵塞,經過循環來測驗等候條件。

6) 用 Java 寫一個線程安全的單例形式(Singleton)?

請參考答案中的示例代碼,這裏面一步一步教你創立一個線程安全的 Java 單例類。當咱們說線程安全時,意思是即使初始化是在多線程環境中,依然能保證單個實例。Java 中,運用枚舉作爲單例類是最簡略的辦法來創立線程安全單例形式的辦法。

7)Java 中 sleep 辦法和 wait 辦法的差異?

儘管兩者都是用來暫停當前運轉的線程,可是sleep() 實際上僅僅短暫中止,由於它不會開釋鎖,而 wait() 意味着條件等候,這即是爲啥該辦法要開釋鎖,由於只要這麼,別的等候的線程才能在滿足條件時獲取到該鎖。

8)啥是不可變目標(immutable object)?Java 中怎樣創立一個不可變目標?

不可變目標指目標一旦被創立,狀況就不能再改動。任何修正都會創立一個新的目標,如 String、Integer及其它包裝類。概況拜見答案,一步一步指導你在 Java 中創立一個不可變的類。

9)咱們能創立一個包括可變目標的不可變目標嗎?

是的,咱們是能夠創立一個包括可變目標的不可變目標的,你只需求慎重一點,不要同享可變目標的引證就能夠了,假如需求變化時,就回來原目標的一個複製。最常見的比如即是目標中包括一個日期目標的引證。

Java面試總的來說面試無非要做到兩點:

1.別人答不上的,你得知道。

2.別人答得上的,你得知道的更多!包括但不限於Java多線程,鎖,SSM源碼,併發包,各類集合框架,MySQL索引調優,事務,MVCC,Redis相關內容,JVM垃圾回收,內存模型,類加載機制。

【文章福利】

現在是跳槽招聘季,爲了解決小夥伴們的燃眉之急

小編也準備了一些JAVA程序員面試題,小夥伴可以試試。

需要的可以加小編QQ羣937053620,獲取!(內附答案詳解)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章