面試基礎(1)——JAVA

Java和C++的一些比較[Java] Excption與Error包結構,OOM和SOF1. 九種基本數據類型的大小,以及他們的封裝類。

注:基本數據類型在聲明時系統會自動給它分配空間,而引用類型聲明時只是分配了引用空間,必須通過實例化開辟數據空間之后才可以賦值

2.?Switch能否用string做參數?

JDK1.6的版本中,switch后面的括號里面只能放int類型的值,注意是只能放int類型,但是放byte,short,char類型的也可以。是因為byte,short,shar可以自動提升(自動類型轉換)為int。而不能放long型和String型。JDK1.7的版本中,switch中可以使用字串String。

注:String時不能傳入null作為參數,同時case語句中使用的字符串也不能為null,因為底層是通過equals和hashmap來判斷的

3.?equals與==的區別。

==用于判斷兩邊的變量的值是否相等,如果是基本數據類型,就是判斷他們的值是不是相等;如果==兩邊是對象的引用,那么指的是這兩個引用是否指向同一個對象,及引用的值是否相等。

equals()是Object里的方法。在Object的equals中,就是使用==來進行比較,比較的是引用。與==不同的是,在某些Object的子類中,覆蓋了equals()方法,比如String中的equals()方法比較兩個字符串對象的內容是否相同。

hashCode()方法也是繼承自Object,它用來獲取一個對象的hash值,返回int值。Object.hashCode規定,equals()相等的對象,它們的HashCode()返回值也必須相等,否則無法與集合類結合在一起使用。(List, Set, Hashmap..)

4.?Object有哪些公用方法?

Object是所有類的父類,任何類都默認繼承Object。

clone

保護方法,實現對象的淺復制,只有實現了Cloneable接口才可以調用該方法,否則拋出CloneNotSupportedException異常

equals

在Object中與==是一樣的,子類一般需要重寫該方法

hashCode

該方法用于哈希查找,重寫了equals方法一般都要重寫hashCode方法。這個方法在一些具有哈希功能的Collection中用到

getClass

final方法,獲得運行時類型

wait

使當前線程等待該對象的鎖,當前線程必須是該對象的擁有者,也就是具有該對象的鎖。wait()方法一直等待,直到獲得鎖或者被中斷。wait(long timeout)設定一個超時間隔,如果在規定時間內沒有獲得鎖就返回。

調用該方法后當前線程進入睡眠狀態,直到以下事件發生:

1. 其他線程調用了該對象的notify方法

2. 其他線程調用了該對象的notifyAll方法

3. 其他線程調用了interrupt中斷該線程

4. 時間間隔到了

此時該線程就可以被調度了,如果是被中斷的話就拋出一個InterruptedException異常

notify

喚醒在該對象上等待的某個線程

notifyAll

喚醒在該對象上等待的所有線程

toString

轉換成字符串,一般子類都有重寫,否則打印句柄

5.?Java的四種引用,強弱軟虛,用到的場景。

1、強引用

強引用不會被GC回收,并且在java.lang.ref里也沒有實際的對應類型,平時工作接觸的最多的就是強引用。

Object obj = new Object();這里的obj引用便是一個強引用。如果一個對象具有強引用,那就類似于必不可少的生活用品,垃圾回收器絕不會回收它。當內存空 間不足,Java虛擬機寧愿拋出OutOfMemoryError錯誤,使程序異常終止,也不會靠隨意回收具有強引用的對象來解決內存不足問題。

2、軟引用

如果一個對象只具有軟引用,那就類似于可有可物的生活用品。如果內存空間足夠,垃圾回收器就不會回收它,如果內存空間不足了,就會回收這些對象的內存。只 要垃圾回收器沒有回收它,該對象就可以被程序使用。軟引用可用來實現內存敏感的高速緩存。 軟引用可以和一個引用隊列(ReferenceQueue)聯合使用,如果軟引用所引用的對象被垃圾回收,Java虛擬機就會把這個軟引用加入到與之關聯的引用隊列中

3、弱引用

