送你一份加薪跳槽不完全指南 | 極客時間
如何準備一份「工程師範兒」的簡歷?如何在面試中體現程式碼能力?哪些是 Face to Face 面試必考 Java 知識點?
如何準備一份「工程師範兒」的簡歷?
定製簡歷:每個崗位的具體要求都不同,因此大家不要用一個通用的簡歷去應付所有的崗位,最好是根據特定公司的特定崗位來定製簡歷,突出與目標崗位匹配的經驗和能力。大家去應聘一個開發或者測試工程師,和去應聘一個 Team Leader 或者技術經理的角色是完全不一樣的。比如,如果我要去應聘一個有管理性質的崗位,我就會在簡歷裡適當突出比如我曾經從 0 組建了一個 10 人的技術團隊,裡邊有多少資深 Java 開發工程師,多少資料庫工程師等等,這樣就會更有說服力。大家寫簡歷的第一個目標,就是讓簡歷在篩選階段生存下來。因為往往一個崗位會收到大批簡歷,如果簡歷不能寫得很清晰,讓 HR 覺得很適合,很有可能在開始就被刷掉了,沒有機會去面試。
突出亮點:我見過很多簡歷都會寫自己既會 Java,又會 JavaScript,還會 Python,一下寫十幾行。這個本身沒有錯,但最好能突出自己的核心技能,比如,“我有 8 年 Java 開發經驗,很擅長 Java 併發或者 Java 安全”。但要注意的是,我們在突出亮點的時候,也不要過分浮誇,因為有時候當我們發現一個簡歷有太多“精通”、“深度掌握”這類詞,第一感覺是懷疑,而不是覺得這個人很牛,所以要適當的把握程度,事實是基礎。另外,專案經驗上,我建議按時間順序由近到遠排序,最好體現目標崗位的匹配度,突出自身專案的難度和價值,以及自己在專案中的作用。這樣就能進一步幫助面試官判斷候選人的能力和在團隊中的位置。
用事實和資料說話:對於工程師,定量比定性更重要,要讓面試官和 HR 體會到大家的經歷或亮點是可度量的事實。比如把“我非常善於快速學習”改成“我在兩個星期之內就學會了 Clojure 語言,做了一個撮合系統”,把“我大幅度提高了系統性能”改成“我在一個四核 8G 的配置上,把吞吐量從 2000 QPS 提高到 8000 QPS,平均的請求是 100K bytes 等等”,會更具說服力。
公開成果很加分:比如是開源專案的貢獻者,有一個很有內容的部落格,在 Github 上提供了很多被採納的 PR,發表過哪些技術論文,在 QCon 或者 ArchSummit 上做過分享,或者寫過哪些著作等等。像這些公開可見的成果,遠比自己評價自己更有效果。
簡歷形式和篇幅:在形式上,最好參考一些優秀簡歷,借鑑它們的模版。要注意的是,中國人和外國人的習慣不一樣,如果是去應聘歐美公司,最好去 Google 上查英文簡歷模板,而不要把直接把中文簡歷翻譯成英文。簡歷篇幅最好控制在 1~2 頁,既不要顯得單薄,也不要顯得過於冗長,段落之間要條理清晰。
如何在面試中體現程式碼能力?
大家在準備技術面試時,在程式碼方面一定要事先做個熱身,至少讓自己對基礎知識的掌握處於一個良好的狀態。
另外,在面試編碼的時候,面試官會逐步深入,考察面試者是否對演算法的理解達到了預期的深度,是否能夠很好的溝通,是否能夠理解面試官的主要目的,以及是否能夠把不清晰的東西通過探討逐漸清晰化。具體到程式碼的編寫,至少要體現出良好的編碼的習慣,讓面試官覺得你是一個能夠思考全面,寫出高質量程式碼的人。包括在命名和結構上,最好參考業界比較好的實踐,因為這些小的地方,恰恰也是程式碼質量的體現。
還有,很多時候面試者都需要在白板上編寫程式碼。這一點,我發現很多人並不是很適應,例如 Java 開發者,絕大部分是用 Eclipse 或者 IDEA 這些 IDE 去進行開發,以至於有的面試者,甚至連 main 函式的一些細節都不確定,這個是很可怕的。因此,大家要記住比如主要的 API 結構等等。
最後,關於刷題,我覺得仁者見仁,智者見智。我自己沒有刷過,但必須承認刷題網站是有效的,所以,我並不反對求職者去類似 LeeCode 這樣的刷題網站學習一下,當然,區分刷題高手是面試官的能力。
Face to Face 面試必考 Java 知識點
首先,大家要仔細閱讀招聘需求,因為招聘需求往往就體現出了面試官對我們的期望和未來工作的主要範圍。比如,一個普通的 Java 後端工程師崗位,可能會寫明需要應聘者懂高併發、懂 JVM 基礎、熟悉 Spring 或者 Netty 這些開源框架,大家就可以有針對性的去做準備,因為誰也不能保證自己還能清楚的記得一、兩年前做的專案用到的知識點。
關於 Java 面試核心知識點,大家可以參考我在極客時間推出的《Java 核心技術 36 講》 專欄,這個專欄的設計,就是針對的這方面的需求。極客時間團隊在內容和選題上充分參考了主流網際網路大廠在 Java 面試中的問題域,選取了其中的典型問題,一定會對大家有幫助。當然,也有讀者反饋專欄裡介紹的一些基礎知識似乎平常用不上,這確實是事實,但我把這些基礎知識列在裡面是有原因的,希望專欄不是僅僅應付面試,而是能夠有更多實際價值。同時,很多面試官,即使工作大多是做普通的資料庫增刪改查這些操作,也有可能從非常底層的角度去考察你,比如 JVM 底層或者是併發裡 Synchronized 是怎麼實現的。因此在專欄中,內容設計的目的都是為了讓大家對 Java 語言的核心基礎特性可以非常的熟悉,掌握主要的知識點。比如,併發的容器和基礎的容器,最常見的 ConcurrentHashMap 或者 HashMap,各種併發的基礎元素,Synchronized 底層機制,或者 ReentrantLock、執行緒池等等,都是 Java 面試中的長期熱點。還有 JVM,它是一個很龐大的範圍,它分為 Runtime、GC、編譯器等模組,包括所謂的 Serviceability 的一些特性,這每一個方面實際上都有可能被面試官刨根問底,雖然可能我們整個中國做 JVM 開發的團隊連一隻手都不到,但是不妨礙 Java 面試中會去考 JVM,大家還是要在這些知識點上面深入瞭解。
另外,現在 Java 開發越來越廣泛的應用到各種開源框架,包括像微服務這種新的軟體架構形式,所以大家對主流的開源框架也要有充分的認識。比如,做普通業務開發時,Spring 或 Mybatis 這類框架可能是業務開發的一個標配,那對 Spring 裡的一些機制,比如 Bean 的生命週期、AOP 等基礎概念,就要有深入的認識。如果大家應聘的崗位是大資料,那對 Hadoop、Spark 這類開源框架就必須要有深入的理解。
關注熱點也非常重要,我們技術人也要時常抬頭看這個世界。比如曾經有段時間,面試就會被問雜湊碰撞之類,就是因為當時有些大廠發生了這種攻擊。再比如前兩年,非常多的人在面試中被問到類似搶購、秒殺這樣的場景等等。這兩年,微服務似乎變成了一個必考的題目,比如對用 Dubbo 還是用 Spring Cloud,就需要有基礎性的理解,以免被問到的時候沒有準備。除了熱點,特定領域都有特定的專業知識,例如,深度學習、推薦演算法等,只有準備充分才能保證大家在面試時的表現完美。
大廠面試例項分析
下面,我就以自身的經驗來介紹一下作為面試官,我在面試中會考察哪些方面,有哪些側重點。不同的公司、不同團隊,面試風格會有區別。我們面試的目的並不是要表現面試官自己有多厲害,而是為了找出合格的候選人。有時我在面試中會刨根問底,但絕不是為了為難面試者,而是想看一下對方深度到底是在哪裡,以及遇到挑戰的時候,會有什麼樣的反應。
其次,就是考察面試者是否“適合”,對於不同的崗位,“適合”的定義是很不同的。
比如 JDK 團隊,因為是一個非常基礎的、底層的軟體,最在乎的是效能、質量、可靠性等,所以對底層和基礎技術的把握程度很重要。候選者可能是一個很棒的業務開發工程師,但是經驗和技能可能不適合。
為了公平起見,我們也不會特別隨意的問候選人各種問題,當然也會即興發揮,但總體上是有固定的套路和節奏的,因為只有用同一標準去考察不同面試者,才能保證候選人的判斷沒有太多主觀因素。
我們也會很在乎候選人過去的背景,如果跳槽過於頻繁,就會有所疑慮。同樣,我們也會看面試者在過去崗位中的表現,一個基本的判斷就是,如果一個人在前一個崗位非常優秀,那他在下一個崗位繼續優秀的可能性也會非常大。
下面,我介紹一些具體的流程。一般來說,開始的時候我不會直接問特別嚴肅的問題,會讓面試者做一下自我介紹,或者從輕鬆的話題開始,讓面試者先放鬆下來。
然後,我一般會問的一個問題是“談談你做過的最有挑戰的專案”,例如,難度很大、在這個專案中起到的作用比較大、能力表現最充分的專案。從答案裡,我就可以知道面試者是不是對自己的專案瞭解的很透徹,且面試者能不能清晰的表達出他所做的東西。在工作中,我們彼此之間交流的場景會非常多,能不能清楚的表達問題,就決定了能不能完成任務。我會側重考察面試者做事情的態度,解決問題的思路和能力,以及在遇到難點的時候採取什麼方法,這些角度都很有參考價值。
對於 Java 工程師崗位來說,我還會考一些演算法和資料結構的基礎知識。從基礎的題目,類似連結串列之類的資料結構開始逐步深入,比如把簡單的資料結構進行組合達到一個新的功能,或者在一個常規的演算法上面進一步優化,計算演算法複雜度等等。通過面試者給出的思路,可以看出他是不是能夠體會到一些常見的,比如空間換時間這些變通的思路和方法。在面試過程中,我也會觀察面試者和我之間的交流是否流暢、準確、完整,也能體現出我們之間是不是可以很好的合作。因此,建議面試者即使遇到比較難的題目,也要儘量表現出積極溝通的態度。
最後,我在面試時並不會去死摳特別複雜的演算法,或者特定的知識點,也不會選擇刷題網站上的那種題目,以免招聘到面試高手,真實的業務能力未必和刷題能力相關。知識點和能力可能是兩碼事,考住一個人很容易,準確判斷他的能力才是重點。其實我們工作中解決的絕大部分問題,只要有好的基礎和好的態度,基本上就能做得到,畢竟我們不是在解決過於艱深的科學問題,也不是在做原子彈。以上這些,就是我在面試中比較看重的一些方面。
文章出自極客時間《 Java 核心技術 36 講 》 專欄