Java 常見(jiàn)面試題

1. Arrays.sort()實(shí)現(xiàn)原理和 Collections.sort() 的實(shí)現(xiàn)原理

JDK1.7 Arrays.sort() 使用雙樞軸快速排序(DualPivotQuicksort)作為默認(rèn)排序方法酷誓。數(shù)組大小小于286時(shí)盐数,使用DualPivotQuicksort排序帚屉。數(shù)組大小大于286時(shí)攻旦,使用TimSort排序牢屋。

JDK1.7 Collections.sort()內(nèi)部先將列表轉(zhuǎn)成數(shù)組后再調(diào)用 Arrays.sort()烙无,在 Arrays.sort()里面有一個(gè)分支判斷是采用 legacyMergeSort(注釋了在將來(lái)會(huì)被移除) 還是ComparableTimSort截酷。

2. 線程池的種類迂苛、區(qū)別和使用場(chǎng)景

Java通過(guò)Executors提供四種線程池灾部,分別為:

  • newCachedThreadPool創(chuàng)建一個(gè)可緩存線程池赌髓,如果線程池長(zhǎng)度超過(guò)處理需要锁蠕,可靈活回收空閑線程荣倾,若無(wú)可回收舌仍,則新建線程铸豁。
  • newFixedThreadPool 創(chuàng)建一個(gè)定長(zhǎng)線程池在刺,可控制線程最大并發(fā)數(shù)蚣驼,超出的線程會(huì)在隊(duì)列中等待颖杏。
  • newScheduledThreadPool 創(chuàng)建一個(gè)定長(zhǎng)線程池输玷,支持定時(shí)及周期性任務(wù)執(zhí)行欲鹏。
  • newSingleThreadExecutor 創(chuàng)建一個(gè)單線程化的線程池,它只會(huì)用唯一的工作線程來(lái)執(zhí)行任務(wù)尤误,保證所有任務(wù)按照指定順序(FIFO, LIFO, 優(yōu)先級(jí))執(zhí)行。
    newSingleThreadScheduledExecutor 線程池中只有一個(gè)工作線程结缚,它能按時(shí)間計(jì)劃來(lái)執(zhí)行任務(wù)损晤。

3. 分析線程池的實(shí)現(xiàn)原理和線程的調(diào)度過(guò)程

線程池原理:預(yù)先啟動(dòng)一些線程,線程無(wú)限循環(huán)從任務(wù)隊(duì)列中獲取一個(gè)任務(wù)進(jìn)行執(zhí)行红竭,直到線程池被關(guān)閉尤勋。如果某個(gè)線程因?yàn)閳?zhí)行某個(gè)任務(wù)發(fā)生異常而終止,那么重新創(chuàng)建一個(gè)新的線程而已茵宪。如此反復(fù)最冰。
一個(gè)線程池包括以下四個(gè)基本部分:

  • 線程池管理器(ThreadPool):用于創(chuàng)建并管理線程池,包括創(chuàng)建線程池稀火、銷毀線程池暖哨、添加新任務(wù)篇裁。
  • 工作線程(PoolWorker):我們把用來(lái)執(zhí)行用戶任務(wù)的線程稱為工作線程,工作線程就是不斷從隊(duì)列中獲取任務(wù)對(duì)象并執(zhí)行對(duì)象上的業(yè)務(wù)方法分冈。線程池中的線程去件,在沒(méi)有任務(wù)時(shí)處于等待狀態(tài)宫莱,可以循環(huán)的執(zhí)行任務(wù)。
  • 任務(wù)接口(Task):每個(gè)任務(wù)必須實(shí)現(xiàn)的接口,以供工作線程調(diào)度任務(wù)的執(zhí)行,它主要規(guī)定了任務(wù)的入口,任務(wù)執(zhí)行完后的收尾工作,任務(wù)的執(zhí)行狀態(tài)等。
  • 任務(wù)隊(duì)列(TaskQueue):用于存放沒(méi)有處理的任務(wù)。提供一種緩沖機(jī)制。

4. 線程池如何調(diào)優(yōu)