如果一個對象只具有弱引用,那就類似于可有可物的生活用品。弱引用與軟引用的區別在于:只具有弱引用的對象擁有更短暫的生命周期。在垃圾回收器線程掃描它所管轄的內存區域的過程中,一旦發現了只具有弱引用的對象,不管當前內存空間足夠與否,都會回收它的內存。不過,由于垃圾回收器是一個優先級很低的線程, 因此不一定會很快發現那些只具有弱引用的對象。 弱引用可以和一個引用隊列(ReferenceQueue)聯合使用,如果弱引用所引用的對象被垃圾回 收,Java虛擬機就會把這個弱引用加入到與之關聯的引用隊列中。

4、幽靈引用(虛引用)

虛引用主要用來跟蹤對象被垃圾回收器回收的活動。虛引用與軟引用和弱引用的一個區別在于:虛引用必須和引用隊列 (ReferenceQueue)聯合使用。當垃圾回收器準備回收一個對象時,如果發現它還有虛引用,就會在回收對象的內存之前,把這個虛引用加入到與之關聯的引用隊列中。程序可以通過判斷引用隊列中是否已經加入了虛引用,來了解被引用的對象是否將要被垃圾回收。如果程序發現某個虛引用已經被加入到引用隊列,那么就可以在所引用的對象的內存被回收之前采取必要的行動。由于Object.finalize()方法的不安全性、低效性,常常使用虛引用完成對象回收前的資源釋放工作。

四種引用

6.?Hashcode的作用。

hashCode方法的主要作用是為了配合基于散列的集合一起正常運行,這樣的散列集合包括HashSet、HashMap以及HashTable。

為什么這么說呢?考慮一種情況,當向集合中插入對象時,如何判別在集合中是否已經存在該對象了?(注意:集合中不允許重復的元素存在)。比equals 更加有效率。

因此有人會說,可以直接根據hashcode值判斷兩個對象是否相等嗎?肯定是不可以的,因為不同的對象可能會生成相同的hashcode值。雖然不能根據hashcode值判斷兩個對象是否相等,但是可以直接根據hashcode值判斷兩個對象不等,如果兩個對象的hashcode值不等,則必定是兩個不同的對象。如果要判斷兩個對象是否真正相等,必須通過equals方法。

也就是說對于兩個對象,如果調用equals方法得到的結果為true,則兩個對象的hashcode值必定相等;

如果equals方法得到的結果為false,則兩個對象的hashcode值不一定不同;

如果兩個對象的hashcode值不等,則equals方法得到的結果必定為false;

如果兩個對象的hashcode值相等,則equals方法得到的結果未知。

在有些情況下,程序設計者在設計一個類的時候為需要重寫equals方法,比如String類,但是千萬要注意,在重寫equals方法的同時,必須重寫hashCode方法。

7.?ArrayList、LinkedList、Vector的區別。

1、ArrayList、Vector、LinkedList類都是java.util包中,均為可伸縮數組。

2、ArrayList和Vector底層都是數組實現的,所以,索引數據快,刪除、插入數據慢。

ArrayList采用異步的方式,性能好,屬于非線程安全的操作類。(JDK1.2)

Vector采用同步的方式,性能較低,屬于線程安全的操作類。(JDK1.0)

3、LinkedList底層是鏈表實現,所以,索引慢,刪除、插入快,屬于非線程安全的操作類。

ArrayList、LinkedList、Vector的區別

8.?String、StringBuffer與StringBuilder的區別。

stringBuffer、StringBuilder和String一樣,也用來代表字符串。String類是不可變類,任何對String的改變都 會引發新的String對象的生成;StringBuffer則是可變類,任何對它所指代的字符串的改變都不會產生新的對象.

StringBufferd支持并發操作,線性安全的,適 合多線程中使用。StringBuilder不支持并發操作,線性不安全的,不適合多線程中使用。新引入的StringBuilder類不是線程安全的,但其在單線程中的性能比StringBuffer高。

9.?Map、Set、List、Queue、Stack的特點與用法。

Collection 是對象集合, Collection 有兩個子接口 List 和 Set

List?可以通過下標?(1,2..)?來取得值,值可以重復

而?Set?只能通過游標來取值,并且值是不能重復的

ArrayList?,?Vector?,?LinkedList?是?List?的實現類

ArrayList?是線程不安全的,?Vector?是線程安全的,這兩個類底層都是由數組實現的

LinkedList?是線程不安全的,底層是由鏈表實現的

Map?是鍵值對集合

HashTable?和?HashMap?是?Map?的實現類

HashTable?是線程安全的,不能存儲?null?值

HashMap?不是線程安全的,可以存儲?null?值

