大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

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

3年Java程序開發面試題總結

更新時間:2020-01-07 14:37:32 來源:動力節點 瀏覽3492次


3年Java程序開發面試題總結


  1)Java 中能創建 volatile 數組嗎?


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


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


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


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


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


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


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


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


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


  6)你是如何調用 wait()方法的?使用 if 塊還是循環?為什么?


  wait() 方法應該在循環調用,因為當線程獲取到 CPU 開始執行的時候,其他條件可能還沒有滿足,所以在處理前,循環檢測條件是否滿足會更好。下面是一段標準的使用 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)什么是多線程環境下的偽共享(false sharing)?


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


3年Java程序開發面試題總結


  8)什么是 Busy spin?我們為什么要使用它?


  Busy spin 是一種在不釋放 CPU 的基礎上等待事件的技術。它經常用于避免丟失 CPU 緩存中的數據(如果線程先暫停,之后在其他CPU上運行就會丟失)。所以,如果你的工作要求低延遲,并且你的線程目前沒有任何順序,這樣你就可以通過循環檢測隊列中的新消息來代替調用 sleep() 或 wait() 方法。它唯一的好處就是你只需等待很短的時間,如幾微秒或幾納秒。LMAX 分布式框架是一個高性能線程間通信的庫,該庫有一個 BusySpinWaitStrategy 類就是基于這個概念實現的,使用 busy spin 循環 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 的線程隊列中,可以一直等待,也可以通過異步更新直接返回結果。你也可以在參考答案中查看和學習到更詳細的內容。


3年Java程序開發面試題總結


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


相關推薦


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


Java高級開發工程師面試題


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


哪有資深java工程師面試題


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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 久久精品国产久精国产果冻传媒 | 久久国产精品99精品国产 | 五月婷在线 | 亚洲综合色婷婷久久 | 国产精品96久久久久久久 | 欧美日韩亚洲综合 | 亚洲在线视频免费观看 | 亚洲一区二区视频 | 国内精品在线视频 | 香蕉视频一区二区三区 | 真人一级毛片免费观看视频 | 国产精品一区二区久久不卡 | 国产成人免费观看在线视频 | 国产成+人+综合+亚洲不卡 | 老司机一级毛片 | 狠狠操夜夜爽 | 欧美性xxx免费看片 欧美性白人顶级hd 欧美性插视频 | 99热这里只有精品在线 | 日韩高清一区 | 精品一区二区三区亚洲 | 欧美另类黑人巨大videos | 免费看黄色录像 | 亚洲香蕉毛片久久网站老妇人 | 久色亚洲 | 国产乱码精品一区二区三区卡 | 九色网址 | 神马影院我不卡手机 | 欧美aav| 一级特级欧美aa毛片免费 | 亚洲精品久久成人福利 | 久久精品国产一区二区三区日韩 | 来自深渊在线观看 | 亚洲精品视频免费在线观看 | 中文国产成人精品久久一区 | 美女色片 | 中国妞xxxx| 久久国产免费福利永久 | 精品国免费一区二区三区 | 成人永久免费视频网站在线观看 | 日韩精品午夜视频一区二区三区 | 国产亚洲精品美女一区二区 |