Java面試之基礎(chǔ)題目

本文回答了 你應(yīng)該知道的JAVA面試題 基礎(chǔ)篇震桶。
http://ifeve.com/java-interview-question/

  1. Java線(xiàn)程的狀態(tài)
    答: 線(xiàn)程間的狀態(tài)轉(zhuǎn)換:
    (1). 新建(new):新創(chuàng)建了一個(gè)線(xiàn)程對(duì)象。
    (2). 可運(yùn)行(runnable):線(xiàn)程對(duì)象創(chuàng)建后,其他線(xiàn)程(比如main線(xiàn)程)調(diào)用了該對(duì)象的start()方法。該狀態(tài)的線(xiàn)程位于可運(yùn)行線(xiàn)程池中治力,等待被線(xiàn)程調(diào)度選中亥至,獲取cpu 的使用權(quán) 。
    (3). 運(yùn)行(running):可運(yùn)行狀態(tài)(runnable)的線(xiàn)程獲得了cpu 時(shí)間片(timeslice) 嘲叔,執(zhí)行程序代碼。
    (4). 阻塞(block):阻塞狀態(tài)是指線(xiàn)程因?yàn)槟撤N原因放棄了cpu 使用權(quán)抽活,也即讓出了cpu timeslice硫戈,暫時(shí)停止運(yùn)行。直到線(xiàn)程進(jìn)入可運(yùn)行(runnable)狀態(tài)下硕,才有機(jī)會(huì)再次獲得cpu timeslice 轉(zhuǎn)到運(yùn)行(running)狀態(tài)丁逝。
    阻塞的情況分三種:
    (一). 等待阻塞:運(yùn)行(running)的線(xiàn)程執(zhí)行o.wait()方法,JVM會(huì)把該線(xiàn)程放入等待隊(duì)列(waitting queue)中梭姓。
    (二). 同步阻塞:運(yùn)行(running)的線(xiàn)程在獲取對(duì)象的同步鎖時(shí)霜幼,若該同步鎖被別的線(xiàn)程占用,則JVM會(huì)把該線(xiàn)程放入鎖池(lock pool)中誉尖。
    (三). 其他阻塞:運(yùn)行(running)的線(xiàn)程執(zhí)行Thread.sleep(long ms)或t.join()方法罪既,或者發(fā)出了I/O請(qǐng)求時(shí),JVM會(huì)把該線(xiàn)程置為阻塞狀態(tài)铡恕。當(dāng)sleep()狀態(tài)超時(shí)琢感、join()等待線(xiàn)程終止或者超時(shí)、或者I/O處理完畢時(shí)探熔,線(xiàn)程重新轉(zhuǎn)入可運(yùn)行(runnable)狀態(tài)驹针。
    (5). 死亡(dead):線(xiàn)程run()、main() 方法執(zhí)行結(jié)束诀艰,或者因異常退出了run()方法柬甥,則該線(xiàn)程結(jié)束生命周期。死亡的線(xiàn)程不可再次復(fù)生其垄。

  2. 進(jìn)程和線(xiàn)程的區(qū)別苛蒲,進(jìn)程間如何通訊,線(xiàn)程間如何通訊
    答: 進(jìn)程與線(xiàn)程區(qū)別
    定義方面:進(jìn)程是程序在某個(gè)數(shù)據(jù)集合上的一次運(yùn)行活動(dòng)捉捅;線(xiàn)程是進(jìn)程中的一個(gè)執(zhí)行路徑撤防。
    角色方面:在支持線(xiàn)程機(jī)制的系統(tǒng)中,進(jìn)程是系統(tǒng)資源分配的單位,線(xiàn)程是CPU調(diào)度的單位寄月。
    資源共享方面:進(jìn)程之間不能共享資源辜膝,而線(xiàn)程共享所在進(jìn)程的地址空間和其它資源。同時(shí)線(xiàn)程還有自己的棧和棧指針漾肮,程序計(jì)數(shù)器等寄存器厂抖。
    獨(dú)立性方面:進(jìn)程有自己獨(dú)立的地址空間,而線(xiàn)程沒(méi)有克懊,線(xiàn)程必須依賴(lài)于進(jìn)程而存在忱辅。
    開(kāi)銷(xiāo)方面。進(jìn)程切換的開(kāi)銷(xiāo)較大谭溉。線(xiàn)程相對(duì)較小墙懂。(前面也提到過(guò),引入線(xiàn)程也出于了開(kāi)銷(xiāo)的考慮扮念。)
    (一)损搬、進(jìn)程間的通信方式
    管道( pipe ):管道是一種半雙工的通信方式,數(shù)據(jù)只能單向流動(dòng)柜与,而且只能在具有親緣關(guān)系的進(jìn)程間使用巧勤。進(jìn)程的親緣關(guān)系通常是指父子進(jìn)程關(guān)系。
    有名管道 (namedpipe) : 有名管道也是半雙工的通信方式弄匕,但是它允許無(wú)親緣關(guān)系進(jìn)程間的通信颅悉。
    信號(hào)量(semophore ) : 信號(hào)量是一個(gè)計(jì)數(shù)器,可以用來(lái)控制多個(gè)進(jìn)程對(duì)共享資源的訪(fǎng)問(wèn)迁匠。它常作為一種鎖機(jī)制剩瓶,防止某進(jìn)程正在訪(fǎng)問(wèn)共享資源時(shí),其他進(jìn)程也訪(fǎng)問(wèn)該資源城丧。因此儒搭,主要作為進(jìn)程間以及同一進(jìn)程內(nèi)不同線(xiàn)程之間的同步手段。
    消息隊(duì)列( messagequeue ) : 消息隊(duì)列是由消息的鏈表芙贫,存放在內(nèi)核中并由消息隊(duì)列標(biāo)識(shí)符標(biāo)識(shí)。消息隊(duì)列克服了信號(hào)傳遞信息少傍药、管道只能承載無(wú)格式字節(jié)流以及緩沖區(qū)大小受限等缺點(diǎn)磺平。
    信號(hào) (sinal ) : 信號(hào)是一種比較復(fù)雜的通信方式,用于通知接收進(jìn)程某個(gè)事件已經(jīng)發(fā)生拐辽。
    共享內(nèi)存(shared memory ) :共享內(nèi)存就是映射一段能被其他進(jìn)程所訪(fǎng)問(wèn)的內(nèi)存拣挪,這段共享內(nèi)存由一個(gè)進(jìn)程創(chuàng)建,但多個(gè)進(jìn)程都可以訪(fǎng)問(wèn)俱诸。共享內(nèi)存是最快的 IPC 方式菠劝,它是針對(duì)其他進(jìn)程間通信方式運(yùn)行效率低而專(zhuān)門(mén)設(shè)計(jì)的。它往往與其他通信機(jī)制睁搭,如信號(hào)兩赶诊,配合使用笼平,來(lái)實(shí)現(xiàn)進(jìn)程間的同步和通信。
    套接字(socket ) : 套解口也是一種進(jìn)程間通信機(jī)制舔痪,與其他通信機(jī)制不同的是寓调,它可用于不同及其間的進(jìn)程通信。

