本人目前在一家知名外企擔(dān)任架構(gòu)師春锋,而且最近八年來,在多家外企和互聯(lián)網(wǎng)公司擔(dān)任Java技術(shù)面試官差凹,前后累計面試了有兩三百位候選人期奔。在本文里侧馅,就將結(jié)合本人的面試經(jīng)驗,針對Java初學(xué)者呐萌、Java初級開發(fā)和Java開發(fā)馁痴,給出若干準(zhǔn)備簡歷和準(zhǔn)備面試的建議。
一肺孤、Java程序員準(zhǔn)備和投遞簡歷的實戰(zhàn)技巧
1.1 簡歷中應(yīng)包含的要素罗晕,一個都別落下
為了讓簡歷更吸引技術(shù)面試官或其它相關(guān)篩選簡歷的人,大家在準(zhǔn)備簡歷應(yīng)當(dāng)注意“直接”兩字:能讓篩選人能直接地看出本人的教育背景赠堵、工作經(jīng)歷和項目經(jīng)理小渊,并讓他們“直接”感到這份簡歷能納入考慮范圍。
根據(jù)這個原則茫叭,大家可以按次序在簡歷中列出如下表所給出的要素酬屉。
簡歷中應(yīng)包含的要素目的
基本信息,比如姓名揍愁,性別呐萨,年齡,目前所在城市莽囤,是否在職谬擦,手機(jī)和電郵等。1 讓招聘方了解候選人的基本信息烁登。
2 以便招聘方通過手機(jī)等方式能聯(lián)系到候選人怯屉。
按時間倒敘寫教育背景,一般只需要包含高中以上饵沧,初中高中等不必寫锨络,但需包含專業(yè)和學(xué)歷學(xué)位信息。用專業(yè)和學(xué)歷學(xué)位等信息向招聘方證明自己的技術(shù)背景狼牺。
總結(jié)性地列出自己所掌握的技能羡儿。比如:
1 有3年Java經(jīng)驗,有2年Spring MVC經(jīng)驗是钥。
2有3年Oracle經(jīng)驗掠归,有2年Oracle調(diào)優(yōu)經(jīng)驗。
等等
一般這些總結(jié)點是和職務(wù)需求是一致的悄泥,這樣能讓招聘方直接地感受到該候選人的匹配度虏冻。
在這基礎(chǔ)上,可以適當(dāng)列些能成功幫到自己的總結(jié)點弹囚。
按倒敘列出工作過的公司厨相,并列出在這些公司里的項目經(jīng)驗,這部分的技能下文會詳細(xì)描述。在項目經(jīng)驗描述里蛮穿,能通過項目用到的技術(shù)經(jīng)驗等庶骄,具體地給出自己“匹配”該崗位的證明。
可以列出和應(yīng)聘崗位相關(guān)的培訓(xùn)經(jīng)歷和得到過的獎勵這些屬于加分項践磅,同等情況下能優(yōu)先錄用
用少量篇幅列出自己的興趣和自我總結(jié)讓招聘公司進(jìn)一步了解候選人
1.2 該如何描述公司的工作情況
這部分一般是按時間倒敘描述单刁,比如可以按如下的格式寫:
2015年11月到2017年10月,在xx公司府适,職務(wù)是Java高級開發(fā)羔飞。離職理由是想進(jìn)一步發(fā)展。
2012年2月到2015年11月细溅,在xx公司褥傍,職務(wù)是Java初級開發(fā)。離職理由是想進(jìn)一步發(fā)展喇聊。
按此格式寫之前的公司情況
這部分的內(nèi)容應(yīng)當(dāng)盡量靠前恍风,在羅列公司情況時,請大家注意如下的四個要點誓篱。
第一朋贬,工作情況可以和項目經(jīng)驗分開寫,一般會在后繼的項目經(jīng)驗里寫具體用到的技術(shù)框架以及所做過項目的細(xì)節(jié)窜骄,在這里的工作情況描述里锦募,可以不用過于復(fù)雜,讓招聘方看到你之前的公司情況即可邻遏。
第二糠亩,盡量別出現(xiàn)長時間的“空白期”,比如上份工作是2月份結(jié)束的准验,而下份工作是6月開始的赎线。如果出現(xiàn)持續(xù)三個月以上的“不在職狀態(tài)”,需要在簡歷中說明情況糊饱,比如這段時間你是換城市發(fā)展了垂寥,或辭職復(fù)習(xí)考研或復(fù)習(xí)考公務(wù)員,總之得找個能說得過去的理由另锋。
第三滞项,在簡歷上,盡量別讓人感覺你每份工作都做不長夭坪,但不能以此作假文判。比如我見過有候選人會合并公司,比如2016年11月到2017年3月在A公司室梅,2017年4月到10月在B公司戏仓,他為了不讓招聘方感覺他換工作太頻繁潭流,在簡歷上就寫2016年11月到2017年10月在B公司工作,而故意合并了A公司的經(jīng)歷亏栈。這樣的話媒熊,如果遇到背景調(diào)查,會露餡,即使有些公司不做調(diào)查豌汇,在勞動手冊等材料上也能反應(yīng)出真實的工作情況,所以這種做法有一定的風(fēng)險性爪喘。
這里推薦的做法是蹄咖,不要合并公司,但可以寫明理由钳幅,比如當(dāng)時小王是被外派公司A以人力派遣的形式外派到B公司物蝙,但沒過多久A公司因某種原因不再具備人力派遣的資質(zhì)了,這時小王就不得不終止與A公司的合同轉(zhuǎn)而和B公司簽約敢艰,這樣雖然看上去小王是換了公司诬乞,但實際上沒有。通過類似的合理解釋钠导,招聘方就不再會質(zhì)疑小王的工作能力和穩(wěn)定性了震嫉。
第四,可以寫上合適的離職理由牡属,尤其當(dāng)你短時間里換工作比較多票堵,可能引起招聘方的質(zhì)疑的情況里,更該考慮些合適的理由逮栅。
合理的離職理由可以是悴势,想為自己提供一個更大的發(fā)展空間,或想通過升級來獨當(dāng)一面措伐,以此進(jìn)一步提升自己的能力特纤,或公司因資金等方面的原因倒閉了》鲜浚總之叫潦,這不是我主觀上不穩(wěn)定,而是由于客觀原因?qū)е挛也坏貌粨Q工作官硝。
而可能會導(dǎo)致沒面試機(jī)會的離職原因是矗蕊,待遇問題(雖然大家心知肚明,但不能這樣寫)氢架,或無法承受大壓力傻咖,或同事領(lǐng)導(dǎo)排擠。這類理由往往會暴露出候選人的缺點岖研,所以不建議大家采用卿操。從這意義上來講警检,“合同期滿”也不是一個好的離職原因,因為如果候選人能力強(qiáng)害淤,那么為什么原公司不和你續(xù)約呢扇雕?
總之,在描述公司情況時窥摄,一旦出現(xiàn)會讓招聘方感覺你能力不強(qiáng)或不穩(wěn)定時镶奉,一定得醒目地寫上足以信服的理由,這樣你的簡歷才會有機(jī)會被繼續(xù)被讀下去崭放,進(jìn)而你才會有技術(shù)面試的機(jī)會哨苛。
1.3 盡量把學(xué)習(xí)培訓(xùn)項目和畢業(yè)設(shè)計項目往商業(yè)項目上靠
商業(yè)項目是指能掙錢的項目,和它對應(yīng)的就是些不以掙錢為目的的學(xué)習(xí)項目或畢業(yè)設(shè)計項目币砂。正因為客戶付了錢建峭,所以商業(yè)項目的要求要遠(yuǎn)遠(yuǎn)高于學(xué)習(xí)或畢業(yè)設(shè)計項目,這也是為什么招聘公司會看重商業(yè)項目而會主動過濾學(xué)習(xí)項目的原因决摧。
比如小張在大三時幫計算機(jī)系的王老師所在的ABC軟件公司干了半年的活亿蒸,如果小張在簡歷上寫:“在校期間,從x年x月到x年x月完成了xx系統(tǒng)蜜徽,用到了xx技術(shù)”祝懂,那么這多半會被當(dāng)成類似于課程設(shè)計的學(xué)習(xí)經(jīng)驗,但如果再加上如下關(guān)鍵性的描述:“這個系統(tǒng)是屬于xx公司的xx商業(yè)項目里的一部分拘鞋,我和另外三位開發(fā)人員做了半年砚蓬,最終這個系統(tǒng)成功上線并在客戶xx公司的環(huán)境里投入運營”,那這樣小張的商業(yè)項目總年限里就能加上這半年時間了盆色。
又如小李在做畢業(yè)設(shè)計時灰蛙,花了7個月的時間參與了導(dǎo)師的一個電商商業(yè)項目,他主要的工作是設(shè)計一個調(diào)度算法隔躲,但也參與了一些諸如訂單管理模塊的工作摩梧。如果他就平淡地寫一句,畢業(yè)設(shè)計是xx宣旱,畢業(yè)論文是xx仅父,那么招聘方看過就算了,也不會認(rèn)為小李在做畢業(yè)設(shè)計時還有過商業(yè)項目經(jīng)驗浑吟,這樣小李未免有些吃虧笙纤。
但如果這樣寫:“在x年x月到x年x月的7個月里,在畢業(yè)設(shè)計中组力,我參與了xx公司的xx電商項目省容,客戶方是x,我參與了訂單管理和xx模塊燎字,并設(shè)計了其中的調(diào)度算法腥椒,在我的畢業(yè)論文里阿宅,詳細(xì)介紹了這種做法”。文字沒修改太多笼蛛,但足以讓小李增加7個月的商業(yè)項目經(jīng)驗洒放。
我們發(fā)現(xiàn)大多數(shù)初級程序員的水平其實也差不多,這時就得看誰的商業(yè)項目經(jīng)驗豐富了滨砍。比如有次我們無法從兩位候選人中權(quán)衡拉馋,因為他們的綜合條件和面試情況都差不多,但其中有一位在大三階段有段為期6個月的商業(yè)項目實習(xí)經(jīng)驗惨好,另一位沒有(也有可能他也有但沒當(dāng)成商業(yè)項目來寫),這種情況下我們就錄用了有實習(xí)經(jīng)驗的候選人了随闺。
1.4 描述項目的技巧
我們可以根據(jù)職位需求日川,從如下幾個方面來描述項目經(jīng)驗。
第一矩乐,簡要描述項目的背景龄句,比如時間范圍,客戶是誰散罕,項目規(guī)模有多大分歇。如下是范例。
從x年x月到現(xiàn)在(這個時間范圍至少是最近半年)欧漱,我參與某外匯交易系統(tǒng)职抡,客戶是xx銀行,這個項目組的構(gòu)成是误甚,1位項目經(jīng)理外加10位開發(fā)缚甩,總共的規(guī)模大概在80個人月左右。
第二窑邦,大致描述項目的需求和包含哪些模塊擅威,然后簡要說下你做了哪些模塊,同時說下在這個項目用到的開發(fā)工具和主要技術(shù)點冈钦,這部分的描述如下所述郊丛。
這個外匯交易系統(tǒng)包括掛盤撮合成交、實盤成交瞧筛、反洗錢和數(shù)據(jù)批處理等模塊厉熟,我主要負(fù)責(zé)了掛盤撮合成交模塊,其中用到了Spring MVC架構(gòu)驾窟,數(shù)據(jù)庫是Oracle庆猫,用Mybatis實現(xiàn)的ORM,該系統(tǒng)是運行發(fā)布在Weblogic服務(wù)器上绅络,我們還用了Nginx來實現(xiàn)負(fù)載均衡月培,用Redis來緩存數(shù)據(jù)嘁字。在這個項目里,我還用到了JS實現(xiàn)了一些前臺頁面杉畜。
第三纪蜒,這里可以結(jié)合職位的需求,描述JD里要求的技術(shù)在項目里是如何用的此叠。同樣這里也應(yīng)圍繞技術(shù)纯续,而別多寫業(yè)務(wù)細(xì)節(jié)
1.5 在簡歷中描述項目時可以添加的亮點
我們見過不少簡歷,在描述項目時灭袁,也能像上文一樣猬错,能根據(jù)招聘職位的具體要求展示出自己的匹配點,這種簡歷屬于“達(dá)標(biāo)”茸歧,即可以納入考慮范圍倦炒。在這個基礎(chǔ)上,如果大家在項目里有下表列出的亮點软瞎,一定請寫上逢唤,這就是大家優(yōu)于別人的地方。
1. 數(shù)據(jù)庫和JVM調(diào)優(yōu)涤浇;
2. 你理解的框架底層代碼鳖藕;
3. 項目里用到的設(shè)計模式;
4. 項目管理和部署工具只锭;
5.?結(jié)合若干案例著恩,講述你分析和解決bug的技能;
6. 其它能幫助到你的加分項蜻展,比如工期緊页滚,用到新技術(shù)等。
1.6 哪些簡歷可以通過篩選
從面試官角度來看铺呵,除了學(xué)歷等硬件條件外裹驰,如果簡歷滿足如下的4點要求,就一般能有面試機(jī)會了片挂。
1. 商業(yè)項目足量幻林,且其中包含的技能和職位介紹很匹配;
2. 最近用到的技能和職位介紹很匹配音念;
3. 沒有過長職業(yè)空白期或不穩(wěn)定等情況沪饺;
4. 一定請記住,公司只能通過簡歷認(rèn)識到你闷愤,簡歷上沒寫清楚等同于你不行整葡。
其實這就是我們寫簡歷的方向,而且讥脐,在針對具體公司投遞簡歷時遭居,還可以以此為目標(biāo)啼器,微調(diào)簡歷。
二俱萍、面試時該如何講解技術(shù)項目贏得面試官好感
2.1 別害怕端壳,因為面試官什么都不知道
面試官是人,不是神枪蘑,拿到你的簡歷的時候损谦,是沒法核實你的項目細(xì)節(jié)的(一般公司會到錄用后,用背景調(diào)查的方式來核實)岳颇。更何況照捡,你做的項目是以月為單位算的,而面試官最多用30分鐘來從你的簡歷上了解你的項目經(jīng)驗话侧,所以你對項目的熟悉程度要遠(yuǎn)遠(yuǎn)超過面試官麻敌,所以你一點也不用緊張。如果你的工作經(jīng)驗比面試官還豐富的話掂摔,甚至還可以控制整個面試流程(筆者在面試方面成精后也經(jīng)常干這種事情,大家一定也能行)赢赊。
你面試官
對你以前的項目和技能很了解只能聽你說乙漓,只能根據(jù)你說的內(nèi)容做出判斷
在面試過程中的職責(zé)在很短的時間內(nèi)防守成功即可如果找不出漏洞,就只能算你以前做過
準(zhǔn)備時間面試前你有充足的時間準(zhǔn)備一般在面試前用30分鐘閱讀你的簡歷
溝通過程你可以出錯释移,但別出關(guān)鍵性的錯誤不會太為難你叭披,除非你太差
技巧你有足夠的技巧,也可以從網(wǎng)上找到足夠多的面試題其實就問些通用的有規(guī)律的問題
既然面試官無法了解你的底細(xì)玩讳,那么他們怎么來驗證你的項目經(jīng)驗和技術(shù)涩蜘?下面總結(jié)了一些常用的提問方式。
提問方式目的
讓你描述工作經(jīng)驗和項目(極有可能是最近的)熏纯,看看你說的是否和簡歷上一致看你是否真的做過這些項目
看你簡歷上項目里用到的技術(shù)同诫,比如框架、數(shù)據(jù)庫樟澜,然后針對這些技術(shù)提些基本問題還是驗證你是否做過項目误窖,同時看你是否了解這些技術(shù),為進(jìn)一步提問做準(zhǔn)備
針對某個項目秩贰,不斷深入地問一些技術(shù)上的問題霹俺,或者從不同側(cè)面問一些技術(shù)實現(xiàn),看你前后回答里面是否有矛盾深入核實你的項目細(xì)節(jié)
針對某技術(shù)毒费,問些項目里一定會遇到的問題丙唧,比如候選人說做過數(shù)據(jù)庫,那么就會問索引方面的問題通過這類問題觅玻,核實候選人是否真的有過項目經(jīng)驗(或者還僅僅是學(xué)習(xí)經(jīng)驗)
2.2 面試時的錯誤表現(xiàn)
在面試過程中想际,如果候選人出現(xiàn)如下的表現(xiàn)培漏,那么很有可能過不了面試,請大家注意沼琉。
1. 面試時介紹的項目時間等情況簡歷上寫的不一致北苟,這就有簡歷造假的嫌疑;
2. 介紹項目時只介紹業(yè)務(wù)打瘪,忽略技術(shù)友鼻。因為面試官只關(guān)心技術(shù),不關(guān)心業(yè)務(wù)闺骚;
3. 對于提到的技術(shù)彩扔,連最基本的問題也回答不上,這就說明候選人這項技術(shù)沒掌握僻爽;
4. 說得太流利或太磕磕巴巴虫碉,這就說明在背詞或者是表達(dá)有問題。
2.3 面試中介紹項目的范例
第一步胸梆,介紹項目基本情況敦捧。
可以這樣說,這個項目是xx產(chǎn)品的xx模塊的碰镜,有xx和xx模塊兢卵,我做了xx模塊,用了半年绪颖,我的組里一共有5個人秽荤。這里可以談下業(yè)務(wù),但別深入柠横,因為面試官不熟悉窃款,也不想熟悉候選人的業(yè)務(wù),這塊時間控制在1分鐘之內(nèi)牍氛。
第二步晨继,介紹項目里關(guān)鍵技術(shù)和管理方式。
可以這樣說搬俊,這個項目里踱稍,我用到了Spring框架,用到nginx等組件悠抹,項目管理用Maven珠月,部署用jenkins,靜態(tài)掃描用Sonar楔敌,任務(wù)管理和bug管理用jira啤挎,平時采用敏捷的項目迭代方式,每天有站會,大約1月一個迭代版本庆聘。這塊可以根據(jù)自己的情況來介紹胜臊,時間也別太長,估計用1分鐘也就夠了伙判。
第三步象对,結(jié)合業(yè)務(wù)講用到的技術(shù),但別展開:
比如有個職位介紹宴抚,里面寫到需要有數(shù)據(jù)庫優(yōu)化的經(jīng)驗勒魔,那么可以說,項目里xx模塊菇曲,我用到MyCat作為分庫分表冠绢,(不展開技術(shù)),上線后常潮,數(shù)據(jù)庫能承受住每秒2000個并發(fā)請求(說下用好的結(jié)果)弟胀。
又如一個JD里說要用到微服務(wù)技術(shù),那么就可以說喊式,項目里用到了Spring Cloud框架孵户,用到了Ribbon,Eureka等組件岔留,容器是Docker夏哭。用好以后,在發(fā)布時會發(fā)現(xiàn)贸诚,各模塊之間的調(diào)用耦合性大大降低。
2.4 介紹項目時的要點歸納
從上述介紹項目的范例中厕吉,可以歸納出相關(guān)要點如下酱固。
1. 面試前,需要閱讀職位介紹头朱,挖掘用過的技能要點运悲,然后盡可能地在介紹項目里提到這些技能關(guān)鍵字;
2. 在介紹項目里项钮,結(jié)合業(yè)務(wù)班眯,提到職位介紹里的技術(shù),因為一旦技術(shù)結(jié)業(yè)業(yè)務(wù)烁巫,就說明你有過相關(guān)技術(shù)的實踐經(jīng)驗署隘,而不是僅僅只會理論;
3. 別過多介紹業(yè)務(wù)亚隙,多拋出職位介紹里的關(guān)鍵字磁餐。還是這句話,面試官不關(guān)心業(yè)務(wù)阿弃,你提到業(yè)務(wù)只是以此證明你在實踐中用過相關(guān)技術(shù)而已诊霹;
4. 此時還在項目介紹階段羞延,別過多展開技能,你拋出技能關(guān)鍵字后脾还,面試官自然會問的伴箩。而一旦你過多展開技術(shù),那么面試官就有可能感覺到你思路不清晰鄙漏。
三嗤谚、Java面試者該準(zhǔn)備哪些加分項技能
3.1框架是重點,但別讓人感覺你只會山寨別人的代碼
一般工作在3年內(nèi)的候選人泥张,大多僅僅是能“山寨”別人的代碼呵恢,也就是說能在現(xiàn)有框架的基礎(chǔ)上,照著別人寫的流程媚创,擴(kuò)展出新的功能模塊渗钉。比如要寫個股票掛單的功能模塊,是會模仿現(xiàn)有的下單流程钞钙,然后從前端到后端再到數(shù)據(jù)庫鳄橘,依樣畫葫蘆寫一遍,最多把功能相關(guān)的代碼點改掉芒炼。
如果單純使用SSM框架瘫怜,大多數(shù)項目都會有痛點。比如數(shù)據(jù)庫性能差本刽,或者業(yè)務(wù)模塊比較復(fù)雜鲸湃,并發(fā)量比較高,用Spring MVC里的Controller無法滿足跳轉(zhuǎn)的需求子寓。所以我一般還會主動問:你除了依照現(xiàn)有框架寫業(yè)務(wù)代碼時暗挑,還做了哪些改動?
我聽到的回答有:增加了Redis緩存斜友,以避免頻繁調(diào)用一些不變的數(shù)據(jù)炸裆。或者鲜屏,在MyBitas的xml里烹看,select語句where條件有is,即這個值有就增加一個where條件洛史,對此惯殊,會對任何一個where增加一個不帶is的查詢條件,以免該語句當(dāng)傳入?yún)?shù)都是時也殖,做全表掃描靠胜。或者,干脆說浪漠,后端異步返回的數(shù)據(jù)量很大陕习,時間很長,我在項目里就調(diào)大了異步返回的最大時間址愿,或者對返回信息做了壓縮處理该镣,以增加網(wǎng)絡(luò)傳輸性能。
對于這個問題响谓,我不在乎聽到什么回答损合,我只關(guān)心回答符不符邏輯。一般只要答對娘纷,我就會給出“在框架層面有自己的體會嫁审,有一定的了解”,否則赖晶,我就只會給出“只能在項目經(jīng)理帶領(lǐng)下編寫框架代碼律适,對框架本身了解不多”。
其實遏插,在準(zhǔn)備面試時捂贿,歸納框架里的要點并不難,我就不信所有人在做項目時一點積累也沒胳嘲,只要你說出來厂僧,可以說,這方面你就碾壓了將近7成的競爭者了牛。
3.2 別單純看單機(jī)版的框架颜屠,適當(dāng)了解些分布式
在描述項目里框架技術(shù)時,最好你再帶些分布式的技術(shù)鹰祸。下面我列些大家可以準(zhǔn)備的分布式技術(shù)甫窟。
反向代理方面,nginx的基本配置福荸,比如如何通過lua語言設(shè)置規(guī)則蕴坪,如何設(shè)置session粘滯肴掷。如果可以敬锐,再看些nginx的底層,比如協(xié)議呆瞻,集群設(shè)置台夺,失效轉(zhuǎn)移等;
遠(yuǎn)程調(diào)用dubbo方面痴脾,可以看下dubbo和zookeeper整合的知識點颤介,再深一步,了解下dubbo底層的傳輸協(xié)議和序列化方式;
消息隊列方面滚朵,可以看下kafka或任意一種組件的使用方式冤灾,簡單點可以看下配置,工作組的設(shè)置辕近,再深入點韵吨,可以看下Kafka集群,持久化的方式移宅,以及發(fā)送消息是用長連接還是短攔截归粉。
以上僅僅是用3個組件舉例,大家還可以看下Redis緩存漏峰,日志框架糠悼,MyCAT分庫分表等。準(zhǔn)備的方式有兩大類浅乔,第一是要會說怎么用倔喂,這比較簡單,能通過配置文件搭建成一個功能模塊即可童擎,第二是可以適當(dāng)讀些底層代碼滴劲,以此了解下協(xié)議,集群和失效轉(zhuǎn)移之類的高級知識點顾复。
3.3 數(shù)據(jù)庫方面班挖,別就知道增刪改查,得了解性能優(yōu)化
在實際項目里芯砸,大多數(shù)程序員用到的可能僅僅是增刪改查萧芙,當(dāng)我們用Mybatis時,這個情況更普遍假丧。不過如果你面試時也這樣表現(xiàn)双揪,估計你的能力就和其它競爭者差不多了。
這方面包帚,你可以準(zhǔn)備如下的技能:
SQL高級方面渔期,比如group by, having,左連接渴邦,子查詢(帶in)疯趟,行轉(zhuǎn)列等高級用法;
建表方面谋梭,你可以考慮下信峻,你項目是用三范式還是反范式,理由是什么瓮床?
尤其是優(yōu)化盹舞,你可以準(zhǔn)備下如何通過執(zhí)行計劃查看SQL語句改進(jìn)點的方式产镐,或者其它能改善SQL性能的方式(比如建索引等);
如果你感覺有能力踢步,還可以準(zhǔn)備些MySQL集群癣亚,MyCAT分庫分表的技能。比如通過LVS+Keepalived實現(xiàn)MySQL負(fù)載均衡获印,MyCAT的配置方式逃糟。同樣,如果可以蓬豁,也看些相關(guān)的底層代碼绰咽。
哪怕你在前三點表現(xiàn)一般,那么至少也能超越將近一般的候選人地粪,尤其當(dāng)你在SQL優(yōu)化方面表現(xiàn)非常好取募,那么你在面試高級開發(fā)時,數(shù)據(jù)庫層面一定是達(dá)標(biāo)的蟆技,如果你連第四點也回答非常好玩敏,那么恭喜你,你在數(shù)據(jù)庫方面的能力甚至達(dá)到了初級架構(gòu)的級別质礼。
3.4 Java核心方面旺聚,圍繞數(shù)據(jù)結(jié)構(gòu)和性能優(yōu)化準(zhǔn)備面試題
Java核心這塊,網(wǎng)上的面試題很多眶蕉,不過在此之外砰粹,大家還應(yīng)當(dāng)著重關(guān)注集合(即數(shù)據(jù)結(jié)構(gòu))和多線程并發(fā)這兩塊,在此基礎(chǔ)上造挽,大家可以準(zhǔn)備些設(shè)計模式和虛擬機(jī)的說辭碱璃。
下面列些我一般會問的部分問題:
String a = "123"; String b = "123"; a==b的結(jié)果是什么?這包含了內(nèi)存饭入,String存儲方式等諸多知識點嵌器;
HashMap里的hashcode方法和equal方法什么時候需要重寫?如果不重寫會有什么后果谐丢?對此大家可以進(jìn)一步了解HashMap(甚至ConcurrentHashMap)的底層實現(xiàn)爽航;
ArrayList和LinkedList底層實現(xiàn)有什么差別?它們各自適用于哪些場合乾忱?對此大家也可以了解下相關(guān)底層代碼讥珍;
volatile關(guān)鍵字有什么作用?由此展開饭耳,大家可以了解下線程內(nèi)存和堆內(nèi)存的差別串述;
CompletableFuture执解,這個是JDK1.8里的新特性寞肖,通過它怎么實現(xiàn)多線程并發(fā)控制纲酗?
JVM里,new出來的對象是在哪個區(qū)新蟆?再深入一下觅赊,問下如何查看和優(yōu)化JVM虛擬機(jī)內(nèi)存;
Java的靜態(tài)代理和動態(tài)代理有什么差別琼稻?最好結(jié)合底層代碼來說吮螺。
通過上述的問題點,我其實不僅僅停留在“會用”級別帕翻,比如我不會問如何在ArrayList里放元素鸠补。大家可以看到,上述問題包含了“多線程并發(fā)”嘀掸,“JVM優(yōu)化”紫岩,“數(shù)據(jù)結(jié)構(gòu)對象底層代碼”等細(xì)節(jié),大家也可以舉一反三睬塌,通過看一些高級知識泉蝌,多準(zhǔn)備些其它類似面試題。
3.5 Linux方面揩晴,至少了解如何看日志排查問題
如果候選人能證明自己有“排查問題”和“解決問題”的能力勋陪,這絕對是個加分項,但怎么證明硫兰?目前大多數(shù)的互聯(lián)網(wǎng)項目诅愚,都是部署在Linux上,也就是說劫映,日志都是在Linux呻粹,下面歸納些實際的Linux操作。
能通過less命令打開文件苏研,通過Shift+G到達(dá)文件底部等浊,再通過?+關(guān)鍵字的方式來根據(jù)關(guān)鍵來搜索信息;
能通過grep的方式查關(guān)鍵字摹蘑,具體用法是, grep 關(guān)鍵字 文件名筹燕,如果要兩次在結(jié)果里查找的話,就用grep 關(guān)鍵字1 文件名 | 關(guān)鍵字2 --color衅鹿。最后--color是高亮關(guān)鍵字撒踪;
能通過vi來編輯文件;
能通過chmod來設(shè)置文件的權(quán)限大渤。
當(dāng)然制妄,還有更多更實用的Linux命令,但在實際面試過程中泵三,不少候選人連一條linux命令也不知道耕捞。還是這句話衔掸,你哪怕知道些很基本的,也比一般人強(qiáng)了俺抽。
3.6 通讀一段底層代碼敞映,作為加分項
如何證明自己對一個知識點非常了解?莫過于能通過底層代碼來說明。我在和不少工作經(jīng)驗在5年之內(nèi)的程序員溝通時磷斧,不少人認(rèn)為這很難振愿?確實,如果要通過閱讀底層代碼了解分布式組件弛饭,那難度不小冕末,但如果如下部分的底層代碼,并不難懂侣颂。
ArrayList,LinkedList的底層代碼里栓霜,包含著基于數(shù)組和鏈表的實現(xiàn)方式,如果大家能以此講清楚擴(kuò)容横蜒,“通過枚舉器遍歷“等方式胳蛮,絕對能證明自己;
HashMap直接對應(yīng)著Hash表這個數(shù)據(jù)結(jié)構(gòu)丛晌,在HashMap的底層代碼里个盆,包含著hashcode的put哗讥,get等的操作盯串,甚至在ConcurrentHashMap里躏鱼,還包含著Lock的邏輯。我相信谋逻,如果大家在面試中呆馁,看看而言ConcurrentHashMap,再結(jié)合在紙上邊說邊畫毁兆,那一定能征服面試官浙滤;
可以看下靜態(tài)代理和動態(tài)代理的實現(xiàn)方式,再深入一下气堕,可以看下Spring AOP里的實現(xiàn)代碼纺腊;
或許Spirng IOC和MVC的底層實現(xiàn)代碼比較難看懂,但大家可以說些關(guān)鍵的類茎芭,根據(jù)關(guān)鍵流程說下它們的實現(xiàn)方式揖膜。
其實準(zhǔn)備的底層代碼未必要多,而且也不限于在哪個方面梅桩,比如集合里基于紅黑樹的TreeSet壹粟,基于NIO的開源框架,甚至分布式組件的Dubbo宿百,都可以準(zhǔn)備趁仙。而且準(zhǔn)備時未必要背出所有的底層(事實上很難做到)洪添,你只要能結(jié)合一些重要的類和方法,講清楚思路即可(比如講清楚HashMap如何通過hashCode快速定位)幸撕。
那么在面試時,如何找到個好機(jī)會說出你準(zhǔn)備好的上述底層代碼外臂?在面試時坐儿,總會被問到集合,Spring MVC框架等相關(guān)知識點宋光,你在回答時貌矿,順便說一句,“我還了解這塊的底層實現(xiàn)”罪佳,那么面試官一定會追問逛漫,那么你就可以說出來了。
四赘艳、預(yù)估面試題酌毡,準(zhǔn)備對應(yīng)的回答
4.1 哪些問題面試中大概率會被問到
在面試?yán)铮还苋绾我龑?dǎo)面試官蕾管,其實如下方面的問題很大可能會被問到枷踏,所以在面試前可以提前準(zhǔn)備。
職位介紹里提到的技能要點掰曾,比如職位介紹里有提到Mybatis旭蠕,那么面試官一定會問相關(guān)問題;
你在項目介紹時拋出的技術(shù)關(guān)鍵字旷坦,比如你在面試過程中介紹項目時提到了Redis掏熬,那么在介紹完項目后,面試官就會問秒梅,“你項目里是如何使用Redis的旗芬?”,類似的捆蜀,簡歷中你寫的技術(shù)岗屏,也有可能會被問到;
Java核心漱办,數(shù)據(jù)庫这刷,Spring框架,項目管理等基礎(chǔ)問題娩井,這些就不用說了暇屋,不過如果你引導(dǎo)得當(dāng)?shù)脑挘嬖嚬贂ㄙM很多時間問你提到的技術(shù)洞辣,這塊會問得比較少咐刨;
必要的算法題昙衅,比如排序等,其實面試官感覺你技術(shù)可以的話定鸟,這塊就不怎么會問了而涉,但準(zhǔn)備的時候需要看這個,有備無患联予。
4.2 面試官提問的方式
以上介紹了常見問題的種類啼县,這里介紹下面試官常用的提問方式。
問用法沸久,比如直接提問季眷,項目里你netty怎么用的?這塊大家可以結(jié)合項目準(zhǔn)備說辭卷胯;
問流程子刮,比如結(jié)合業(yè)務(wù),講下nginx負(fù)載均衡的用法窑睁?這也可以結(jié)合項目和網(wǎng)上搜到的資料準(zhǔn)備說辭挺峡;
問原因,比如為什么要用netty担钮?這塊就要結(jié)合項目說明了沙郭;
問技術(shù)點, 比如netty里零拷貝怎么回事裳朋?對此病线,需要對簡歷上提到的每個技術(shù)點,以及面試過程中將要提到的每個技術(shù)點鲤嫡,搜相關(guān)面試問題送挑,并結(jié)合業(yè)務(wù)說明;
問基礎(chǔ)知識暖眼,比如finally從句的用途惕耕,這就可以通過刷題來獲取了。
4.3 舉例說明該如何準(zhǔn)備面試問題
下面給出準(zhǔn)備問題的技巧诫肠。
斟酌面試時拋出的技能司澎,逐一準(zhǔn)備說辭;
針對技術(shù)栋豫,網(wǎng)上搜索問題挤安,比如搜Spring IOC面試題,結(jié)合網(wǎng)上的參考答案準(zhǔn)備說辭丧鸯;
準(zhǔn)備技術(shù)的實施要點蛤铜,比如做了哪些配置文件,你在項目里踩過哪些坑?
最好結(jié)合底層代碼說明围肥。
如下給出兩個例子剿干,先以MyCat分庫分表為例,給出介紹說辭的技巧穆刻。
準(zhǔn)備業(yè)務(wù)背景置尔,為什么要用?比如我們項目數(shù)據(jù)庫并發(fā)壓力大氢伟,需要用MyCat作為分庫分表榜轿;
如何使用,無非是設(shè)置分庫規(guī)則腐芍,改寫SQL語句等差导;
準(zhǔn)備下踩到的坑试躏,比如自增長主鍵在每臺機(jī)器上都要保證唯一猪勇;
然后再結(jié)合些底層代碼,準(zhǔn)備下一條SQL語句是如何分發(fā)到對應(yīng)的分庫上的颠蕴,然后執(zhí)行好以后又如何返回的泣刹;
再可以準(zhǔn)備些只有做過才知道的細(xì)節(jié),比如發(fā)布上線和清洗數(shù)據(jù)的流程犀被;
網(wǎng)上找些MyCAT的面試題椅您,準(zhǔn)備相關(guān)說辭。
一般說到了這里寡键,面試官就不怎么問了掀泳,哪怕你后面再被問倒,面試官也會感覺你MyCat很熟悉西轩。
下面以Netty為例员舵,給出相關(guān)技巧。
結(jié)合業(yè)務(wù)需求點藕畔,說下為什么要用這個技術(shù)马僻,怎么用的,以及用了有什么好處注服? 比如為了優(yōu)化網(wǎng)絡(luò)通訊協(xié)議韭邓,所以用基于TCP協(xié)議的Netty,業(yè)務(wù)模塊里的xxx功能是用到netty溶弟;
準(zhǔn)備下踩到的坑女淑,比如在某業(yè)務(wù)場景里,我遇到了半包粘包問題辜御,我是通過調(diào)試底層代碼解決的诗力;
用了Netty對項目的幫助。比如Netty是基于TCP協(xié)議的,它要比Http協(xié)議要輕苇本,所以通訊性能高袜茧,且Netty內(nèi)部的Reactor線程模型對系統(tǒng)的IO幫助很大;
基于零拷貝瓣窄、讀寫索引和異步處理機(jī)制笛厦,準(zhǔn)備些底層代碼,在面試?yán)镎f明俺夕;
順帶再準(zhǔn)備下Netty的組件裳凸,工作流程等問題,這能搜到問題和相關(guān)說辭劝贸。
在講的時候姨谷,大家甚至可以邊畫Netty流程圖,再結(jié)合底層代碼說明映九,這樣面試官一定會對大家刮目相看梦湘。
其實這里僅僅是拋磚引玉,或者提到的技術(shù)比較高深 件甥,但可以講述的技術(shù)還可以是線程池捌议,MyBatis組件,Redis引有,甚至是虛擬機(jī)優(yōu)化等瓣颅。哪怕是初級開發(fā),也能多少抓住一兩個點譬正,按上述思路說明宫补。
五、面試時如何不被面試官牽著鼻子曾我,自我把控面試的走向粉怕?
5.1 在介紹項目時,引導(dǎo)話題的技巧以及案例
在做項目介紹的時候您单,你可以穿插說出一些你的亮點斋荞,但請記得,不論在介紹項目還是在回答問題虐秦,你當(dāng)前的職責(zé)不是說明亮點而是介紹項目平酿,一旦你詳細(xì)說,可能會讓面試官感覺你跑題了悦陋。
所以這時你可以一筆帶過蜈彼,比如你可以說,“我們的項目對數(shù)據(jù)要求比較大俺驶,忙的時候平均每小時要處理幾十萬條數(shù)據(jù)”幸逆,這樣就可以把面試官引入“大數(shù)據(jù)”的方向棍辕。
你在面試前可以根據(jù)職位的需求,準(zhǔn)備好這種“一筆帶過”的話还绘。比如這個職位的需求點是Spring MVC框架楚昭,大數(shù)據(jù)高并發(fā),要有數(shù)據(jù)庫調(diào)優(yōu)經(jīng)驗拍顷,那么介紹以往項目時抚太,你就最好突出這些方面你的實際技能。
再給大家舉個例子昔案,比如Java虛擬機(jī)內(nèi)存管理和數(shù)據(jù)庫優(yōu)化是絕大多數(shù)項目都要遇到的兩大問題尿贫,大家都可以在敘述項目經(jīng)驗時說,在這個項目里踏揣,我們需要考慮內(nèi)存因素庆亡,因為我們的代碼只允許在2G內(nèi)存環(huán)境中運行,而且對數(shù)據(jù)庫性能要求比較高捞稿,所以我們經(jīng)常要監(jiān)控優(yōu)化內(nèi)存和數(shù)據(jù)庫里的SQL語句又谋。這樣當(dāng)面試官深入提問時,就能拋出自己準(zhǔn)備好的虛擬機(jī)內(nèi)存優(yōu)化和數(shù)據(jù)庫優(yōu)化方面的說辭括享。
或者說搂根,在項目介紹時提到珍促,在xx模塊里铃辖,我們使用了nginx做負(fù)載均衡,達(dá)到了承受百萬級并發(fā)的效果猪叙,從而引出nginx的話題娇斩。
實在不行,你也可以說“我除了做開發(fā)穴翩,也做了了解需求犬第,測試和部署的工作,因為這個項目人手比較少芒帕,壓力比較大”歉嗓,這樣你也能展示你有過獨擋一面的經(jīng)歷。
5.2 以Netty為例背蟆,講述引出值錢話題的技巧
比如在介紹項目時鉴分,我提到了Netty技術(shù),如果面試官沒打斷带膀,我就問志珍,能否介紹其中的Netty細(xì)節(jié)?得到允許后再說垛叨。
或者把技術(shù)關(guān)聯(lián)到面試官可能會問的問題上伦糯,比如問及網(wǎng)絡(luò)通訊時介紹Netty,這個事先整理一個問題列表,遇到此類問題敛纲,順帶拋出Netty說辭喂击。
問題列表可以是,項目里你用到哪些組件淤翔?用到哪些通訊協(xié)議惭等?如何進(jìn)行模塊間的交互等等,然后先回答問題本身办铡,再擴(kuò)展到Netty辞做。但請記住,別自說自話寡具,因為過猶不及秤茅,其它技術(shù)照此辦理
5.3 以案例說明,在回答問題時引出準(zhǔn)備過話題的技巧
比如面試官問你Spring相關(guān)問題童叠,假設(shè)問到框喳,你對Spring依賴注入了解多少,在說好Spring相關(guān)問題后再提一句厦坛,我們同時用Spring五垮,以低耦合的方式整合了MyCAT組件,從而達(dá)到了分庫分表的效果杜秸,這樣就引出了分庫分表的話題 放仗。
或者在介紹Netty流程后,再說一句撬碟,在實際項目里诞挨,我們還遇到了因Netty底層代碼而導(dǎo)致的OOM問題,對此呢蛤,我們組負(fù)責(zé)排查和解決問題惶傻,這樣就自然而然地引出了OOM內(nèi)存溢出的問題。
或者在介紹完線程相關(guān)問題時其障,再提一句银室,在項目里,我們用到了線程池來管理線程励翼,這樣就引出了高并發(fā)的話題蜈敢。
但在引導(dǎo)的時候,請注意如下的三點抚笔。
第一扶认,面試官不接口的,應(yīng)當(dāng)立即停止殊橙,再說下去就屬于自說自話了辐宾。
第二狱从,還是要準(zhǔn)備必要的基礎(chǔ)問題,還是要刷題叠纹,還是要準(zhǔn)備各種說辭季研,因為面試前的全面準(zhǔn)備,是引導(dǎo)的基礎(chǔ)誉察。
第三与涡,應(yīng)當(dāng)引導(dǎo)面試官問些“框架”和“性能調(diào)優(yōu)”等值錢方面的技能,這樣才能最大程度地展示你的能力持偏,同樣驼卖,此類問題需要面試前準(zhǔn)備。
5.4 你可以引導(dǎo)的加分項
在如下的一些表格里鸿秆,歸納的加分項甚至初級開發(fā)多少也能準(zhǔn)備酌畜,其中涵蓋了諸多方面。
表 Java Core方面可以準(zhǔn)備的亮點
技術(shù)方面可以說的亮點
Java集合對象1 能根據(jù)項目的需求選用合適的集合對象卿叽,比如知道ArrayList和LinkedList的差異桥胞,并能合理選用。
2 能在合適的場合選用WeakHashMap考婴。
3 可以適當(dāng)講一些集合的JDK底層實現(xiàn)代碼贩虾。
異常處理方面能在finally從句里寫釋放資源的代碼
JDBC方面1 能通過PreparedStatement的預(yù)處理方法來防止SQL注入。
2 能通過批處理來提升操作性能沥阱。
3 能通過實例講述事務(wù)隔離級別的含義
多線程方面1 會結(jié)合項目使用線程池
2 能通過鎖或信號量等手段正確地處理多線程并發(fā)時的數(shù)據(jù)一致性缎罢。
3 熟悉各種并發(fā)組件
表 數(shù)據(jù)庫方面可以準(zhǔn)備的亮點
技術(shù)方面可以說的亮點
建表建表時需要根據(jù)項目的數(shù)據(jù)情況,考慮是采用三范式或是反范式喳钟。
SQL調(diào)優(yōu)1 可以通過查看日志等方式看哪些SQL需要調(diào)優(yōu)屁使。
2 可以通過執(zhí)行計劃查看SQL的所消耗的代價在岂,并據(jù)此調(diào)優(yōu)奔则。
3 可以通過建索引,建分區(qū)等手段來優(yōu)化SQL性能蔽午。
事務(wù)1 可以說下JDBC或Spring里是如何管理事務(wù)的易茬。
2 可以說下Spring里的聲明式事務(wù)的做法和優(yōu)點。
3 可以舉例說明事務(wù)隔離級別和事務(wù)傳播機(jī)制的用法及老。
分布式數(shù)據(jù)庫1 可以通過MyCAT進(jìn)行分庫分表抽莱,從而減輕對單表訪問所需要的代價。
2 可以通過集群等方式來承擔(dān)對數(shù)據(jù)庫的過量的訪問請求骄恶。
NoSQL和Hadoop這兩個本身就是個亮點食铐,如果大家用過,可以結(jié)合項目來說明僧鲁。
表Java Web框架方面可以準(zhǔn)備的亮點
技術(shù)方面可以說的亮點
Spring MVC/Boot架構(gòu)1 可以說下Spring的IOC和AOP是如何優(yōu)化項目結(jié)構(gòu)的虐呻。
2 可以說下攔截器等Spring組件對項目的幫助象泵。
3 可以說下Spring Boot對項目的幫助
ORM,比如Mybatis使用這種ORM技術(shù)時斟叼,如何優(yōu)化訪問和操作數(shù)據(jù)庫的性能偶惠。
Spring和Mybatis等的整合可以講下整合框架的細(xì)節(jié),并可以舉例說明整合后的框架能很好地適應(yīng)需求的變更朗涩。
表 分布式組件方面可以準(zhǔn)備的亮點
技術(shù)方面可以說的亮點
組件應(yīng)用1?結(jié)合配置文件等忽孽,說明怎么用的
2?結(jié)合業(yè)務(wù),說下具體的效果谢床,比如限流后有什么好處兄一。
如何應(yīng)對高并發(fā)的場景1 如何達(dá)到負(fù)載均衡
2 如何進(jìn)行失效轉(zhuǎn)移
定位排查和解決問題1 如何通過分析log定位問題
2 問題的根源和解決方法
健康檢查和線上監(jiān)控1 如何通過健康檢查確定系統(tǒng)正常運行
2 出了問題,如何發(fā)出警告
由此大家能看到识腿,其實很多事先可以準(zhǔn)備的點瘾腰,其實是你沒有想到,但你項目里一定用過覆履。你據(jù)此準(zhǔn)備蹋盆,在通過上述技巧在面試中合理地找機(jī)會說出來,你面試成功的可能性一定會大大增加硝全。
總結(jié)栖雾,面試準(zhǔn)備后,結(jié)果可能就大不同
先從面試官的角度看下伟众,哪些人能面試成功析藕?
1. 最近半年的項目經(jīng)歷和JD匹配度很高;
2. 通過面試凳厢,JD上的技能候選人大多能掌握账胧;
3. 候選人在Java核心,數(shù)據(jù)庫和框架方面的基礎(chǔ)技能達(dá)標(biāo)先紫;
4. 不是刺頭治泥,團(tuán)隊合作沒問題,沒有其它大問題遮精。
但如果大家面試前不準(zhǔn)備居夹,或者準(zhǔn)備不到位,那么就會面臨如下的后果了:
1. 簡歷未必能過篩選本冲,甚至沒有面試機(jī)會准脂;
2. 無法證明項目里用到的技術(shù)和JD高度契合;
3. 介紹項目經(jīng)驗時沒問題檬洞,把提問的主動權(quán)交給面試官狸膏;
4. 不知道將會問哪些問題,所有問題都現(xiàn)場想添怔;
5. 在面試現(xiàn)場湾戳,沒法讓面試官全面了解你的技術(shù)亮點闷板。
但如果按照上述方法準(zhǔn)備,大家很大程度上能得到如下的收獲院塞。
1. 能通過微調(diào)簡歷遮晚,得到更多的面試機(jī)會;
2. 能通過挖掘項目經(jīng)驗拦止,證明自己的技能和JD契合县遣;
3. 能知道哪些屬于值錢技能,并能結(jié)合業(yè)務(wù)準(zhǔn)值錢技能和調(diào)優(yōu)技能的說辭汹族,而且能不露痕跡地展示萧求;
4. 不僅限于coding,更能展示項目管理(sonar等)顶瞒,linux夸政,項目部署(nginx)等方面的技能;
5. 知道面試大致會問哪些問題榴徐,并由此能事先準(zhǔn)備守问;
6. 能事先盡可能多地挖掘亮點,并在面試時展示坑资。
這就是大家閱讀本文后的收獲耗帕,最后感謝大家看完本文。
轉(zhuǎn)自:https://blog.csdn.net/sxeric