1)啥是Busyspin?咱們?yōu)樯兑\用它?
Busyspin是一種在不開釋CPU的基礎上等候事情的技術。它常常用于防止丟掉CPU緩存中的數(shù)據(jù)(假如線程先暫停,以后在別的CPU上運轉就會丟掉)。所以,假如你的作業(yè)要求低推遲,而且你的線程現(xiàn)在沒有任何次序,這么你就能夠經過循環(huán)檢查行列中的新消息來替代調用sleep()或wait()辦法。它唯一的優(yōu)點即是你只需等候很短的時刻,如幾微秒或幾納秒。LMAX分布式框架是一個高性能線程間通訊的庫,該庫有一個BusySpinWaitStrategy類即是根據(jù)這個概念完成的,運用busyspin循環(huán)EventProcessors等候屏障。
2)Java中怎樣獲取一份線程dump文件?
在Linux下,你能夠經過指令kill-3PID(Java進程的進程ID)來獲取Java運用的dump文件。在Windows下,你能夠按下Ctrl+Break來獲取。這么JVM就會將線程的dump文件打印到規(guī)范輸出或過錯文件中,它也許打印在控制臺或許日志文件中,具體位置依靠運用的裝備。假如你運用Tomcat。
3)Swing是線程安全的?
不是,Swing不是線程安全的。你不能經過任何線程來更新Swing組件,如JTable、JList或JPanel,事實上,它們只能經過GUI或AWT線程來更新。這即是為啥Swing供給invokeAndWait()和invokeLater()辦法來獲取別的線程的GUI更新懇求。這些辦法將更新懇求放入AWT的線程行列中,能夠一向等候,也能夠經過異步更新直接回來成果。你也能夠在參考答案中檢查和學習到更具體的內容。
4)啥是線程局部變量?
線程局部變量是局限于線程內部的變量,屬于線程自身一切,不在多個線程間同享。Java供給ThreadLocal類來支撐線程局部變量,是一種完成線程安全的辦法??墒窃谵k理環(huán)境下(如web服務器)運用線程局部變量的時分要格外當心,在這種情況下,作業(yè)線程的生命周期比任何運用變量的生命周期都要長。任何線程局部變量一旦在作業(yè)完成后沒有開釋,Java運用就存在內存泄露的危險。
5)用wait-notify寫一段代碼來解決生產者-消費者疑問?
請參考答案中的示例代碼。只需記住在同步塊中調用wait()和notify()辦法,假如堵塞,經過循環(huán)來測驗等候條件。
6)用Java寫一個線程安全的單例形式(Singleton)?
請參考答案中的示例代碼,這里面一步一步教你創(chuàng)立一個線程安全的Java單例類。當咱們說線程安全時,意思是即使初始化是在多線程環(huán)境中,依然能保證單個實例。Java中,運用枚舉作為單例類是最簡略的辦法來創(chuàng)立線程安全單例形式的辦法。
7)Java中sleep辦法和wait辦法的差異?
盡管兩者都是用來暫停當前運轉的線程,可是sleep()實際上僅僅短暫中止,由于它不會開釋鎖,而wait()意味著條件等候,這即是為啥該辦法要開釋鎖,由于只要這么,別的等候的線程才能在滿足條件時獲取到該鎖。
8)啥是不可變目標(immutableobject)?Java中怎樣創(chuàng)立一個不可變目標?
不可變目標指目標一旦被創(chuàng)立,狀況就不能再改動。任何修正都會創(chuàng)立一個新的目標,如String、Integer及其它包裝類。概況拜見答案,一步一步指導你在Java中創(chuàng)立一個不可變的類。
9)咱們能創(chuàng)立一個包括可變目標的不可變目標嗎?
是的,咱們是能夠創(chuàng)立一個包括可變目標的不可變目標的,你只需求慎重一點,不要同享可變目標的引證就能夠了,假如需求變化時,就回來原目標的一個復制。最常見的比如即是目標中包括一個日期目標的引證。
Java面試總的來說面試無非要做到兩點:
1.別人答不上的,你得知道。
2.別人答得上的,你得知道的更多!包括但不限于Java多線程,鎖,SSM源碼,并發(fā)包,各類集合框架,MySQL索引調優(yōu),事務,MVCC,Redis相關內容,JVM垃圾回收,內存模型,類加載機制。
以上就是長沙中公優(yōu)就業(yè)Java培訓機構小編介紹的“途牛高級Java面試題,看看你會多少”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務。
相關推薦
最新最全java面試題及答案(初級到高級)
史上最全的中高級JAVA工程師面試題及答案匯總
Java高級開發(fā)工程師面試題
2019史上最全java面試題題庫大全800題
哪有資深java工程師面試題