調(diào)整線程池的大小,線程池的最佳大小取決于可用處理器的數(shù)目以及工作隊(duì)列中的任務(wù)的性質(zhì)。一般需要根據(jù)任務(wù)的類型來(lái)配置線程池大忻教琛:
如果是CPU密集型任務(wù),就需要盡量壓榨CPU,參考值可以設(shè)為NCPU+1;
如果是IO密集型任務(wù)但壮,參考值可以設(shè)為2NCPU溯祸。

5. 動(dòng)態(tài)代理的幾種方式

JDK 動(dòng)態(tài)代理和 cglib 動(dòng)態(tài)代理剃根。JDK動(dòng)態(tài)代理是由Java內(nèi)部的反射機(jī)制實(shí)現(xiàn)的苗傅,cglib 動(dòng)態(tài)代理底層則是借助 asm 來(lái)實(shí)現(xiàn)的旱物』С樱總的來(lái)說(shuō),反射機(jī)制在生成類的過(guò)程中比較高效,而 asm 在生成類之后的相關(guān)執(zhí)行過(guò)程中比較高效。還有一點(diǎn)是 JDK動(dòng)態(tài)代理的前提必須是目標(biāo)類基于統(tǒng)一的接口岖食。

6. HashMap的工作原理是什么?

HashMap內(nèi)部是通過(guò)一個(gè)數(shù)組實(shí)現(xiàn)的蔑穴,只是這個(gè)數(shù)組比較特殊茄袖,數(shù)組里存儲(chǔ)的元素是一個(gè)Entry實(shí)體(jdk 8為Node),這個(gè)Entry實(shí)體主要包含key、value以及一個(gè)指向自身的next指針乱投。HashMap是基于hashing實(shí)現(xiàn)的七芭,當(dāng)我們進(jìn)行put操作時(shí)窗慎,根據(jù)傳遞的key值得到它的hashcode隧魄,然后再用這個(gè)hashcode與數(shù)組的長(zhǎng)度進(jìn)行模運(yùn)算,得到一個(gè)int值几迄,就是Entry要存儲(chǔ)在數(shù)組的位置(下標(biāo))解孙;當(dāng)通過(guò)get方法獲取指定key的值時(shí)娱据,會(huì)根據(jù)這個(gè)key算出它的hash值(數(shù)組下標(biāo)),根據(jù)這個(gè)hash值獲取數(shù)組下標(biāo)對(duì)應(yīng)的Entry属铁,然后判斷Entry里的key,hash值或者通過(guò)equals()比較是否與要查找的相同仍律,如果相同,返回value实柠,否則的話水泉,遍歷該鏈表(有可能就只有一個(gè)Entry,此時(shí)直接返回null)窒盐,直到找到為止草则,否則返回null。
  HashMap之所以在每個(gè)數(shù)組元素存儲(chǔ)的是一個(gè)鏈表蟹漓,是為了解決hash沖突問(wèn)題炕横,當(dāng)兩個(gè)對(duì)象的hash值相等時(shí),那么一個(gè)位置肯定是放不下兩個(gè)值的葡粒,于是hashmap采用鏈表來(lái)解決這種沖突份殿,hash值相等的兩個(gè)元素會(huì)形成一個(gè)鏈表。

7. HashMap與HashTable的區(qū)別是什么?

1. HashTable基于Dictionary類嗽交,而HashMap是基于AbstractMap卿嘲。Dictionary是任何可將鍵映射到相應(yīng)值的類的抽象父類,而AbstractMap是基于Map接口的實(shí)現(xiàn)夫壁,它以最大限度地減少實(shí)現(xiàn)此接口所需的工作拾枣。
  2. HashMap的key和value都允許為null,而Hashtable的key和value都不允許為null盒让。HashMap遇到key為null的時(shí)候梅肤,調(diào)用putForNullKey方法進(jìn)行處理,而對(duì)value沒(méi)有處理糯彬;Hashtable遇到null凭语,直接返回NullPointerException葱她。
  3. Hashtable是同步的撩扒,而HashMap是非同步的,但是我們也可以通過(guò)Collections.synchronizedMap(hashMap)吨些,使其實(shí)現(xiàn)同步搓谆。

