java面試題知識(shí)點(diǎn)總結(jié)(共6頁(yè))_第1頁(yè)
java面試題知識(shí)點(diǎn)總結(jié)(共6頁(yè))_第2頁(yè)
java面試題知識(shí)點(diǎn)總結(jié)(共6頁(yè))_第3頁(yè)
java面試題知識(shí)點(diǎn)總結(jié)(共6頁(yè))_第4頁(yè)
java面試題知識(shí)點(diǎn)總結(jié)(共6頁(yè))_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上1. 為何要使用同步?     java允許多線程并發(fā)控制,當(dāng)多個(gè)線程同時(shí)操作一個(gè)可共享的資源變量時(shí)(如數(shù)據(jù)的增刪改查),將會(huì)導(dǎo)致數(shù)據(jù)不準(zhǔn)確,相互之間產(chǎn)生沖突,因此加入同步鎖以避免在該線程沒(méi)有完成操作之前,被其他線程的調(diào)用, 從而保證了該變量的唯一性和準(zhǔn)確性。  (1)同步方法 :即有synchronized關(guān)鍵字修飾的方法。由于java的每個(gè)對(duì)象都有一個(gè)內(nèi)置鎖,當(dāng)用此關(guān)鍵字修飾方法時(shí),內(nèi)置鎖會(huì)保護(hù)整個(gè)方法。在調(diào)用該方法前,需要獲得內(nèi)置鎖,否則就處于阻塞狀態(tài)。 代碼如:   &#

2、160; public synchronized void save()   注: synchronized關(guān)鍵字也可以修飾靜態(tài)方法,此時(shí)如果調(diào)用該靜態(tài)方法,將會(huì)鎖住整個(gè)類 (2)同步代碼塊 :即有synchronized關(guān)鍵字修飾的語(yǔ)句塊。 被該關(guān)鍵字修飾的語(yǔ)句塊會(huì)自動(dòng)被加上內(nèi)置鎖,從而實(shí)現(xiàn)同步 代碼如:     synchronized(object)     注:同步是一種高開銷的操作,因此應(yīng)該盡量減少同步的內(nèi)容。通常沒(méi)有必要同步整個(gè)方法,使用synchronized代碼塊同步關(guān)

3、鍵代碼即可。 2.說(shuō)好拿到offer就來(lái)牛客發(fā)面經(jīng),實(shí)現(xiàn)承諾一面:1.說(shuō)說(shuō)C語(yǔ)言中free和malloc區(qū)別不知道。我不是學(xué)C的。2.你知道基數(shù)排序么?忘了,知道計(jì)數(shù)。(這時(shí)候心想玩了,連續(xù)2個(gè)問(wèn)題都不會(huì),還玩?zhèn)€P?)3.說(shuō)說(shuō)什么是內(nèi)存溢出和內(nèi)存泄露內(nèi)存溢出:介紹JVM中7個(gè)區(qū)域,然后把每個(gè)區(qū)域可能造成內(nèi)存的溢出的情況說(shuō)明內(nèi)存泄露:介紹GC 和GC Root不正常引用。4.看來(lái)你對(duì)JVM蠻熟悉的啊,那你說(shuō)說(shuō)JAVA怎么分配直接內(nèi)存?A:JAVA不能直接分配內(nèi)存吧?Q:我說(shuō)是分配直接內(nèi)存不是直接分配內(nèi)存。A:是NIO類的直接內(nèi)存么?Q:是的。A:有點(diǎn)不記得了,能提示下么?Q:sun的一

4、個(gè)包。A:我想起來(lái)了,sun.misc.Unsafe類,那個(gè)要通過(guò)反射獲取吧。平常沒(méi)怎么用過(guò)。Q:不用反射A:我咋記得要。Q:不用的,你再回去看看看(面試官記錯(cuò),后面他自己糾正錯(cuò)誤了)A:好吧。5.介紹下NIO6.能介紹下mybatis的原理么?從configuration類說(shuō)起,然后MapperStatement,然后SqlNode解析,然后連接池,然后resultMap映射,balala說(shuō)了10分鐘。7.網(wǎng)絡(luò)方面熟悉么?A:熟悉Q:那說(shuō)說(shuō)TCP/IP 三次握手8.說(shuō)說(shuō)http,tcp,udp之間關(guān)系和區(qū)別。9.說(shuō)說(shuō)瀏覽器訪問(wèn),經(jīng)歷了怎樣的過(guò)程。二面、1.講講spring IOC原

