天天看點

Java面試經驗,兼談網際網路公司後端面試經驗

作者: 名白

程式員相關的哈

萬事無定論,比如說,就算你國小畢業,但是java基礎卻紮實到變态,我相信open的公司還是會給你機會的。

心态很重要,雖然日常的心态不容易控制,面試那倆小時的心态,隻要你想,就能控制。

堅持三年 ,不管在哪幹,有一個好的平台,堅持三年以上才能出效果。

如果跳的話,新公司需要穩定,最少過了B輪融資,,五萬比一是創業型公司的失敗率

不要着急,不要比較為了5000塊的工資差價跳,不值得跳,從一萬到三萬,并且有一個好的平台的話,才值得跳。

長期的看普華挺好的,從平台上講,除了BAT華為,基本沒有更好的

每天要多投些履歷,每天投個幾十份,别着急,多面面。

二本以下,特别是學校名XXX學院

應屆或者未畢業

在職并且不打算換工作

目标非北京

純 windows / asp / c# / c sharp / .net / dot net

純嵌入式

純移動端 android / iOS

特别底層,比如作業系統核心裁剪

非計算機專業,計算機工作經驗在一年以下

最近的項目,空白超過半年,比如現在8月份,項目經曆隻寫到2月

87 年以前,除非背景特别牛

有基礎教育訓練經曆的

碩士學校比大學差的

如果可以的話,**建議以一個和面試官交流的心态去面試**。而且普通面試大部分問答都是有一些套路的。 面試的過程中,肯定會有答不上來的時候,這個時候,坦然的說不知道,就行了;或者再說出來點你知道的,例如思路。**重點** 答不出來的時候一定要淡定,你和面試官是平等的!反過來讓你問面試官,他也肯定有答不上來的!!

一般公司的筆試、面試(以Java說)

**java** java基礎必考,線程、集合(list、map、linklist、array,什麼無key周遊map啊,連結清單倒置啊,這幾個東西的資料結構和插入查詢特性啊,線程建立方式和同步啊)相關必問。最好能說清楚常見的設計模式、要能手寫一個單列模式。  **架構** :主要說你熟練的,會問一些,但是一般都比較基礎,隻要找;除非,你說你看過這個架構的源碼,剛好面試官也比較了解。  **資料庫** 可能會問你都用過什麼,最好有一個用的熟練的,沒事兒去配置一下主從資料庫費不了多少時間,然後就好答這個問題了。sql,一般是必考的,分組查詢,排序,連結查詢。很可能會讓你手寫sql語句。我還遇到了一個讓你查前多少行的,以及不用架構實作分頁查詢的。  **源碼** 其實源碼沒有那麼的高大上,即使你說你熟練源碼,剛好面試官也熟悉,他最多也隻能問問你這架構從啟動到配置完成,從接收請求,到處理完成再傳回的 ** 流程**然後再問一下,你從這些源碼裡學到了什麼?這個問題,建議去百度(我都是臨面試了才去百度這些有套路的問題)。  **前端** 你要是像我一樣,嚣張到履歷寫的連前端你都會不少,(不過現在确實很多公司的招聘後端的要求也要會一些前端)那就很可能要多面你一會兒了,再問問你履歷裡寫的用過的架構,手寫幾串js的代碼啊,還有可能會通過js代碼考察下對DOM概念的了解。正規表達式也是有可能的。

總括

這樣的公司,一般算法和資料結構是必考的,作業系統也經常被問。如果是校招的話,筆試中還會有一些排列組合啊,國文表達啊,思維拓展啊(你咋不去高中招?高中剛畢業的時候比較符合需求!!),其次,筆試過了還會有好幾輪面試,不管你說你扣過源碼,還是跟過還可以的項目,都會被往深裡問,再往深裡問,再再往深裡問!

比如說:你說你看過springMVC的源碼,描述一遍請求處理流程肯定是必需的,然後你說完了,就會被挑一個點,接着往深裡問!比如說:你說根據request找到handler,然後用handlerMapping找到對應的handlerAdapter,那麼這一步具體是怎麼實習的???問的我一臉蒙蔽啊,雖然還知道點,但是這種問題根本不會提前想到,隻能現場組織語言。

再比如說:說說,你在這個項目裡做的得意的東西是什麼?然後你就說,說完了會問細節,怎麼實作的?然後你再說,再說完了就讓你優化,然後你墨迹半天終于優化完了,重點來了,讓你重構!!如果讓你從新設計這個系統,你會有哪些改進的地方??,,想想都心酸 ,,哈哈哈哈。