(二)锄码、線(xiàn)程間的通信方式
鎖機(jī)制:包括互斥鎖夺英、條件變量、讀寫(xiě)鎖
互斥鎖提供了以排他方式防止數(shù)據(jù)結(jié)構(gòu)被并發(fā)修改的方法滋捶。讀寫(xiě)鎖允許多個(gè)線(xiàn)程同時(shí)讀共享數(shù)據(jù)痛悯,而對(duì)寫(xiě)操作是互斥的。條件變量可以以原子的方式阻塞進(jìn)程重窟,直到某個(gè)特定條件為真為止载萌。對(duì)條件的測(cè)試是在互斥鎖的保護(hù)下進(jìn)行的。條件變量始終與互斥鎖一起使用亲族。
信號(hào)量機(jī)制(Semaphore):包括無(wú)名線(xiàn)程信號(hào)量和命名線(xiàn)程信號(hào)量
信號(hào)機(jī)制(Signal):類(lèi)似進(jìn)程間的信號(hào)處理
線(xiàn)程間的通信目的主要是用于線(xiàn)程同步炒考,所以線(xiàn)程沒(méi)有像進(jìn)程通信中的用于數(shù)據(jù)交換的通信機(jī)制。

3.HashMap的數(shù)據(jù)結(jié)構(gòu)是什么霎迫?如何實(shí)現(xiàn)的斋枢。和HashTable,ConcurrentHashMap的區(qū)別
答:數(shù)組+鏈表+紅黑樹(shù)知给。具體可以參見(jiàn)以下文章瓤帚。
http://www.reibang.com/p/c0642afe03e0

