成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

常見的Java面試題及答案有哪些-創(chuàng)新互聯

這篇文章主要介紹“常見的Java面試題及答案有哪些”,在日常操作中,相信很多人在常見的Java面試題及答案有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”常見的Java面試題及答案有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

無為ssl適用于網站、小程序/APP、API接口等需要進行數據傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!

  一、關于volatile關鍵字

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


  2、volatile能使得一個非原子操作變成原子操作嗎?
  一個典型的例子是在類中有一個 long 類型的成員變量。如果你知道該成員變量會被多個線程訪問,如計數器、價格等,你最好是將其設置為 volatile。為什么?因為 Java 中讀取 long 類型變量不是原子的,需要分成兩步,如果一個線程正在修改該 long 變量的值,另一個線程可能只能看到該值的一半(前 32 位)。但是對一個 volatile 型的 long 或 double 變量的讀寫是原子。
  一種實踐是用 volatile 修飾 long 和 double 變量,使其能按原子類型來讀寫。double 和 long 都是64位寬,因此對這兩種類型的讀是分為兩部分的,第一次讀取第一個 32 位,然后再讀剩下的 32 位,這個過程不是原子的,但 Java 中 volatile 型的 long 或 double 變量的讀寫是原子的。volatile 修復符的另一個作用是提供內存屏障(memory barrier),例如在分布式框架中的應用。簡單的說,就是當你寫一個 volatile 變量之前,Java 內存模型會插入一個寫屏障(write barrier),讀一個 volatile 變量之前,會插入一個讀屏障(read barrier)。意思就是說,在你寫一個 volatile 域時,能保證任何線程都能看到你寫的值,同時,在寫之前,也能保證任何數值的更新對所有線程是可見的,因為內存屏障會將其他所有寫的值更新到緩存。


  3、volatile類型變量提供什么保證?
  volatile 主要有兩方面的作用:1.避免指令重排2.可見性保證.例如,JVM 或者 JIT為了獲得更好的性能會對語句重排序,但是 volatile 類型變量即使在沒有同步塊的情況下賦值也不會與其他語句重排序。volatile 提供 happens-before 的保證,確保一個線程的修改能對其他線程是可見的。某些情況下,volatile 還能提供原子性,如讀 64 位數據類型,像 long 和 double 都不是原子的(低32位和高32位),但 volatile 類型的 double 和 long 就是原子的。


  二、關于集合


  1、Java中的集合及其繼承關系
  關于集合的體系是每個人都應該爛熟于心的,尤其是對我們經常使用的List,Map的原理更該如此.


  2、poll()方法和remove()方法區(qū)別?
  poll() 和 remove() 都是從隊列中取出一個元素,但是 poll() 在獲取元素失敗的時候會返回空,但是 remove() 失敗的時候會拋出異常。


  3、LinkedHashMap和PriorityQueue的區(qū)別
  PriorityQueue 是一個優(yōu)先級隊列,保證最高或者最低優(yōu)先級的的元素總是在隊列頭部,但是 LinkedHashMap 維持的順序是元素插入的順序。當遍歷一個 PriorityQueue 時,沒有任何順序保證,但是 LinkedHashMap 課保證遍歷順序是元素插入的順序。


  4、WeakHashMap與HashMap的區(qū)別是什么?
  WeakHashMap 的工作與正常的 HashMap 類似,但是使用弱引用作為 key,意思就是當 key 對象沒有任何引用時,key/value 將會被回收。


  5、ArrayList和LinkedList的區(qū)別?
  最明顯的區(qū)別是 ArrrayList底層的數據結構是數組,支持隨機訪問,而 LinkedList 的底層數據結構是雙向循環(huán)鏈表,不支持隨機訪問。使用下標訪問一個元素,ArrayList 的時間復雜度是 O(1),而 LinkedList 是 O(n)。


  6、ArrayList和Array有什么區(qū)別?
  Array可以容納基本類型和對象,而ArrayList只能容納對象。
  Array是指定大小的,而ArrayList大小是固定的


  7、ArrayList和HashMap默認大小?
  在 Java 7 中,ArrayList 的默認大小是 10 個元素,HashMap 的默認大小是16個元素(必須是2的冪)。這就是 Java 7 中 ArrayList 和 HashMap 類的代碼片段。
  private static final int DEFAULT_CAPACITY = 10; //from HashMap.java
  JDK 7 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;
  // aka 16


  8、Comparator和Comparable的區(qū)別?
  Comparable 接口用于定義對象的自然順序,而 comparator 通常用于定義用戶定制的順序。Comparable 總是只有一個,但是可以有多個 comparator 來定義對象的順序。


  9、如何實現集合排序?
  你可以使用有序集合,如 TreeSet 或 TreeMap,你也可以使用有順序的的集合,如 list,然后通過 Collections.sort() 來排序。
  如何打印數組內容
  你可以使用 Arrays.toString() 和 Arrays.deepToString() 方法來打印數組。由于數組沒有實現 toString() 方法,所以如果將數組傳遞給 System.out.println() 方法,將無法打印出數組的內容,但是 Arrays.toString() 可以打印每個元素。


  10、LinkedList的是單向鏈表還是雙向?
  雙向循環(huán)列表,具體實現自行查閱源碼。


  11、TreeMap是實現原理
  采用紅黑樹實現,具體實現自行查閱源碼。
  遍歷ArrayList時如何正確移除一個元素
  該問題的關鍵在于面試者使用的是 ArrayList 的 remove() 還是 Iterator 的 remove()方法。這有一段示例代碼,是使用正確的方式來實現在遍歷的過程中移除元素,而不會出現 ConcurrentModificationException 異常的示例代碼。


  12、什么是ArrayMap?它和HashMap有什么區(qū)別?
  ArrayMap是Android SDK中提供的,非Android開發(fā)者可以略過。
  ArrayMap是用兩個數組來模擬map,更少的內存占用空間,更高的效率。

  三、HashMap的實現原理


  1. HashMap概述:HashMap是基于哈希表的Map接口的非同步實現。此實現提供所有可選的映射操作,并允許使用null值和null鍵。此類不保證映射的順序,特別是它不保證該順序恒久不變。


  2. HashMap的數據結構:在java編程語言中,最基本的結構就是兩種,一個是數組,另外一個是模擬指針(引用),所有的數據結構都可以用這兩個基本結構來構造的,HashMap也不例外。HashMap實際上是一個“鏈表散列”的數據結構,即數組和鏈表的結合體。


  當我們往Hashmap中put元素時,首先根據key的hashcode重新計算hash值,根絕hash值得到這個元素在數組中的位置(下標),如果該數組在該位置上已經存放了其他元素,那么在這個位置上的元素將以鏈表的形式存放,新加入的放在鏈頭,最先加入的放入鏈尾.如果數組中該位置沒有元素,就直接將該元素放到數組的該位置上.

  需要注意Jdk 1.8中對HashMap的實現做了優(yōu)化,當鏈表中的節(jié)點數據超過八個之后,該鏈表會轉為紅黑樹來提高查詢效率,從原來的O(n)到O(logn)


  3.你了解Fail-Fast機制嗎?

  Fail-Fast即我們常說的快速失敗,
  
  4.Fail-fast和Fail-safe有什么區(qū)別
  Iterator的fail-fast屬性與當前的集合共同起作用,因此它不會受到集合中任何改動的影響。Java.util包中的所有集合類都被設計為fail->fast的,而java.util.concurrent中的集合類都為fail-safe的。當檢測到正在遍歷的集合的結構被改變時,Fail-fast迭代器拋出ConcurrentModificationException,而fail-safe迭代器從不拋出ConcurrentModificationException。


  四、關于日期


  1、SimpleDateFormat是線程安全的嗎?
  非常不幸,DateFormat 的所有實現,包括 SimpleDateFormat 都不是線程安全的,因此你不應該在多線程序中使用,除非是在對外線程安全的環(huán)境中使用,如 將 SimpleDateFormat 限制在 ThreadLocal 中。如果你不這么做,在解析或者格式化日期的時候,可能會獲取到一個不正確的結果。因此,從日期、時間處理的所有實踐來說,我強力推薦 joda-time 庫。


  2、如何格式化日期?
  Java 中,可以使用 SimpleDateFormat 類或者 joda-time 庫來格式日期。DateFormat 類允許你使用多種流行的格式來格式化日期。參見答案中的示例代碼,代碼中演示了將日期格式化成不同的格式,如 dd-MM-yyyy 或 ddMMyyyy。
  

       五、關于異常
  1、簡單描述java異常體系
  相比沒有人不了解異常體系,關于異常體系的更多信息可以見

  2、什么是異常鏈
  詳情直接參見上面的白話異常機制,不做解釋了。


  3、throw和throws的區(qū)別
  throw用于主動拋出java.lang.Throwable 類的一個實例化對象,意思是說你可以通過關鍵字 throw 拋出一個 Error 或者 一個Exception,如:throw new IllegalArgumentException(“size must be multiple of 2&Prime;),
  而throws 的作用是作為方法聲明和簽名的一部分,方法被拋出相應的異常以便調用者能處理。Java 中,任何未處理的受檢查異常強制在 throws 子句中聲明。


  四、關于序列化
  Java 中,Serializable 與 Externalizable 的區(qū)別
  Serializable 接口是一個序列化 Java 類的接口,以便于它們可以在網絡上傳輸或者可以將它們的狀態(tài)保存在磁盤上,是 JVM 內嵌的默認序列化方式,成本高、脆弱而且不安全。Externalizable 允許你控制整個序列化過程,指定特定的二進制格式,增加安全機制。


  五、關于JVM
  1、JVM特性
  平臺無關性.
  Java語言的一個非常重要的特點就是與平臺的無關性。而使用Java虛擬機是實現這一特點的關鍵。一般的高級語言如果要在不同的平臺上運行,至少需要編譯成不同的目標代碼。而引入Java語言虛擬機后,Java語言在不同平臺上運行時不需要重新編譯。Java語言使用模式Java虛擬機屏蔽了與具體平臺相關的信息,使得Java語言編譯程序只需生成在Java虛擬機上運行的目標代碼(字節(jié)碼),就可以在多種平臺上不加修改地運行。Java虛擬機在執(zhí)行字節(jié)碼時,把字節(jié)碼解釋成具體平臺上的機器指令執(zhí)行。


  2、簡單解釋一下類加載器
  有關類加載器一般會問你四種類加載器的應用場景以及雙親委派模型,
  
  3、簡述堆和棧的區(qū)別
  VM 中堆和棧屬于不同的內存區(qū)域,使用目的也不同。棧常用于保存方法幀和局部變量,而對象總是在堆上分配。棧通常都比堆小,也不會在多個線程之間共享,而堆被整個 JVM 的所有線程共享。


  4、簡述JVM內存分配
  基本數據類型比變量和對象的引用都是在棧分配的。
  堆內存用來存放由new創(chuàng)建的對象和數組。
  類變量(static修飾的變量),程序在一加載的時候就在堆中為類變量分配內存,堆中的內存地址存放在棧中。
  實例變量:當你使用java關鍵字new的時候,系統(tǒng)在堆中開辟并不一定是連續(xù)的空間分配給變量,是根據零散的堆內存地址,通過哈希算法換算為一長串數字以表征這個變量在堆中的”物理位置”,實例變量的生命周期&ndash;當實例變量的引用丟失后,將被GC(垃圾回收器)列入可回收“名單”中,但并不是馬上就釋放堆中內存。
  局部變量: 由聲明在某方法,或某代碼段里(比如for循環(huán)),執(zhí)行到它的時候在棧中開辟內存,當局部變量一但脫離作用域,內存立即釋放。


  六、其他
  1、java當中采用的是大端還是小端?
  XML解析的幾種方式和特點
  DOM, SAX, PULL三種解析方式:
  DOM:消耗內存:先把xml文檔都讀到內存中,然后再用DOM API來訪問樹形結構,并獲取數據。這個寫起來很簡單,但是很消耗內存。要是數據過大,手機不夠牛逼,可能手機直接死機
  SAX:解析效率高,占用內存少,基于事件驅動的:更加簡單地說就是對文檔進行順序掃描,當掃描到文檔(document)開始與結束、元素(element)開始與結束、文檔(document)結束等地方時通知事件處理函數,由事件處理函數做相應動作,然后繼續(xù)同樣的掃描,直至文檔結束。
  PULL:與 SAX 類似,也是基于事件驅動,我們可以調用它的next()方法,來獲取下一個解析事件(就是開始文檔,結束文檔,開始標簽,結束標簽),當處于某個元素時可以調用XmlPullParser的getAttributte()方法來獲取屬性的值,也可調用它的nextText()獲取本節(jié)點的值。


  2、JDK 1.7特性
  然 JDK 1.7 不像 JDK 5 和 8 一樣的大版本,但是,還是有很多新的特性,如 try-with-resource 語句,這樣你在使用流或者資源的時候,就不需要手動關閉,Java 會自動關閉。Fork-Join 池某種程度上實現 Java 版的 Map-reduce。允許 Switch 中有 String 變量和文本。菱形操作符(<>)用于類型推斷,不再需要在變量聲明的右邊申明泛型,因此可以寫出可讀寫更強、更簡潔的代碼。


  3、JDK 1.8特性
  java 8 在 Java 歷史上是一個開創(chuàng)新的版本,下面 JDK 8 中 5 個主要的特性:
  Lambda 表達式,允許像對象一樣傳遞匿名函數
  Stream API,充分利用現代多核 CPU,可以寫出很簡潔的代碼
  Date 與 Time API,最終,有一個穩(wěn)定、簡單的日期和時間庫可供你使用
  擴展方法,現在,接口中可以有靜態(tài)、默認方法。
  重復注解,現在你可以將相同的注解在同一類型上使用多次。


  4、Maven和ANT有什么區(qū)別?
  雖然兩者都是構建工具,都用于創(chuàng)建 Java 應用,但是 Maven 做的事情更多,在基于“約定優(yōu)于配置”的概念下,提供標準的Java 項目結構,同時能為應用自動管理依賴(應用中所依賴的 JAR 文件。
  JDBC最佳實踐
  優(yōu)先使用批量操作來插入和更新數據
  使用PreparedStatement來避免SQL漏洞
  使用數據連接池
  通過列名來獲取結果集
  IO操作最佳實踐
  使用有緩沖的IO類,不要單獨讀取字節(jié)或字符
  使用NIO和NIO 2或者AIO,而非BIO
  在finally中關閉流
  使用內存映射文件獲取更快的IO

到此,關于“常見的Java面試題及答案有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯成都網站設計公司網站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

另外有需要云服務器可以了解下創(chuàng)新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

本文題目:常見的Java面試題及答案有哪些-創(chuàng)新互聯
文章地址:http://jinyejixie.com/article42/cchohc.html

成都網站建設公司_創(chuàng)新互聯,為您提供虛擬主機云服務器、標簽優(yōu)化網站收錄、域名注冊商城網站

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

成都app開發(fā)公司
临汾市| 江永县| 如东县| 沾益县| 周宁县| 门源| 石楼县| 类乌齐县| 阿拉善左旗| 札达县| 怀来县| 万荣县| 石家庄市| 石家庄市| 凤山市| 陆良县| 台前县| 合川市| 靖安县| 和顺县| 宁强县| 临朐县| 密云县| 兴和县| 四川省| 永修县| 静宁县| 南丰县| 凤冈县| 原平市| 河源市| 汉阴县| 吴桥县| 东丰县| 城口县| 曲靖市| 朝阳区| 依安县| 东阿县| 偃师市| 舞钢市|