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

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 2020年一線互聯網Java高級面試題

2020年一線互聯網Java高級面試題

更新時間:2020-03-05 10:59:24 來源:動力節點 瀏覽2584次



  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修復符的另一個作用是提供內存屏障(memorybarrier),例如在分布式框架中的應用。簡單的說,就是當你寫一個volatile變量之前,Java內存模型會插入一個寫屏障(writebarrier),讀一個volatile變量之前,會插入一個讀屏障(readbarrier)。意思就是說,在你寫一個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方法的代碼:


  //Thestandardidiomforusingthewaitmethod


  synchronized(obj){


  while(conditiondoesnothold)


  obj.wait();//(Releaseslock,andreacquiresonwakeup)


  ...//Performactionappropriatetocondition


  }


  7)什么是多線程環境下的偽共享(falsesharing)?


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


2020年一線互聯網Java高級面試題


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


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


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


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


  10)Swing是線程安全的?


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


2020年一線互聯網Java高級面試題


      以上就是動力節點Java培訓機構小編介紹的“2020年一線互聯網Java高級面試題”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。


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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 天天看片天天爽_免费播放 天天看片夜夜爽 | 国产欧美激情一区二区三区-老狼 | 久久精品视频一区二区三区 | 老司机午夜影院 | 草草影院在线观看视频 | 乱系列h全文阅读小黄文肉 乱色美www女麻豆 | 欧美一区二区三区视频在线 | 一级做a爱过程免费视频韩国 | 欧美精品日韩一区二区三区 | 天天操狠狠干 | 久久久精品国产免费观看同学 | 中国一级特黄高清免费的大片 | 成人性生交大片免费看午夜a | 国产综合精品在线 | 日本一区二区成人教育 | 日韩三级伦理在线 | www.色com| 一区视频免费观看 | 国产a不卡 | 亚洲日本高清成人aⅴ片 | 你懂的网站在线观看 | 人人爽人人看 | 亚洲字幕久久 | 海天翼精品一区二区三区 | 国产一级一片免费播放视频 | 国产精品天天在线 | 在线成年人网站 | 欧美成人手机在线视频 | 欧美激情精品久久久久久不卡 | 欧美无内丝袜大尺度福利写真 | 最近中文字幕2019免费版日本 | 欧美成人鲁丝片在线观看 | 欧美国产中文 | 国内在线观看精品免费视频 | 欧美国产日韩另类 | 五月天婷婷免费观看视频在线 | 成年人免费在线观看网站 | 亚洲黄色在线视频 | 澳门毛片免费播放 | 妞干网在线视频 | 日韩一区二区三区在线观看 |