成人免费看黄网站无遮挡,caowo999,se94se欧美综合色,a级精品九九九大片免费看,欧美首页,波多野结衣一二三级,日韩亚洲欧美综合

java面試知識點(diǎn)總結

時(shí)間:2021-07-11 17:45:33 總結 我要投稿
  • 相關(guān)推薦

java面試知識點(diǎn)總結

  不少人反映java面試的題目不簡(jiǎn)單,下面小編為大家搜索整理了java面試知識點(diǎn)總結,希望對大家有所幫助。

java面試知識點(diǎn)總結

  1. Java中的原始數據類(lèi)型都有哪些,它們的大小及對應的封裝類(lèi)是什么?

  byte——1 byte——Byte

  short——2 bytes——Short

  int——4 bytes——Integer

  long——8 bytes——Long

  float——4 bytes——Float

  double——8 bytes——Double

  char——2 bytes——Character

  boolean

  boolean數據類(lèi)型非true即false。

  這個(gè)數據類(lèi)型表示1 bit,但是它的大小并沒(méi)有精確定義。

  《Java虛擬機規范》中如是說(shuō):“雖然定義了boolean這種數據類(lèi)型,但是只對它提供了非常有限的支持。在Java虛擬機中沒(méi)有任何供boolean值專(zhuān)用的字節碼指令,Java語(yǔ)言表達式所操作的boolean值,在編譯之后都使用Java虛擬機中的int數據類(lèi)型來(lái)代替,而boolean數組將會(huì )被編碼成Java虛擬機的byte數組,每個(gè)元素boolean元素占8位”。這樣我們可以得出boolean類(lèi)型單獨使用是4個(gè)字節,在數組中又是1個(gè)字節。

  那虛擬機為什么要用int來(lái)代替boolean呢?為什么不用byte或short,這樣不是更節省內存空間嗎?

  實(shí)際上,使用int的原因是,對于當下32位的CPU來(lái)說(shuō),一次進(jìn)行32位的數據交換更加高效。

  綜上,我們可以知道:官方文檔對boolean類(lèi)型沒(méi)有給出精確的定義,《Java虛擬機規范》給出了“單獨時(shí)使用4個(gè)字節,boolean數組時(shí)1個(gè)字節”的定義,具體還要看虛擬機實(shí)現是否按照規范來(lái),所以1個(gè)字節、4個(gè)字節都是有可能的。這其實(shí)是一種時(shí)空權衡。 boolean類(lèi)型的封裝類(lèi)是Boolean。

  2. 談一談”==“與”equals()"的區別。

  《Think in Java》中說(shuō):“關(guān)系操作符生成的是一個(gè)boolean結果,它們計算的是操作數的值之間的關(guān)系”。 "=="判斷的是兩個(gè)對象的內存地址是否一樣,適用于原始數據類(lèi)型和枚舉類(lèi)型(它們的變量存儲的是值本身,而引用類(lèi)型變量存儲的是引用);equals是Object類(lèi)的方法,Object對它的實(shí)現是比較內存地址,我們可以重寫(xiě)這個(gè)方法來(lái)自定義“相等”這個(gè)概念。比如類(lèi)庫中的String、Date等類(lèi)就對這個(gè)方法進(jìn)行了重寫(xiě)。 綜上,對于枚舉類(lèi)型和原始數據類(lèi)型的相等性比較,應該使用"==";對于引用類(lèi)型的相等性比較,應該使用equals方法。

  3. Java中的四種引用及其應用場(chǎng)景是什么?

  強引用: 通常我們使用new操作符創(chuàng )建一個(gè)對象時(shí)所返回的引用即為強引用

  軟引用: 若一個(gè)對象只能通過(guò)軟引用到達,那么這個(gè)對象在內存不足時(shí)會(huì )被回收,可用于圖片緩存中,內存不足時(shí)系統會(huì )自動(dòng)回收不再使用的Bitmap

  弱引用: 若一個(gè)對象只能通過(guò)弱引用到達,那么它就會(huì )被回收(即使內存充足),同樣可用于圖片緩存中,這時(shí)候只要Bitmap不再使用就會(huì )被回收

  虛引用: 虛引用是Java中最“弱”的引用,通過(guò)它甚至無(wú)法獲取被引用的對象,它存在的唯一作用就是當它指向的對象回收時(shí),它本身會(huì )被加入到引用隊列中,這樣我們可以知道它指向的對象何時(shí)被銷(xiāo)毀。

  4. object中定義了哪些方法?

  clone(), equals(), hashCode(), toString(), notify(), notifyAll(), wait(), finalize(), getClass()

  5. hashCode的作用是什么?

  請參見(jiàn) 散列表的基本原理與實(shí)現

  6. ArrayList, LinkedList, Vector的區別是什么?

  ArrayList: 內部采用數組存儲元素,支持高效隨機訪(fǎng)問(wèn),支持動(dòng)態(tài)調整大小

  LinkedList: 內部采用鏈表來(lái)存儲元素,支持快速插入/刪除元素,但不支持高效地隨機訪(fǎng)問(wèn)

  Vector: 可以看作線(xiàn)程安全版的ArrayList

  7. String, StringBuilder, StringBuffer的區別是什么?

  String: 不可變的字符序列,若要向其中添加新字符需要創(chuàng )建一個(gè)新的String對象

  StringBuilder: 可變字符序列,支持向其中添加新字符(無(wú)需創(chuàng )建新對象)

  StringBuffer: 可以看作線(xiàn)程安全版的StringBuilder

  8. Map, Set, List, Queue、Stack的特點(diǎn)及用法。

  Map: Java中存儲鍵值對的數據類(lèi)型都實(shí)現了這個(gè)接口,表示“映射表”。支持的兩個(gè)核心操作是get(Object key)以及put(K key, V value),分別用來(lái)獲取鍵對應的值以及向映射表中插入鍵值對。

  Set: 實(shí)現了這個(gè)接口的集合類(lèi)型中不允許存在重復的元素,代表數學(xué)意義上的“集合”。它所支持的核心操作有add(E e), remove(Object o), contains(Object o),分別用于添加元素,刪除元素以及判斷給定元素是否存在于集中。

  List: Java中集合框架中的列表類(lèi)型都實(shí)現了這個(gè)接口,表示一種有序序列。支持get(int index), add(E e)等操作。

  Queue: Java集合框架中的隊列接口,代表了“先進(jìn)先出”隊列。支持add(E element),remove()等操作。

  Stack: Java集合框架中表示堆棧的數據類(lèi)型,堆棧是一種“后進(jìn)先出”的數據結構。支持push(E item), pop()等操作。

  更詳細的說(shuō)明請參考官方文檔,對相關(guān)數據結構不太熟悉的同學(xué)可以參考《算法導論》或其他相關(guān)書(shū)籍。

  9. HashMap和HashTable的區別

  HashTable是線(xiàn)程安全的,而HashMap不是

  HashMap中允許存在null鍵和null值,而HashTable中不允許

  10. HashMap的.實(shí)現原理

  簡(jiǎn)單的說(shuō),HashMap的底層實(shí)現是“基于拉鏈法的散列表”。

  詳細分析請參考 深入解析HashMap、HashTable

  11. ConcurrentHashMap的實(shí)現原理

  ConcurrentHashMap是支持并發(fā)讀寫(xiě)的HashMap,它的特點(diǎn)是讀取數據時(shí)無(wú)需加鎖,寫(xiě)數據時(shí)可以保證加鎖粒度盡可能的小。由于其內部采用“分段存儲”,只需對要進(jìn)行寫(xiě)操作的數據所在的“段”進(jìn)行加鎖。關(guān)于ConcurrentHashMap底層實(shí)現的詳細分析請參考 Java并發(fā)編程:并發(fā)容器之ConcurrentHashMap

  12. TreeMap, LinkedHashMap, HashMap的區別是什么?

  HashMap的底層實(shí)現是散列表,因此它內部存儲的元素是無(wú)序的;

  TreeMap的底層實(shí)現是紅黑樹(shù),所以它內部的元素的有序的。排序的依據是自然序或者是創(chuàng )建TreeMap時(shí)所提供的比較器(Comparator)對象。

  LinkedHashMap可以看作能夠記住插入元素的順序的HashMap。

  13. Collection與Collections的區別是什么?

  Collection是Java集合框架中的基本接口;

  Collections是Java集合框架提供的一個(gè)工具類(lèi),其中包含了大量用于操作或返回集合的靜態(tài)方法。

  14. 對于“try-catch-finally”,若try語(yǔ)句塊中包含“return”語(yǔ)句,finally語(yǔ)句塊會(huì )執行嗎?

  會(huì )執行。只有兩種情況finally塊中的語(yǔ)句不會(huì )被執行:**

  調用了System.exit()方法;

  JVM“崩潰”了。

  15. Java中的異常層次結構

  Java中的異常層次結構如下圖所示:

  我們可以看到Throwable類(lèi)是異常層級中的基類(lèi)。

  Error類(lèi)表示內部錯誤,這類(lèi)錯誤使我們無(wú)法控制的;Exception表示異常,RuntimeException及其子類(lèi)屬于未檢查異常,這類(lèi)異常包括ArrayIndexOutOfBoundsException、NullPointerException等,我們應該通過(guò)條件判斷等方式語(yǔ)句避免未檢查異常的發(fā)生。IOException及其子類(lèi)屬于已檢查異常,編譯器會(huì )檢查我們是否為所有可能拋出的已檢查異常提供了異常處理器,若沒(méi)有則會(huì )報錯。對于未檢查異常,我們無(wú)需捕獲(當然Java也允許我們捕獲,但我們應該做的事避免未檢查異常的發(fā)生)。

  16. Java面向對象的三個(gè)特征與含義

  三大特征:封裝、繼承、多態(tài)。詳細介紹請戳 Java面向對象三大特性

  17. Override, Overload的含義與區別

  Override表示“重寫(xiě)”,是子類(lèi)對父類(lèi)中同一方法的重新定義

  Overload表示“重載”,也就是定義一個(gè)與已定義方法名稱(chēng)相同但簽名不同的新方法**

  18. 接口與抽象類(lèi)的區別

  接口是一種約定,實(shí)現接口的類(lèi)要遵循這個(gè)約定;

  抽象類(lèi)本質(zhì)上是一個(gè)類(lèi),使用抽象類(lèi)的代價(jià)要比接口大。

  接口與抽象類(lèi)的對比如下:

  抽象類(lèi)中可以包含屬性,方法(包含抽象方法與有著(zhù)具體實(shí)現的方法),常量;接口只能包含常量和方法聲明。

  抽象類(lèi)中的方法和成員變量可以定義可見(jiàn)性(比如public、private等);而接口中的方法只能為public(缺省為public)。

  一個(gè)子類(lèi)只能有一個(gè)父類(lèi)(具體類(lèi)或抽象類(lèi));而一個(gè)接口可以繼承一個(gè)多個(gè)接口,一個(gè)類(lèi)也可以實(shí)現多個(gè)接口。

  子類(lèi)中實(shí)現父類(lèi)中的抽象方法時(shí),可見(jiàn)性可以大于等于父類(lèi)中的;而接口實(shí)現類(lèi)中的接口 方法的可見(jiàn)性只能與接口中相同(public)。

  19. 靜態(tài)內部類(lèi)與非靜態(tài)內部類(lèi)的區別

  靜態(tài)內部類(lèi)不會(huì )持有外圍類(lèi)的引用,而非靜態(tài)內部類(lèi)會(huì )隱式持有外圍類(lèi)的一個(gè)引用。

  20. Java中多態(tài)的實(shí)現原理

  所謂多態(tài),指的就是父類(lèi)引用指向子類(lèi)對象,調用方法時(shí)會(huì )調用子類(lèi)的實(shí)現而不是父類(lèi)的實(shí)現。多態(tài)的實(shí)現的關(guān)鍵在于“動(dòng)態(tài)綁定”。詳細介紹請戳 Java動(dòng)態(tài)綁定的內部實(shí)現機制

  21. 簡(jiǎn)述Java中創(chuàng )建新線(xiàn)程的兩種方法

  繼承Thread類(lèi)(假設子類(lèi)為MyThread),并重寫(xiě)run()方法,然后new一個(gè)MyThread對象并對其調用start()即可啟動(dòng)新線(xiàn)程。

  實(shí)現Runnable接口(假設實(shí)現類(lèi)為MyRunnable),而后將MyRunnable對象作為參數傳入Thread構造器,在得到的Thread對象上調用start()方法即可。

  22. 簡(jiǎn)述Java中進(jìn)行線(xiàn)程同步的方法

  volatile: Java Memory Model保證了對同一個(gè)volatile變量的寫(xiě)happens before對它的讀;

  synchronized: 可以來(lái)對一個(gè)代碼塊或是對一個(gè)方法上鎖,被“鎖住”的地方稱(chēng)為臨界區,進(jìn)入臨界區的線(xiàn)程會(huì )獲取對象的monitor,這樣其他嘗試進(jìn)入臨界區的線(xiàn)程會(huì )因無(wú)法獲取monitor而被阻塞。由于等待另一個(gè)線(xiàn)程釋放monitor而被阻塞的線(xiàn)程無(wú)法被中斷。

  ReentrantLock: 嘗試獲取鎖的線(xiàn)程可以被中斷并可以設置超時(shí)參數。

【java面試知識點(diǎn)總結】相關(guān)文章:

java集合知識點(diǎn)總結02-17

java框架知識點(diǎn)總結02-17

java基礎知識點(diǎn)總結02-17

java面試題及答案06-10

Java面試筆試題03-24

Java線(xiàn)程面試題02-23

經(jīng)典Java基礎面試題02-23

java面試怎么自我介紹06-11

java企業(yè)的面試筆試題03-25