四虎影视库国产精品一区-四虎影视库-四虎影视久久久免费-四虎影视久久久-四虎影视久久-四虎影视精品永久免费网站

TEL:17368476151

Java培訓(xùn) > Java知識(shí) >

Java面試秘訣

作者:南京????來源:南京????發(fā)布時(shí)間:2020-02-05 12:08????瀏覽量:123

  Java程序員準(zhǔn)備和投遞簡(jiǎn)歷的實(shí)戰(zhàn)技巧

  1.1 簡(jiǎn)歷中應(yīng)包含的要素,一個(gè)都別落下

  為了讓簡(jiǎn)歷更吸引技術(shù)面試官或其它相關(guān)篩選簡(jiǎn)歷的人,大家在準(zhǔn)備簡(jiǎn)歷應(yīng)當(dāng)注意“直接”兩字:能讓篩選人能直接地看出本人的教育背景、工作經(jīng)歷和項(xiàng)目經(jīng)理,并讓他們“直接”感到這份簡(jiǎn)歷能納入考慮范圍。

  根據(jù)這個(gè)原則,大家可以按次序在簡(jiǎn)歷中列出如下表所給出的要素。

北大青鳥軟件學(xué)校

  1.2 該如何描述公司的工作情況

  這部分一般是按時(shí)間倒敘描述,比如可以按如下的格式寫:

  2015年11月到2017年10月,在xx公司,職務(wù)是Java高級(jí)開發(fā)。離職理由是想進(jìn)一步發(fā)展。

  2012年2月到2015年11月,在xx公司,職務(wù)是Java初級(jí)開發(fā)。離職理由是想進(jìn)一步發(fā)展。

  按此格式寫之前的公司情況

  這部分的內(nèi)容應(yīng)當(dāng)盡量靠前,在羅列公司情況時(shí),請(qǐng)大家注意如下的四個(gè)要點(diǎn)。

  第一,工作情況可以和項(xiàng)目經(jīng)驗(yàn)分開寫,一般會(huì)在后繼的項(xiàng)目經(jīng)驗(yàn)里寫具體用到的技術(shù)框架以及所做過項(xiàng)目的細(xì)節(jié),在這里的工作情況描述里,可以不用過于復(fù)雜,讓招聘方看到你之前的公司情況即可。

  第二,盡量別出現(xiàn)長(zhǎng)時(shí)間的“空白期”,比如上份工作是2月份結(jié)束的,而下份工作是6月開始的。如果出現(xiàn)持續(xù)三個(gè)月以上的“不在職狀態(tài)”,需要在簡(jiǎn)歷中說明情況,比如這段時(shí)間你是換城市發(fā)展了,或辭職復(fù)習(xí)考研或復(fù)習(xí)考公務(wù)員,總之得找個(gè)能說得過去的理由。

  第三,在簡(jiǎn)歷上,盡量別讓人感覺你每份工作都做不長(zhǎng),但不能以此作假。比如我見過有候選人會(huì)合并公司,比如2016年11月到2017年3月在A公司,2017年4月到10月在B公司,他為了不讓招聘方感覺他換工作太頻繁,在簡(jiǎn)歷上就寫2016年11月到2017年10月在B公司工作,而故意合并了A公司的經(jīng)歷。這樣的話,如果遇到背景調(diào)查,會(huì)露餡,即使有些公司不做調(diào)查,在勞動(dòng)手冊(cè)等材料上也能反應(yīng)出真實(shí)的工作情況,所以這種做法有一定的風(fēng)險(xiǎn)性。

  這里推薦的做法是,不要合并公司,但可以寫明理由,比如當(dāng)時(shí)小王是被外派公司A以人力派遣的形式外派到B公司,但沒過多久A公司因某種原因不再具備人力派遣的資質(zhì)了,這時(shí)小王就不得不終止與A公司的合同轉(zhuǎn)而和B公司簽約,這樣雖然看上去小王是換了公司,但實(shí)際上沒有。通過類似的合理解釋,招聘方就不再會(huì)質(zhì)疑小王的工作能力和穩(wěn)定性了。

  第四,可以寫上合適的離職理由,尤其當(dāng)你短時(shí)間里換工作比較多,可能引起招聘方的質(zhì)疑的情況里,更該考慮些合適的理由。

  合理的離職理由可以是,想為自己提供一個(gè)更大的發(fā)展空間,或想通過升級(jí)來獨(dú)當(dāng)一面,以此進(jìn)一步提升自己的能力,或公司因資金等方面的原因倒閉了。總之,這不是我主觀上不穩(wěn)定,而是由于客觀原因?qū)е挛也坏貌粨Q工作。

  而可能會(huì)導(dǎo)致沒面試機(jī)會(huì)的離職原因是,待遇問題(雖然大家心知肚明,但不能這樣寫),或無法承受大壓力,或同事領(lǐng)導(dǎo)排擠。這類理由往往會(huì)暴露出候選人的缺點(diǎn),所以不建議大家采用。從這意義上來講,“合同期滿”也不是一個(gè)好的離職原因,因?yàn)槿绻蜻x人能力強(qiáng),那么為什么原公司不和你續(xù)約呢?

  總之,在描述公司情況時(shí),一旦出現(xiàn)會(huì)讓招聘方感覺你能力不強(qiáng)或不穩(wěn)定時(shí),一定得醒目地寫上足以信服的理由,這樣你的簡(jiǎn)歷才會(huì)有機(jī)會(huì)被繼續(xù)被讀下去,進(jìn)而你才會(huì)有技術(shù)面試的機(jī)會(huì)。

  1.3 盡量把學(xué)習(xí)培訓(xùn)項(xiàng)目和畢業(yè)設(shè)計(jì)項(xiàng)目往商業(yè)項(xiàng)目上靠

  商業(yè)項(xiàng)目是指能掙錢的項(xiàng)目,和它對(duì)應(yīng)的就是些不以掙錢為目的的學(xué)習(xí)項(xiàng)目或畢業(yè)設(shè)計(jì)項(xiàng)目。正因?yàn)榭蛻舾读隋X,所以商業(yè)項(xiàng)目的要求要遠(yuǎn)遠(yuǎn)高于學(xué)習(xí)或畢業(yè)設(shè)計(jì)項(xiàng)目,這也是為什么招聘公司會(huì)看重商業(yè)項(xiàng)目而會(huì)主動(dòng)過濾學(xué)習(xí)項(xiàng)目的原因。

  比如小張?jiān)诖笕龝r(shí)幫計(jì)算機(jī)系的王老師所在的ABC軟件公司干了半年的活,如果小張?jiān)诤?jiǎn)歷上寫:“在校期間,從x年x月到x年x月完成了xx系統(tǒng),用到了xx技術(shù)”,那么這多半會(huì)被當(dāng)成類似于課程設(shè)計(jì)的學(xué)習(xí)經(jīng)驗(yàn),但如果再加上如下關(guān)鍵性的描述:“這個(gè)系統(tǒng)是屬于xx公司的xx商業(yè)項(xiàng)目里的一部分,我和另外三位開發(fā)人員做了半年,終這個(gè)系統(tǒng)成功上線并在客戶xx公司的環(huán)境里投入運(yùn)營(yíng)”,那這樣小張的商業(yè)項(xiàng)目總年限里就能加上這半年時(shí)間了。

  又如小李在做畢業(yè)設(shè)計(jì)時(shí),花了7個(gè)月的時(shí)間參與了導(dǎo)師的一個(gè)電商商業(yè)項(xiàng)目,他主要的工作是設(shè)計(jì)一個(gè)調(diào)度算法,但也參與了一些諸如訂單管理模塊的工作。如果他就平淡地寫一句,畢業(yè)設(shè)計(jì)是xx,畢業(yè)論文是xx,那么招聘方看過就算了,也不會(huì)認(rèn)為小李在做畢業(yè)設(shè)計(jì)時(shí)還有過商業(yè)項(xiàng)目經(jīng)驗(yàn),這樣小李未免有些吃虧。

  但如果這樣寫:“在x年x月到x年x月的7個(gè)月里,在畢業(yè)設(shè)計(jì)中,我參與了xx公司的xx電商項(xiàng)目,客戶方是x,我參與了訂單管理和xx模塊,并設(shè)計(jì)了其中的調(diào)度算法,在我的畢業(yè)論文里,詳細(xì)介紹了這種做法”。文字沒修改太多,但足以讓小李增加7個(gè)月的商業(yè)項(xiàng)目經(jīng)驗(yàn)。

  我們發(fā)現(xiàn)大多數(shù)初級(jí)程序員的水平其實(shí)也差不多,這時(shí)就得看誰的商業(yè)項(xiàng)目經(jīng)驗(yàn)豐富了。比如有次我們無法從兩位候選人中權(quán)衡,因?yàn)樗麄兊木C合條件和面試情況都差不多,但其中有一位在大三階段有段為期6個(gè)月的商業(yè)項(xiàng)目實(shí)習(xí)經(jīng)驗(yàn),另一位沒有(也有可能他也有但沒當(dāng)成商業(yè)項(xiàng)目來寫),這種情況下我們就錄用了有實(shí)習(xí)經(jīng)驗(yàn)的候選人了。

  1.4 描述項(xiàng)目的技巧

  我們可以根據(jù)職位需求,從如下幾個(gè)方面來描述項(xiàng)目經(jīng)驗(yàn)。

  第一,簡(jiǎn)要描述項(xiàng)目的背景,比如時(shí)間范圍,客戶是誰,項(xiàng)目規(guī)模有多大。如下是范例。

  從x年x月到現(xiàn)在(這個(gè)時(shí)間范圍至少是近半年),我參與某外匯交易系統(tǒng),客戶是xx銀行,這個(gè)項(xiàng)目組的構(gòu)成是,1位項(xiàng)目經(jīng)理外加10位開發(fā),總共的規(guī)模大概在80個(gè)人月左右。

  第二,大致描述項(xiàng)目的需求和包含哪些模塊,然后簡(jiǎn)要說下你做了哪些模塊,同時(shí)說下在這個(gè)項(xiàng)目用到的開發(fā)工具和主要技術(shù)點(diǎn),這部分的描述如下所述。

  這個(gè)外匯交易系統(tǒng)包括掛盤撮合成交、實(shí)盤成交、反洗錢和數(shù)據(jù)批處理等模塊,我主要負(fù)責(zé)了掛盤撮合成交模塊,其中用到了Spring MVC架構(gòu),數(shù)據(jù)庫(kù)是Oracle,用Mybatis實(shí)現(xiàn)的ORM,該系統(tǒng)是運(yùn)行發(fā)布在Weblogic服務(wù)器上,我們還用了Nginx來實(shí)現(xiàn)負(fù)載均衡,用Redis來緩存數(shù)據(jù)。在這個(gè)項(xiàng)目里,我還用到了JS實(shí)現(xiàn)了一些前臺(tái)頁(yè)面。

  第三,這里可以結(jié)合職位的需求,描述JD里要求的技術(shù)在項(xiàng)目里是如何用的。同樣這里也應(yīng)圍繞技術(shù),而別多寫業(yè)務(wù)細(xì)節(jié)

  1.5 在簡(jiǎn)歷中描述項(xiàng)目時(shí)可以添加的亮點(diǎn)

  我們見過不少簡(jiǎn)歷,在描述項(xiàng)目時(shí),也能像上文一樣,能根據(jù)招聘職位的具體要求展示出自己的匹配點(diǎn),這種簡(jiǎn)歷屬于“達(dá)標(biāo)”,即可以納入考慮范圍。在這個(gè)基礎(chǔ)上,如果大家在項(xiàng)目里有下表列出的亮點(diǎn),一定請(qǐng)寫上,這就是大家優(yōu)于別人的地方。

  1. 數(shù)據(jù)庫(kù)和JVM調(diào)優(yōu);

  2. 你理解的框架底層代碼;

  3. 項(xiàng)目里用到的設(shè)計(jì)模式;

  4. 項(xiàng)目管理和部署工具;

  5. 結(jié)合若干案例,講述你分析和解決bug的技能;

  6. 其它能幫助到你的加分項(xiàng),比如工期緊,用到新技術(shù)等。

  1.6 哪些簡(jiǎn)歷可以通過篩選

  從面試官角度來看,除了學(xué)歷等硬件條件外,如果簡(jiǎn)歷滿足如下的4點(diǎn)要求,就一般能有面試機(jī)會(huì)了。

  1. 商業(yè)項(xiàng)目足量,且其中包含的技能和職位介紹很匹配;

  2. 近用到的技能和職位介紹很匹配;

  3. 沒有過長(zhǎng)職業(yè)空白期或不穩(wěn)定等情況;

  4. 一定請(qǐng)記住,公司只能通過簡(jiǎn)歷認(rèn)識(shí)到你,簡(jiǎn)歷上沒寫清楚等同于你不行。

  其實(shí)這就是我們寫簡(jiǎn)歷的方向,而且,在針對(duì)具體公司投遞簡(jiǎn)歷時(shí),還可以以此為目標(biāo),微調(diào)簡(jiǎn)歷。

  面試時(shí)該如何講解技術(shù)項(xiàng)目贏得面試官好感

  2.1 別害怕,因?yàn)槊嬖嚬偈裁炊疾恢?/p>

  面試官是人,不是神,拿到你的簡(jiǎn)歷的時(shí)候,是沒法核實(shí)你的項(xiàng)目細(xì)節(jié)的(一般公司會(huì)到錄用后,用背景調(diào)查的方式來核實(shí))。更何況,你做的項(xiàng)目是以月為單位算的,而面試官多用30分鐘來從你的簡(jiǎn)歷上了解你的項(xiàng)目經(jīng)驗(yàn),所以你對(duì)項(xiàng)目的熟悉程度要遠(yuǎn)遠(yuǎn)超過面試官,所以你一點(diǎn)也不用緊張。如果你的工作經(jīng)驗(yàn)比面試官還豐富的話,甚至還可以控制整個(gè)面試流程(筆者在面試方面成精后也經(jīng)常干這種事情,大家一定也能行)。

  既然面試官無法了解你的底細(xì),那么他們?cè)趺磥眚?yàn)證你的項(xiàng)目經(jīng)驗(yàn)和技術(shù)?下面總結(jié)了一些常用的提問方式。

  2.2 面試時(shí)的錯(cuò)誤表現(xiàn)

  在面試過程中,如果候選人出現(xiàn)如下的表現(xiàn),那么很有可能過不了面試,請(qǐng)大家注意。

  1. 面試時(shí)介紹的項(xiàng)目時(shí)間等情況簡(jiǎn)歷上寫的不一致,這就有簡(jiǎn)歷造假的嫌疑;

  2. 介紹項(xiàng)目時(shí)只介紹業(yè)務(wù),忽略技術(shù)。因?yàn)槊嬖嚬僦魂P(guān)心技術(shù),不關(guān)心業(yè)務(wù);

  3. 對(duì)于提到的技術(shù),連基本的問題也回答不上,這就說明候選人這項(xiàng)技術(shù)沒掌握;

  4. 說得太流利或太磕磕巴巴,這就說明在背詞或者是表達(dá)有問題。

  2.3 面試中介紹項(xiàng)目的范例

  第一步,介紹項(xiàng)目基本情況。

  可以這樣說,這個(gè)項(xiàng)目是xx產(chǎn)品的xx模塊的,有xx和xx模塊,我做了xx模塊,用了半年,我的組里一共有5個(gè)人。這里可以談下業(yè)務(wù),但別深入,因?yàn)槊嬖嚬俨皇煜?,也不想熟悉候選人的業(yè)務(wù),這塊時(shí)間控制在1分鐘之內(nèi)。

  第二步,介紹項(xiàng)目里關(guān)鍵技術(shù)和管理方式。

  可以這樣說,這個(gè)項(xiàng)目里,我用到了Spring框架,用到nginx等組件,項(xiàng)目管理用Maven,部署用jenkins,靜態(tài)掃描用Sonar,任務(wù)管理和bug管理用jira,平時(shí)采用敏捷的項(xiàng)目迭代方式,每天有站會(huì),大約1月一個(gè)迭代版本。這塊可以根據(jù)自己的情況來介紹,時(shí)間也別太長(zhǎng),估計(jì)用1分鐘也就夠了。

  第三步,結(jié)合業(yè)務(wù)講用到的技術(shù),但別展開:

  比如有個(gè)職位介紹,里面寫到需要有數(shù)據(jù)庫(kù)優(yōu)化的經(jīng)驗(yàn),那么可以說,項(xiàng)目里xx模塊,我用到MyCat作為分庫(kù)分表,(不展開技術(shù)),上線后,數(shù)據(jù)庫(kù)能承受住每秒2000個(gè)并發(fā)請(qǐng)求(說下用好的結(jié)果)。

  又如一個(gè)JD里說要用到微服務(wù)技術(shù),那么就可以說,項(xiàng)目里用到了Spring Cloud框架,用到了Ribbon,Eureka等組件,容器是Docker。用好以后,在發(fā)布時(shí)會(huì)發(fā)現(xiàn),各模塊之間的調(diào)用耦合性大大降低。

  2.4 介紹項(xiàng)目時(shí)的要點(diǎn)歸納

  從上述介紹項(xiàng)目的范例中,可以歸納出相關(guān)要點(diǎn)如下。

  1. 面試前,需要閱讀職位介紹,挖掘用過的技能要點(diǎn),然后盡可能地在介紹項(xiàng)目里提到這些技能關(guān)鍵字;

  2. 在介紹項(xiàng)目里,結(jié)合業(yè)務(wù),提到職位介紹里的技術(shù),因?yàn)橐坏┘夹g(shù)結(jié)業(yè)業(yè)務(wù),就說明你有過相關(guān)技術(shù)的實(shí)踐經(jīng)驗(yàn),而不是僅僅只會(huì)理論;

  3. 別過多介紹業(yè)務(wù),多拋出職位介紹里的關(guān)鍵字。還是這句話,面試官不關(guān)心業(yè)務(wù),你提到業(yè)務(wù)只是以此證明你在實(shí)踐中用過相關(guān)技術(shù)而已;

  4. 此時(shí)還在項(xiàng)目介紹階段,別過多展開技能,你拋出技能關(guān)鍵字后,面試官自然會(huì)問的。而一旦你過多展開技術(shù),那么面試官就有可能感覺到你思路不清晰。

  Java面試者該準(zhǔn)備哪些加分項(xiàng)技能

  3.1框架是重點(diǎn),但別讓人感覺你只會(huì)山寨別人的代碼

  一般工作在3年內(nèi)的候選人,大多僅僅是能“山寨”別人的代碼,也就是說能在現(xiàn)有框架的基礎(chǔ)上,照著別人寫的流程,擴(kuò)展出新的功能模塊。比如要寫個(gè)股票掛單的功能模塊,是會(huì)模仿現(xiàn)有的下單流程,然后從前端到后端再到數(shù)據(jù)庫(kù),依樣畫葫蘆寫一遍,多把功能相關(guān)的代碼點(diǎn)改掉。

  如果單純使用SSM框架,大多數(shù)項(xiàng)目都會(huì)有痛點(diǎn)。比如數(shù)據(jù)庫(kù)性能差,或者業(yè)務(wù)模塊比較復(fù)雜,并發(fā)量比較高,用Spring MVC里的Controller無法滿足跳轉(zhuǎn)的需求。所以我一般還會(huì)主動(dòng)問:你除了依照現(xiàn)有框架寫業(yè)務(wù)代碼時(shí),還做了哪些改動(dòng)?

  我聽到的回答有:增加了Redis緩存,以避免頻繁調(diào)用一些不變的數(shù)據(jù)?;蛘撸贛yBitas的xml里,select語(yǔ)句where條件有is,即這個(gè)值有就增加一個(gè)where條件,對(duì)此,會(huì)對(duì)任何一個(gè)where增加一個(gè)不帶is的查詢條件,以免該語(yǔ)句當(dāng)傳入?yún)?shù)都是時(shí),做全表掃描?;蛘撸纱嗾f,后端異步返回的數(shù)據(jù)量很大,時(shí)間很長(zhǎng),我在項(xiàng)目里就調(diào)大了異步返回的大時(shí)間,或者對(duì)返回信息做了壓縮處理,以增加網(wǎng)絡(luò)傳輸性能。

  對(duì)于這個(gè)問題,我不在乎聽到什么回答,我只關(guān)心回答符不符邏輯。一般只要答對(duì),我就會(huì)給出“在框架層面有自己的體會(huì),有一定的了解”,否則,我就只會(huì)給出“只能在項(xiàng)目經(jīng)理帶領(lǐng)下編寫框架代碼,對(duì)框架本身了解不多”。

  其實(shí),在準(zhǔn)備面試時(shí),歸納框架里的要點(diǎn)并不難,我就不信所有人在做項(xiàng)目時(shí)一點(diǎn)積累也沒,只要你說出來,可以說,這方面你就碾壓了將近7成的競(jìng)爭(zhēng)者。

  3.2 別單純看單機(jī)版的框架,適當(dāng)了解些分布式

  在描述項(xiàng)目里框架技術(shù)時(shí),好你再帶些分布式的技術(shù)。下面我列些大家可以準(zhǔn)備的分布式技術(shù)。

  反向代理方面,nginx的基本配置,比如如何通過lua語(yǔ)言設(shè)置規(guī)則,如何設(shè)置session粘滯。如果可以,再看些nginx的底層,比如協(xié)議,集群設(shè)置,失效轉(zhuǎn)移等;

  遠(yuǎn)程調(diào)用dubbo方面,可以看下dubbo和zookeeper整合的知識(shí)點(diǎn),再深一步,了解下dubbo底層的傳輸協(xié)議和序列化方式;

  消息隊(duì)列方面,可以看下kafka或任意一種組件的使用方式,簡(jiǎn)單點(diǎn)可以看下配置,工作組的設(shè)置,再深入點(diǎn),可以看下Kafka集群,持久化的方式,以及發(fā)送消息是用長(zhǎng)連接還是短攔截。

  以上僅僅是用3個(gè)組件舉例,大家還可以看下Redis緩存,日志框架,MyCAT分庫(kù)分表等。準(zhǔn)備的方式有兩大類,第一是要會(huì)說怎么用,這比較簡(jiǎn)單,能通過配置文件搭建成一個(gè)功能模塊即可,第二是可以適當(dāng)讀些底層代碼,以此了解下協(xié)議,集群和失效轉(zhuǎn)移之類的高級(jí)知識(shí)點(diǎn)。

  3.3 數(shù)據(jù)庫(kù)方面,別就知道增刪改查,得了解性能優(yōu)化

  在實(shí)際項(xiàng)目里,大多數(shù)程序員用到的可能僅僅是增刪改查,當(dāng)我們用Mybatis時(shí),這個(gè)情況更普遍。不過如果你面試時(shí)也這樣表現(xiàn),估計(jì)你的能力就和其它競(jìng)爭(zhēng)者差不多了。

  這方面,你可以準(zhǔn)備如下的技能:

  SQL高級(jí)方面,比如group by, having,左連接,子查詢(帶in),行轉(zhuǎn)列等高級(jí)用法;

  建表方面,你可以考慮下,你項(xiàng)目是用三范式還是反范式,理由是什么?

  尤其是優(yōu)化,你可以準(zhǔn)備下如何通過執(zhí)行計(jì)劃查看SQL語(yǔ)句改進(jìn)點(diǎn)的方式,或者其它能改善SQL性能的方式(比如建索引等);

  如果你感覺有能力,還可以準(zhǔn)備些MySQL集群,MyCAT分庫(kù)分表的技能。比如通過LVS+Keepalived實(shí)現(xiàn)MySQL負(fù)載均衡,MyCAT的配置方式。同樣,如果可以,也看些相關(guān)的底層代碼。

  哪怕你在前三點(diǎn)表現(xiàn)一般,那么至少也能超越將近一般的候選人,尤其當(dāng)你在SQL優(yōu)化方面表現(xiàn)非常好,那么你在面試高級(jí)開發(fā)時(shí),數(shù)據(jù)庫(kù)層面一定是達(dá)標(biāo)的,如果你連第四點(diǎn)也回答非常好,那么恭喜你,你在數(shù)據(jù)庫(kù)方面的能力甚至達(dá)到了初級(jí)架構(gòu)的級(jí)別。

  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ì)模式和虛擬機(jī)的說辭。

  下面列些我一般會(huì)問的部分問題:

  String a = "123"; String b = "123"; a==b的結(jié)果是什么?這包含了內(nèi)存,String存儲(chǔ)方式等諸多知識(shí)點(diǎn);

  HashMap里的hashcode方法和equal方法什么時(shí)候需要重寫?如果不重寫會(huì)有什么后果?對(duì)此大家可以進(jìn)一步了解HashMap(甚至ConcurrentHashMap)的底層實(shí)現(xiàn);

  ArrayList和LinkedList底層實(shí)現(xiàn)有什么差別?它們各自適用于哪些場(chǎng)合?對(duì)此大家也可以了解下相關(guān)底層代碼;

  volatile關(guān)鍵字有什么作用?由此展開,大家可以了解下線程內(nèi)存和堆內(nèi)存的差別;

  CompletableFuture,這個(gè)是JDK1.8里的新特性,通過它怎么實(shí)現(xiàn)多線程并發(fā)控制?

  JVM里,new出來的對(duì)象是在哪個(gè)區(qū)?再深入一下,問下如何查看和優(yōu)化JVM虛擬機(jī)內(nèi)存;

  Java的靜態(tài)代理和動(dòng)態(tài)代理有什么差別?好結(jié)合底層代碼來說。

  通過上述的問題點(diǎn),我其實(shí)不僅僅停留在“會(huì)用”級(jí)別,比如我不會(huì)問如何在ArrayList里放元素。大家可以看到,上述問題包含了“多線程并發(fā)”,“JVM優(yōu)化”,“數(shù)據(jù)結(jié)構(gòu)對(duì)象底層代碼”等細(xì)節(jié),大家也可以舉一反三,通過看一些高級(jí)知識(shí),多準(zhǔn)備些其它類似面試題。

  3.5 Linux方面,至少了解如何看日志排查問題

  如果候選人能證明自己有“排查問題”和“解決問題”的能力,這絕對(duì)是個(gè)加分項(xiàng),但怎么證明?目前大多數(shù)的互聯(lián)網(wǎng)項(xiàng)目,都是部署在Linux上,也就是說,日志都是在Linux,下面歸納些實(shí)際的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)然,還有更多更實(shí)用的Linux命令,但在實(shí)際面試過程中,不少候選人連一條linux命令也不知道。還是這句話,你哪怕知道些很基本的,也比一般人強(qiáng)了。

  3.6 通讀一段底層代碼,作為加分項(xiàng)

  如何證明自己對(duì)一個(gè)知識(shí)點(diǎn)非常了解?莫過于能通過底層代碼來說明。我在和不少工作經(jīng)驗(yàn)在5年之內(nèi)的程序員溝通時(shí),不少人認(rèn)為這很難?確實(shí),如果要通過閱讀底層代碼了解分布式組件,那難度不小,但如果如下部分的底層代碼,并不難懂。

  ArrayList,LinkedList的底層代碼里,包含著基于數(shù)組和鏈表的實(shí)現(xiàn)方式,如果大家能以此講清楚擴(kuò)容,“通過枚舉器遍歷“等方式,絕對(duì)能證明自己;

  HashMap直接對(duì)應(yīng)著Hash表這個(gè)數(shù)據(jù)結(jié)構(gòu),在HashMap的底層代碼里,包含著hashcode的put,get等的操作,甚至在ConcurrentHashMap里,還包含著Lock的邏輯。我相信,如果大家在面試中,看看而言ConcurrentHashMap,再結(jié)合在紙上邊說邊畫,那一定能征服面試官;

  可以看下靜態(tài)代理和動(dòng)態(tài)代理的實(shí)現(xiàn)方式,再深入一下,可以看下Spring AOP里的實(shí)現(xiàn)代碼;

  或許Spirng IOC和MVC的底層實(shí)現(xiàn)代碼比較難看懂,但大家可以說些關(guān)鍵的類,根據(jù)關(guān)鍵流程說下它們的實(shí)現(xiàn)方式。

  其實(shí)準(zhǔn)備的底層代碼未必要多,而且也不限于在哪個(gè)方面,比如集合里基于紅黑樹的TreeSet,基于NIO的開源框架,甚至分布式組件的Dubbo,都可以準(zhǔn)備。而且準(zhǔn)備時(shí)未必要背出所有的底層(事實(shí)上很難做到),你只要能結(jié)合一些重要的類和方法,講清楚思路即可(比如講清楚HashMap如何通過hashCode快速定位)。

  那么在面試時(shí),如何找到個(gè)好機(jī)會(huì)說出你準(zhǔn)備好的上述底層代碼?在面試時(shí),總會(huì)被問到集合,Spring MVC框架等相關(guān)知識(shí)點(diǎn),你在回答時(shí),順便說一句,“我還了解這塊的底層實(shí)現(xiàn)”,那么面試官一定會(huì)追問,那么你就可以說出來了。

  預(yù)估面試題,準(zhǔn)備對(duì)應(yīng)的回答

  4.1 哪些問題面試中大概率會(huì)被問到

  在面試?yán)?,不管如何引?dǎo)面試官,其實(shí)如下方面的問題很大可能會(huì)被問到,所以在面試前可以提前準(zhǔn)備。

  職位介紹里提到的技能要點(diǎn),比如職位介紹里有提到Mybatis,那么面試官一定會(huì)問相關(guān)問題;

  你在項(xiàng)目介紹時(shí)拋出的技術(shù)關(guān)鍵字,比如你在面試過程中介紹項(xiàng)目時(shí)提到了Redis,那么在介紹完項(xiàng)目后,面試官就會(huì)問,“你項(xiàng)目里是如何使用Redis的?”,類似的,簡(jiǎn)歷中你寫的技術(shù),也有可能會(huì)被問到;

  Java核心,數(shù)據(jù)庫(kù),Spring框架,項(xiàng)目管理等基礎(chǔ)問題,這些就不用說了,不過如果你引導(dǎo)得當(dāng)?shù)脑?,面試官?huì)花費(fèi)很多時(shí)間問你提到的技術(shù),這塊會(huì)問得比較少;

  必要的算法題,比如排序等,其實(shí)面試官感覺你技術(shù)可以的話,這塊就不怎么會(huì)問了,但準(zhǔn)備的時(shí)候需要看這個(gè),有備無患。

  4.2 面試官提問的方式

  以上介紹了常見問題的種類,這里介紹下面試官常用的提問方式。

  問用法,比如直接提問,項(xiàng)目里你netty怎么用的?這塊大家可以結(jié)合項(xiàng)目準(zhǔn)備說辭;

  問流程,比如結(jié)合業(yè)務(wù),講下nginx負(fù)載均衡的用法?這也可以結(jié)合項(xiàng)目和網(wǎng)上搜到的資料準(zhǔn)備說辭;

  問原因,比如為什么要用netty?這塊就要結(jié)合項(xiàng)目說明了;

  問技術(shù)點(diǎn), 比如netty里零拷貝怎么回事?對(duì)此,需要對(duì)簡(jiǎn)歷上提到的每個(gè)技術(shù)點(diǎn),以及面試過程中將要提到的每個(gè)技術(shù)點(diǎn),搜相關(guān)面試問題,并結(jié)合業(yè)務(wù)說明;

  問基礎(chǔ)知識(shí),比如finally從句的用途,這就可以通過刷題來獲取了。

  4.3 舉例說明該如何準(zhǔn)備面試問題

  下面給出準(zhǔn)備問題的技巧。

  斟酌面試時(shí)拋出的技能,逐一準(zhǔn)備說辭;

  針對(duì)技術(shù),網(wǎng)上搜索問題,比如搜Spring IOC面試題,結(jié)合網(wǎng)上的參考答案準(zhǔn)備說辭;

  準(zhǔn)備技術(shù)的實(shí)施要點(diǎn),比如做了哪些配置文件,你在項(xiàng)目里踩過哪些坑?

  好結(jié)合底層代碼說明。

  如下給出兩個(gè)例子,先以MyCat分庫(kù)分表為例,給出介紹說辭的技巧。

  準(zhǔn)備業(yè)務(wù)背景,為什么要用?比如我們項(xiàng)目數(shù)據(jù)庫(kù)并發(fā)壓力大,需要用MyCat作為分庫(kù)分表;

  如何使用,無非是設(shè)置分庫(kù)規(guī)則,改寫SQL語(yǔ)句等;

  準(zhǔn)備下踩到的坑,比如自增長(zhǎng)主鍵在每臺(tái)機(jī)器上都要保證唯一;

  然后再結(jié)合些底層代碼,準(zhǔn)備下一條SQL語(yǔ)句是如何分發(fā)到對(duì)應(yīng)的分庫(kù)上的,然后執(zhí)行好以后又如何返回的;

  再可以準(zhǔn)備些只有做過才知道的細(xì)節(jié),比如發(fā)布上線和清洗數(shù)據(jù)的流程;

  網(wǎng)上找些MyCAT的面試題,準(zhǔn)備相關(guān)說辭。

  一般說到了這里,面試官就不怎么問了,哪怕你后面再被問倒,面試官也會(huì)感覺你MyCat很熟悉。

  下面以Netty為例,給出相關(guān)技巧。

  結(jié)合業(yè)務(wù)需求點(diǎn),說下為什么要用這個(gè)技術(shù),怎么用的,以及用了有什么好處? 比如為了優(yōu)化網(wǎng)絡(luò)通訊協(xié)議,所以用基于TCP協(xié)議的Netty,業(yè)務(wù)模塊里的xxx功能是用到netty;

  準(zhǔn)備下踩到的坑,比如在某業(yè)務(wù)場(chǎng)景里,我遇到了半包粘包問題,我是通過調(diào)試底層代碼解決的;

  用了Netty對(duì)項(xiàng)目的幫助。比如Netty是基于TCP協(xié)議的,它要比Http協(xié)議要輕,所以通訊性能高,且Netty內(nèi)部的Reactor線程模型對(duì)系統(tǒng)的IO幫助很大;

  基于零拷貝、讀寫索引和異步處理機(jī)制,準(zhǔn)備些底層代碼,在面試?yán)镎f明;

  順帶再準(zhǔn)備下Netty的組件,工作流程等問題,這能搜到問題和相關(guān)說辭。

  在講的時(shí)候,大家甚至可以邊畫Netty流程圖,再結(jié)合底層代碼說明,這樣面試官一定會(huì)對(duì)大家刮目相看。

  其實(shí)這里僅僅是拋磚引玉,或者提到的技術(shù)比較高深 ,但可以講述的技術(shù)還可以是線程池,MyBatis組件,Redis,甚至是虛擬機(jī)優(yōu)化等。哪怕是初級(jí)開發(fā),也能多少抓住一兩個(gè)點(diǎn),按上述思路說明。

  面試時(shí)如何不被面試官牽著鼻子,自我把控面試的走向?

  5.1 在介紹項(xiàng)目時(shí),引導(dǎo)話題的技巧以及案例

  在做項(xiàng)目介紹的時(shí)候,你可以穿插說出一些你的亮點(diǎn),但請(qǐng)記得,不論在介紹項(xiàng)目還是在回答問題,你當(dāng)前的職責(zé)不是說明亮點(diǎn)而是介紹項(xiàng)目,一旦你詳細(xì)說,可能會(huì)讓面試官感覺你跑題了。

  所以這時(shí)你可以一筆帶過,比如你可以說,“我們的項(xiàng)目對(duì)數(shù)據(jù)要求比較大,忙的時(shí)候平均每小時(shí)要處理幾十萬條數(shù)據(jù)”,這樣就可以把面試官引入“大數(shù)據(jù)”的方向。

  你在面試前可以根據(jù)職位的需求,準(zhǔn)備好這種“一筆帶過”的話。比如這個(gè)職位的需求點(diǎn)是Spring MVC框架,大數(shù)據(jù)高并發(fā),要有數(shù)據(jù)庫(kù)調(diào)優(yōu)經(jīng)驗(yàn),那么介紹以往項(xiàng)目時(shí),你就好突出這些方面你的實(shí)際技能。

  再給大家舉個(gè)例子,比如Java虛擬機(jī)內(nèi)存管理和數(shù)據(jù)庫(kù)優(yōu)化是絕大多數(shù)項(xiàng)目都要遇到的兩大問題,大家都可以在敘述項(xiàng)目經(jīng)驗(yàn)時(shí)說,在這個(gè)項(xiàng)目里,我們需要考慮內(nèi)存因素,因?yàn)槲覀兊拇a只允許在2G內(nèi)存環(huán)境中運(yùn)行,而且對(duì)數(shù)據(jù)庫(kù)性能要求比較高,所以我們經(jīng)常要監(jiān)控優(yōu)化內(nèi)存和數(shù)據(jù)庫(kù)里的SQL語(yǔ)句。這樣當(dāng)面試官深入提問時(shí),就能拋出自己準(zhǔn)備好的虛擬機(jī)內(nèi)存優(yōu)化和數(shù)據(jù)庫(kù)優(yōu)化方面的說辭。

  或者說,在項(xiàng)目介紹時(shí)提到,在xx模塊里,我們使用了nginx做負(fù)載均衡,達(dá)到了承受百萬級(jí)并發(fā)的效果,從而引出nginx的話題。

  實(shí)在不行,你也可以說“我除了做開發(fā),也做了了解需求,測(cè)試和部署的工作,因?yàn)檫@個(gè)項(xiàng)目人手比較少,壓力比較大”,這樣你也能展示你有過獨(dú)擋一面的經(jīng)歷。

  5.2 以Netty為例,講述引出值錢話題的技巧

  比如在介紹項(xiàng)目時(shí),我提到了Netty技術(shù),如果面試官?zèng)]打斷,我就問,能否介紹其中的Netty細(xì)節(jié)?得到允許后再說。

  或者把技術(shù)關(guān)聯(lián)到面試官可能會(huì)問的問題上,比如問及網(wǎng)絡(luò)通訊時(shí)介紹Netty,這個(gè)事先整理一個(gè)問題列表,遇到此類問題,順帶拋出Netty說辭。

  問題列表可以是,項(xiàng)目里你用到哪些組件?用到哪些通訊協(xié)議?如何進(jìn)行模塊間的交互等等,然后先回答問題本身,再擴(kuò)展到Netty。但請(qǐng)記住,別自說自話,因?yàn)檫^猶不及,其它技術(shù)照此辦理

  5.3 以案例說明,在回答問題時(shí)引出準(zhǔn)備過話題的技巧

  比如面試官問你Spring相關(guān)問題,假設(shè)問到,你對(duì)Spring依賴注入了解多少,在說好Spring相關(guān)問題后再提一句,我們同時(shí)用Spring,以低耦合的方式整合了MyCAT組件,從而達(dá)到了分庫(kù)分表的效果,這樣就引出了分庫(kù)分表的話題 。

  或者在介紹Netty流程后,再說一句,在實(shí)際項(xiàng)目里,我們還遇到了因Netty底層代碼而導(dǎo)致的OOM問題,對(duì)此,我們組負(fù)責(zé)排查和解決問題,這樣就自然而然地引出了OOM內(nèi)存溢出的問題。

  或者在介紹完線程相關(guān)問題時(shí),再提一句,在項(xiàng)目里,我們用到了線程池來管理線程,這樣就引出了高并發(fā)的話題。

  但在引導(dǎo)的時(shí)候,請(qǐng)注意如下的三點(diǎn)。

  第一,面試官不接口的,應(yīng)當(dāng)立即停止,再說下去就屬于自說自話了。

  第二,還是要準(zhǔn)備必要的基礎(chǔ)問題,還是要刷題,還是要準(zhǔn)備各種說辭,因?yàn)槊嬖嚽暗娜鏈?zhǔn)備,是引導(dǎo)的基礎(chǔ)。

  第三,應(yīng)當(dāng)引導(dǎo)面試官問些“框架”和“性能調(diào)優(yōu)”等值錢方面的技能,這樣才能大程度地展示你的能力,同樣,此類問題需要面試前準(zhǔn)備。

  5.4 你可以引導(dǎo)的加分項(xiàng)

  在如下的一些表格里,歸納的加分項(xiàng)甚至初級(jí)開發(fā)多少也能準(zhǔn)備,其中涵蓋了諸多方面。

  表 Java Core方面可以準(zhǔn)備的亮點(diǎn)

  技術(shù)方面可以說的亮點(diǎn)

  Java集合對(duì)象1 能根據(jù)項(xiàng)目的需求選用合適的集合對(duì)象,比如知道ArrayList和LinkedList的差異,并能合理選用。

  2 能在合適的場(chǎng)合選用WeakHashMap。

  3 可以適當(dāng)講一些集合的JDK底層實(shí)現(xiàn)代碼。

  異常處理方面能在finally從句里寫釋放資源的代碼

  JDBC方面1 能通過PreparedStatement的預(yù)處理方法來防止SQL注入。

  2 能通過批處理來提升操作性能。

  3 能通過實(shí)例講述事務(wù)隔離級(jí)別的含義

  多線程方面1 會(huì)結(jié)合項(xiàng)目使用線程池

  2 能通過鎖或信號(hào)量等手段正確地處理多線程并發(fā)時(shí)的數(shù)據(jù)一致性。

  3 熟悉各種并發(fā)組件

  表 數(shù)據(jù)庫(kù)方面可以準(zhǔn)備的亮點(diǎn)

  技術(shù)方面可以說的亮點(diǎn)

  建表建表時(shí)需要根據(jù)項(xiàng)目的數(shù)據(jù)情況,考慮是采用三范式或是反范式。

  SQL調(diào)優(yōu)1 可以通過查看日志等方式看哪些SQL需要調(diào)優(yōu)。

  2 可以通過執(zhí)行計(jì)劃查看SQL的所消耗的代價(jià),并據(jù)此調(diào)優(yōu)。

  3 可以通過建索引,建分區(qū)等手段來優(yōu)化SQL性能。

  事務(wù)1 可以說下JDBC或Spring里是如何管理事務(wù)的。

  2 可以說下Spring里的聲明式事務(wù)的做法和優(yōu)點(diǎn)。

  3 可以舉例說明事務(wù)隔離級(jí)別和事務(wù)傳播機(jī)制的用法。

  分布式數(shù)據(jù)庫(kù)1 可以通過MyCAT進(jìn)行分庫(kù)分表,從而減輕對(duì)單表訪問所需要的代價(jià)。

  2 可以通過集群等方式來承擔(dān)對(duì)數(shù)據(jù)庫(kù)的過量的訪問請(qǐng)求。

  NoSQL和Hadoop這兩個(gè)本身就是個(gè)亮點(diǎn),如果大家用過,可以結(jié)合項(xiàng)目來說明。

  表Java Web框架方面可以準(zhǔn)備的亮點(diǎn)

  技術(shù)方面可以說的亮點(diǎn)

  Spring MVC/Boot架構(gòu)1 可以說下Spring的IOC和AOP是如何優(yōu)化項(xiàng)目結(jié)構(gòu)的。

  2 可以說下攔截器等Spring組件對(duì)項(xiàng)目的幫助。

  3 可以說下Spring Boot對(duì)項(xiàng)目的幫助

  ORM,比如Mybatis使用這種ORM技術(shù)時(shí),如何優(yōu)化訪問和操作數(shù)據(jù)庫(kù)的性能。

  Spring和Mybatis等的整合可以講下整合框架的細(xì)節(jié),并可以舉例說明整合后的框架能很好地適應(yīng)需求的變更。

  表 分布式組件方面可以準(zhǔn)備的亮點(diǎn)

  技術(shù)方面可以說的亮點(diǎn)

  組件應(yīng)用1 結(jié)合配置文件等,說明怎么用的

  2 結(jié)合業(yè)務(wù),說下具體的效果,比如限流后有什么好處。

  如何應(yīng)對(duì)高并發(fā)的場(chǎng)景1 如何達(dá)到負(fù)載均衡

  2 如何進(jìn)行失效轉(zhuǎn)移

  定位排查和解決問題1 如何通過分析log定位問題

  2 問題的根源和解決方法

  健康檢查和線上監(jiān)控1 如何通過健康檢查確定系統(tǒng)正常運(yùn)行

  2 出了問題,如何發(fā)出警告

  由此大家能看到,其實(shí)很多事先可以準(zhǔn)備的點(diǎn),其實(shí)是你沒有想到,但你項(xiàng)目里一定用過。你據(jù)此準(zhǔn)備,在通過上述技巧在面試中合理地找機(jī)會(huì)說出來,你面試成功的可能性一定會(huì)大大增加。

  總結(jié),面試準(zhǔn)備后,結(jié)果可能就大不同

  先從面試官的角度看下,哪些人能面試成功?

  1. 近半年的項(xiàng)目經(jīng)歷和JD匹配度很高;

  2. 通過面試,JD上的技能候選人大多能掌握;

  3. 候選人在Java核心,數(shù)據(jù)庫(kù)和框架方面的基礎(chǔ)技能達(dá)標(biāo);

  4. 不是刺頭,團(tuán)隊(duì)合作沒問題,沒有其它大問題。

  但如果大家面試前不準(zhǔn)備,或者準(zhǔn)備不到位,那么就會(huì)面臨如下的后果了:

  1. 簡(jiǎn)歷未必能過篩選,甚至沒有面試機(jī)會(huì);

  2. 無法證明項(xiàng)目里用到的技術(shù)和JD高度契合;

  3. 介紹項(xiàng)目經(jīng)驗(yàn)時(shí)沒問題,把提問的主動(dòng)權(quán)交給面試官;

  4. 不知道將會(huì)問哪些問題,所有問題都現(xiàn)場(chǎng)想;

  5. 在面試現(xiàn)場(chǎng),沒法讓面試官全面了解你的技術(shù)亮點(diǎn)。

  但如果按照上述方法準(zhǔn)備,大家很大程度上能得到如下的收獲。

  1. 能通過微調(diào)簡(jiǎn)歷,得到更多的面試機(jī)會(huì);

  2. 能通過挖掘項(xiàng)目經(jīng)驗(yàn),證明自己的技能和JD契合;

  3. 能知道哪些屬于值錢技能,并能結(jié)合業(yè)務(wù)準(zhǔn)值錢技能和調(diào)優(yōu)技能的說辭,而且能不露痕跡地展示;

  4. 不僅限于coding,更能展示項(xiàng)目管理(sonar等),linux,項(xiàng)目部署(nginx)等方面的技能;

  5. 知道面試大致會(huì)問哪些問題,并由此能事先準(zhǔn)備;

  6. 能事先盡可能多地挖掘亮點(diǎn),并在面試時(shí)展示。


本文內(nèi)容、圖片由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至2353260942@qq.com 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。互聯(lián)網(wǎng)教程 寵物知識(shí)(如需投稿聯(lián)系管理員開通!)

? CopyRight njjava.com ???? 蘇ICP備14052071號(hào)

搶試聽名額

名額僅剩66名

教育改變生活

WE CHANGE LIVES