由于我做了比較長時間的技術面試官,根據我的面試體會,不少同學收到面試后,什么準備也不會做,到時候就來了。
這樣做的后果是:不知彼,不知己,每戰必殆。哪怕僥幸面試成,工資一定會被壓得很低。
其實公司肯花時間讓你去面試,前提條件一定是通過你的簡歷,一定發現了你和公司的匹配點,也就是說,一定是有錄用意向的。
在技術面試的時間段里(最長1個小時),你如果能展現你的優勢那是最好的,但如果你做不到這點,簡單點,讓面試官感覺你達到了最低標準即可。
至于通過技術面試后,項目經理或人事的面試一般是過濾特別差的,比如考察些團隊協作能力和溝通表達能力等,這對大家來說應該不是問題。所以在本文里,主要講述下面試的準備點。
01
至少定出2天的準備時間
面試的準備時間一般別低于2天,如果可以,再延長些,但別太長。
比如是去現場面試,可以找的借口就比較多,比如項目忙,會多,時間間隔別超過5個工作日。比如周二收到通知,就盡量約到周五,如果是是周三周四,那么別超過下周二。
電話面試的話,借口不多,一般可以約到兩天后。
但不建議今天接到通知,明天就直接電話面或現場面了,一方面公司會認為你當前很閑,另一方面,你真就沒太多的準備時間了。
02
一定得再次閱讀
公司的職位要求
就好比是考試,先得審題,大方向錯了,準備就白做了。
比如,有如下的職位描述。
我們能從中挖掘出如下的技能需求點:
1、3年經驗,熟悉常用類庫
2、熟悉Spring和Mybatis框架
3、熟悉分布式中間件(比如消息,緩存等中間件)
4、熟悉數據庫,最好是NoSQL
5、最好有大數據經驗
而關于非技能的要求如下:
1、有責任心,有主動性
2、需要有團隊合作的能力
3、需要有良好的編碼習慣,學習能力要強。
其實,在投簡歷前,就可以根據上述要求微調簡歷,這樣獲得該崗位的面試機會能更大。不過在本文里,就將以上述需求為例,講述面試前的準備。
03
在刷題前
先準備項目描述的說辭
我見到不少候選人,在面試前,就會著重刷題,比如看算法題,基礎題等,這個是必要的。
不過在面試里,第一個環節一般都是項目介紹,也就是說,如果面試官通過項目,看到你的技能和職位不匹配,你甚至沒有機會被問其他問題。
這里介紹些項目描述的要點:
01 業務需求可以一筆帶過,用寥寥幾句話介紹項目的背景,大致做了什么,工期和人數即可,別講太多,因為面試官不關心。
下面給出一個說辭的案例。
我上個項目是做電信系統的計費軟件,客戶是xxx,工期是xxx個月,有5個人一起做,我在里面做的是開發。
02 結合項目實際需求,介紹項目用到的技術,比如在上述職位描述里,要求有spring mvc,消息中間件,數據庫等需求。
下面同樣給出各說辭的案例。
在這個項目里,我們用到了Spring MVC(或Spring Boot或Spring Cloud)框架,數據庫是用Oracle,ORM組件是用Mytabis。
在項目里,我們在是通過消息queue來發送計費成功的消息,消息中間件我們使用Kafka,為了降低數據庫訪問次數,我們會把客戶信息放在redis緩存中。
此外,我們在網關層接入了nginx做負載均衡。
大家能看到,在上述說辭里,我們結合了案例,說出了招聘方需要的技術點。
不過請注意,這里僅僅是介紹項目,結合功能點說出技術即可,別過多展開,因為一旦過度展開,就會讓面試官感覺你思路不清晰,或者憑借準備有恃無恐。
03 再結合項目,說些招聘方需要的非技術的要求。
在這個項目里,我們用到了xx設計模式,而且,我們會定期review代碼,以求保證代碼的質量,而且,當項目工期比較緊的時候,我還會客串配置管理的角色。
在這個項目里,我一有問題,馬上會和經理或測試或其它組的人溝通。
04 如果有,說下你在項目里的亮點,比如用到了一些比較好的技術。
這個項目對數據庫性能和內存性能要求比較高,所以我用到了Oracle調優技術和JVM內存優化技術,此外,我們還用到了大數據分析的工具對計費模式做了優化。
大家看到,上述說辭不復雜,準備好以后,說起來估計也就2,3分鐘。但就通過上述說辭,亮出了你的基本信息,而且能給面試官留下思路清晰,技術匹配的印象。
這里請注意,如果大家在項目里的技術和要求的不匹配,不建議作假,但可以通過如下的方式來做到匹配。
01 如果你的ORM用的不是Mytabis,而是itabis或干脆hibernate,就直說用到這些,因為ORM是相通的。
02 如果這個技術,比如Redis,在項目里用到,但你沒做,你可以在了解的基礎上說出來。
比如說:“這個項目還用到了Reids...,redis是用在xx模塊上,功能是xxx”,請注意,這里你說是項目用到了,而不是你用到了,這里,如果在后繼的回答中,你對redis的用法和技能問題都能回答上,那么面試官不會介意這點。
03 某個技術你在這個項目里沒用到,但你比較熟悉,你也可以通過如下的說辭說下。
我在其它項目里還用到了nginx(模糊回答,沒刻意說這個項目),具體的應用場景是xxx(結合功能點說),用到了其中的xx配置項(通過些關節點來印證你用過)。
這里請務必注意,在準備項目說辭的時候,可以盡量和職位要求靠,但別太離譜。
因為你說的每個技術點,在后面,面試官都可能提問。
如果某個技術點你沒掌握,其實問題不大,面試官本來就沒要求你十全十美,但如果你說你用過某個技術,但通過后面的問題,面試官發現你其實沒用過,或者掌握程度沒像你說得那樣好,那么這個性質就不一樣了。
04
一定得準備
項目描述里提到的技術
在介紹項目時,就好比是釣魚,吸引面試官把注意力集中到你提到的技術點上。
所以在準備面試的時候,一定得先準備你項目里提到的技術(大多也是招聘要求的技術)。準備時可以按照如下的思路。
第一:
一定得結合項目背景,比如大家要準備分布式緩存redis,先說在哪個項目的哪個場景里用到,比如在剛才提到的電信系統里。
這樣就會讓面試官感覺到這個技術你實際用過,而不是簡單地只有學習經驗。
第二:
有不少關鍵點,你用到以后一定是知道的,比如redis的基本數據結構,如何讀和寫,緩存如果擊穿了怎么辦?這些問題點一定得準備,所謂吹牛要打草稿。
比如你可以說,在配置redis時,用到了xx配置文件的xx屬性,它是干嘛的。這話不用多,但說出來以后,面試官一聽就知道你真的用過。
第三:
可以準備些這個技術的高級問題,比如Redis集群如何搭建,集群里一臺機器失效了怎么熱備轉移。
同樣,可以講些如何配置以及如何使用的關鍵點?;蛘?,大家可以準備redis分布式鎖的底層實現。
請記住,需要對你項目里提到的任何技術都按上述要求做準備,雖然有些技術你未必會被問到。
這里,如果大家在項目里僅僅是用到了基本的功能,比如redis就用了基本的讀和寫,但你可以適當看些高級知識點和面試題。
05
一定得準備亮點話題
一定得準備亮點話題,并想辦法往這方面繞,而且亮點話題多多益善
對于java高級開發而言,可以準備如下的話題,大家也能以此為參考,準備些其它的話題:
1、虛擬機內存優化
2、數據庫性能調優
3、分布式高并發架構
4、一些熱門組件,比如redis,nginx等
5、大數據方向的用法
6、java core(比如集合或多線程)方面的底層實現代碼
7、Spring系列(比如IOC, AOP, MVC,Spring Boot, Spring Cloud)方面的底層實現代碼。
要準備到什么程度:
1、最好結合項目實際說出真的用過這些技術。
2、最好往性能調優方面靠。
下面就以虛擬機為例,說下如何在面試中引出該話題,以及面試時該怎么說。
第一:
在簡歷的最近項目介紹里加上類似這樣描述,“這個項目的內存要求比較高,雖然在項目里分配的對象不少,但這個項目只被分配了1G內存。
所以在這個項目里,我實踐了一些定位排查內存問題的技能,也做了些調優的工作“,這樣面試官見到簡歷的描述,就會自然而然地提問了。
第二:
在面試中總會有“項目介紹”這個環節,面試官會讓候選人介紹最近的(或最拿得出手)的一個項目,這樣大家就可以順勢說出剛才已經給出的描述。
第三:
大家可以在回答數據庫或集合等方面的問題時引出這個話題,比如回答完JDBC問題后,大家可以說一句,“用好的Connection對象我們會及時關閉,否則它所占用的內存對象無法被GC回收”。
或者在談及List等集合類型時,同時多說一句,“用好的集合對象我們會及時clear掉,否則這個集合也會對一些對象產生強引用,這樣就會延遲對象的回收時間”。
第四:
在自我總結時,可以說,有虛擬機調優的經驗。那么,在面試時,該怎么說呢?
1、大家可以先從堆的結構入手,進而詳細說明垃圾回收的流程。
2、再進一步說明如何寫出高性能的代碼。比如物理對象(比如Connectio或IO)用好之后得及時close。大的對象用好后應當及時設置成null,以撤銷強引用。集合對象用好后應當及時clear。盡量別頻繁地使用String(或其它不變類)對象,這樣容易產生內存碎片。
3、還展示監控、定位和調優方面的綜合能力。這里可以說下,比如通過Jprofiler+jmeter進行JVM性能調優的方法。
4、大家甚至可以看些虛擬機的底層實現細節,在面試中說下,這樣能大大提升自己的專業素養。
(責任編輯:代碼如詩) |