• <output id="aynwq"><form id="aynwq"><code id="aynwq"></code></form></output>

    <mark id="aynwq"><option id="aynwq"></option></mark>
  • <mark id="aynwq"><option id="aynwq"></option></mark><label id="aynwq"><dl id="aynwq"></dl></label>
  • 學習啦 > 創業指南 > 職場 > 面試題 > 2016年java面試題(2)

    2016年java面試題(2)

    時間: 如英753 分享

    2016年java面試題

      2016年java面試題之JVM 底層 與 GC

      22)64 位 JVM 中,int 的長度是多數?

      Java 中,int 類型變量的長度是一個固定值,與平臺無關,都是 32 位。意思就是說,在 32 位 和 64 位 的Java 虛擬機中,int 類型的長度是相同的。

      23)Serial 與 Parallel GC之間的不同之處?

      Serial 與 Parallel 在GC執行的時候都會引起 stop-the-world。它們之間主要不同 serial 收集器是默認的復制收集器,執行 GC 的時候只有一個線程,而 parallel 收集器使用多個 GC 線程來執行。

      24)32 位和 64 位的 JVM,int 類型變量的長度是多數?

      32 位和 64 位的 JVM 中,int 類型變量的長度是相同的,都是 32 位或者 4 個字節。

      25)Java 中 WeakReference 與 SoftReference的區別?

      雖然 WeakReference 與 SoftReference 都有利于提高 GC 和 內存的效率,但是 WeakReference ,一旦失去最后一個強引用,就會被 GC 回收,而軟引用雖然不能阻止被回收,但是可以延遲到 JVM 內存不足的時候。

      26)WeakHashMap 是怎么工作的?

      WeakHashMap 的工作與正常的 HashMap 類似,但是使用弱引用作為 key,意思就是當 key 對象沒有任何引用時,key/value 將會被回收。

      27)JVM 選項 -XX: UseCompressedOops 有什么作用?為什么要使用?

      當你將你的應用從 32 位的 JVM 遷移到 64 位的 JVM 時,由于對象的指針從 32 位增加到了 64 位,因此堆內存會突然增加,差不多要翻倍。這也會對 CPU 緩存(容量比內存小很多)的數據產生不利的影響。因為,遷移到 64 位的 JVM 主要動機在于可以指定最大堆大小,通過壓縮 OOP 可以節省一定的內存。通過 -XX: UseCompressedOops 選項,JVM 會使用 32 位的 OOP,而不是 64 位的 OOP。

      28)怎樣通過 Java 程序來判斷 JVM 是 32 位 還是 64 位?

      你可以檢查某些系統屬性如 sun.arch.data.model 或 os.arch 來獲取該信息。

      29)32 位 JVM 和 64 位 JVM 的最大堆內存分別是多數?

      理論上說上 32 位的 JVM 堆內存可以到達 2^32,即 4GB,但實際上會比這個小很多。不同操作系統之間不同,如 Windows 系統大約 1.5 GB,Solaris 大約 3GB。64 位 JVM允許指定最大的堆內存,理論上可以達到 2^64,這是一個非常大的數字,實際上你可以指定堆內存大小到 100GB。甚至有的 JVM,如 Azul,堆內存到 1000G 都是可能的。

      30)JRE、JDK、JVM 及 JIT 之間有什么不同?

      JRE 代表 Java 運行時(Java run-time),是運行 Java 引用所必須的。JDK 代表 Java 開發工具(Java development kit),是 Java 程序的開發工具,如 Java 編譯器,它也包含 JRE。JVM 代表 Java 虛擬機(Java virtual machine),它的責任是運行 Java 應用。JIT 代表即時編譯(Just In Time compilation),當代碼執行的次數超過一定的閾值時,會將 Java 字節碼轉換為本地代碼,如,主要的熱點代碼會被準換為本地代碼,這樣有利大幅度提高 Java 應用的性能。

      31)解釋 Java 堆空間及 GC?

      當通過 Java 命令啟動 Java 進程的時候,會為它分配內存。內存的一部分用于創建堆空間,當程序中創建對象的時候,就從對空間中分配內存。GC 是 JVM 內部的一個進程,回收無效對象的內存用于將來的分配。

      32)你能保證 GC 執行嗎?

      不能,雖然你可以調用 System.gc() 或者 Runtime.gc(),但是沒有辦法保證 GC 的執行。

      33)怎么獲取 Java 程序使用的內存?堆使用的百分比?

      可以通過 java.lang.Runtime 類中與內存相關方法來獲取剩余的內存,總內存及最大堆內存。通過這些方法你也可以獲取到堆使用的百分比及堆內存的剩余空間。Runtime.freeMemory() 方法返回剩余空間的字節數,Runtime.totalMemory() 方法總內存的字節數,Runtime.maxMemory() 返回最大內存的字節數。

      34)Java 中堆和棧有什么區別?

      JVM 中堆和棧屬于不同的內存區域,使用目的也不同。棧常用于保存方法幀和局部變量,而對象總是在堆上分配。棧通常都比堆小,也不會在多個線程之間共享,而堆被整個 JVM 的所有線程共享。

      2016年java面試題之Java

      35)“a==b”和”a.equals(b)”有什么區別?

      如果 a 和 b 都是對象,則 a==b 是比較兩個對象的引用,只有當 a 和 b 指向的是堆中的同一個對象才會返回 true,而 a.equals(b) 是進行邏輯比較,所以通常需要重寫該方法來提供邏輯一致性的比較。例如,String 類重寫 equals() 方法,所以可以用于兩個不同對象,但是包含的字母相同的比較。

      36)a.hashCode() 有什么用?與 a.equals(b) 有什么關系?

      hashCode() 方法是相應對象整型的 hash 值。它常用于基于 hash 的集合類,如 Hashtable、HashMap、LinkedHashMap等等。它與 equals() 方法關系特別緊密。根據 Java 規范,兩個使用 equal() 方法來判斷相等的對象,必須具有相同的 hash code。

      37)final、finalize 和 finally 的不同之處?

      final 是一個修飾符,可以修飾變量、方法和類。如果 final 修飾變量,意味著該變量的值在初始化后不能被改變。finalize 方法是在對象被回收之前調用的方法,給對象自己最后一個復活的機會,但是什么時候調用 finalize 沒有保證。finally 是一個關鍵字,與 try 和 catch 一起用于異常的處理。finally 塊一定會被執行,無論在 try 塊中是否有發生異常。

      38)Java 中的編譯期常量是什么?使用它又什么風險?

      公共靜態不可變(public static final )變量也就是我們所說的編譯期常量,這里的 public 可選的。實際上這些變量在編譯時會被替換掉,因為編譯器知道這些變量的值,并且知道這些變量在運行時不能改變。這種方式存在的一個問題是你使用了一個內部的或第三方庫中的公有編譯時常量,但是這個值后面被其他人改變了,但是你的客戶端仍然在使用老的值,甚至你已經部署了一個新的jar。為了避免這種情況,當你在更新依賴 JAR 文件時,確保重新編譯你的程序。

      2016年java面試題之Java 集合框架

      39) List、Set、Map 和 Queue 之間的區別?

      List 是一個有序集合,允許元素重復。它的某些實現可以提供基于下標值的常量訪問時間,但是這不是 List 接口保證的。Set 是一個無序集合。

      40)poll() 方法和 remove() 方法的區別?

      poll() 和 remove() 都是從隊列中取出一個元素,但是 poll() 在獲取元素失敗的時候會返回空,但是 remove() 失敗的時候會拋出異常。

      41)Java 中 LinkedHashMap 和 PriorityQueue 的區別是什么?

      PriorityQueue 保證最高或者最低優先級的的元素總是在隊列頭部,但是 LinkedHashMap 維持的順序是元素插入的順序。當遍歷一個 PriorityQueue 時,沒有任何順序保證,但是 LinkedHashMap 課保證遍歷順序是元素插入的順序。

      42)ArrayList 與 LinkedList 的不區別?

      最明顯的區別是 ArrrayList 底層的數據結構是數組,支持隨機訪問,而 LinkedList 的底層數據結構書鏈表,不支持隨機訪問。使用下標訪問一個元素,ArrayList 的時間復雜度是 O(1),而 LinkedList 是 O(n)。

      43)用哪兩種方式來實現集合的排序?

      你可以使用有序集合,如 TreeSet 或 TreeMap,你也可以使用有順序的的集合,如 list,然后通過 Collections.sort() 來排序。

      44)Java 中怎么打印數組?

      你可以使用 Arrays.toString() 和 Arrays.deepToString() 方法來打印數組。由于數組沒有實現 toString() 方法,所以如果將數組傳遞給 System.out.println() 方法,將無法打印出數組的內容,但是 Arrays.toString() 可以打印每個元素。

      45) Hashtable 與 HashMap 有什么不同之處?

      這兩個類有許多不同的地方,下面列出了一部分:

      a) Hashtable 是 JDK 1 遺留下來的類,而 HashMap 是后來增加的。

      b)Hashtable 是同步的,比較慢,但 HashMap 沒有同步策略,所以會更快。

      c)Hashtable 不允許有個空的 key,但是 HashMap 允許出現一個 null key。

      46)Java 中的 HashSet,內部是如何工作的?

      HashSet 的內部采用 HashMap來實現。由于 Map 需要 key 和 value,所以所有 key 的都有一個默認 value。類似于 HashMap,HashSet 不允許重復的 key,只允許有一個null key,意思就是 HashSet 中只允許存儲一個 null 對象。

      47)寫一段代碼在遍歷 ArrayList 時移除一個元素?

      該問題的關鍵在于面試者使用的是 ArrayList 的 remove() 還是 Iterator 的 remove()方法。這有一段示例代碼,是使用正確的方式來實現在遍歷的過程中移除元素,而不會出現 ConcurrentModificationException 異常的示例代碼。

      48)我們能自己寫一個容器類,然后使用 for-each 循環碼?

      可以,你可以寫一個自己的容器類。如果你想使用 Java 中增強的循環來遍歷,你只需要實現 Iterable 接口。如果你實現 Collection 接口,默認就具有該屬性。

      49)ArrayList 和 HashMap 的默認大小是多數?

      在 Java 7 中,ArrayList 的默認大小是 10 個元素,HashMap 的默認大小是16個元素(必須是2的冪)。這就是 Java 7 中 ArrayList 和 HashMap 類的代碼片段:

      // from ArrayList.java JDK 1.7

      private static final int DEFAULT_CAPACITY = 10;

      //from HashMap.java JDK 7

      static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16

      50)有沒有可能兩個不相等的對象有有相同的 hashcode?

      有可能,兩個不相等的對象可能會有相同的 hashcode 值,這就是為什么在 hashmap 中會有沖突。相等 hashcode 值的規定只是說如果兩個對象相等,必須有相同的hashcode 值,但是沒有關于不相等對象的任何規定。

      51)兩個相同的對象會有不同的的 hash code 嗎?

      不能,根據 hash code 的規定,這是不可能的。

      52)我們可以在 hashcode() 中使用隨機數字嗎?

      不行,因為對象的 hashcode 值必須是相同的。參見答案獲取更多關于 Java 中重寫 hashCode() 方法的知識。

      53)Java 中,Comparator 與 Comparable 有什么不同?

      Comparable 接口用于定義對象的自然順序,而 comparator 通常用于定義用戶定制的順序。Comparable 總是只有一個,但是可以有多個 comparator 來定義對象的順序。

      54)為什么在重寫 equals 方法的時候需要重寫 hashCode 方法?

      因為有強制的規范指定需要同時重寫 hashcode 與 equal 是方法,許多容器類,如 HashMap、HashSet 都依賴于 hashcode 與 equals 的規定。

    看過“2016年java面試題”的人還看了:

    1.應聘java專員職位的面試題

    2.JAVA面試題大全及答案

    3.2016最佳面試自我介紹范文

    1082585 主站蜘蛛池模板: 亚洲精品老司机| 久久久久无码国产精品一区| 51在线视频免费观看视频| 波多野结衣乱码中文字幕| 夫妇交换性3中文字幕| 免费精品一区二区三区在线观看| 一级白嫩美女毛片免费| 精品国产国产综合精品| 免费无码黄网站在线观看| www.精品视频| 特级aaa毛片| 国产黄色二级片| 亚洲国产AV一区二区三区四区| 久久午夜无码鲁丝片午夜精品 | 久久精品视频观看| 黄网在线免费看| 日本哺乳期xxxx| 啊灬啊灬啊灬快灬性| 一个人看的视频www在线| 男人桶女人叽叽| 在线播放国产一区二区三区| 亚洲欧美国产高清va在线播放| 91精品免费在线观看| 精品国产一区二区三区AV性色| 婷婷久久香蕉五月综合| 国产一区二区三精品久久久无广告| 久久99精品久久久久子伦| 综合久久给合久久狠狠狠97色| 夫妇交换4中文字幕| 亚洲欧美日韩综合精品网| 亚洲综合20p| 日本久久免费大片| 全部免费a级毛片| 97公开免费视频| 波多野结衣系列cesd819| 国产精品第12页| 久久精品亚洲一区二区三区浴池 | 国产老熟女网站| 久激情内射婷内射蜜桃| 老司机深夜网站| 在线观看人成网站深夜免费|