8. CorrentHashMap的工作原理?

JDK 1.6版:ConcurrenHashMap可以說(shuō)是HashMap的升級(jí)版,ConcurrentHashMap是線程安全的豪墅,但是與Hashtablea相比泉手,實(shí)現(xiàn)線程安全的方式不同。Hashtable是通過(guò)對(duì)hash表結(jié)構(gòu)進(jìn)行鎖定偶器,是阻塞式的斩萌,當(dāng)一個(gè)線程占有這個(gè)鎖時(shí)缝裤,其他線程必須阻塞等待其釋放鎖。ConcurrentHashMap是采用分離鎖的方式颊郎,它并沒(méi)有對(duì)整個(gè)hash表進(jìn)行鎖定憋飞,而是局部鎖定,也就是說(shuō)當(dāng)一個(gè)線程占有這個(gè)局部鎖時(shí)姆吭,不影響其他線程對(duì)hash表其他地方的訪問(wèn)榛做。
  具體實(shí)現(xiàn):ConcurrentHashMap內(nèi)部有一個(gè)Segment<K,V>數(shù)組,該Segment對(duì)象可以充當(dāng)鎖。Segment對(duì)象內(nèi)部有一個(gè)HashEntry<K,V>數(shù)組内狸,于是每個(gè)Segment可以守護(hù)若干個(gè)桶(HashEntry),每個(gè)桶又有可能是一個(gè)HashEntry連接起來(lái)的鏈表检眯,存儲(chǔ)發(fā)生碰撞的元素。
  每個(gè)ConcurrentHashMap在默認(rèn)并發(fā)級(jí)下會(huì)創(chuàng)建包含16個(gè)Segment對(duì)象的數(shù)組昆淡,每個(gè)數(shù)組有若干個(gè)桶锰瘸,當(dāng)我們進(jìn)行put方法時(shí),通過(guò)hash方法對(duì)key進(jìn)行計(jì)算昂灵,得到hash值获茬,找到對(duì)應(yīng)的segment,然后對(duì)該segment進(jìn)行加鎖倔既,然后調(diào)用segment的put方法進(jìn)行存儲(chǔ)操作恕曲,此時(shí)其他線程就不能訪問(wèn)當(dāng)前的segment,但可以訪問(wèn)其他的segment對(duì)象渤涌,不會(huì)發(fā)生阻塞等待佩谣。
  JDK 1.8版:在jdk 8中,ConcurrentHashMap不再使用Segment分離鎖实蓬,而是采用一種樂(lè)觀鎖CAS算法來(lái)實(shí)現(xiàn)同步問(wèn)題茸俭,但其底層還是“數(shù)組+鏈表->紅黑樹”的實(shí)現(xiàn)。

9. fail-fast與fail-safe有什么區(qū)別安皱?

Iterator的fail-fast屬性與當(dāng)前的集合共同起作用调鬓,因此它不會(huì)受到集合中任何改動(dòng)的影響。Java.util包中的所有集合類都被設(shè)計(jì)為fail->fast的酌伊,而java.util.concurrent中的集合類都為fail-safe的腾窝。當(dāng)檢測(cè)到正在遍歷的集合的結(jié)構(gòu)被改變時(shí),F(xiàn)ail-fast迭代器拋出ConcurrentModificationException居砖,而fail-safe迭代器從不拋出ConcurrentModificationException虹脯。

10. HashSet的底層實(shí)現(xiàn)是什么?

通過(guò)看源碼知道HashSet的實(shí)現(xiàn)是依賴于HashMap的,HashSet的值都是存儲(chǔ)在HashMap中的奏候。在HashSet的構(gòu)造法中會(huì)初始化一個(gè)HashMap對(duì)象循集,HashSet不允許值重復(fù),因此蔗草,HashSet的值是作為HashMap的key存儲(chǔ)在HashMap中的咒彤,當(dāng)存儲(chǔ)的值已經(jīng)存在時(shí)返回false疆柔。