5、理以及生命周期。 2.講講mybatis的連接池。 3.講講IO里面的常見類,字節(jié)流字符流。 4.講講NIO。 5.講講tomcat和你做的httpServer. 6.你是通過(guò)哪些途徑學(xué)習(xí)這些技術(shù)。 7.你是否有想過(guò)把mybatis實(shí)現(xiàn)成分布式嗎?8.java的基礎(chǔ)類型和字節(jié)大小。3.很不幸,二面面完就結(jié)束了今天的面試。 預(yù)約的時(shí)間是下午4點(diǎn)30分到5點(diǎn)15分的時(shí)間段,天氣比較悶熱,算好時(shí)間,下午2點(diǎn)半從學(xué)校出發(fā),3點(diǎn)50到達(dá)面試酒店,本想買瓶水,想想阿里這么大個(gè)公司,面試應(yīng)該會(huì)給我們發(fā)瓶水的吧,于是我就沒(méi)買,事實(shí)證明我想多

6、了,沒(méi)有!簽完到去一個(gè)廳里面等候,左看看右看看,真沒(méi)有水!人挺少的,沒(méi)過(guò)幾分鐘,3點(diǎn)55分,叫到我的號(hào)去某某位置上面試,說(shuō)好的4點(diǎn)半呢,人和人之間這么點(diǎn)信任都沒(méi)有了嗎?于是我氣還沒(méi)喘勻就去到面試的大廳了,到了一個(gè)面試官跟前,坐下來(lái),把我的簡(jiǎn)歷給了他,他邊看邊讓我自我介紹。 一面:整整70分鐘?。ㄕf(shuō)好的45分鐘呢?人和人之間這點(diǎn)信任都沒(méi)有了嗎?) 1、問(wèn):你把java內(nèi)存模型的架構(gòu)給我畫一下吧? 我: 遲疑了一下,心想,JMM這玩意兒有架構(gòu)圖嗎?這可怎么畫。面試官看我遲疑,說(shuō),那你不畫,先說(shuō)一說(shuō)吧,我就跟他說(shuō)了由于什么指令重排序,處理器緩存什么的,不同的系統(tǒng)或者平臺(tái)

7、有不同的內(nèi)存模型,使得相同的java程序在不同的處理器架構(gòu)下的表現(xiàn)不一致啊,java內(nèi)存模型就是為了在不同的處理器架構(gòu)和平臺(tái)下給java程序員提供一致性內(nèi)存訪問(wèn)的保證的。本以為后面要問(wèn)到volatile的內(nèi)存語(yǔ)義,內(nèi)存屏障,happens-before之類的,沒(méi)想到面試官來(lái)了一句:你完全說(shuō)錯(cuò)了,你說(shuō)的這個(gè)是java的跨平臺(tái)特性,不是內(nèi)存模型,然后說(shuō)內(nèi)存模型是什么什么堆、棧之類的。 于是我就懵了,我就想到了原來(lái)面試官理解的內(nèi)存模型就是我理解的java運(yùn)行時(shí)數(shù)據(jù)區(qū)域(程序計(jì)數(shù)器,虛擬機(jī)棧,本地方法棧、java堆,方法區(qū))。我也不敢跟面試官多爭(zhēng)論,簡(jiǎn)單地表達(dá)了一下我的觀點(diǎn),然后他就接著問(wèn)我

