我是fattiger--胖小虎
如果讀完覺得有收獲的話警儒,歡迎關(guān)注贊賞竿奏。
轉(zhuǎn)載請(qǐng)注明原創(chuàng)出處袄简,多謝大家。
前言:大多數(shù)成功的人贏在時(shí)間管理上泛啸。最近在考慮時(shí)間規(guī)劃的問(wèn)題绿语,小到每天,大到每年候址,我們?nèi)绾卧谟邢薜纳新来猓フ莆漳菬o(wú)限的知識(shí),講到這里我想起一個(gè)人達(dá)芬奇岗仑,真是開掛的一生匹耕,只要他感興趣的領(lǐng)域,他就能成為這個(gè)領(lǐng)域的專家荠雕,感興趣的朋友可以了解一下他一生的成就稳其。上篇博文提到了迷失,這篇說(shuō)說(shuō)如何讓自己的定位及目標(biāo)更清晰炸卑,我們要有一點(diǎn)善于歸納總結(jié)的能力既鞠,在一個(gè)領(lǐng)域三到五年或多或少能說(shuō)出自己理解的一些東西,即使再笨多人耳濡目染的也會(huì)在自己大腦里形成一些片段性的知識(shí)盖文,為什么說(shuō)是片段性的知識(shí)嘱蛋,因?yàn)樗蓄I(lǐng)域都像一個(gè)無(wú)限延伸的樹網(wǎng),由節(jié)點(diǎn)開始慢慢的往四周蔓延五续,也會(huì)交叉到其他的領(lǐng)域的網(wǎng)樹洒敏,如果不你停下來(lái)總結(jié)一下,你了解的只是網(wǎng)樹的一部分疙驾,或者說(shuō)是一個(gè)小分支凶伙,很難從全局角度考慮,你在這樹網(wǎng)中處于什么位置荆萤,如果你有幸接觸一些镊靴,反而有種掉入樹網(wǎng)中的感覺,你接觸的信息和你以前掌握的知識(shí)短節(jié)了链韭,你所在的節(jié)點(diǎn)連不到你掌握的節(jié)點(diǎn)偏竟,所以你迷失了,都不知道從何學(xué)起敞峭。那我們現(xiàn)在何不把自己熟悉領(lǐng)域的知識(shí)網(wǎng)給畫出來(lái)踊谋,搭建屬于自己的一套知識(shí)體系架構(gòu),找出你職業(yè)所需知識(shí)的架構(gòu)主干旋讹,然后把知識(shí)從初級(jí)到中級(jí)到高級(jí)逐級(jí)的掌握殖蚕,來(lái)豐富自己搭建的知識(shí)體系轿衔。本篇還是會(huì)從基礎(chǔ)談起,因?yàn)閭€(gè)人感覺睦疫,以后我可能展開的JDK源碼解析害驹、中間件源碼解析,所有的一切一切蛤育,都離不開數(shù)據(jù)結(jié)構(gòu)和算法宛官,所以要把基礎(chǔ)的東西學(xué)扎實(shí),達(dá)到面試中所提到的要求-有扎實(shí)的基礎(chǔ)瓦糕。
2.特殊方法說(shuō)明
2.1 Object基類方法說(shuō)明
getClass()
類的加載機(jī)制 雙親委派的好處 tomcat類加載機(jī)制
加載的類信息都可以來(lái)自哪里底洗?
equals()
對(duì)稱:x.equals(y) y.equals(x) 結(jié)果一樣
反射:x.equals(x) == true
類推:x.equals(y) y.equals(z) ->z.equals(x)
一致:x.equals(y) 執(zhí)行多少次 結(jié)果不變
x.equals(null) == false;x.equals(和x不同類型的對(duì)象)==false
Java約定的規(guī)范原則1咕娄、如果兩個(gè)對(duì)象相同亥揖,那么它們的hashCode值一定要相同圣勒;2费变、如果兩個(gè)對(duì)象的hashCode相同,它們并不一定相同
為什么覆寫equals的時(shí)候一定要覆寫hashCode?
如果class不可能放在hash code為基礎(chǔ)的容器內(nèi)圣贸,不必override hashCode()胡控,
例如HashMap和Hashtable里面如果是作為value而不是作為key的話也是不必override hashCode了
如果放在對(duì)象做了hashcode的操作,反而沒有override hashCode(),會(huì)出現(xiàn)一下兩種情況
1旁趟、如果equals為true hashCode不等的b作為get參數(shù)的話,這個(gè)時(shí)候b算出來(lái)的數(shù)組下標(biāo)一定不是a所在的下標(biāo)位置
2庇绽、如果equals為false hashCode相等的b作為get參數(shù)的話锡搜,這個(gè)時(shí)候b算出來(lái)的數(shù)組下標(biāo)是對(duì)了,但是用equals來(lái)尋找相符的key了
混亂的根本就是錯(cuò)誤實(shí)現(xiàn)hashCode和equals,所以說(shuō)必須按照約定的規(guī)范來(lái)瞧掺。
hashCode()
native方法 JVM生成的標(biāo)識(shí)此對(duì)象的一個(gè)整形數(shù)據(jù)
String的hashCode算法耕餐?s[0]*31^(n-1)+s[1]*31^(n-2)……..+s[n-1]->h=31*h+val[i]
hash沖突的解決辦法?1辟狈、地址鏈法(HashMap key沖突后會(huì)在在所在沖突索引處的節(jié)點(diǎn)上形成單向鏈表)
HashMap的Hash函數(shù)為什么要這么設(shè)計(jì)肠缔,HashTable呢 int index = (hash & 0x7FFFFFFF) % tab.length;
為什么先判斷hashcode,在判斷equals()?
toString()
getClass().getName() + “@” + Integer.toHexString(hashCode()); 類的全限定名 + @ + 十進(jìn)制的哈希碼轉(zhuǎn)換為16進(jìn)制的
wait() wait(time) wait(time,nanos) notify() notifyAll()
wait和sleep有什么區(qū)別
Thread.sleep()與Object.wait()二者都可以暫停當(dāng)前線程哼转,釋放CPU控制權(quán)明未,主要的區(qū)別在于Object.wait()在釋放CPU同時(shí),釋放了對(duì)象鎖的控制壹蔓。
調(diào)用Thread的wait方法含義
wait的參數(shù)趟妥,一個(gè)參數(shù)和兩個(gè)參數(shù)的區(qū)別 怎么判斷wait是超時(shí)返回還是其他線程通知返回的呢?
設(shè)置全局標(biāo)記 在其他線程中修改標(biāo)記 對(duì)超時(shí)時(shí)間進(jìn)行判斷 如果線程wait結(jié)束的時(shí)間大于等于超時(shí)時(shí)間 說(shuō)明是超時(shí)的
怎么查看處于wait狀態(tài)的線程 ?jstack
clone()
淺拷貝佣蓉,深拷貝
clone怎么做深拷貝披摄,還有其他方式做深拷貝么 序列化
為什么java已經(jīng)有了clone方法亲雪,還要實(shí)現(xiàn)一個(gè)Cloneable接口呢 Cloneable接口是不包含任何方法的!
其實(shí)這個(gè)接口僅僅是一個(gè)標(biāo)志疚膊,而且這個(gè)標(biāo)志也僅僅是針對(duì) Object類中clone()方法的义辕,如果clone類沒有實(shí)現(xiàn)Cloneable接口,
并調(diào)用了Object的clone()方法(也就是調(diào)用了 super.Clone()方法)寓盗,那么Object的clone()方法就會(huì)拋出CloneNotSupportedException異常灌砖。
類似Serializable接口,接口也是空的贞让,實(shí)現(xiàn)序列化操作類必須實(shí)現(xiàn)此接口周崭。
finalize()
怎么阻止一個(gè)非根引用對(duì)象被回收? 接到根引用對(duì)象上
一個(gè)空的Object占用多少內(nèi)存,如果里面有空的boolean和int呢
32bit系統(tǒng) 和 64 bit系統(tǒng)的區(qū)別
64bit JVM是否開啟指針壓縮的區(qū)別
對(duì)象頭 ???16 12
基本數(shù)據(jù) ?不變
引用類型 ?8 4
數(shù)組? ? ? 24 16
參考 http://www.cnblogs.com/magialmoon/p/3757767.html