11. LinkedHashMap的實(shí)現(xiàn)原理?

LinkedHashMap也是基于HashMap實(shí)現(xiàn)的,不同的是它定義了一個(gè)Entry header镶柱,這個(gè)header不是放在Table里婆硬,它是額外獨(dú)立出來(lái)的。LinkedHashMap通過(guò)繼承hashMap中的Entry,并添加兩個(gè)屬性Entry before,after,和header結(jié)合起來(lái)組成一個(gè)雙向鏈表奸例,來(lái)實(shí)現(xiàn)按插入順序或訪問(wèn)順序排序彬犯。LinkedHashMap定義了排序模式accessOrder,該屬性為boolean型變量查吊,對(duì)于訪問(wèn)順序谐区,為true;對(duì)于插入順序逻卖,則為false宋列。一般情況下,不必指定排序模式评也,其迭代順序即為默認(rèn)為插入順序炼杖。

12. Java中有哪幾種鎖?

自旋鎖

自旋鎖在JDK1.6之后就默認(rèn)開啟了〉脸伲基于之前的觀察坤邪,共享數(shù)據(jù)的鎖定狀態(tài)只會(huì)持續(xù)很短的時(shí)間,為了這一小段時(shí)間而去掛起和恢復(fù)線程有點(diǎn)浪費(fèi)罚缕,所以這里就做了一個(gè)處理艇纺,讓后面請(qǐng)求鎖的那個(gè)線程在稍等一會(huì),但是不放棄處理器的執(zhí)行時(shí)間邮弹,看看持有鎖的線程能否快速釋放黔衡。為了讓線程等待,所以需要讓線程執(zhí)行一個(gè)忙循環(huán)也就是自旋操作腌乡。
  在jdk6之后盟劫,引入了自適應(yīng)的自旋鎖,也就是等待的時(shí)間不再固定了与纽,而是由上一次在同一個(gè)鎖上的自旋時(shí)間及鎖的擁有者狀態(tài)來(lái)決定

偏向鎖:

在JDK1.之后引入的一項(xiàng)鎖優(yōu)化侣签,目的是消除數(shù)據(jù)在無(wú)競(jìng)爭(zhēng)情況下的同步原語(yǔ)。進(jìn)一步提升程序的運(yùn)行性能渣锦。 偏向鎖就是偏心的偏硝岗,意思是這個(gè)鎖會(huì)偏向第一個(gè)獲得他的線程,如果接下來(lái)的執(zhí)行過(guò)程中袋毙,改鎖沒(méi)有被其他線程獲取,則持有偏向鎖的線程將永遠(yuǎn)不需要再進(jìn)行同步冗尤。偏向鎖可以提高帶有同步但無(wú)競(jìng)爭(zhēng)的程序性能听盖,也就是說(shuō)他并不一定總是對(duì)程序運(yùn)行有利胀溺,如果程序中大多數(shù)的鎖都是被多個(gè)不同的線程訪問(wèn),那偏向模式就是多余的皆看,在具體問(wèn)題具體分析的前提下仓坞,可以考慮是否使用偏向鎖。

輕量級(jí)鎖:

為了減少獲得鎖和釋放鎖所帶來(lái)的性能消耗腰吟,引入了“偏向鎖”和“輕量級(jí)鎖”无埃,所以在Java SE1.6里鎖一共有四種狀態(tài),無(wú)鎖狀態(tài)毛雇,偏向鎖狀態(tài)嫉称,輕量級(jí)鎖狀態(tài)和重量級(jí)鎖狀態(tài),它會(huì)隨著競(jìng)爭(zhēng)情況逐漸升級(jí)灵疮。鎖可以升級(jí)但不能降級(jí)织阅,意味著偏向鎖升級(jí)成輕量級(jí)鎖后不能降級(jí)成偏向鎖。這種鎖升級(jí)卻不能降級(jí)的策略震捣,目的是為了提高獲得鎖和釋放鎖的效率荔棉。

13. synchronized內(nèi)置鎖

