關(guān)于面試準(zhǔn)備,尤其是Java類的面試內(nèi)容,應(yīng)該多看些相關(guān)專業(yè)的書籍,系統(tǒng)的學(xué)習(xí)了解java開發(fā)的流程,從系統(tǒng)、應(yīng)用的不同角度、不同層次,逐步將問題域盡量縮小,隔離出真實(shí)原因。具體步驟未必千篇一律,在處理過較多這種問題之后,經(jīng)驗(yàn)會(huì)令你的直覺分外敏感。Java程序員面試前如何準(zhǔn)備?面試中我們應(yīng)該避免那些坑兒?
一、面試者常犯錯(cuò)誤:
我在面試候選人中經(jīng)常能體會(huì)到,有些面試者確實(shí)是認(rèn)真努力工作,但坦白說表現(xiàn)出的能力水平卻不足以通過面試,通常是兩方面原因:
1、“知其然不知其所以然”。做了多年技術(shù),開發(fā)了很多業(yè)務(wù)應(yīng)用,但似乎并未思考過種種技術(shù)選擇背后的邏輯。坦白說,我并不放心把具有一定深度的任務(wù)交給他。
2、知識碎片化,不成系統(tǒng)。在面試中,面試者似乎無法完整、清晰地描述自己所開發(fā)的系統(tǒng),或者使用的相關(guān)技術(shù)。平時(shí)可能埋頭苦干,或者過于死磕某個(gè)實(shí)現(xiàn)細(xì)節(jié),并沒有抬頭審視這些技術(shù)。
二、面試官一般會(huì)問的問題如下:
1、談?wù)勀銓?Java 平臺(tái)的理解?“Java 是解釋執(zhí)行”,這句話正確嗎?
考點(diǎn)分析:對于這類籠統(tǒng)的問題,你需要盡量表現(xiàn)出自己的思維深入并系統(tǒng)化,Java 知識理解得也比較全面,一定要避免讓面試官覺得你是個(gè)“知其然不知其所以然”的人。畢竟明白基本組成和機(jī)制,是日常工作中進(jìn)行問題診斷或者性能調(diào)優(yōu)等很多事情的基礎(chǔ),相信沒有招聘方會(huì)不喜歡“熱愛學(xué)習(xí)和思考”的面試者。
回歸正題,對于 Java 平臺(tái)的理解,可以從很多方面簡明扼要地談一下,例如:Java 語言特性,包括泛型、Lambda 等語言特性;基礎(chǔ)類庫,包括集合、IO/NIO、網(wǎng)絡(luò)、并發(fā)、安全等基礎(chǔ)類庫。對于我們?nèi)粘9ぷ鲬?yīng)用較多的類庫,面試前可以系統(tǒng)化總結(jié)一下,有助于臨場發(fā)揮。
2、對比Hashtable、HashMap、TreeMap有什么不同?
考點(diǎn)分析:上面的回答,只是對一些基本特征的簡單總結(jié),針對Map相關(guān)可以擴(kuò)展的問題很多,從各種數(shù)據(jù)結(jié)構(gòu)、典型應(yīng)用場景,到程序設(shè)計(jì)實(shí)現(xiàn)的技術(shù)考量,尤其是在Java 8里,HashMap本身發(fā)生了非常大的變化,這些都是經(jīng)常考察的方面。
很多朋友向我反饋,面試官似乎鐘愛考察HashMap的設(shè)計(jì)和實(shí)現(xiàn)細(xì)節(jié),所以今天我會(huì)增加相應(yīng)的源碼解讀,主要專注于下面幾個(gè)方面:
理解Map相關(guān)類似整體結(jié)構(gòu),尤其是有序數(shù)據(jù)結(jié)構(gòu)的一些要點(diǎn)。
從源碼去分析HashMap的設(shè)計(jì)和實(shí)現(xiàn)要點(diǎn),理解容量、負(fù)載因子等,為什么需要這些參數(shù),如何影響Map的性能,實(shí)踐中如何取舍等。
理解樹化改造的相關(guān)原理和改進(jìn)原因。
除了典型的代碼分析,還有一些有意思的并發(fā)相關(guān)問題也經(jīng)常會(huì)被提到,如HashMap在并發(fā)環(huán)境可能出現(xiàn)無限循環(huán)占用CPU、size不準(zhǔn)確等詭異的問題。
我認(rèn)為這是一種典型的使用錯(cuò)誤,因?yàn)镠ashMap明確聲明不是線程安全的數(shù)據(jù)結(jié)構(gòu),如果忽略這一點(diǎn),簡單用在多線程場景里,難免會(huì)出現(xiàn)問題。
理解導(dǎo)致這種錯(cuò)誤的原因,也是深入理解并發(fā)程序運(yùn)行的好辦法。對于具體發(fā)生了什么,你可以參考這篇很久以前的分析,里面甚至提供了示意圖,我就不再重復(fù)別人寫好的內(nèi)容了。
3、Java 提供了哪些 IO 方式? NIO 如何實(shí)現(xiàn)多路復(fù)用?
考點(diǎn)分析:在實(shí)際面試中,從傳統(tǒng) IO 到 NIO、NIO 2,其中有很多地方可以擴(kuò)展開來,考察點(diǎn)涉及方方面面,比如:
基礎(chǔ) API 功能與設(shè)計(jì), InputStream/OutputStream 和 Reader/Writer 的關(guān)系和區(qū)別。
NIO、NIO 2 的基本組成。
給定場景,分別用不同模型實(shí)現(xiàn),分析 BIO、NIO 等模式的設(shè)計(jì)和實(shí)現(xiàn)原理。
NIO 提供的高性能數(shù)據(jù)操作方式是基于什么原理,如何使用?
或者,從開發(fā)者的角度來看,你覺得 NIO 自身實(shí)現(xiàn)存在哪些問題?有什么改進(jìn)的想法嗎?
IO 的內(nèi)容比較多,專欄一講很難能夠說清楚。IO 不僅僅是多路復(fù)用,NIO 2 也不僅僅是異步 IO,尤其是數(shù)據(jù)操作部分,會(huì)在專欄下一講詳細(xì)分析。
4、后臺(tái)服務(wù)出現(xiàn)明顯“變慢”,談?wù)勀愕脑\斷思路?
考點(diǎn)分析:今天我選擇的是一個(gè)常見的并且比較貼近實(shí)際應(yīng)用的的性能相關(guān)問題,我提供的回答包括兩部分。
在正面回答之前,先探討更加精確的問題定義是什么。有時(shí)候面試官并沒有表達(dá)清楚,有必要確認(rèn)自己的理解正確,然后再深入回答。
從系統(tǒng)、應(yīng)用的不同角度、不同層次,逐步將問題域盡量縮小,隔離出真實(shí)原因。具體步驟未必千篇一律,在處理過較多這種問題之后,經(jīng)驗(yàn)會(huì)令你的直覺分外敏感。
大多數(shù)工程師也許并沒有全面的性能問題診斷機(jī)會(huì),如果被問到也不必過于緊張,你可以向面試官展示診斷問題的思考方式,展現(xiàn)自己的知識和綜合運(yùn)用的能力。接觸到一個(gè)陌生的問題,通過溝通,能夠條理清晰地將排查方案逐步確定下來,也是能力的體現(xiàn)。
面試官可能會(huì)針對某個(gè)角度的診斷深入詢問,兼顧工作和面試的需求,我會(huì)針對下面一些方面進(jìn)行介紹。目的是讓你對性能分析有個(gè)整體的印象,在遇到特定領(lǐng)域問題時(shí),即使不知道具體細(xì)節(jié)的工具和手段,至少也可以找到探索、查詢的方向。
我將介紹業(yè)界常見的性能分析方法論。
從系統(tǒng)分析到JVM、應(yīng)用性能分析,把握整體思路和主要工具。對于線程狀態(tài)、JVM內(nèi)存使用等很多方面,我在專欄前面已經(jīng)陸陸續(xù)續(xù)介紹了很多,今天這一講也可以看作是聚焦性能角度的一個(gè)小結(jié)。
5、談?wù)勀愕腉C調(diào)優(yōu)思路?
考點(diǎn)分析:今天考察的GC調(diào)優(yōu)問題是JVM調(diào)優(yōu)的一個(gè)基礎(chǔ)方面,很多JVM調(diào)優(yōu)需求,最終都會(huì)落實(shí)在GC調(diào)優(yōu)上或者與其相關(guān),我提供的是一個(gè)常見的思路。
真正快速定位和解決具體問題,還是需要對JVM和GC知識的掌握,以及實(shí)際調(diào)優(yōu)經(jīng)驗(yàn)的總結(jié),有的時(shí)候甚至是源自經(jīng)驗(yàn)積累的直覺判斷。面試官可能會(huì)繼續(xù)問項(xiàng)目中遇到的真實(shí)問題,如果你能清楚、簡要地介紹其上下文,然后將診斷思路和調(diào)優(yōu)實(shí)踐過程表述出來,會(huì)是個(gè)很好的加分項(xiàng)。
專欄雖然無法提供具體的項(xiàng)目經(jīng)驗(yàn),但是可以幫助你掌握常見的調(diào)優(yōu)思路和手段,這不管是面試還是在實(shí)際工作中都是很有幫助的。另外,我會(huì)還會(huì)從下面不同角度進(jìn)行補(bǔ)充:
涉及具體的GC類型,JVM的實(shí)際表現(xiàn)要更加復(fù)雜。目前,G1已經(jīng)成為新版JDK的默認(rèn)選擇,所以值得你去深入理解。
因?yàn)镚1 GC一直處在快速發(fā)展之中,我會(huì)側(cè)重它的演進(jìn)變化,尤其是行為和配置相關(guān)的變化。并且,同樣是因?yàn)镴VM的快速發(fā)展,即使是收集GC日志等方面也發(fā)生了較大改進(jìn)。
從GC調(diào)優(yōu)實(shí)踐的角度,理解通用問題的調(diào)優(yōu)思路和手段。
初級會(huì)計(jì)職稱中級會(huì)計(jì)職稱經(jīng)濟(jì)師注冊會(huì)計(jì)師證券從業(yè)銀行從業(yè)會(huì)計(jì)實(shí)操統(tǒng)計(jì)師審計(jì)師高級會(huì)計(jì)師基金從業(yè)資格稅務(wù)師資產(chǎn)評估師國際內(nèi)審師ACCA/CAT價(jià)格鑒證師統(tǒng)計(jì)資格從業(yè)
一級建造師二級建造師消防工程師造價(jià)工程師土建職稱房地產(chǎn)經(jīng)紀(jì)人公路檢測工程師建筑八大員注冊建筑師二級造價(jià)師監(jiān)理工程師咨詢工程師房地產(chǎn)估價(jià)師 城鄉(xiāng)規(guī)劃師結(jié)構(gòu)工程師巖土工程師安全工程師設(shè)備監(jiān)理師環(huán)境影響評價(jià)土地登記代理公路造價(jià)師公路監(jiān)理師化工工程師暖通工程師給排水工程師計(jì)量工程師
人力資源考試教師資格考試出版專業(yè)資格健康管理師導(dǎo)游考試社會(huì)工作者司法考試職稱計(jì)算機(jī)營養(yǎng)師心理咨詢師育嬰師事業(yè)單位教師招聘公務(wù)員公選考試招警考試選調(diào)生村官
執(zhí)業(yè)藥師執(zhí)業(yè)醫(yī)師衛(wèi)生資格考試衛(wèi)生高級職稱護(hù)士資格證初級護(hù)師主管護(hù)師住院醫(yī)師臨床執(zhí)業(yè)醫(yī)師臨床助理醫(yī)師中醫(yī)執(zhí)業(yè)醫(yī)師中醫(yī)助理醫(yī)師中西醫(yī)醫(yī)師中西醫(yī)助理口腔執(zhí)業(yè)醫(yī)師口腔助理醫(yī)師公共衛(wèi)生醫(yī)師公衛(wèi)助理醫(yī)師實(shí)踐技能內(nèi)科主治醫(yī)師外科主治醫(yī)師中醫(yī)內(nèi)科主治兒科主治醫(yī)師婦產(chǎn)科醫(yī)師西藥士/師中藥士/師臨床檢驗(yàn)技師臨床醫(yī)學(xué)理論中醫(yī)理論