https://mp.weixin.qq.com/s?__biz=MzIwMzY1OTU1NQ==&mid=2247484751&idx=1&sn=8616aece193d174c12757d22e3e04924&chksm=96cd4503a1bacc154aceaaa89cdb8eeb4c2a83a459df0edb2c5380579aa46a946a94bfa1dac1&mpshare=1&scene=1&srcid=1031yugL7lWAsLVCvr02Knig&key=2839d46a2ccd1adab99f54f90c5939fc005980413bbe3f686f14430a39680f9a7e548e83c3e7f25cea1de13551d05e0c77b595bc70d394056de40e4630b4f0012e8eb9c9b91485bb2892bf3a6d3c14f0&ascene=0&uin=MTA2NzUxMDAyNQ%3D%3D&devicetype=iMac+MacBookAir6%2C2+OSX+OSX+10.10.5+build(14F2511)&version=11020012&lang=zh_CN&pass_ticket=NKOOH07PkTOF951qDy4B3Lw7qqHzzY35y1dPWQP56ICdSnZ6tBfyKRtR6PKeE1%2FMjava
一面面試
答:自我介紹是面試中惟一的本身主動介紹本身的環節,必定要好好把握好,你數據結構學的號能夠手撕一個紅黑樹你就說我數據結構掌握地很好,反正就是要把本身的優點凸顯出來,好比本身對於java的知識較熟悉,我介紹完本身的本科經歷之後,我就說我是保送到本校繼續讀研究生,而後最末尾會加上本身熟悉java,而後面試官就會問java的一些東西;算法
答:使勁吹...數據庫
答:感受這個問題被問爛了,int,short,long,float,double,byte,boolean,char;數組
答:-128-127緩存
答:這個我有背過,clone,getClass,toString,finalize,equals,hashCode,wait,notify,notifyALL。(不懂面試這個什麼意思)安全
答:我說若是常量池中,原來沒有「123」那麼就是生成了2個對象,若是常量池中有「123」那麼只要1個對象生成(面試官別他媽的問這種問題了)網絡
答:wait的話會釋放對象鎖,sleep的話不會釋放的對象鎖數據結構
答:這個我不假思索地說,hashmap和ConcurrentMap,這裏我猜面試官確定要繼續問我這兩個東西了。多線程
答:hashmap我講了hashmap的數據結構數組鏈表結構,講了hashmap的put,get,擴容的底層原理,同時講了hashmap在1.7與1.8中的區別,put中引入了紅黑樹,以及擴容的時候不一樣,這些就講了挺長時間,最後我說了一句hashmap不是線程安全的。
答:我說了,在擴容的時候hashmap會可能產生環,形成死循環;hashmap在插入新的階段的時候,多個線程同時插入,會把除了最後的那個線程的其它線程插入的結點丟失;對於修改的時候,多個線程修改,對只保留最後的一個線程的修改結果;擴容的時候,會只保留最後一個線程的擴容後的那個數組;從擴容修改增長說了一遍;
答:我說了解;
答:方法區,虛擬機棧,本地方法棧,堆,程序計數器,而後我就本身沒等面試官問新的問題,繼續接着說,方法區和堆是線程共享的,虛擬機棧本地方法棧和程序計數器是線程私有的,除了程序技術器不會發生內存溢出,其它都會發生內存溢出,並說了哪些會發生堆溢出哪些會發生棧溢出;這裏就是你們要學會本身吧啦吧啦地說一堆,由於據我觀察每一個面試官面試每一個是有一個固定時間的,超過這個時間段就結束了,因此只要面試官不打斷你,你就一頓說;
答:內存泄露我說就是一塊申請了一塊內存之後,沒法去釋放掉這塊內存,丟失了這段內存的引用;內存溢出就是申請的內存不夠,撐不起咱們須要的內存;
答:原子性,我說就是一個事務要麼所有完成,要麼所有失敗,要麼作要麼不作;一致性,好比a+b=100,一個事務改變了a好比增長了a的值,那麼必須同時改變b,保證在事務結束之後a+b=100依然成立,這就是一致性;持久性,額就是修改完之後,在數據庫中生效是永久的;隔離性,我就是說對於A對B進行轉帳,A沒把這個交易完成的時候,B是不知道A要給他轉錢。
答:額,(怎麼都要舉例子啊,啊啊啊啊~),心裏波瀾,臉上面無表情地說:1.未提交讀,事務中發生了修改,即便沒有提交,其它事務也是可見的,舉例子我就說對於一個數A原來50修改成100,可是我尚未提交修改,另外一個事務看到這個修改,而這個時候原事務發生了回滾,這時候A仍是50,可是另外一個事務看到的A是100,這就是未提交讀;2.提交讀,就是說,對於一個事務從開始直到提交以前,所作的任何修改是其它事務不可見的,舉例就是對於一個數A原來是50,而後提交修改爲100,這個時候另外一個事務在A提交修改以前,讀取到了A是50,剛讀取完,A就被修改爲100了,這個時候另外一個事務再進行讀取發現A就忽然變成100了;3.可重複讀;可重複讀,就是對於一個記錄讀取屢次的記錄是相同的,舉例就是對於一個數A讀取的話一直是A,先後兩次讀取到的A是一致的;可串行化讀,就是說在併發狀況下,和串行化的讀取的結果是一致的,沒有什麼不一樣,這個舉例我就說,不會發生髒讀和幻讀;而後數據庫這一塊就過去了。
答:物理層,數據鏈路層,網絡層,傳輸層,會話層,表示層,應用層;
答:TPC和UDP在傳輸層,而後HTTP問我在哪一個層,我一下有點忘了,這個沒答上來,會去看了是在應用層。
答:由於一面都是問基礎的知識,面試官和我說,我感受你基礎很紮實,他直接和我說我這裏的話是經過的,不知道後面的面試官怎麼問你,而後我說了聲謝謝,就去酒店的一個會議廳等待二面;
二面
一面過了沒多久,就立馬通知二面了,中途感受有點餓了,美團還挺人性話的,在後面的桌子上放了一堆餅乾,忘了餅乾的名字了,總之特別好吃,我吃了好幾塊。
答:ArrayList底層是數組,LinkedList底層是鏈表,ArrayLIst查找數據快,LinkedList插入刪除快;
答:能不用盡可能不要用,linkedList底層是鏈表,它使用for進行遍歷,訪問每個元素都是從頭開始訪問而後直到找到這個元素,好比說找第三個節點,須要先找到第一個節點而後找到第二個節點;繼續找第4個節點,不是從第三個節點開始找的,仍是從第一個節點開始,因此很是的慢,不推薦,能夠用迭代器進行遍歷。
答:我感受是由於一面問了hashmap,因此二面面試官多是看見了面試記錄,額,這塊我很是熟,這個我又講了很長時間,講了ConCurrentHashMap的底層的分段鎖的結構,講了ConCurrentHashmap的get源碼,get源碼是沒有使用鎖的,這裏我把get源碼背寫了下來,並給面試官講了get源碼在插入修改刪除的多線程下是安全的;而後講了put操做,remove,擴容操做,而後講了在1.7和1.8的區別,引入了紅黑樹,鏈表長度大於8轉換成紅黑樹,採用了CAS+synchronized來保證併發安全,吧啦吧啦又講了挺長時間;
答:這個紙條感受每一個面試官都是隻有紙條,因此儘量地和周圍的同窗多交流,有必定的肯可能他的面試官就你的面試官。題目:讓我本身手算a,b,c,d的值,
結果是a = 8, b=5, c=7, d=35 計算完我問他對不對,他沒勒我。。。
答:這個以前準備過,我寫了一個雙重鎖的單例模式。
建議不要寫這種單例模式,或者直接把那幾種都寫出來
答:這個以前也準備過,這裏要注意了,虛擬機的內存模型和運行時的數據區域不是一回事;虛擬機內存模型又叫JMM,就是每一個線程有本身的工做內存,而後又一個主內存,線程工做的時候都是在本身的工做內存中拷貝一個主內存的副本;還說了JMM的happens before原則,程序順序原則,鎖原則,線程中斷原則,傳遞性原則,還有其餘的沒想起來就沒說了。
答:標記清除,標記整理,複製算法,把每一個算法是啥說了一遍;
答:這個因爲剛纔剛問了垃圾回收算法,我以爲可能有關聯,因而我說,方便複製算法操做,Eden區域大多數都是朝生夕死的,這個比例,能夠方便複製算法的中from和to來回進行復制存活的對象,額,說完,他沒有說啥,感受是默許了吧;
答:當時我聽到中道題,有點懵,什麼是二叉樹的深度搜索遍歷,我只知道層次遍歷,前序後序中序遍歷啊,我想了想,感受和後序遍歷挺像的,我以爲應該就是後序遍歷吧,我就先寫了個後序遍歷的遞歸寫法
而後他看了一眼,沒說啥,感受這個面試官有點話少冷淡,全程不和我互動,emmmm....下來本身百度了下,對的。。。
這個代碼問完我,讓後讓我去等通知,我感受回答的還行,果真沒過幾分鐘,通知我去三面;
三面
答:繼續寫個人雙重鎖模式
上圖
答: STEP 1. 線程A訪問getInstance()方法,由於單例尚未實例化,因此進入了鎖定塊。 STEP 2. 線程B訪問getInstance()方法,由於單例尚未實例化,得以訪問接下來代碼塊,而接下來代碼塊已經被線程1鎖定。 STEP 3. 線程A進入下一判斷,由於單例尚未實例化,因此進行單例實例化,成功實例化後退出代碼塊,解除鎖定。 STEP 4. 線程B進入接下來代碼塊,鎖定線程,進入下一判斷,由於已經實例化,退出代碼塊,解除鎖定。 STEP 5. 線程A初始化並獲取到了單例實例並返回,線程B獲取了在線程A中初始化的單例。大致是這麼回事。
答:而後我說因爲產生了內存碎片,因此當分配一個大對象的時候,因爲內存不連續,那麼會產生full GC;
答:minor會產生在eden區滿了,fullGC產生在老年代的剩餘空間不足,以及永久代內存不足也會發生fullGC。
答:這裏以前瞭解過ThreadLocal,我說,ThreadLocal中的鍵值對中的鍵是一個弱引用,那麼在內存回收的時候,這個鍵極可能會被回收掉,而後鍵沒了,就沒法找到value的值,形成了內存泄漏;
答:因爲沒有準備過動態規劃的題目,這個題目看到我只說了暴力解決的方法,而後面試官提示讓我用動態規劃作,我想了半天沒想出來。。。。當時感受應該是涼了。。。
時間差很少的時候,面試官說,就到這裏吧,而後讓我出去等通知,果真通知我今天面試結束了,整整一個下午,特別特別累,前兩面結束的時候感受特別穩,沒想到最後仍是由於手寫代碼這一塊不會動態規劃掛掉了,當時感受心態有點崩。。。
結束語
最終美團面試仍是掛了,,,留下了沒有技術的眼淚。。。因此痛下決心要好好學習算法,這不今天又刷了一道leetcode