4.Cookie和Session的區(qū)別
答: 簡(jiǎn)單說(shuō)就是HTTP協(xié)議是無(wú)狀態(tài)的,服務(wù)器端需要session來(lái)跟蹤用戶(hù)的狀態(tài)涩赢。
Session是在服務(wù)端保存的一個(gè)數(shù)據(jù)結(jié)構(gòu)戈次,用來(lái)跟蹤用戶(hù)的狀態(tài),這個(gè)數(shù)據(jù)可以保存在集群筒扒、數(shù)據(jù)庫(kù)怯邪、文件中;Cookie是客戶(hù)端保存用戶(hù)信息的一種機(jī)制花墩,用來(lái)記錄用戶(hù)的一些信息悬秉,也是實(shí)現(xiàn)Session的一種方式。
http://www.reibang.com/p/a2fe1d6441a7

  1. 索引有什么用冰蘑?如何建索引和泌?
    答: http://blog.csdn.net/evankaka/article/details/46685649

6.ArrayList是如何實(shí)現(xiàn)的,ArrayList和LinkedList的區(qū)別祠肥?ArrayList如何實(shí)現(xiàn)擴(kuò)容武氓。
答: ArrayList 的本質(zhì)就是數(shù)組, ArrayList就是對(duì)數(shù)組進(jìn)行動(dòng)態(tài)的擴(kuò)展,其add, get , remove 等等操作就是對(duì)數(shù)組的操作县恕。每次擴(kuò)容到原來(lái)大小的1.5倍东羹。

7.equals方法實(shí)現(xiàn)
答:當(dāng)equals重載時(shí),這里有4個(gè)會(huì)引發(fā)equals行為不一致的常見(jiàn)陷阱:
定義了錯(cuò)誤的equals方法簽名(signature) Defining equals with the wrong signature.

重載了equals的但沒(méi)有同時(shí)重載hashCode的方法弱睦。 Changing equals without also changing hashCode.
建立在會(huì)變化字域上的equals定義百姓。 Defining equals in terms of mutable fields.
不滿(mǎn)足等價(jià)關(guān)系的equals錯(cuò)誤定義 Failing to define equals as an equivalence relation.
酷殼有篇文章專(zhuān)門(mén)講解equals方法。https://coolshell.cn/articles/1051.html
8.面向?qū)ο?br> 答:這個(gè)題目很寬泛况木,可以談?wù)劮庋b垒拢,繼承,多態(tài)火惊,SOLID原則求类。Java需要了解接口和抽象類(lèi)的區(qū)別。
9.線(xiàn)程狀態(tài)屹耐,BLOCKED和WAITING有什么區(qū)別
答:
假設(shè)t1尸疆,t2先后兩個(gè)線(xiàn)程,都執(zhí)行如下代碼:
synchronized(Obj) {
Obj.wait();
}

t1先進(jìn)惶岭,最后在Obj.wait()下卡住寿弱,這時(shí)java管t1的狀態(tài)waitting狀態(tài)
t2后進(jìn),直接在第一行就卡住了按灶,這時(shí)java叫t2為blocked狀態(tài)症革。

判斷是否是BLOCKED可以看該線(xiàn)程是否在等待獲取鎖,WAITING從官方文檔中可以知道調(diào)用Object.wait(), Thread.join(), LockSupport.park()會(huì)使得線(xiàn)程進(jìn)入該狀態(tài)。

