那些經常被問的JAVA面試題(2)—— 基礎
【本文轉自極客原創 作者:張鋒
原文連結:https://mp.weixin.qq.com/s/mU8C7DDU-6-DdwAVk6z6tA】
什麼是值傳遞和引用傳遞?
值傳遞是對基本型變數而言的,傳遞的是該變數的一個副本,改變副本不影響原變數. 引用傳遞一般是對於物件型變數而言的,傳遞的是該物件地址的一個副本, 並不是原物件本身 。 一般認為,java內的傳遞都是值傳遞. java中例項物件的傳遞是引用傳遞 。
是否可以在static環境中訪問非static變數?
static變數在Java中是屬於類的,它在所有的例項中的值是一樣的。當類被Java虛擬機器載入的時候,會對static變數進行初始化。如果你的程式碼嘗試不用例項來訪問非static的變數,編譯器會報錯,因為這些變數還沒有被建立出來,還沒有跟任何例項關聯上。
解釋記憶體中的棧(stack)、堆(heap)和方法區(method area)的用法。
通常我們定義一個基本資料型別的變數,一個物件的引用,還有就是函式呼叫的現場儲存都使用JVM中的棧空間;而通過new關鍵字和構造器建立的物件則放在堆空間,堆是垃圾收集器管理的主要區域,由於現在的垃圾收集器都採用分代收集演算法,所以堆空間還可以細分為新生代和老生代,再具體一點可以分為Eden、Survivor(又可分為From Survivor和To Survivor)、Tenured;方法區和堆都是各個執行緒共享的記憶體區域,用於儲存已經被JVM載入的類資訊、常量、靜態變數、JIT編譯器編譯後的程式碼等資料;程式中的字面量(literal)如直接書寫的100、”hello”和常量都是放在常量池中,常量池是方法區的一部分,。棧空間操作起來最快但是棧很小,通常大量的物件都是放在堆空間,棧和堆的大小都可以通過JVM的啟動引數來進行調整,棧空間用光了會引發StackOverflowError,而堆和常量池空間不足則會引發OutOfMemoryError。
介面和抽象類的區別是什麼?
從設計層面來說,抽象是對類的抽象,是一種模板設計,介面是行為的抽象,是一種行為的規範。
Java提供和支援建立抽象類和介面。它們的實現有共同點,不同點在於: **介面中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。 **
類可以實現很多個介面,但是隻能繼承一個抽象類 類可以不實現抽象類和介面宣告的所有方法,當然,在這種情況下,類也必須得宣告成是抽象的。
抽象類可以在不提供介面方法實現的情況下實現介面。 **Java介面中宣告的變數預設都是final的。抽象類可以包含非final的變數。 Java介面中的成員函式預設是public的。抽象類的成員函式可以是private,protected或者是public。 **
介面是絕對抽象的,不可以被例項化。抽象類也不可以被例項化,但是,如果它包含main方法的話是可以被呼叫的。 也可以參考JDK8中抽象類和介面的區別。
String和StringBuilder、StringBuffer的區別?
Java平臺提供了兩種型別的字串:String和StringBuffer/StringBuilder,它們可以儲存和操作字串。其中String是隻讀字串,也就意味著String引用的字串內容是不能被改變的。而StringBuffer/StringBuilder類表示的字串物件可以直接進行修改。StringBuilder是Java 5中引入的,它和StringBuffer的方法完全相同,區別在於它是在單執行緒環境下使用的,因為它的所有方面都沒有被synchronized修飾,因此它的效率也比StringBuffer要高。
如果兩個鍵的hashcode相同,你如何獲取值物件?
當我們呼叫get()方法,HashMap會使用鍵物件的hashcode找到bucket位置,然後會呼叫keys.equals()方法去找到連結串列中正確的節點,最終找到要找的值物件。
HashMap和Hashtable有什麼區別?
1、HashMap是非執行緒安全的,HashTable是執行緒安全的。
2、HashMap的鍵和值都允許有null值存在,而HashTable則不行。
3、因為執行緒安全的問題,HashMap效率比HashTable的要高。
4、Hashtable是同步的,而HashMap不是。因此,HashMap更適合於單執行緒環境,而Hashtable適合於多執行緒環境。
一般現在不建議用HashTable, ①是HashTable是遺留類,內部實現很多沒優化和冗餘。②即使在多執行緒環境下,現在也有同步的ConcurrentHashMap替代,沒有必要因為是多執行緒而用HashTable。
如何決定選用HashMap還是TreeMap?
對於在Map中插入、刪除和定位元素這類操作,HashMap是最好的選擇。然而,假如你需要對一個有序的key集合進行遍歷,TreeMap是更好的選擇。基於你的collection的大小,也許向HashMap中新增元素會更快,將map換為TreeMap進行有序key的遍歷。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31137683/viewspace-2157195/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 那些經常被問的JAVA面試題(1)—— 集合部分Java面試題
- IOS面試經常被問到的問題iOS面試
- iOS面試中經常問的點 - 基礎問題(一)iOS面試
- java基礎面試題Java面試題
- Java面試之Java基礎問題答案口述整理Java面試
- Java基礎面試題下Java面試題
- java面試題--基礎上Java面試題
- 分享Java面試中的幾個重要基礎問題!Java面試
- 【搞定 Java 併發面試】面試最常問的 Java 併發基礎常見面試題總結!Java面試題
- 【Java面試】Java面試題基礎系列212道(上)Java面試題
- Java面試題-基礎篇一Java面試題
- Java面試題-基礎篇二Java面試題
- Java面試題-基礎篇四Java面試題
- Java面試題-基礎篇五Java面試題
- 面試題之:java基礎1面試題Java
- Java基礎知識面試題Java面試題
- Java面試題基礎篇(一)Java面試題
- Java面試題基礎篇(二)Java面試題
- Java面試題基礎篇(三)Java面試題
- JavaSE-Java基礎面試題Java面試題
- Android面試之Java基礎筆試題Android面試Java筆試
- Python基礎面試題30問!Python基礎教程Python面試題
- Java面試系列:Java面試題基礎系列228道(上)Java面試題
- 【Java】留下沒有基礎眼淚的面試題,java初級面試筆試題Java面試題筆試
- 面試題-測試工程師常見的基礎問題面試題工程師
- Redis的那些最常見面試問題Redis面試
- 【Java面試】Java基礎知識面試題—2020最新版!Java面試題
- 32道常見的Java基礎面試題Java面試題
- Java面試題總結之Java基礎(三)Java面試題
- Java基礎面試題整理-50題(附答案)Java面試題
- 如何準備Java的高階技術面試,java基礎面試筆試題Java面試筆試
- Python企業面試題2 —— 基礎篇Python面試題
- 面試問題記錄 一 (基礎部分)面試
- Java面試題-基礎篇三(乾貨)Java面試題
- 吐血整理!2萬字Java基礎面試題(帶答案)請收好!Java面試題
- 2019 JS經典面試題(基礎+高階)JS面試題
- 【Java面試題-基礎知識02】Java抽象類和介面六連問?Java面試題抽象
- 【Java】留下沒有基礎眼淚的面試題Java面試題