我上周和本周面了一些Java高級開發方面的候選人,不能說不好,但根據他們的工作經歷和項目經驗,完全應該發揮得更好。比如一些只要是做過項目一定會用到的技術,他們普遍都沒回答好,而且很多看上去時臨場發揮。
而且根據我最近的面試經驗,這不是個別現象,而是大多數候選人普遍存在的問題,這些問題包括:
1 他們在簡歷上寫得一些技術點,比如數據庫優化,或Spring MVC框架,我相信候選人在平時項目一定做過,但不知道總結。比如我問在數據庫優化方面做過哪些事情?很多人就直接說沒做過,但我就不信他們連索引也沒用過。
2 我就拿java集合里的HashMap舉例,我就問hashcode方法重寫過嗎?如果不重寫會有什么后果?我想大多數候選人應該都用過HashMap,但能說上來的寥寥無幾,我猜想原因可能還是只會用,不會總結。
3 描述項目經驗時,條理性不強,往往是想到什么就說什么,比如按我的思路,介紹項目經驗時,先大致介紹項目背景,然后談下用到的技術和框架,然后說下我做的模塊,再可以說些亮點。但不少人敘述時基本沒邏輯性,比如第一句在說用到某技術,第二句就說項目里有多少人,第三句再補充項目里還用到什么技術。
4 回答問題始終無法切中要點,甚至有時候會用模糊語句蒙混過關。比如我問,如果出現OOM異常,該查哪些日志文件,然后該從哪些方面查?這問題不復雜,但有些人會直接說該擴展內存使用量,這就有些文不對題了。
可能還有其它問題點,但上述4點給我印象最深刻。面試完給我的感覺是,候選人可能平時項目里也用到過這個技術,但不知道總結,所以導致在面試時沒回答好。
這很吃虧,因為面試官不得不根據候選人的答題情況來衡量候選人的能力。如果他們在面試前做過准備,面試結果一定會比現在要好。同時我就很奇怪,現在的候選人是不是大多在面試前不做准備?或者說不知道該如何准備?
在我的博文里,很多文章是講如何准備面試,在java web輕量級開發面試教程里,我也總結了一些簡歷和面試方面的經驗。這里再根據我的一些面試經驗,再總結下面試前該如何做准備,以及面試里的實戰技巧。
准備要點1:介紹項目
你可以在家里列個發言提綱,着重說你用到的技術,以及你做的亮點,請注意,再介紹時,一定得准備些亮點,比如在微服務這塊你如何做部署,在分布式集群方面,你做過哪些配置。總之這是你比別人強的地方。當你拋出亮點時,面試官會有意無意地接口問。我也知道,這其實是相當於被候選人牽着鼻子走,我在面試時也會注意,但這可能是人的思維慣性,我有時也會無意中接口問候選人提出的名詞。
也就是說,你如果准備好項目介紹,一方面能讓面試官感覺你條理性很強,另外你甚至可以引導面試后面的問題。
准備要點2:適當看些文檔,夯實你的基礎知識。
我就拿Java里的集合來舉例,大家可以看ArrayList,LinkedList,可以看些HashMap和ConcurrentHashMap,泛型,每個要點都適當深入,必要時甚至可以看些ArrayList或ConcurrentHashMap部分的源代碼,面試時找機會說出來。
面試過程中普遍出現的問題是,候選人會用這個技術,但說不好。出現這個問題的原因是候選人沒做准備,其實在面試時,做不做准備給人的感覺就完全兩樣了。
准備要點3:看些值錢的技術,這些技術小而言之是優化方面的,比如JVM優化,數據庫性能優化,大而言之是框架,比如分布式集群,反向代理等,然后想辦法把這些技術嵌入到你的項目介紹里,並准備些衍生問題。
最后說下我的結論:
1 面試前不做准備,哪怕你工作經驗再豐富,通過面試的可能性很小。大家對此別抱有任何僥幸心理,這是從很多實例中總結出來的。
2 我在其它博文里寫過些做准備工作的方式,大家可以看下我的其它文章。
3 積累面試經驗不僅得靠准備,更得靠實戰。比如你最近想要換工作了,你可以提前找些小公司練手,一方面看下最近流行哪些面試題,另一方面不斷在實戰中發現自己的問題,再不斷准備。
4 我也見過一些比較極端的例子,比如候選人只有初級開發的能力,但憑着能說會道,最終面上了高級開發,但畢竟這是少數,面試技巧大概占30%,最終還得靠實力,所謂一力降十會。