8、,那你說(shuō)說(shuō)java是如何實(shí)現(xiàn)跨平臺(tái)的。 2、問(wèn):說(shuō)一下HashMap是如何實(shí)現(xiàn)的吧 我:就先畫了一下結(jié)構(gòu),再說(shuō)了一些什么拉鏈法解決沖突,什么JDK8里面沖突達(dá)到一定數(shù)量的時(shí)候就改用了紅黑樹的存儲(chǔ)等等,然后問(wèn)我怎么擴(kuò)容。 3、問(wèn):說(shuō)一下ConcurrentHashMap吧 我:JDK7里面采用的是分段鎖機(jī)制什么的,讀的時(shí)候不加鎖,寫的時(shí)候分段加鎖,先定位到某個(gè)段,然后段里面的操作委托給HashMap等等。然后又說(shuō)JDK8里面 ConcurrentHashMap有很大變化,從1600多行代碼擴(kuò)充到了6000多行代碼。(還好沒(méi)接著問(wèn)我JDK8里面是怎么實(shí)現(xiàn)的,

9、就昨天晚上瞄了一眼,6000多行代碼確實(shí)沒(méi)看下來(lái)) 4、問(wèn):用他的電腦給我看了一段程序,問(wèn)我輸出結(jié)果是什么,跟finally塊相關(guān)的,考察點(diǎn)就是try塊里面return了某個(gè)值,finally里面又對(duì)該值進(jìn)行操作了,問(wèn)最后的結(jié)果是什么,我知道return之前會(huì)先執(zhí)行finally塊里面的操作,但是操作的是引用類型還是值類型的情況是不一樣的。本想把那個(gè)代碼回憶起來(lái),想想還是算了,應(yīng)該有人能知道我說(shuō)的是什么意思。我在回答這道題的時(shí)候面試官還“賤賤地“說(shuō)這道題是有坑的,然后看我踩坑了還很鄙視的說(shuō)一句:看那么多書連引用類型和值類型都搞不清楚。5、synchronized相關(guān)的,為什么同步塊太

10、大會(huì)影響性能?不同的線程擁有不同的對(duì)象鎖,它們之間會(huì)有影響嗎?如果synchronized加在靜態(tài)方法上面那么鎖指的是什么?(在這個(gè)地方又跟面試官就幾個(gè)名詞糾纏了一會(huì)兒,我說(shuō)鎖是Class對(duì)象,他問(wèn)是實(shí)例還是對(duì)象,他說(shuō)實(shí)例是靜態(tài)的,對(duì)象是動(dòng)態(tài)的,我說(shuō)Class是靜態(tài)的,對(duì)象是動(dòng)態(tài)的,然后他說(shuō)我們不說(shuō)類了,用英文,instance和對(duì)象,我說(shuō)instance我理解的就是對(duì)象啊,可能他覺(jué)得instance是指類,對(duì)象就是new出來(lái)的對(duì)象,也許是我沒(méi)看過(guò)英文版的書吧)于是我接著說(shuō),指的是對(duì)象,是java虛擬機(jī)將一個(gè)類的字節(jié)碼加載進(jìn)內(nèi)存之后生成的一個(gè)java.lang.Class對(duì)象,然后他可能沒(méi)聽明

11、白我說(shuō)的,還是在問(wèn),到底是類還是對(duì)象,我其實(shí)已經(jīng)明白他的意思了,然后說(shuō),按照您的描述,那就是類。然后他好像滿意了,就下一題了。(那明明就是一個(gè)Class對(duì)象嘛,Class對(duì)象不也是對(duì)象)6、問(wèn):基本排序和查找相關(guān)的,問(wèn)我有哪些排序和哪些查找算法,(期待讓我寫個(gè)快排什么的,早就憋在心里了,分分鐘搞定的事, 然而并沒(méi)有)他讓我描述一下選擇排序的過(guò)程,就扯了扯,然后他問(wèn),你確定這是選擇排序嗎?我說(shuō),我很確定。(強(qiáng)調(diào)了“很”字,說(shuō)的很堅(jiān)決,他也沒(méi)說(shuō)什么,希望別又在理解上面跟我有偏差,我說(shuō)的那個(gè)絕對(duì)是純正的選擇排序,如假包換)。7、寫代碼,給我5分鐘,讓我實(shí)現(xiàn)一個(gè)Stack,底層數(shù)據(jù)結(jié)構(gòu)用數(shù)組

12、。我問(wèn)他需要支持?jǐn)U容嗎,他說(shuō)先不用。寫完他拿過(guò)去一看,可能是我寫的太丑了,他又還給我,讓我解釋一下代碼,然后就解釋了一下。8、問(wèn)我用棧怎么實(shí)現(xiàn)隊(duì)列,我說(shuō)用2個(gè)棧來(lái)實(shí)現(xiàn),他問(wèn)我具體怎么操作,我說(shuō)我可以想一下嗎?他說(shuō)可以,然后我想了一下,畫個(gè)圖給演示了一下。9、問(wèn)我有沒(méi)有登過(guò)網(wǎng)頁(yè)版微信,問(wèn)我用手機(jī)掃二維碼登錄是怎么實(shí)現(xiàn)的。不會(huì)10、問(wèn)我知道阻塞隊(duì)列嗎,讓我自己實(shí)現(xiàn)阻塞隊(duì)列我會(huì)怎么做?我說(shuō)我會(huì)用兩種方法來(lái)實(shí)現(xiàn),一種是用wait和notify的方式,一種是用Condition條件變量的方式,然后他問(wèn)怎么用wait和notify實(shí)現(xiàn),我就把思路說(shuō)了一下。最后他還問(wèn)我是什么時(shí)候接觸編程的,我說(shuō)大一。我不知