Stack類:繼承自Vector,實現一個后進先出的棧。提供了幾個基本方法,push、pop、peak、empty、search等。

Queue接口:提供了幾個基本方法,offer、poll、peek等。已知實現類有LinkedList、PriorityQueue等。

Map

Map是鍵值對,鍵Key是唯一不能重復的,一個鍵對應一個值,值可以重復。

TreeMap可以保證順序,HashMap不保證順序,即為無序的。

Map中可以將Key和Value單獨抽取出來,其中KeySet()方法可以將所有的keys抽取正一個Set。而Values()方法可以將map中所有的values抽取成一個集合。

Set

不包含重復元素的集合,set中最多包含一個null元素

只能用Lterator實現單項遍歷,Set中沒有同步方法。

List

有序的可重復集合。

可以在任意位置增加刪除元素。

用Iterator實現單向遍歷,也可用ListIterator實現雙向遍歷

Queue

Queue遵從先進先出原則。

使用時盡量避免add()和remove()方法,而是使用offer()來添加元素,使用poll()來移除元素,它的優點是可以通過返回值來判斷是否成功。

LinkedList實現了Queue接口。

Queue通常不允許插入null元素。

Stack

Stack遵從后進先出原則。

Stack繼承自Vector。

它通過五個操作對類Vector進行擴展,允許將向量視為堆棧,它提供了通常的push和pop操作,以及取堆棧頂點的peek()方法、測試堆棧是否為空的empty方法等

用法

如果涉及堆棧,隊列等操作,建議使用List

對于快速插入和刪除元素的,建議使用LinkedList

如果需要快速隨機訪問元素的,建議使用ArrayList

參考資料:http://blog.csdn.net/Amazing7/article/details/51119893

10.?HashMap和HashTable的區別。

1 HashMap不是線程安全的

HashMap是map接口的子類,是將鍵映射到值的對象,其中鍵和值都是對象,并且不能包含重復鍵,但可以包含重復值。HashMap允許null key和null value,而hashtable不允許。

2?? HashTable是線程安全。

HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了Map接口,主要區別在于HashMap允許空(null)鍵值(key),由于非線程安全,效率上可能高于Hashtable。

11.?HashMap和ConcurrentHashMap的區別,HashMap的底層源碼。

Hashmap本質是數組加鏈表。根據key取得hash值,然后計算出數組下標,如果多個key對應到同一個下標,就用鏈表串起來,新插入的在前面。

ConcurrentHashMap:在hashMap的基礎上,ConcurrentHashMap將數據分為多個segment,默認16個(concurrency level),然后每次操作對一個segment加鎖,避免多線程鎖的幾率,提高并發效率。

HashMap和ConcurrentHashMap的區別,HashMap的底層源碼。

12.?TreeMap、HashMap、LindedHashMap的區別。

共同點:

HashMap,LinkedHashMap,TreeMap都屬于Map;Map 主要用于存儲鍵(key)值(value)對,根據鍵得到值,因此鍵不允許鍵重復,但允許值重復。

不同點:

1.HashMap里面存入的鍵值對在取出的時候是隨機的,也是我們最常用的一個Map.它根據鍵的HashCode值存儲數據,根據鍵可以直接獲取它的值,具有很快的訪問速度。在Map 中插入、刪除和定位元素,HashMap 是最好的選擇。

2.TreeMap取出來的是排序后的鍵值對。但如果您要按自然順序或自定義順序遍歷鍵,那么TreeMap會更好。

3. LinkedHashMap 是HashMap的一個子類,如果需要輸出的順序和輸入的相同,那么用LinkedHashMap可以實現. ?(應用場景:購物車等需要順序的)

13.?Collection包結構,與Collections的區別。

Collection是集合類的一個頂級接口,其直接繼承接口有List與Set

而Collections則是集合類的一個工具類/幫助類,其中提供了一系列靜態方法,用于對集合中元素進行排序、搜索以及線程安全等各種操作。

Collection是個java.util下的接口,它是各種集合結構的父接口。

Collections是個java.util下的類,它包含有各種有關集合操作的靜態方法。

Collection

1、Collection是集合類的頂級接口;

2、實現接口和類主要有Set、List、LinkedList、ArrayList、Vector、Stack、Set;

Collections

1、是針對集合類的一個幫助類,提供操作集合的工具方法;

