1、集合類 : set 無序,惟一 map list 有序,可重複java
a) Hashset 底層數據結構是哈希表。 哈希表依賴兩個方法:hashCode()和equals()數組
執行順序:
首先判斷hashCode()值是否相同
是:繼續執行equals(),看其返回值
是true:說明元素重複,不添加
是false:就直接添加到集合
否:就直接添加到集合安全
b) Hashmap 底層數據結構是哈希表。線程不安全,效率高session
c) Hashtable 底層數據結構是哈希表。線程安全,效率低數據結構
d) Arraylist 底層數據結構是數組,查詢快,增刪慢 線程不安全,效率高多線程
e) Linkedlist 底層數據結構是鏈表,查詢慢,增刪快 線程不安全,效率高app
f) Treeset 底層數據結構是紅黑樹。(是一種自平衡的二叉樹)jsp
兩種方式
天然排序(元素具有比較性)
讓元素所屬的類實現Comparable接口
比較器排序(集合具有比較性)
讓集合接收一個Comparator的實現類對象函數
g) Treemap 底層數據結構是紅黑樹。(是一種自平衡的二叉樹)學習
h) Vector 底層數據結構是數組,查詢快,增刪慢 線程安全,效率低
i) LinkedHashSet 底層數據結構由鏈表和哈希表組成。
由鏈表保證元素有序,由哈希表保證元素惟一。
j) LinkedHashMap 底層數據結構由鏈表和哈希表組成。
2、
數組Array和列表ArrayList的區別:
Array能夠包含基本的數據類型和對象類型,ArratList只能包含對象類型
Array大小是固定的,ArrayList的大小是動態變化的
ArrayList提供了更多的方法和特性,addAll(),removeAll()等。
3、
LinkedList和ArrayList的區別:
都實現了List接口,
ArrayList是基於索引的數據接口,它的底層是數組,以時間複雜度對元素隨機訪問
LinkedList是以元素列表的形式存儲它的數據,每個元素都和它的前一個和後一個元素連接在一塊兒;
相對於ArrayList,LinkedList的插入、刪除操做速度更快,不須要像數組計算大小和更新索引,但LinkedList更加佔用內存。
4、
迭代器:Iterator接口提供了不少對集合元素進行迭代的方法。每個集合類都包含了能夠返回迭代器實例 的迭代方法。迭代氣能夠在迭代的過程當中刪除底層集合的元素。
5、
HashMap 和 Hashtable 有什麼區別:
都實現了map接口
Hashmap的鍵和值能夠爲null,而hashtable不容許鍵或值是null
Hashtable是同步的(多線程環境),而hashmap不是(單線程的環境)
Hashmap提供了能夠選擇應用的鍵的集合,hashtable提供了對鍵的列舉
6、
HashSet和TreeSet的區別:
HashSet是有一個hash表來實現的,所以他的元素是無序的,add() remove() 等方法
TreeSet是由一個樹形的結構來實現的,它的元素是有序的。
7、
break:做用於switch ,和循環語句,用於跳出,或者稱爲結束。
break語句單獨存在時,下面不要定義其餘語句,由於執行不到,編譯會失敗。當循環嵌套時,break只跳出當前所在循環。要跳出嵌套中的外部循環,只要給循環起名字便可,這個名字稱之爲標號。
continue:只做用於循環結構,繼續循環用的。
做用:結束本次循環,繼續下次循環。該語句單獨存在時,下面不能夠定義語句,執行不到。
8、
接口和抽象類的區別是什麼?
Java提供和支持建立抽象類和接口。它們的實現有共同點,不一樣點在於:
接口中全部的方法隱含的都是抽象的。而抽象類則能夠同時包含抽象和非抽象的方法。
類能夠實現不少個接口,可是隻能繼承一個抽象類
類能夠不實現抽象類和接口聲明的全部方法,固然,在這種狀況下,類也必須得聲明成是抽象的。
抽象類能夠在不提供接口方法實現的狀況下實現接口。
Java接口中聲明的變量默認都是final的。抽象類能夠包含非final的變量。
Java接口中的成員函數默認是public的。抽象類的成員函數能夠是private,protected或者是public。
接口是絕對抽象的,不能夠被實例化。抽象類也不能夠被實例化,可是,若是它包含main方法的話是能夠被調用的。
9、
Java支持多繼承麼?
Java中類不支持多繼承,只支持單繼承(即一個類只有一個父類)。 可是java中的接口支持多繼承,,即一個子接口能夠有多個父接口。(接口的做用是用來擴展對象的功能,一個子接口繼承多個父接口,說明子接口擴展了多個功能,當類實現接口時,類就擴展了相應的功能)。
10、
什麼是值傳遞和引用傳遞?
值傳遞是對基本型變量而言的,傳遞的是該變量的一個副本,改變副本不影響原變量.
引用傳遞通常是對於對象型變量而言的,傳遞的是該對象地址的一個副本, 並非原對象自己 。 因此對引用對象進行操做會同時改變原對象.
通常認爲,java內的傳遞都是值傳遞.
11、
1. 新建( new ):新建立了一個線程對象。
2. 可運行( runnable ):線程對象建立後,其餘線程(好比 main 線程)調用了該對象 的 start ()方法。該狀態的線程位於可運行線程池中,等待被線程調度選中,獲 取 cpu 的使用權 。
3. 運行( running ):可運行狀態( runnable )的線程得到了 cpu 時間片( timeslice ) ,執行程序代碼。
4. 阻塞( block ):阻塞狀態是指線程由於某種緣由放棄了 cpu 使用權,也即讓出了 cpu timeslice ,暫時中止運行。直到線程進入可運行( runnable )狀態,纔有 機會再次得到 cpu timeslice 轉到運行( running )狀態。阻塞的狀況分三種:
(一). 等待阻塞:運行( running )的線程執行 o . wait ()方法, JVM 會把該線程放 入等待隊列( waitting queue )中。
(二). 同步阻塞:運行( running )的線程在獲取對象的同步鎖時,若該同步鎖 被別的線程佔用,則 JVM 會把該線程放入鎖池( lock pool )中。
(三). 其餘阻塞: 運行( running )的線程執行 Thread . sleep ( long ms )或 t . join ()方法,或者發出了 I / O 請求時, JVM 會把該線程置爲阻塞狀態。 當 sleep ()狀態超時、 join ()等待線程終止或者超時、或者 I / O 處理完畢時,線程從新轉入可運行( runnable )狀態。
5. 死亡( dead ):線程 run ()、 main () 方法執行結束,或者因異常退出了 run ()方法,則該線程結束生命週期。死亡的線程不可再次復生。
12、
同步方法和同步代碼塊的區別是什麼?
同步方法默認用this或者當前類class對象做爲鎖;
同步代碼塊能夠選擇以什麼來加鎖,比同步方法要更細顆粒度,咱們能夠選擇只同步會發生同步問題的部分代碼而不是整個方法;
十3、
Iterator和ListIterator的區別是什麼?
Iterator可用來遍歷Set和List集合,可是ListIterator只能用來遍歷List。
Iterator對集合只能是前向遍歷,ListIterator既能夠前向也能夠後向。
ListIterator實現了Iterator接口,幷包含其餘的功能,好比:增長元素,替換元素,獲取前一個和後一個元素的索引,等等。
十4、
Try catch finally throw throws
try塊表示程序正常的業務執行代碼。若是程序在執行try塊的代碼時出現了「非預期」狀況,JVM將會生成一個異常對象,這個異常對象將會被後面相應的catch塊捕獲。
catch塊表示一個異常捕獲塊。當程序執行try塊引起異常時,這個異常對象將會被後面相應的catch塊捕獲。
throw用於手動地拋出異常對象。throw後面須要一個異常對象。
throws用於在方法簽名中聲明拋出一個或多個異常類,throws關鍵字後能夠緊跟一個或多個異常類。
finally塊表明異常處理流程中總會執行的代碼塊。
對於一個完整的異常處理流程而言,try塊是必須的,try塊後能夠緊跟一個或多個catch塊,最後還能夠帶一個finally塊。
try塊中能夠拋出異常。
十5、
JSP九大內置對象
四個做用域
十6、
Object自帶的方法:
a) Equals
b) Hashcode
c) Notify
d) Wait
e) Clone
f) Tostring
g) Getclass 返回此object類的運行時態
十7、
解釋一下Applet的生命週期
applet能夠經歷下面的狀態:
Init:每次被載入的時候都會被初始化。
Start:開始執行applet。
Stop:結束執行applet。
Destroy:卸載applet以前,作最後的清理工做。
十8、
Java集合類裏面最基本的接口有:
Collection:表明一組對象,每個對象都是它的子元素。
Set:不包含重複元素的Collection。
List:有順序的collection,而且能夠包含重複元素。
Map:能夠把鍵(key)映射到值(value)的對象,鍵不能重複。
十9、猴子吃桃
public class lianxi17 {
public static void main(String[] args) {
int x = 1;
for(int i=2; i<=10; i++) {
x = (x+1)*2;
}
System.out.println("猴子第一天摘了 " + x + " 個桃子");
}
}
二10、
Java堆的結構是什麼樣子的?什麼是堆中的永久代(Perm Gen space)?
JVM的堆是運行時數據區,全部類的實例和數組都是在堆上分配內存。它在JVM啓動的時候被建立。對象所佔的堆內存是由自動內存管理系統也就是垃圾收集器回收。
堆內存是由存活和死亡的對象組成的。存活的對象是應用能夠訪問的,不會被垃圾回收。死亡的對象是應用不可訪問尚且尚未被垃圾收集器回收掉的對象。一直到垃圾收集器把這些對象回收掉以前,他們會一直佔據堆內存空間。