13、道他最后問(wèn)了我一個(gè)這個(gè)問(wèn)題是什么意思就想起來(lái)這么些了,整整70分鐘,我已經(jīng)說(shuō)的口干舌燥了。面試完,他說(shuō),今天的面試結(jié)束了,我頓時(shí)就懵了,按照我了解的,這就代表沒(méi)通過(guò)的意思,但是我覺(jué)得我答的很好,百分之九十都答出來(lái)了,而且很多都說(shuō)的很詳細(xì)。我一臉疑惑,還是很客氣的說(shuō)謝謝,準(zhǔn)備走呢,馬上又聽到他說(shuō),你先到外面等一下,然后我又說(shuō)好的,謝謝。然后他接著說(shuō),準(zhǔn)備下一輪吧,我說(shuō)好的,謝謝。然后就出來(lái)了。出來(lái)之后到了等候的大廳,整個(gè)人都虛脫了,又左看看,右看看,還是沒(méi)有水,沒(méi)過(guò)幾分鐘,元?dú)膺€沒(méi)恢復(fù),讓我去二面二面:45分鐘。拖著疲憊的身子,走到二面面試官前,一見其人,明顯能感受到這就是大神,那拖鞋,那發(fā)型,

14、那胡子,此時(shí)我已經(jīng)身心俱疲,硬著頭皮坐下來(lái),先自我介紹,問(wèn)了幾個(gè)問(wèn)題,然后說(shuō)那我們寫一個(gè)簡(jiǎn)單的題目吧。他把電腦轉(zhuǎn)過(guò)來(lái),讓我看其中某個(gè)題目,說(shuō)你做一下這道題吧。用java統(tǒng)計(jì)一個(gè)文本文件中出現(xiàn)的頻率最高的20個(gè)單詞。多經(jīng)典的題目啊。我問(wèn)能用shell命令來(lái)實(shí)現(xiàn)嗎?他說(shuō)用java。于是我用了HashMap,都弄到map里面去了之后,我發(fā)現(xiàn)我不會(huì)排序。集合類里面的排序方法確實(shí)沒(méi)怎么用過(guò),于是我就卡在這里了。然后我跟他說(shuō)我數(shù)據(jù)結(jié)構(gòu)選錯(cuò)了,我應(yīng)該選能排序的map,比如說(shuō)TreeMap,他說(shuō)那你接著寫,我又不想寫了,因?yàn)槲抑皇侵繲reeMap是怎么一回事,并沒(méi)有去用過(guò)這個(gè)TreeMap,而且排序的話它應(yīng)

15、該是按照key來(lái)排序的,我這里的key是單詞,并沒(méi)有什么用,我也不知道該怎么按照后面的value來(lái)排序,我也想到可以調(diào)用map的entrySet方法得到一個(gè)集合,然后我可以對(duì)這個(gè)集合進(jìn)行操作,總之我想了很多,但是對(duì)一些操作不太熟就沒(méi)有繼續(xù)下去了。我覺(jué)得這道題目應(yīng)該很簡(jiǎn)單啊,沒(méi)想到我竟然沒(méi)寫出來(lái)。其實(shí)方法還是有的,map都拿到了,排個(gè)序豈能難倒我,大不了再倒騰一下,我冒泡也能給它解決了,但是我實(shí)在是不想用這么low的方式,然后我就放棄了,沒(méi)接著寫。然后面試官說(shuō),好的,那我們?cè)賮?lái)寫一個(gè)簡(jiǎn)單的題目吧。題目大概意思就是用面向?qū)ο蟮乃枷雽?shí)現(xiàn)題目說(shuō)的那個(gè)場(chǎng)景,具體題目就不說(shuō)了,我并沒(méi)有太明白題目的意思,感

