Java高階程式設計師面試經歷
我80年出生,05年畢業到現在已經快12年了,如果一直在技術上辛勤耕耘,足夠的努力,加上多年的技術經驗累積,這個年紀混到架構師級、技術總監甚至CTO還是有可能的。不過因為我自己的經歷有點特別,2011年初離開深圳,之後就很少接觸程式設計了,所以水平基本上停留在那個年代,Java高階程式設計師的水平都沒有達到。自己不僅沒有達到這個級別,甚至去面試的時候,還要和九零後一起競爭。實際上很難遇到比我年紀更大的面試者了。重新回到深圳,見下老同學,有和別人一起開公司的,以技術身份作為合夥人加入的,有公司元老,分得股權的。到這個年紀,事業上總得有點成就了。但於我而言,一切都得重新開始。
說起來,作為程式設計師脫離這個行業6年之久,對很多新湧現出來的技術一無所知。重新找工作,自己心裡真是沒底。為了找工作,自己花了兩個月的時間來複習java基礎知識(基礎語法、資料結構及演算法、設計模式、高階主題,包括多執行緒併發、IO體系結構、集合類、Java語法新特性、JVM虛擬機器記憶體管理、Java類載入載入等)。當我在複習這些技術的時候,自己真的感到汗顏。畢業後,上班環境非常輕鬆,下班後只顧享受,一副無所事事的樣子,所以05年畢業,一直到10年底辭職離開程式設計師這個職業,感覺自己的知識技術水平幾乎沒有任何提高。直到最近我才詳細瞭解java裡面的IO、集合類這樣的整體架構。對於一個java開發人員來說,這應該是最基本不過的了。所以,這次的經歷告訴我,想要在某件事情上取得成功,你必須付出比別人多的汗水。
在不到兩個月的時間裡,我也快速的學習了Spring、Hibernate、Struts這些web開發框架,快速瀏覽前端JavaScript相關的一些技術。因為也想做金融開發相關的工作,在看到網上有招Android前端開發的,我也快速學習了Android開發,另外學習了SQL,對於特定資料庫自己感覺時間上不太夠,所以就沒有更多的深入。在離開程式設計師之前在一家做搜尋引擎的技術公司,只知道一個Lucene搜尋引擎框架,其他的技術很少用到,專案組連SQL都沒有用到,自己也沒有主動去學習。最後的結果就是孤陋寡聞!作為一個技術人員,除了要精通自己使用的開發技術外,應該對自己有些要求,就是了解和學習最新的技術。這不僅可以提升自己的知識面,更重要的是,在實際開發中,對問開發中遇到的問題可以提供寬泛的解決方案。只不過,我認識比較晚而已。不過人的一生,想要做某件事情的時候,任何時候都不晚,只要你不喪失信心,只要你足夠努力。
除了學習,自己也在網上收集了一些有關面試、筆試的經驗,如《面試總結——Java高階工程師》系列的幾篇文章。隨著自己準備的推進,自己的信心也在增強。在網上投簡歷的時候,我寫填寫上10年以上開發經驗。我相信這個“10年”足以吸引很多HR的眼球。對於一些公司來說,他們需要這樣有經驗的開發人員。但是當他們看到我的簡歷經歷上的專案經驗的時候,只有寥寥的幾條。雖然我也很想去編造一些專案經驗,這樣就可以獲得更高的關注度,但是我最終沒有這麼做。我想告訴自己,自己能行。也幸好沒有亂編,因為現在很多面試都是在這些專案經驗上展開話題和討論的。
第一個面試,2月24日(週五)上午簡歷剛發上去不到半小時,就有一個電話打過來,後來也是這個電話讓我拿到了第一份offer。下午有一個技術人員,給我第一輪技術面試,聊了下我之前做搜尋引擎的一些技術。主要是工作中用到的Lucene框架、搜尋引擎分詞技術,還有資料處理hadoop(這在我離開公司時,還只是剛引進的實驗技術,而且還不是我的專案組在用)。因為對hadoop只是瞭解一點,在面試的時候,差點露餡。不過我從hadoop把話題轉移到了當時處理這些資料在搜尋引擎裡面是幹什麼用的,而不是一直糾結於hadoop怎麼處理這些資料的。面試官也是比較nice,一邊就我的話題聊了下,同時給我介紹了一些新的技術Spark、Storm等,正好這些我也都是在最近簡單瞭解了下。面試過程不到二十分鐘,感覺不錯,至少自己並沒有緊張。面試官說,他把我推薦上去,還有第二輪面試。我禮貌的表示感謝!到下個星期二上午,第二輪面試居然也是電話面試。這次面試稍微深一些,主要問工作中的問題怎麼解決,分詞系統怎麼實現的。這些都還好說,這些確實有專案經驗,話題也好展開。但提到一些新的搜尋引擎技術如:ElasticSearch,我居然都沒有聽過,這就有些尷尬了。畢竟,如果是做搜尋引擎,而且是基於Lucene的,怎麼可能不知道它。但是,好在面試官並沒有太過追究。整個面試過程也不算太長,讓我感到吃驚的是,這期間沒有提到“Java”這個詞。面試結束後,面試官告訴我,HR那邊會很快通知我。聽其語氣,感覺應該是成了。果然沒錯,下午HR那邊就打電話通知我,通過了面試。然後問我薪資方面,除了之前說的,還有什麼要求。最初HR給我打電話的時候,我說的最低應該是18K,但這次因為二面通過,我說其他的公司面試我要求都是20K。HR說可以爭取,最後公司那邊給到了21K,這已經達到了自己的要求。因為多年沒有工作,心裡沒底,最初是想能夠達到15K就算是達成目標,然後通過一段時間的學習提高,快速恢復狀態。
週三一整天,參加了四個面試,其中有兩家因為專案不匹配,直接第一輪就淘汰,他們主要做企業ERP、WEB開發,而我這方面相對還是比較弱的。有一個面試,第二輪是華為面試官。面試官比較嚴肅,問的問題也比較廣和深。基本上是看到你簡歷上寫了什麼專案,然後就此開展,一步一步深入。先是介紹專案情況,架構,技術等,然後中間會提問遇到的問題,應該怎麼解決。這個確實是考驗一個人的工作經驗,以及解決問題的能力。有不少問題,我想出來的解決方案都不理想,面試官發現其中的弱點之後,我就不知道怎麼做了。有點小尷尬,但整體過程也還不是太糟糕。自己心裡想,就當是學習了。另一個面試,他們的專案也是EPR和WEB開發的,面試官年紀稍大。這次面試並沒有第一輪就把我淘汰,面試官比較nice。面試過程同樣是根據簡歷上的專案經驗、技術展開。這次面試官的面試重點是偏技術的。比如演算法的考察,面試官問,如果有一些無序的數字,應該怎麼快速地讓它們變成有序的。我說可以可以用快速排序法。接著就問,快速排序法怎麼實現,我把快速排序的基本思路說了。接著提問,那麼如果在實際環境中,給你這些數字,你打算自己寫一份快速排序的程式碼去完成這個任務嗎。我當時想,可以在網上找快速排序的程式碼,自己再封裝成工具,就可以使用了。後來想,既然封裝,那是不是已經有封裝好的工具呢,我想到了Java的集合類,裡面有一些排序的功能。我說可以用Java集合類的排序介面來實現,面試官表示認同。後來問我,是哪個介面,我一時說不上來,不過他說我應該是知道,只是一時想不起來,沒有繼續追問。之後,問了一下設計模式,工作中常用的。我講了幾個,比如單例模式、代理模式、MVC模式等。接著問單例模式有幾種,我說主要有懶載入和啟動時載入。接著問代理模式是怎麼實現,把基本的類關係說下。我簡單的描述了代理類要引用被代理類,在代理類中提供介面給客戶類,而代理類介面的具體實現細節是由其引用的被代理類來實現,被代理類於客戶類而言是不看見的。又問Spring框架實現什麼模式,我說主要有工廠模式(Ioc容器)、MVC(Spring MVC)和代理模式(AOP程式設計)。設計模式的問題問完,問Javascript問題,這個我就更是弱項了,因為從來沒做過web開發,最近才學習瞭解前端開發技術Javascript,有不少答不上來的,一些問題說了自己的想法。面試官覺得我可能只是用得少,記不住了,基本思路還是可以。面試官給我的評價也還是不錯,說java基礎技術紮實,說等下又第二輪面試。第二輪面試,則重點在專案經驗上,主要還是講專案上的問題,以及解決思路。面試完了,問我對他們專案有什麼想了解的還有薪資方面的問題。因為之前已經有一個offer,所以我這次直接說了20K以上。第二天,這家公司HR打電話更我確認,我說期望在20-23K之間,HR和公司領導溝通後,說可以滿足我的要求,月薪是23K。感覺自己還是不錯的,鬆口氣。
週四,面試一家,基本過程差不多,不過面試官跟我是同歲的。其實我這個年紀來面試,很多面試官都和我差不多了。後來打電話說問願不願去他們專案組,不過他們專案組可能給不起那個工資要求。如果有意向,也可以把我推薦給其他專案組,有些專案組工資高些。不過在我看來,因為都差不多,也就拒絕了。
週六,平安科技的專場面試。其實首輪面試,我感覺回答的還是不錯的,問了JVM虛擬機器的問題,Spring框架原理,還有如果自己去實現Spring框架應該怎麼做(參考了黃勇《架構探險——從零開始寫WEB框架》裡面的思路)。不過有一個問題,面試官居然也是非常瞭解搜尋引擎技術的,問我在公司用的Lucene是什麼版本,我說1.6,結果面試官說,Lucene都5.x(實際情況是已經6.x了),你們還在用這麼舊的版本啊。終於露餡了!面試官說他們專案要求的比較高,建議我去他們公司其他專案組看看,我拿著簡歷走了,因為沒興趣了。
其實面試,跟公司專案方向、面試官等都有很大的關係。比如我說的週三的面試,有兩家做的內容差不多,但是一家直接在第一輪面試就把我pass掉了,另一家我就成了。所以說,面試失敗不代表自己水平不行。沒必要感到垂頭喪氣。但是面試之前,自己還是要有準備的,JAVA基礎肯定要牢固,而且高階工程師面試的主要內容都是與工作和專案經驗有關的,重點考察一個人解決問題的思路。
工資上可能對於某些程式設計大牛來說,並不具備優勢,但是也基本上是普通Java高階工程師的薪資水平了。如果過於糾結於工資,工作可能也不會開心。儘管第二份offer每個月多出了2K,而且試用期是21K,比起第一家80%只有17K左右高出不少,我最後還是選擇去了第一份提供offer的公司。放鬆心情,重新開始,這才是我這次找工作的重點。明白自己努力的目標,這樣也會讓自己的行為更有效。