本文是一位粉絲朋友前段時間的真實面經(jīng)經(jīng)歷,面的是蘑菇街
背景介紹:
工作經(jīng)驗:Java開發(fā)5年
學(xué)歷背景:重慶郵電大學(xué)(信息安全專業(yè))
工作經(jīng)歷:主要業(yè)務(wù)在柬埔寨做移動支付錢包(聚合支付的項目鳍烁,讓柬埔寨當(dāng)?shù)厝A人能使用微信叨襟、支付寶支付)
注意:以下內(nèi)容均為真實面經(jīng)分享,大家可以認(rèn)真閱讀完幔荒,看下這些面試題你是否能答的讓面試官滿意糊闽,同時我也會分享一些面試的小技巧給大家,主要告訴你如何準(zhǔn)備簡歷爹梁,如何準(zhǔn)備面試右犹,2020大廠面試真題分享(含答案),哪些學(xué)習(xí)資料值得看姚垃。
話不多說念链,下面一起跟著這位粉絲朋友面試經(jīng)歷來看看他的面試之旅吧,另外积糯,下文中涉及到的面試題答案钓账、復(fù)習(xí)資料,均有完整PDF版分享
面試官:自我介紹一下吧
程序員:你好絮宁,我畢業(yè)于XXX,工作5年了服协,最近的工作主要是負(fù)責(zé)XXX(見以上背景介紹)
面試官:看到你寫到熟練掌握J(rèn)ava語言的高級特性绍昂,簡單介紹一下Bean SpringBean一個注入過程吧
程序員:Bean的注入過程......首先是從配置文件(注解)里面把它和對象.....額,我對這方面還是不太熟悉
面試官:沒事沒事....我們接著往下聊
程序員:尷尬一笑
面試官:我看大你寫到你了解一些高級特性偿荷,你能給我簡單的介紹一下Java8有哪些新特性嗎窘游,或者你比較擅長的新特性有哪些?
程序員:Java8主要就是在語法上就是lambda表達(dá)式跳纳,它可以用函數(shù)式進(jìn)行那個函數(shù)式編程忍饰,函數(shù)式接口的意思就是它這個接口它只有一個方法.....
面試官:還有別的嗎?
程序員:還有一些流的操作寺庄,比如:Stream API它可以簡化編程語義艾蓝,顯得更清晰力崇,比如在做一個filter功能,就可以綁定數(shù)據(jù)把不符合要求的數(shù)據(jù)過濾掉赢织,就在以前的話寫一個for循環(huán)亮靴,看起來就沒那么好理解....然后對于數(shù)據(jù)結(jié)構(gòu)進(jìn)行了一些優(yōu)化,像ConcurrentHashMap于置,它底層實現(xiàn)改成了紅黑樹.....
面試官:你剛剛說的都是一些優(yōu)化茧吊,我問的是它新加的一些高級特性
程序員:再次尷尬一笑.....
面試官:你剛剛提到它的流式處理,那對比像foreach或者基本的for循環(huán)八毯,它有沒有在效率上進(jìn)行優(yōu)化搓侄,還是說它更慢了?你有去了解過嗎话速?
程序員:額...沒有
面試官:我看你說對并發(fā)編程有些了解讶踪,你能跟我講一下Synchronized和Lock鎖它的底層實現(xiàn)原理嗎?
程序員:啊....Synchronized是一個語義級的支持尿孔,它在一個對象頭里面俊柔,它有一個Mark Word的標(biāo)記去記錄它的鎖,Lock顯示鎖是利用了它底層是一個AQS活合,它式一個雙向鏈表的先進(jìn)先出的一個隊列雏婶,它只有當(dāng)前持有鎖的線程就是一個對頭,然后它釋放出來之后白指,就會利用一個自旋的操作留晚,讓下一個線程作為隊頭這樣子
面試官:那它們兩個分別是什么層面的呢,是jdk層面還是JVM層面告嘲,還是错维?
程序員:Synchronized是JVM層面的,Lock是jdk層面的
面試官:剛剛你說到了Synchronized橄唬,你有去了解過它鎖方法赋焕、鎖對象和鎖代碼塊分別是怎么去實現(xiàn)的嗎?
程序員:額.....這個沒有
面試官:那你了解Synchronized鎖升級過程嗎仰楚?
程序員:沒有....
面試官:那剛剛提到了Lock隆判,CAS你能給我簡單的介紹一下嗎?
程序員:CAS就是比較并交換
面試官:恩恩僧界,提到這點就可以了侨嘀,那你有在實際開發(fā)過程中有實際的一些應(yīng)用嗎?應(yīng)用到樂觀鎖的一個過程
程序員:有的捂襟,就譬如咬腕,我在更新數(shù)據(jù)庫的時候,如果一個數(shù)據(jù)庫用的是樂觀鎖的話葬荷,我也用一個自旋的操作涨共,就把他更新到成功為止
面試官:自旋的效率會不會很低纽帖?如果一直取不到這個鎖的話,那可能會造成一些線程堵塞煞赢,或者在高并發(fā)場景下其他的會影響到很多效率抛计,有考慮到這個問題嗎?
程序員:也考慮到了.....如果并發(fā)高的時候確實不太適用用自旋照筑,這個時候更適合用悲觀鎖
面試官:那跟我聊一下線程池吧
程序員:線程池是.....我還是先說一下它的工作流程吹截,再變成先提交進(jìn)來,它先進(jìn)入核心吃里面凝危,如果線程書大于coreSize波俄,就會進(jìn)入一個阻塞隊列,阻塞隊列滿了后就會新建一些線程蛾默,進(jìn)入最大的池里面懦铺;當(dāng)線程數(shù),連maxSize的超出了之后支鸡,它就會執(zhí)行一個拒絕策略冬念,JDK自帶的拒絕策略有四種:一種是直接丟棄;一種是拋異常牧挣;一種是由調(diào)用者的線程執(zhí)行急前;一種是丟棄阻塞隊列里面等待時間最長的一個線程
面試官:我看你簡歷上還提到了熟練掌握J(rèn)VM調(diào)優(yōu)的知識,我能問一下你了解它調(diào)優(yōu)的一些基本步驟嗎瀑构?
程序員:啊....一口老血裆针,調(diào)優(yōu)的基本步驟....就譬如,我從...恩..我從OOM說起吧....如果生產(chǎn)上發(fā)生一個OOM異常寺晌,首先是要判斷它是在堆里面發(fā)生的還是元空間里面世吨,還有......它還有一種類型就是GC效率過低.....吧啦吧啦
注意:由于內(nèi)容過多,避免影響到閱讀體驗呻征,下面的面試環(huán)節(jié)我就不碼字了耘婚,全以截圖代替了!
面試官:我看你基本上都是待了一年就離職了陆赋,你能說一下你離職的原因嗎边篮?
程序員:.........
面試官:你對自己職業(yè)規(guī)劃大概是什么樣的?
程序員:往互聯(lián)網(wǎng)金融行業(yè)走
面試官:你有什么想問我的奏甫?
程序員:問了一些之前沒太懂的
面試總結(jié):從這場面試官中可以看出,面試官沒有深問凌受,不然估計80%的內(nèi)容都答不上來阵子,基本上都是偏基礎(chǔ)的東西,底層的內(nèi)容沒有怎么問胜蛉,寫了個Dubbo在簡歷上挠进,面試官都沒有問他Spring Cloud色乾,Hystrix容器這些,連bus都可以問出一堆東西领突,一旦問了真的就只有尷尬了暖璧,問到懷疑人生。
最后
無論是哪家公司君旦,都很重視基礎(chǔ)澎办,大廠更加重視技術(shù)的深度和廣度,面試是一個雙向選擇的過程金砍,不要抱著畏懼的心態(tài)去面試局蚀,不利于自己的發(fā)揮。同時看中的應(yīng)該不止薪資恕稠,還要看你是不是真的喜歡這家公司琅绅,是不是能真的得到鍛煉。
針對以上面試技術(shù)點鹅巍,我在這里也做一些資料分享千扶,有需要的朋友可以
本人免費整理了Java高級資料,涵蓋了Java骆捧、Redis澎羞、MongoDB、MySQL凑懂、Zookeeper煤痕、Spring Cloud、Dubbo高并發(fā)分布式等教程接谨,一共30G摆碉,需要自己領(lǐng)取。
傳送門:https://shimo.im/docs/rQRKDPx6dPXqvYPq