2、一系列靜態方法實現對各種集合的搜索、排序、線程安全化等操作;

3、服務于Java的Collection的框架;

14.?try?catch?finally,try里有return,finally還執行么?

1、不管有木有出現異常,finally塊中代碼都會執行;

2、當try和catch中有return時,finally仍然會執行;

3、finally是在return后面的表達式運算后執行的(此時并沒有返回運算后的值,而是先把要返回的值保存起來,管finally中的代碼怎么樣,返回的值都不會改變,任然是之前保存的值),所以函數返回值是在finally執行前確定的;

4、finally中最好不要包含return,否則程序會提前退出,返回值不是try或catch中保存的返回值。

15.?Excption與Error包結構。OOM你遇到過哪些情況,SOF你遇到過哪些情況。

Android的OOM(Out Of Memory)

當內存占有量超過了虛擬機的分配的最大值時就會產生內存溢出(VM里面分配不出更多的page)。

一般出現情況:加載的圖片太多或圖片過大時、分配特大的數組、內存相應資源過多沒有來不及釋放。

解決方法:

①在內存引用上做處理

軟引用是主要用于內存敏感的高速緩存。在jvm報告內存不足之前會清除所有的軟引用,這樣以來gc就有可能收集軟可及的對象,可能解決內存吃緊問題,避免內存溢出。什么時候會被收集取決于gc的算法和gc運行時可用內存的大小。

②對圖片做邊界壓縮,配合軟引用使用

③顯示的調用GC來回收內存

Android內存管理之道

SOF (堆棧溢出 StackOverflow)

StackOverflowError 的定義:

當應用程序遞歸太深而發生堆棧溢出時,拋出該錯誤。

因為棧一般默認為1-2m,一旦出現死循環或者是大量的遞歸調用,在不斷的壓棧過程中,造成棧容量超過1m而導致溢出。

棧溢出的原因:

遞歸調用

大量循環或死循環

全局變量是否過多

數組、List、map數據過大

[Java] Excption與Error包結構,OOM和SOF

16.?Java面向對象的三個特征與含義。

面向對象的三個特征與含義

17.?Override和Overload的含義去區別。

方法的重寫(Overriding)和重載(Overloading)是Java多態性的不同表現。

重寫(Overriding)是父類與子類之間多態性的一種表現,而重載(Overloading)是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding) 。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被"屏蔽"了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型或有不同的參數次序,則稱為方法的重載(Overloading)。不能通過訪問權限、返回類型、拋出的異常進行重載。

1. Override 特點

1、覆蓋的方法的標志必須要和被覆蓋的方法的標志完全匹配,才能達到覆蓋的效果;

2、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;

3、覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致,或者是其子類;

4、方法被定義為final不能被重寫。

5、對于繼承來說,如果某一方法在父類中是訪問權限是private,那么就不能在子類對其進行重寫覆蓋,如果定義的話,也只是定義了一個新方法,而不會達到重寫覆蓋的效果。(通常存在于父類和子類之間。)

2.Overload 特點

1、在使用重載時只能通過不同的參數樣式。例如,不同的參數類型,不同的參數個數,不同的參數順序(當然,同一方法內的幾個參數類型必須不一樣,例如可以是fun(int, float), 但是不能為fun(int, int));

2、不能通過訪問權限、返回類型、拋出的異常進行重載;

3、方法的異常類型和數目不會對重載造成影響;

4、重載事件通常發生在同一個類中,不同方法之間的現象。

5、存在于同一類中,但是只有虛方法和抽象方法才能被覆寫。

其具體實現機制:

overload是重載,重載是一種參數多態機制,即代碼通過參數的類型或個數不同而實現的多態機制。 是一種靜態的綁定機制(在編譯時已經知道具體執行的是哪個代碼段)。

override是覆蓋。覆蓋是一種動態綁定的多態機制。即在父類和子類中同名元素(如成員函數)有不同 的實現代碼。執行的是哪個代碼是根據運行時實際情況而定的。

18.?Interface與abstract類的區別。

abstract類

1、抽象類不能被實例化,實例化的工作應該交由它的子類來完成,它只需要有一個引用即可。

2、抽象方法必須由子類來進行重寫。

3、只要包含一個抽象方法的抽象類,該方法必須要定義成抽象類,不管是否還包含有其他方法。

4、抽象類中可以包含具體的方法,當然也可以不包含抽象方法。

