更新時間:2020-02-09 11:28:24 來源:動力節點 瀏覽2462次
1)啥是Busyspin?咱們為啥要運用它?
Busyspin是一種在不開釋CPU的基礎上等候事情的技術。它常常用于防止丟掉CPU緩存中的數據(假如線程先暫停,以后在別的CPU上運轉就會丟掉)。所以,假如你的作業要求低推遲,而且你的線程現在沒有任何次序,這么你就能夠經過循環檢查行列中的新消息來替代調用sleep()或wait()辦法。它唯一的優點即是你只需等候很短的時刻,如幾微秒或幾納秒。LMAX分布式框架是一個高性能線程間通訊的庫,該庫有一個BusySpinWaitStrategy類即是根據這個概念完成的,運用busyspin循環EventProcessors等候屏障。
2)Java中怎樣獲取一份線程dump文件?
在Linux下,你能夠經過指令kill-3PID(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)啥是不可變目標(immutableobject)?Java中怎樣創立一個不可變目標?
不可變目標指目標一旦被創立,狀況就不能再改動。任何修正都會創立一個新的目標,如String、Integer及其它包裝類。概況拜見答案,一步一步指導你在Java中創立一個不可變的類。
9)咱們能創立一個包括可變目標的不可變目標嗎?
是的,咱們是能夠創立一個包括可變目標的不可變目標的,你只需求慎重一點,不要同享可變目標的引證就能夠了,假如需求變化時,就回來原目標的一個復制。最常見的比如即是目標中包括一個日期目標的引證。
Java面試總的來說面試無非要做到兩點:
1.別人答不上的,你得知道。
2.別人答得上的,你得知道的更多!包括但不限于Java多線程,鎖,SSM源碼,并發包,各類集合框架,MySQL索引調優,事務,MVCC,Redis相關內容,JVM垃圾回收,內存模型,類加載機制。
以上就是動力節點Java培訓機構小編介紹的“途牛高級Java面試題,看看你會多少”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
相關推薦
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習