16、覺(jué)可以用一個(gè)HashMap的數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn),然后我就自己照著HashMap的代碼寫了寫,寫了點(diǎn)我又停下了,因?yàn)槲也](méi)有太理解題目的意思,所以我也不知道該怎么寫,于是我又放棄了,真要我實(shí)現(xiàn)一個(gè)HashMap我也是可以寫出來(lái)的,畢竟源碼我看過(guò)很多遍了,一是想到有點(diǎn)麻煩,二是想到我可能沒(méi)正確理解題目的意思,然后我就放棄了,放棄了,棄了,了。兩道題目下來(lái),我心理已經(jīng)被擊潰了,然后他問(wèn)我有沒(méi)有研究java方面的新技術(shù),問(wèn)我想從事哪一方面的開發(fā),問(wèn)我阿里云,淘寶等等這些有沒(méi)有對(duì)哪個(gè)比較有意向,這個(gè)時(shí)候的我意識(shí)已經(jīng)開始模糊了,話也說(shuō)不清楚了,舌頭也捋不順了,這幾個(gè)開放性的問(wèn)題答的我都恨不得抽死自己??傊?,一

17、面給自己打90分,二面給自己打20分經(jīng)驗(yàn)就不說(shuō)了,沒(méi)什么好的經(jīng)驗(yàn)教訓(xùn)就說(shuō)一下吧: 面試之前帶好水(之前??蜕嫌衅娼?jīng)提到過(guò)要帶水的,我沒(méi)有聽那位兄弟的話。也可能是有水我沒(méi)看到吧)對(duì)于面經(jīng)里面的題目沒(méi)必要太看重,每個(gè)人遇到的問(wèn)題肯定是很大不同的,除了一些太常見的題目,比如HashMap,ConcurrenthashMap之類的,就像很多面經(jīng)里面提到的數(shù)據(jù)庫(kù),網(wǎng)絡(luò)方面的問(wèn)題,我這次面試就提都沒(méi)提這方面的東西。對(duì)于面經(jīng)我們可以從中看看哪些大的方面在面試的過(guò)程當(dāng)中會(huì)問(wèn)的比較多,然后可以在這些方面加強(qiáng)學(xué)習(xí)。大方面比如說(shuō)JVM,java多線程,TCP,數(shù)據(jù)庫(kù)等等。面經(jīng)就好比是給我們劃了重點(diǎn),我們

18、需要把相關(guān)的知識(shí)都好好看一下。感謝那些提供面經(jīng)的同學(xué),指明了我應(yīng)該學(xué)習(xí)的方向,所以在這里也算是反饋一下??途W(wǎng),幾個(gè)月來(lái)確實(shí)讓我學(xué)到了很多,希望校招之后能有機(jī)會(huì)來(lái)分享一下成功的面試經(jīng)歷。雖然失敗了,但我覺(jué)得該,自己的能力還是有所欠缺的。不管怎么樣,這次面試雖然停止了,但是奮斗是不會(huì)停止的。-又想起來(lái)一些問(wèn)題,補(bǔ)充一下-1、ArrayList和LinkedList相關(guān)的,問(wèn)分別在什么情況下使用,以及查找一個(gè)元素的話這兩個(gè)的時(shí)間復(fù)雜度分別是多少(如果是調(diào)用contains(Object  o)方法的話復(fù)雜度都是O(n),如果是根據(jù)下標(biāo)進(jìn)行查找的話ArrayList的時(shí)間復(fù)雜度是O(1),LinkedList是O(n))。2、java 線程有哪些狀態(tài),這些狀態(tài)之間是如何轉(zhuǎn)化的。3、linux命令相關(guān)的。將當(dāng)前目錄下所有以“.txt”結(jié)尾的文件打印出來(lái),再追問(wèn),除了“.txt”再加上“.abc”結(jié)尾的也打印出來(lái)。4、有兩個(gè)線程A和B,如果一個(gè)線程要等另一個(gè)線程執(zhí)行完,該怎么做。(我說(shuō)在ThreadA中調(diào)用ThreadB.join()方法,二面面試官問(wèn)我入?yún)⒛兀课艺f(shuō)我見過(guò)的join方法沒(méi)有要傳入?yún)⒌陌。赡苊嬖嚬儆涘e(cuò)了,他也沒(méi)說(shuō)什么。被這么一搞我又虛了,面試官怎么能質(zhì)疑

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論