問:說說你的突出點

答:java基礎紮實(這個慌說的次數多了,現在說起來都沒感覺了,哈哈),架構使用熟練(這個慌說了你們也發現不了,是以也沒啥感覺),熟悉Tomcat源碼,springMVC源碼和結構。

問:如果想要統計springMVC每一個通路時長,放到log檔案裡,你在哪裡做這個統計?為什麼?

答:在preHandle攔截器裡記錄通路開始的時間,在postHandle裡判斷是哪個通路,計算通路時間并存儲。

問:在posthandler裡計算,并存儲是吧。答:是。

問:為什麼?

答了一個錯誤答案,然後又是一頓鄙視。,,

再問:用一個什麼變量存?ThreadLocal?還是一個函數内部局部變量,?

答:線程内,(其實是在猜)。

問:為什麼? 你不要猜,也不用在乎我的反應,無論你答什麼我都會問你為什麼。

答:函數内變量可能會不能覆寫整個通路的曆程,,一頓鄙視,然後突然反應過來,不對,我說的有問題,外層函數是可以的,那就放在函數内局部變量裡,節省資源。

問:如果我想把計算結果存到log裡,在哪裡做這個事情?

答:(悠長的停頓) 在posthandler處理結束,傳回請求之前

答:不占用處理請求的資源,(錯誤答案,已經慌亂)

問:确定?

答:不确定,,,停頓,,不對 ,還是會占用資源。

問:然後呢

答:(不說話了,,,)(後來想想,這事兒應該另起一個線程去做)

(鄙視狀,,,)

問:恩,說說Tomcat

答:(内心:幸虧沒問tomcat優化,JVM優化,,不過,說說?說啥啊?難道說說這個幹啥用的?還是說說哪個公司出的?說這些會不會直接趕人啊,,,就這樣過了最少一分鐘,哈哈)然後我就說了下tomcat的結構,和啟動過程。

接着問:Tomcat和裡面的Servlet是一個程序還是多個程序,

答:一個程序内

一頓鄙視,再問:為什麼,,,??

答:因為我覺得程序是配置設定資源的基本機關,一般來講,一個應用就是一個程序。

問:你确定?

(内心:大爺的,估計已經挂了,那我還怕個球,,,于是乎,坐直,平視,語氣和神态突然就平靜了)

答:确定。

問:你大學什麼專業?學過作業系統嗎?

答:計算機科學與技術,當然學過,我清楚的記得這一點,程序是配置設定資源的基本機關,不過,可能太久了,記不清了(其實内心是:你長的美,你說的都對)。

問:ok,一個應用可以啟多個程序嗎?

答:不可以

問:(鄙視狀)确定?

答:(平靜狀)不太确定

問:呵呵

答:麻煩您給講講吧,我不太懂。

問:一個應用當然是可以啟多個線程的,更何況還有跨應用的線程調用,資源也是可以動态配置設定的,,,(當時沒聽太懂,也記不清了。)。末了來一句,難道你就沒打開過你的資料總管看過嗎?

答:當然看過,不過都是卡了才看,看哪個程式占用太高,給結束了。(内心:看過,但是跟這個問題有毛關系嗎??)

上邊是倆個長問題,還有一些其他的,例如:

問:你覺得要做一個厲害的程式員應該具備哪些特點?

這個就是一些,FQ啊,工具啊,總結啊,交流啊什麼的;比如說,善用google,要至少對一個跨平台的工具很了解,善于學習最新的技術,善于掌握有力的工具,多逛各大社群,善于總結。(我就随便一寫,找工作的話,要提前準備類似問題。)

問:我看你學了這麼多東西,但是好像沒有認真的去思考過為什麼,你有沒有想過當你記憶達到一個上限時你還能學什麼?你還能幹什麼?

這個當然是要反駁的,我說我當然有思考,然後問你思考的啥,然後答當時就想知道Tomcat到springMVC的銜接是怎麼銜接的,然後被鄙視:那你直接打幾個斷點調試一下不完了嗎,java的調試不是很強嗎?(貌似這個他也不太确定。而我也不知道斷點打到哪去,更不用提怎麼調試,哈哈)。

問:我看你這寫的有一個了解分布式處理,分布式處理是什麼?我怎麼沒聽過。(這個就是一個概念問題,不重要。)