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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論