java中以synchronize的形式,為防止資源沖突提供了內(nèi)置支持蒿赢。當(dāng)任務(wù)要執(zhí)行被synchronize關(guān)鍵字保護(hù)的代碼段時(shí)润樱,它將檢查鎖是否可用,然后獲取鎖——執(zhí)行代碼——釋放鎖羡棵。
  所有對(duì)象都自動(dòng)含有單一的鎖祥国。當(dāng)一個(gè)線程正在訪問(wèn)一個(gè)對(duì)象的synchronized方法,那么其他線程不能訪問(wèn)該對(duì)象的其他synchronized方法晾腔,但可以訪問(wèn)非synchronized方法舌稀。因?yàn)橐粋€(gè)對(duì)象只有一把鎖,當(dāng)一個(gè)線程獲取了該對(duì)象的鎖之后灼擂,其他線程無(wú)法獲取該對(duì)象的鎖壁查,所以無(wú)法訪問(wèn)該對(duì)象的其他synchronized方法。
  對(duì)于synchronized方法或者synchronized代碼塊剔应,當(dāng)出現(xiàn)異常時(shí)睡腿,JVM會(huì)自動(dòng)釋放當(dāng)前線程占用的鎖,因此不會(huì)由于異常導(dǎo)致出現(xiàn)死鎖現(xiàn)象峻贮。

14. ThreadLocal理解

ThreadLocal是一個(gè)創(chuàng)建線程局部變量的類席怪。通常情況下我們創(chuàng)建的變量,可以被多個(gè)線程訪問(wèn)并修改,通過(guò)ThreadLocal創(chuàng)建的變量只能被當(dāng)前線程訪問(wèn)。

ThreadLocal內(nèi)部實(shí)現(xiàn)

ThreadLocal提供了set和get方法纤控。
  set方法會(huì)先獲取當(dāng)前線程挂捻,然后用當(dāng)前線程作為句柄,獲取ThreadLocaMap對(duì)象船万,并判斷該對(duì)象是否為空刻撒,如果為空則創(chuàng)建一個(gè)骨田,并設(shè)置值,不為空則直接設(shè)置值声怔。

public void set(T value) {
    Thread t = Thread.currentThread();
    ThreadLocalMap map = getMap(t);
    if (map != null)
        map.set(this, value);
    else
        createMap(t, value);
}

ThreadLocal的值是放入了當(dāng)前線程的一個(gè)ThreadLocalMap實(shí)例中态贤,所以只能在本線程中訪問(wèn),其他線程無(wú)法訪問(wèn)醋火∮破 
  ThreadLocal并不會(huì)導(dǎo)致內(nèi)存泄露,因?yàn)門hreadLocalMap中的key存儲(chǔ)的是ThreadLocal實(shí)例的弱引用,因此如果應(yīng)用使用了線程池芥驳,即便之前的線程實(shí)例處理完之后出于復(fù)用的目的依然存活柿冲,也不會(huì)產(chǎn)生內(nèi)存泄露。

15. 為什么wait, notify 和 notifyAll這些方法不在thread類里面?

這是個(gè)設(shè)計(jì)相關(guān)的問(wèn)題晚树,它考察的是面試者對(duì)現(xiàn)有系統(tǒng)和一些普遍存在但看起來(lái)不合理的事物的看法姻采。回答這些問(wèn)題的時(shí)候爵憎,你要說(shuō)明為什么把這些方法放在Object類里是有意義的慨亲,還有不把它放在Thread類里的原因。一個(gè)很明顯的原因是JAVA提供的鎖是對(duì)象級(jí)的而不是線程級(jí)的宝鼓,每個(gè)對(duì)象都有鎖刑棵,通過(guò)線程獲得。如果線程需要等待某些鎖那么調(diào)用對(duì)象中的wait()方法就有意義了愚铡。如果wait()方法定義在Thread類中蛉签,線程正在等待的是哪個(gè)鎖就不明顯了。簡(jiǎn)單的說(shuō)沥寥,由于wait碍舍,notify和notifyAll都是鎖級(jí)別的操作,所以把他們定義在Object類中因?yàn)殒i屬于對(duì)象邑雅。