5、子類中的抽象方法不能與父類的抽象方法同名。

6、abstract不能與final并列修飾同一個類。

7、abstract 不能與private、static、final或native并列修飾同一個方法。

接口

1、個Interface的方所有法訪問權限自動被聲明為public。確切的說只能為public,當然你可以顯示的聲明為protected、private,但是編譯會出錯!

2、接口中可以定義“成員變量”,或者說是不可變的常量,因為接口中的“成員變量”會自動變為為public static final。可以通過類命名直接訪問:ImplementClass.name。

3、接口中不存在實現的方法。

4、實現接口的非抽象類必須要實現該接口的所有方法。抽象類可以不用實現。

5、不能使用new操作符實例化一個接口,但可以聲明一個接口變量,該變量必須引用(refer to)一個實現該接口的類的對象。可以使用 instanceof 檢查一個對象是否實現了某個特定的接口。例如:if(anObject instanceof Comparable){}。

6、在實現多接口的時候一定要避免方法名的重復。

Interface與abstract類的區別

19.?Static?class?與non?static?class的區別。

Static class

1、用static修飾的是內部類,此時這個

內部類變為靜態內部類;對測試有用;

2、內部靜態類不需要有指向外部類的引用;

3、靜態類只能訪問外部類的靜態成員,不能訪問外部類的非靜態成員;

non static class

1、非靜態內部類需要持有對外部類的引用;

2、非靜態內部類能夠訪問外部類的靜態和非靜態成員;

3、一個非靜態內部類不能脫離外部類實體被創建;

4、一個非靜態內部類可以訪問外部類的數據和方法;

20.?java多態的實現原理。

java多態實現原理

深入理解JAVA多態原理

21.?實現多線程的兩種方法:Thread與Runable。

Java有兩種方式實現多線程,第一個是繼承Thread類,第二個是實現Runnable接口。他們之間的聯系:

1、Thread類實現了Runable接口。

2、都需要重寫里面Run方法。

他們之間的區別“

1、實現Runnable的類更具有健壯性,避免了單繼承的局限。

2、Runnable更容易實現資源共享,能多個線程同時處理一個資源。

Thread與Runnable兩種多線程方式

22.?線程同步的方法:sychronized、lock、reentrantLock等。

線程同步的方法:sychronized、lock、reentrantLock等總結分析

23.?鎖的等級:方法鎖、對象鎖、類鎖。

java synchronized關鍵字的用法以及鎖的等級:方法鎖、對象鎖、類鎖

24.?寫出生產者消費者模式。

生產者消費者模式-Java實現

25.?ThreadLocal的設計理念與作用。

ThreadLocal的設計理念與作用

ThreadLocal的設計與使用(原理篇)

26.?ThreadPool用法與優勢。

【Java高級】ThreadPool用法與優勢

線程池ThreadPoolExecutor使用簡介

27.?Concurrent包里的其他東西:ArrayBlockingQueue、CountDownLatch等等。

java.util.concurrent包分成了三個部分,分別是java.util.concurrent、java.util.concurrent.atomic和java.util.concurrent.lock。內容涵蓋了并發集合類、線程池機制、同步互斥機制、線程安全的變量更新工具類、鎖等等常用工具。

BlockingQueue接口定義了一種阻塞的FIFO queue,每一個BlockingQueue都有一個容量,讓容量滿時往BlockingQueue中添加數據時會造成阻塞,當容量為空時取元素操作會阻塞。

ArrayBlockingQueue是一個由數組支持的有界阻塞隊列。在讀寫操作上都需要鎖住整個容器,因此吞吐量與一般的實現是相似的,適合于實現“生產者消費者”模式。

ArrayBlockingQueue和LinkedBlockingQueue的使用

CountDownLatch是JAVA提供在java.util.concurrent包下的一個輔助類,可以把它看成是一個計數器,其內部維護著一個count計數,只不過對這個計數器的操作都是原子操作,同時只能有一個線程去操作這個計數器,CountDownLatch通過構造函數傳入一個初始計數值,調用者可以通過調用CounDownLatch對象的cutDown()方法,來使計數減1;如果調用對象上的await()方法,那么調用者就會一直阻塞在這里,直到別人通過cutDown方法,將計數減到0,才可以繼續執行。

什么時候使用CountDownLatch

28.?wait()和sleep()的區別。

