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,獲取!(內附答案詳解)
Java面試學問多,看看高級程序員面試題是什麽樣的