來(lái)源:北大青鳥(niǎo)總部 2019年06月17日 11:17
臨近畢業(yè),學(xué)生都在找工作,而一般單位對(duì)于JAVA工程師要求還是比較高的,起碼懂編程語(yǔ)言。今天,小編就和大家聊聊面試java工程師,面試官一般問(wèn)什么問(wèn)題?
如果可以的話,“建議以一個(gè)和面試官交流的心態(tài)去面試“。而且普通面試大部分問(wèn)答都是有一些套路的。
面試的過(guò)程中,肯定會(huì)有答不上來(lái)的時(shí)候,這個(gè)時(shí)候,坦然的說(shuō)不知道,就行了;或者再說(shuō)出來(lái)點(diǎn)你知道的,例如思路。“重點(diǎn)“ 答不出來(lái)的時(shí)候一定要淡定,你和面試官是平等的!反過(guò)來(lái)讓你問(wèn)面試官,他也肯定有答不上來(lái)的!
java基礎(chǔ)必考,線程、集合(list、map、linklist、array,什么無(wú)key遍歷map啊,鏈表倒置啊,這幾個(gè)東西的數(shù)據(jù)結(jié)構(gòu)和插入查詢特性啊,線程創(chuàng)建方式和同步?。┫嚓P(guān)必問(wèn)。最好能說(shuō)清楚常見(jiàn)的設(shè)計(jì)模式、要能手寫一個(gè)單列模式。
“框架“ :主要說(shuō)你熟練的,會(huì)問(wèn)一些,但是一般都比較基礎(chǔ),只要找;除非,你說(shuō)你看過(guò)這個(gè)框架的源碼,剛好面試官也比較了解。
“數(shù)據(jù)庫(kù)“ 可能會(huì)問(wèn)你都用過(guò)什么,最好有一個(gè)用的熟練的,沒(méi)事兒去配置一下主從數(shù)據(jù)庫(kù)費(fèi)不了多少時(shí)間,然后就好答這個(gè)問(wèn)題了。sql,一般是必考的,分組查詢,排序,連結(jié)查詢。很可能會(huì)讓你手寫sql語(yǔ)句。我還遇到了一個(gè)讓你查前多少行的,以及不用框架實(shí)現(xiàn)分頁(yè)查詢的。
“源碼“ 其實(shí)源碼沒(méi)有那么的高大上,即使你說(shuō)你熟練源碼,剛好面試官也熟悉,他最多也只能問(wèn)問(wèn)你這框架從啟動(dòng)到配置完成,從接收請(qǐng)求,到處理完成再返回的 “ 流程“然后再問(wèn)一下,你從這些源碼里學(xué)到了什么?這個(gè)問(wèn)題,建議去百度(我都是臨面試了才去百度這些有套路的問(wèn)題)。
“前端“ 你要是像我一樣,囂張到簡(jiǎn)歷寫的連前端你都會(huì)不少,(不過(guò)現(xiàn)在確實(shí)很多公司的招聘后端的要求也要會(huì)一些前端)那就很可能要多面你一會(huì)兒了,再問(wèn)問(wèn)你簡(jiǎn)歷里寫的用過(guò)的框架,手寫幾串js的代碼啊,還有可能會(huì)通過(guò)js代碼考察下對(duì)DOM概念的理解。正則表達(dá)式也是有可能的。
一般算法和數(shù)據(jù)結(jié)構(gòu)是必考的,操作系統(tǒng)也經(jīng)常被問(wèn)。如果是校招的話,筆試中還會(huì)有一些排列組合啊,語(yǔ)文表達(dá)啊,思維拓展啊(你咋不去高中招?高中剛畢業(yè)的時(shí)候比較符合需求!?。浯?,筆試過(guò)了還會(huì)有好幾輪面試,不管你說(shuō)你扣過(guò)源碼,還是跟過(guò)還可以的項(xiàng)目,都會(huì)被往深里問(wèn),再往深里問(wèn),再再往深里問(wèn)!
下邊是一個(gè)簡(jiǎn)單的面試記錄
問(wèn):說(shuō)說(shuō)你的突出點(diǎn)
答:java基礎(chǔ)扎實(shí)(這個(gè)慌說(shuō)的次數(shù)多了,現(xiàn)在說(shuō)起來(lái)都沒(méi)感覺(jué)了,哈哈),框架使用熟練(這個(gè)慌說(shuō)了你們也發(fā)現(xiàn)不了,所以也沒(méi)啥感覺(jué)),熟悉Tomcat源碼,springMVC源碼和結(jié)構(gòu)。
問(wèn):如果想要統(tǒng)計(jì)springMVC每一個(gè)訪問(wèn)時(shí)長(zhǎng),放到log文件里,你在哪里做這個(gè)統(tǒng)計(jì)?為什么?
答:在preHandle攔截器里記錄訪問(wèn)開(kāi)始的時(shí)間,在postHandle里判斷是哪個(gè)訪問(wèn),計(jì)算訪問(wèn)時(shí)間并存儲(chǔ)。
問(wèn):在posthandler里計(jì)算,并存儲(chǔ)是吧。答:是。
問(wèn):為什么?
答了一個(gè)錯(cuò)誤答案,然后又是一頓鄙視。,,
再問(wèn):用一個(gè)什么變量存?ThreadLocal?還是一個(gè)函數(shù)內(nèi)部局部變量,?
答:線程內(nèi),(其實(shí)是在猜)。
問(wèn):為什么? 你不要猜,也不用在乎我的反應(yīng),無(wú)論你答什么我都會(huì)問(wèn)你為什么。
答:函數(shù)內(nèi)變量可能會(huì)不能覆蓋整個(gè)訪問(wèn)的歷程,,一頓鄙視,然后突然反應(yīng)過(guò)來(lái),不對(duì),我說(shuō)的有問(wèn)題,外層函數(shù)是可以的,那就放在函數(shù)內(nèi)局部變量里,節(jié)省資源。
問(wèn):如果我想把計(jì)算結(jié)果存到log里,在哪里做這個(gè)事情?
答:(悠長(zhǎng)的停頓) 在posthandler處理結(jié)束,返回請(qǐng)求之前
問(wèn):為什么?
答:不占用處理請(qǐng)求的資源,(錯(cuò)誤答案,已經(jīng)慌亂)
問(wèn):確定?
答:不確定,,,停頓,,不對(duì) ,還是會(huì)占用資源。
問(wèn):然后呢
答:(不說(shuō)話了,,,)(后來(lái)想想,這事兒應(yīng)該另起一個(gè)線程去做)
(鄙視狀,,,)
問(wèn):恩,說(shuō)說(shuō)Tomcat
答:(內(nèi)心:幸虧沒(méi)問(wèn)tomcat優(yōu)化,JVM優(yōu)化,,不過(guò),說(shuō)說(shuō)?說(shuō)啥?。侩y道說(shuō)說(shuō)這個(gè)干啥用的?還是說(shuō)說(shuō)哪個(gè)公司出的?說(shuō)這些會(huì)不會(huì)直接趕人啊,,,就這樣過(guò)了最少一分鐘,哈哈)然后我就說(shuō)了下tomcat的結(jié)構(gòu),和啟動(dòng)過(guò)程。
接著問(wèn):Tomcat和里面的Servlet是一個(gè)進(jìn)程還是多個(gè)進(jìn)程,
答:一個(gè)進(jìn)程內(nèi)
一頓鄙視,再問(wèn):為什么,,,??
答:因?yàn)槲矣X(jué)得進(jìn)程是分配資源的基本單位,一般來(lái)講,一個(gè)應(yīng)用就是一個(gè)進(jìn)程。
問(wèn):你確定?
(內(nèi)心:大爺?shù)?,估?jì)已經(jīng)掛了,那我還怕個(gè)球,,,于是乎,坐直,平視,語(yǔ)氣和神態(tài)突然就平靜了)
答:確定。
問(wèn):你大學(xué)什么專業(yè)?學(xué)過(guò)操作系統(tǒng)嗎?
答:計(jì)算機(jī)科學(xué)與技術(shù),當(dāng)然學(xué)過(guò),我清楚的記得這一點(diǎn),進(jìn)程是分配資源的基本單位,不過(guò),可能太久了,記不清了(其實(shí)內(nèi)心是:你長(zhǎng)的美,你說(shuō)的都對(duì))。
問(wèn):ok,一個(gè)應(yīng)用可以啟多個(gè)進(jìn)程嗎?
答:不可以
問(wèn):(鄙視狀)確定?
答:(平靜狀)不太確定
問(wèn):呵呵
答:麻煩您給講講吧,我不太懂。
問(wèn):一個(gè)應(yīng)用當(dāng)然是可以啟多個(gè)線程的,更何況還有跨應(yīng)用的線程調(diào)用,資源也是可以動(dòng)態(tài)分配的,,,(當(dāng)時(shí)沒(méi)聽(tīng)太懂,也記不清了。)。末了來(lái)一句,難道你就沒(méi)打開(kāi)過(guò)你的資源管理器看過(guò)嗎?
答:當(dāng)然看過(guò),不過(guò)都是卡了才看,看哪個(gè)程序占用太高,給結(jié)束了。(內(nèi)心:看過(guò),但是跟這個(gè)問(wèn)題有毛關(guān)系嗎??)
上邊是倆個(gè)長(zhǎng)問(wèn)題,還有一些其他的,例如:
問(wèn):你覺(jué)得要做一個(gè)厲害的程序員應(yīng)該具備哪些特點(diǎn)?
這個(gè)就是一些,FQ啊,工具啊,總結(jié)啊,交流啊什么的;比如說(shuō),善用google,要至少對(duì)一個(gè)跨平臺(tái)的工具很了解,善于學(xué)習(xí)最新的技術(shù),善于掌握有力的工具,多逛各大社區(qū),善于總結(jié)。(我就隨便一寫,找工作的話,要提前準(zhǔn)備類似問(wèn)題。)
問(wèn):我看你學(xué)了這么多東西,但是好像沒(méi)有認(rèn)真的去思考過(guò)為什么,你有沒(méi)有想過(guò)當(dāng)你記憶達(dá)到一個(gè)上限時(shí)你還能學(xué)什么?你還能干什么?
這個(gè)當(dāng)然是要反駁的,我說(shuō)我當(dāng)然有思考,然后問(wèn)你思考的啥,然后答當(dāng)時(shí)就想知道Tomcat到springMVC的銜接是怎么銜接的,然后被鄙視:那你直接打幾個(gè)斷點(diǎn)調(diào)試一下不完了嗎,java的調(diào)試不是很強(qiáng)嗎?(貌似這個(gè)他也不太確定。而我也不知道斷點(diǎn)打到哪去,更不用提怎么調(diào)試,哈哈)。
問(wèn):我看你這寫的有一個(gè)了解分布式處理,分布式處理是什么?我怎么沒(méi)聽(tīng)過(guò)。(這個(gè)就是一個(gè)概念問(wèn)題,不重要。)
以上就是小編面試java工程師時(shí),面試官一般問(wèn)的問(wèn)題,希望每個(gè)面試的小伙伴都能找到合適的工作!