對于sleep()方法,我們首先要知道該方法是屬于Thread類中的。而wait()方法,則是屬于Object類中的。

sleep()方法導致了程序暫停執行指定的時間,但是他的監控狀態依然保持者,當指定的時間到了又會自動恢復運行狀態。在調用sleep()方法的過程中,線程不會釋放對象鎖。而且sleep()只能自己到點了醒來,不能被喚醒。

wait()方法的時候,線程會放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象調用notify()方法后本線程才進入對象鎖定池,準備獲取對象鎖進入運行狀態。

sleep和wait區別

java sleep和wait的區別的疑惑

29.?foreach與正常for循環效率對比。

需要循環數組結構的數據時,建議使用普通for循環,因為for循環采用下標訪問,對于數組結構的數據來說,采用下標訪問比較好。

需要循環鏈表結構的數據時,一定不要使用普通for循環,這種做法很糟糕,數據量大的時候有可能會導致系統崩潰。

Java for循環和foreach循環的性能比較

30.?Java?IO與NIO。

NIO vs IO之間的理念上面的區別(NIO將阻塞交給了后臺線程執行)

IO是面向流的,NIO是面向緩沖區的

Java IO面向流意味著每次從流中讀一個或多個字節,直至讀取所有字節,它們沒有被緩存在任何地方;

NIO則能前后移動流中的數據,因為是面向緩沖區的

IO流是阻塞的,NIO流是不阻塞的

Java IO的各種流是阻塞的。這意味著,當一個線程調用read() 或 write()時,該線程被阻塞,直到有一些數據被讀取,或數據完全寫入。該線程在此期間不能再干任何事情了

Java NIO的非阻塞模式,使一個線程從某通道發送請求讀取數據,但是它僅能得到目前可用的數據,如果目前沒有數據可用時,就什么都不會獲取。NIO可讓您只使用一個(或幾個)單線程管理多個通道(網絡連接或文件),但付出的代價是解析數據可能會比從一個阻塞流中讀取數據更復雜。

非阻塞寫也是如此。一個線程請求寫入一些數據到某通道,但不需要等待它完全寫入,這個線程同時可以去做別的事情。

選擇器

Java NIO的選擇器允許一個單獨的線程來監視多個輸入通道,你可以注冊多個通道使用一個選擇器,然后使用一個單獨的線程來“選擇”通道:這些通道里已經有可以處理的輸入,或者選擇已準備寫入的通道。這種選擇機制,使得一個單獨的線程很容易來管理多個通道。

Java NIO 與 IO之間的區別

Java NIO與IO的區別和比較

Java NIO系列教程(十二) Java NIO與IO

31.?反射的作用與原理。

Java反射的作用

反射(一)----原理機制和基本運用

32.?泛型常用特點,List能否轉為List。

java泛型詳解

Java技術----Java泛型詳解

Java總結篇系列:Java泛型

33.?解析XML的幾種方式的原理與特點:DOM、SAX、PULL。

三種高效解析xml方式

34.?Java與C++對比。

Java和C++的一些比較

35.?Java1.7與1.8新特性。

jdk1.7和jdk1.8區別

36.?設計模式:單例、工廠、適配器、責任鏈、觀察者等等。

23種設計模式全解析

設計模式 | 菜鳥教程

37.?JNI的使用。

Java中JNI的使用詳解第一篇:HelloWorld

嘔心瀝血Android studio使用JNI實例


Java里有很多很雜的東西,有時候需要你閱讀源碼,大多數可能書里面講的不是太清楚,需要你在網上尋找答案。

推薦書籍:《java核心技術卷I》《Thinking?in?java》《java并發編程》《effictive?java》《大話設計模式》

參考

幾道常問的題

面試中的一些問題——JAVA(一)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,766評論 18 399
  • 從三月份找實習到現在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發崗...
    時芥藍閱讀 42,367評論 11 349
  • Java8張圖 11、字符串不變性 12、equals()方法、hashCode()方法的區別 13、...
    Miley_MOJIE閱讀 3,731評論 0 11
  • (一)Java部分 1、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨云閱讀 7,142評論 0 62
  • 日本冒險家大場滿郎是是世界上第一個獨自徒步橫跨北極和南極的人。從1994年開始,大場滿郎曾三次試圖單人徒步橫跨北冰...
    f592aad0364c閱讀 869評論 0 0