黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 3年Java程序開發(fā)面試題總結

3年Java程序開發(fā)面試題總結

更新時間:2020-01-07 14:37:32 來源:動力節(jié)點 瀏覽3510次


3年Java程序開發(fā)面試題總結


  1)Java 中能創(chuàng)建 volatile 數(shù)組嗎?


  能,Java 中可以創(chuàng)建 volatile 類型數(shù)組,不過只是一個指向數(shù)組的引用,而不是整個數(shù)組。我的意思是,如果改變引用指向的數(shù)組,將會受到 volatile 的保護,但是如果多個線程同時改變數(shù)組的元素,volatile 標示符就不能起到之前的保護作用了。


  2)volatile 能使得一個非原子操作變成原子操作嗎?


  一個典型的例子是在類中有一個 long 類型的成員變量。如果你知道該成員變量會被多個線程訪問,如計數(shù)器、價格等,你最好是將其設置為 volatile。為什么?因為 Java 中讀取 long 類型變量不是原子的,需要分成兩步,如果一個線程正在修改該 long 變量的值,另一個線程可能只能看到該值的一半(前 32 位)。但是對一個 volatile 型的 long 或 double 變量的讀寫是原子。


  3)volatile 修飾符的有過什么實踐?


  一種實踐是用 volatile 修飾 long 和 double 變量,使其能按原子類型來讀寫。double 和 long 都是64位寬,因此對這兩種類型的讀是分為兩部分的,第一次讀取第一個 32 位,然后再讀剩下的 32 位,這個過程不是原子的,但 Java 中 volatile 型的 long 或 double 變量的讀寫是原子的。volatile 修復符的另一個作用是提供內(nèi)存屏障(memory barrier),例如在分布式框架中的應用。簡單的說,就是當你寫一個 volatile 變量之前,Java 內(nèi)存模型會插入一個寫屏障(write barrier),讀一個 volatile 變量之前,會插入一個讀屏障(read barrier)。意思就是說,在你寫一個 volatile 域時,能保證任何線程都能看到你寫的值,同時,在寫之前,也能保證任何數(shù)值的更新對所有線程是可見的,因為內(nèi)存屏障會將其他所有寫的值更新到緩存。


  4)volatile 類型變量提供什么保證?


  volatile 變量提供順序和可見性保證,例如,JVM 或者 JIT為了獲得更好的性能會對語句重排序,但是 volatile 類型變量即使在沒有同步塊的情況下賦值也不會與其他語句重排序。 volatile 提供 happens-before 的保證,確保一個線程的修改能對其他線程是可見的。某些情況下,volatile 還能提供原子性,如讀 64 位數(shù)據(jù)類型,像 long 和 double 都不是原子的,但 volatile 類型的 double 和 long 就是原子的。


  5) 10 個線程和 2 個線程的同步代碼,哪個更容易寫?


  從寫代碼的角度來說,兩者的復雜度是相同的,因為同步代碼與線程數(shù)量是相互獨立的。但是同步策略的選擇依賴于線程的數(shù)量,因為越多的線程意味著更大的競爭,所以你需要利用同步技術,如鎖分離,這要求更復雜的代碼和專業(yè)知識。


  6)你是如何調(diào)用 wait()方法的?使用 if 塊還是循環(huán)?為什么?


  wait() 方法應該在循環(huán)調(diào)用,因為當線程獲取到 CPU 開始執(zhí)行的時候,其他條件可能還沒有滿足,所以在處理前,循環(huán)檢測條件是否滿足會更好。下面是一段標準的使用 wait 和 notify 方法的代碼:


  // The standard idiom for using the wait method

  synchronized(obj) {

  while(condition does not hold)

  obj.wait(); // (Releases lock, and reacquires on wakeup)

  ... // Perform action appropriate to condition

  }


  7)什么是多線程環(huán)境下的偽共享(false sharing)?


  偽共享是多線程系統(tǒng)(每個處理器有自己的局部緩存)中一個眾所周知的性能問題。偽共享發(fā)生在不同處理器的上的線程對變量的修改依賴于相同的緩存行,如下圖所示:


3年Java程序開發(fā)面試題總結


  8)什么是 Busy spin?我們?yōu)槭裁匆褂盟?


  Busy spin 是一種在不釋放 CPU 的基礎上等待事件的技術。它經(jīng)常用于避免丟失 CPU 緩存中的數(shù)據(jù)(如果線程先暫停,之后在其他CPU上運行就會丟失)。所以,如果你的工作要求低延遲,并且你的線程目前沒有任何順序,這樣你就可以通過循環(huán)檢測隊列中的新消息來代替調(diào)用 sleep() 或 wait() 方法。它唯一的好處就是你只需等待很短的時間,如幾微秒或幾納秒。LMAX 分布式框架是一個高性能線程間通信的庫,該庫有一個 BusySpinWaitStrategy 類就是基于這個概念實現(xiàn)的,使用 busy spin 循環(huán) EventProcessors 等待屏障。


  9)Java 中怎么獲取一份線程 dump 文件?


  在 Linux 下,你可以通過命令 kill -3 PID (Java 進程的進程 ID)來獲取 Java 應用的 dump 文件。在 Windows 下,你可以按下 Ctrl + Break 來獲取。這樣 JVM 就會將線程的 dump 文件打印到標準輸出或錯誤文件中,它可能打印在控制臺或者日志文件中,具體位置依賴應用的配置。如果你使用Tomcat。


  10)Swing 是線程安全的?


  不是,Swing 不是線程安全的。你不能通過任何線程來更新 Swing 組件,如 JTable、JList 或 JPanel,事實上,它們只能通過 GUI 或 AWT 線程來更新。這就是為什么 Swing 提供 invokeAndWait() 和 invokeLater() 方法來獲取其他線程的 GUI 更新請求。這些方法將更新請求放入 AWT 的線程隊列中,可以一直等待,也可以通過異步更新直接返回結果。你也可以在參考答案中查看和學習到更詳細的內(nèi)容。


3年Java程序開發(fā)面試題總結


      以上就是動力節(jié)點Java培訓機構小編介紹的“3年Java程序開發(fā)面試題總結”的內(nèi)容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務。


相關推薦


史上最全的中高級JAVA工程師面試題及答案匯總


Java高級開發(fā)工程師面試題


2019史上最全java面試題題庫大全800題


哪有資深java工程師面試題


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 在线亚洲欧国产精品专区 | 国产精品自在欧美一区 | 日韩激情成人 | 午夜小网站 | 岛国在线播放v片免费 | 日韩高清一区二区三区五区七区 | 亚洲国产欧美日韩 | 色黄网站在线观看 | 亚洲国产一区二区三区 | 天天操夜夜操狠狠操 | 国产日韩欧美亚洲 | 亚洲综合精品一二三区在线 | 午夜爱爱影院 | 成人免费网站视频ww | 国产日韩欧美精品 | 日韩亚洲欧美综合一区二区三区 | 九九热在线视频播放 | 国产欧美日韩精品一区二 | 亚洲欧美日韩精品高清 | 男人的天堂黄色片 | 成人三级精品视频在线观看 | 天天爱天天爽 | 久久久精品国产免费观看同学 | 在线观看91精品国产性色 | 欧美国产亚洲精品a第一页 欧美国产在线观看 | 精品欧美一区视频在线观看 | 欧美日韩第二页 | 中文字幕国产亚洲 | 欧美成人xxx | 国产视频中文字幕 | 精品福利影院 | 欧美成人观看免费版 | 性刺激欧美三级在线观看 | 最新国产福利片在线观看 | 欧美激情αv一区二区三区 欧美激情xxxx | 99精品在线视频观看 | 成人免费观看视频久爱网 | 久久精品国产精品亚洲婷婷 | 亚洲精品无码专区在线播放 | 亚洲专区第一页 | 黄色a三级免费看 |