標籤:
1.關於類型初始化
對於類的成員變數,編譯系統會自動賦予初值,但必須先定義才能使用,可以不必初始化
類的成員資料類型的預設值是:
boolean:false byte:0 short:0 char:‘\u0000‘ int:‘0‘ float:0.0F double:0.0 object:null
但局部變數,不但要先定義,而且還必須要初始化,否則會報錯。
******************************************************************************************
2.傳值與傳引用
java中8種基礎資料型別 (Elementary Data Type),在傳入方法時,是將其副本傳入方法中,在方法中對其操作,當方法返回時,其值仍保持方法調用前的狀態。
其他類型,例如map,list,數組,等對象傳入方法是,是將其引用直接傳入,在方法中對其操作,當方法返回時,方法中改變的數值仍將保留。
測試代碼:
View Code
******************************************************************************************
3.Map中的參數類型,必須為對象,不能使基本類型,要重寫hashcode和equles兩個方法。List也是一樣。
******************************************************************************************
4.java:[類型(位元組)] byte(1) short(2) int(4) long(8) flout(4) double(8)(可有E表示冪次) char(2) boolean(1bit)
c: char(1) int(4) short int(2) long int(4) double(8)
******************************************************************************************
5.HashMap與HashTable的區別
(1)HashMap、HashTable均實現了Map介面。HashTable繼承與Dictionary類。HashMap中可以有null Key和null Value,但其Key必須唯一。而HashTable中不允許NULL值的出現。
(2)HashMap不是安全執行緒的,HashTable是安全執行緒的。HashMap是HashTable的輕量級實現。
******************************************************************************************
6.Collection、List、Set、Map的關係
(1)Collection是List、Set的基底介面。List在Collection的基礎上增加了有序。Set在Collection的基礎上增加了唯一。並且JAVA JDK不提供直接繼承Collection的類,只有繼承與List和Set的類。有iterator()方法。可以遍曆其子項。
(2)Map是與Collection並列的介面。是Key-Value的映射。
******************************************************************************************
7.ArrayList與Vector的區別
(1)同步性:Vector是安全執行緒的。ArrayList是線程不安全的。安全執行緒的弱點是,實現複雜,效率低。
(2)資料增長:當資料數目超出了數組的長度,則需要拓展數組的長度。ArrayList是延長原長度的50%,Vector是延長原數組的一倍。
******************************************************************************************
8.String、StringBuffer和StringBuilder
(1)本質比較:String是常量字元數組,當其值改變時,必須重新執行個體;StringBuffer是字串變數,安全執行緒;StringBuilder也是字串變數,非安全執行緒。
(2)速度比較:在改變長度或內容的條件下,StringBuilder>StringBuffer>String。注意String s = "a"+"b"+"c";在JVM中與String s = "abc";是等價的。
(3)StringBuffer可以理解為是一個String的字元緩衝區,他可以通過append和insert來改變其內容。append是在其尾追加內容,例如z引用當前內容是"start",執行z.append("le")後,其內容變為"startle"。而執行z.insert(4,"le")後,其內容變為"starlet"。StringBuilder是在5.0退出的StringBuffer的輕量級替代類,在無多線程共用變數的情況下,速度快。其中的方法與StringBuffer類似。
******************************************************************************************
9.switch(A){case B:}
其中A部分必須是int型的,或者能隱式轉換到int型(byte,short,char,int),或者enum中的項。
B部分必須是單個的byte,short,char,int型,或者是final型,final型必須是編譯時間的常量。
******************************************************************************************
10.try{return;}finally{}中,return在finally執行之後執行。
******************************************************************************************
11.try{}catch{syso("1")}catch{syso("2")}finally{syso("3")} syso("4")
其中catch不能級聯,當第一個catch結束後,將執行finally中的內容。執行完後,將繼續順序執行try..catch塊後的內容。
******************************************************************************************
12.JAVA的JVM的記憶體可分為3個區:堆(heap)、棧(stack)和方法區(method)
參考:http://www.blogjava.net/yaoyaojj/archive/2011/07/31/355438.html
http://java-mzd.iteye.com/blog/848635
******************************************************************************************
13.抽象類別不能被執行個體化
******************************************************************************************
14.這些都是安全執行緒的
HashTable Vector StringBuffer ConcurrentLinkedQueue ConcurrentHashMap
******************************************************************************************
15.N各節點能組成多少種二叉樹
h(n)= C(n,2n)/n+1
******************************************************************************************
16.Java裡面對象的生命週期
在JVMRunspace裡面,對象整個聲明周期大致分為以下幾個階段:
建立階段(Creating)->應用階段(Using)->不可視階段(Invisible)->不可達階段(Unreachable)->可收集階段(Collected)->終結階段(Finalized)->釋放階段(Free)
【1】建立階段:
建立過程需要經過其中幾步:
為對象分配記憶體空間
開始構造對象
遞迴調用超類的構造方法
進行對象執行個體初始化和變數初始化
執行構造方法體
【2】應用階段特徵:
系統至少維護著對象的一個強引用(StrongReference)
所有該對象的引用全部是強引用,除非我們顯示聲明了軟引用、弱引用或者虛引用
【3】不可是視階段:
不可視階段就是我們在地區代碼中不可以再引用它,就是強引用已經消失,一般情況我們把這個時候的對象設定為null,其主要目的是讓JVM發現它,並且可以及時回收該對象所佔用資源
【4】不可到達階段:
不可達階段的對象,在虛擬機器所管理的對象引用根集合中再也找不到直接或間接的強引用,這些對象通常是指所有線程棧中的臨時變數以及相關引用,這種對象都是要預備回收的對象,但是這時候不能被GC直接回收。
【5】可收集階段、終結階段、釋放階段:
對象生命週期最後一個階段,這種階段的對象可能處於三種狀態:
記憶體回收行程發現對象已經不可達
finalize方法已經被執行
對象已經被重用
******************************************************************************************
17.Hibernate緩衝機制
一級緩衝就是Session層級的緩衝,一個Session做了一個查詢操作,它會把這個操作的結果放在一級緩衝中,如果短時間內這個session(一定要同一個session)又做了同一個操作,那麼hibernate直接從一級緩衝中拿,而不會再去連資料庫,取資料。
二級緩衝就是SessionFactory層級的緩衝,顧名思義,就是查詢的時候會把查詢結果緩衝到二級緩衝中,如果同一個sessionFactory建立的某個session執行了相同的操作,hibernate就會從二級緩衝中拿結果,而不會再去串連資料庫。
參考:
http://blog.csdn.net/xiashan17/article/details/6049664
******************************************************************************************
18.Hibernate常見面試問題
http://blog.163.com/peripateticism_lxt/blog/static/183211290201139102743814/
******************************************************************************************
19.主鍵與索引關係
建立一個主鍵,則同時自動建立了一個同名的唯一索引,與之關聯。刪除主鍵,則主鍵約束和對應的唯一索引都刪除了。
存在主鍵約束,則肯定存在與之對應的唯一索引,而存在唯一索引,不一定對應著有主鍵約束。
******************************************************************************************
20.將UTF-8字元轉碼成ISO-8859-1
String name =new String("SOI".getBytes("ISO-8859-1"),"ISO-8859-1");
String nameUtf = new String(name.getBytes("UTF-8"),"UTF-8");
System.out.println(nameUtf);
******************************************************************************************
21.B tree
http://blog.csdn.net/sws9999/article/details/3018519
******************************************************************************************
22.java常見筆試面試題。。有這一個就夠了
http://www.blogjava.net/fanyingjie/archive/2007/06/27/126467.aspx
******************************************************************************************
23.java類載入過程,及存在的問題
http://www.dewen.org/q/7140
******************************************************************************************
java筆試面試中的坑