10.JVM如何加載字節(jié)碼文件
答:JVM的功能可以歸納為:
加載:通過(guò)類(lèi)加載器加載類(lèi)文件的過(guò)程鸯旁。
鏈接:鏈接類(lèi)文件噪矛,提交給JVM在運(yùn)行時(shí)執(zhí)行。
初始化:分配內(nèi)存和調(diào)用類(lèi)初始化方法設(shè)置變量值铺罢。

image.png

你可能還需要了解JVM的架構(gòu)圖艇挨,方法區(qū),堆空間韭赘,椝醣酰空間,Native Memory.
http://www.reibang.com/p/f4f580289091

  1. JVM GC泉瞻,GC算法楷怒。
    答:這個(gè)網(wǎng)上資料很多,主要了解CMS的 Eden瓦灶、Survivor 和 Tenured/Old 空間。
    G1算法的優(yōu)點(diǎn)抱完,和CMS垃圾收集的區(qū)別贼陶。
    12.什么情況會(huì)出現(xiàn)Full GC,什么情況會(huì)出現(xiàn)young GC。
    答: young GC清理Eden區(qū)的內(nèi)存碉怔。FullGC 清理所有內(nèi)存烘贴。Major GC 清理老年代。
    Initial Mark 和 Remark會(huì)stop the world.
    需要注意的是G1 GC正常情況是避免Full GC的撮胧,如果G1算法出現(xiàn)了Full GC桨踪,意味著系統(tǒng)出現(xiàn)了問(wèn)題,要進(jìn)行調(diào)優(yōu)芹啥。
    G1 GC正常情況下只有young GC 和 mixed GC(Eden和Old區(qū)同時(shí)GC)锻离。
    13.JVM內(nèi)存模型
    答:
    http://ifeve.com/java-memory-model-6/
    如果能夠看懂這篇文章,對(duì)內(nèi)存使用和理解會(huì)更上一層樓墓怀。https://www.ibm.com/developerworks/cn/java/j-nativememory-linux/
    14.Java運(yùn)行時(shí)數(shù)據(jù)區(qū)
    答:見(jiàn)上圖汽纠,但是要注意的是在JDK1.8之后,方法區(qū)(PermGen)已經(jīng)去除傀履,相關(guān)的內(nèi)容被移到了元數(shù)據(jù)區(qū)虱朵。
    http://www.infoq.com/cn/articles/Java-PERMGEN-Removed
    http://www.reibang.com/p/6173a467165e
    15.事務(wù)的實(shí)現(xiàn)原理
    答: https://my.oschina.net/huangyong/blog/160012
    https://my.oschina.net/huangyong/blog/1598521.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市钓账,隨后出現(xiàn)的幾起案子碴犬,更是在濱河造成了極大的恐慌,老刑警劉巖梆暮,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件服协,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡惕蹄,警方通過(guò)查閱死者的電腦和手機(jī)蚯涮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)卖陵,“玉大人遭顶,你說(shuō)我怎么就攤上這事±崮瑁” “怎么了棒旗?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)撩荣。 經(jīng)常有香客問(wèn)我铣揉,道長(zhǎng),這世上最難降的妖魔是什么餐曹? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任逛拱,我火速辦了婚禮,結(jié)果婚禮上台猴,老公的妹妹穿的比我還像新娘朽合。我一直安慰自己俱两,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布曹步。 她就那樣靜靜地躺著宪彩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪讲婚。 梳的紋絲不亂的頭發(fā)上尿孔,一...
    開(kāi)封第一講書(shū)人閱讀 49,730評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音筹麸,去河邊找鬼活合。 笑死,一個(gè)胖子當(dāng)著我的面吹牛竹捉,可吹牛的內(nèi)容都是我干的芜辕。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼块差,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼侵续!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起憨闰,我...
    開(kāi)封第一講書(shū)人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤状蜗,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后鹉动,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體轧坎,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年泽示,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缸血。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡械筛,死狀恐怖捎泻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情埋哟,我是刑警寧澤笆豁,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站赤赊,受9級(jí)特大地震影響闯狱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜抛计,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一哄孤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吹截,春花似錦录豺、人聲如沸朦肘。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至弟断,卻和暖如春咏花,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背阀趴。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工昏翰, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人刘急。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓棚菊,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親叔汁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子统求,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

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