16. Java 類的初始化順序

1. 父類的靜態(tài)變量/靜態(tài)初始化塊
  2. 子類類的靜態(tài)變量/靜態(tài)初始化塊
  3. 父類的動(dòng)態(tài)初始化塊(與靜態(tài)初始化塊類似片橡,只是沒(méi)有static關(guān)鍵字奏司,即放在一對(duì)大括號(hào)中的代碼塊)延都、非構(gòu)造方法和set方法的成員變量初始化
  4. 父類的構(gòu)造方法
  5. 子類的動(dòng)態(tài)初始化塊琳水、非構(gòu)造方法和set方法的成員變量初始化
  6. 子類的構(gòu)造方法
  7. 父類本地變量
  8. 子類的本地變量

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末丹皱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子碧聪,更是在濱河造成了極大的恐慌汤善,老刑警劉巖绘雁,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洞难,死亡現(xiàn)場(chǎng)離奇詭異舆吮,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門歪泳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)萝勤,“玉大人露筒,你說(shuō)我怎么就攤上這事呐伞。” “怎么了慎式?”我有些...
    開封第一講書人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵伶氢,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我瘪吏,道長(zhǎng)癣防,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任掌眠,我火速辦了婚禮蕾盯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蓝丙。我一直安慰自己级遭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開白布渺尘。 她就那樣靜靜地躺著挫鸽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鸥跟。 梳的紋絲不亂的頭發(fā)上丢郊,一...
    開封第一講書人閱讀 52,584評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音医咨,去河邊找鬼枫匾。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拟淮,可吹牛的內(nèi)容都是我干的干茉。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼惩歉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼等脂!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起撑蚌,我...
    開封第一講書人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤上遥,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后争涌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體粉楚,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了模软。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伟骨。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖燃异,靈堂內(nèi)的尸體忽然破棺而出携狭,到底是詐尸還是另有隱情,我是刑警寧澤回俐,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布逛腿,位于F島的核電站,受9級(jí)特大地震影響仅颇,放射性物質(zhì)發(fā)生泄漏单默。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一忘瓦、第九天 我趴在偏房一處隱蔽的房頂上張望搁廓。 院中可真熱鬧,春花似錦耕皮、人聲如沸境蜕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)汽摹。三九已至,卻和暖如春苦锨,著一層夾襖步出監(jiān)牢的瞬間逼泣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工舟舒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拉庶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓秃励,卻偏偏與公主長(zhǎng)得像氏仗,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子夺鲜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • java常見(jiàn)面試題及答案 1.什么是Java虛擬機(jī)皆尔?為什么Java被稱作是“平臺(tái)無(wú)關(guān)的編程語(yǔ)言”? Java 虛擬...
    littleKang閱讀 54,141評(píng)論 36 328
  • Java SE 基礎(chǔ): 封裝币励、繼承慷蠕、多態(tài) 封裝: 概念:就是把對(duì)象的屬性和操作(或服務(wù))結(jié)合為一個(gè)獨(dú)立的整體,并盡...
    Jayden_Cao閱讀 2,112評(píng)論 0 8
  • 從三月份找實(shí)習(xí)到現(xiàn)在食呻,面了一些公司流炕,掛了不少澎现,但最終還是拿到小米、百度每辟、阿里剑辫、京東、新浪渠欺、CVTE妹蔽、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,278評(píng)論 11 349
  • 相關(guān)概念 面向?qū)ο蟮娜齻€(gè)特征 封裝,繼承,多態(tài).這個(gè)應(yīng)該是人人皆知.有時(shí)候也會(huì)加上抽象. 多態(tài)的好處 允許不同類對(duì)...
    東經(jīng)315度閱讀 1,952評(píng)論 0 8
  • 十九歲的時(shí)候,我遇上了一個(gè)人峻堰。我永遠(yuǎn)記得他笑的樣子讹开,眉目舒展盅视,容顏燦爛捐名。在日光下,他的臉龐就像是帶著朦朧恍惚...
    笑顏如花兒閱讀 265評(píng)論 0 1