阿里面經 - 暨我的面試階段性總結

從這個論壇裏學到了很多有用的東西,也認識了不少很多很有才華的小夥伴。雖然拖的時間有點久,但是還是想貢獻點自己的力量回報論壇,幫助需要的同學們~


阿里面經

面的職位是後端開發,最終給了P6的offer, 地點杭州。

1. 算法

2. 基礎知識

基礎知識比較多且雜,我能回憶多少算多少吧。。。

  • Java的基本概念,一般看看什麼Java Top 100 Questions就可以解決了

  • Java內存模型

  • JVM垃圾回收策略

  • HashMap實現,線程安全的數據結構

  • Hash衝突解決

  • volatile關鍵字

  • lock, synchronize

  • TCP三次握手、四次揮手

  • 常見的機器學習算法

  • 梯度下降

3. 系統設計,背景與行爲問題

問了簡歷上的項目,根據項目展開延伸到一些框架的概念。所以不僅要會使用框架,明白每個框架的特性以及設計的意義也是很重要的。

  • Kafka的實現和相關概念
  • AWS的一些應用和service
  • 機器學習粗糙集
  • 介紹簡歷上的個項目
  • 設計一個電商平臺

另外就是一些行爲問題。一定要有自己的體會,如果時間允許的話可以加一些例子,不要假大空或者刻意吹捧。表現出自己的優勢以及對這個職位,這個企業的興趣就好。

  • 自我介紹
  • 職業規劃
  • 現在的工作學到的經驗
  • 對薪資期待
  • 事業中最看重的是什麼東西

面試經驗總結

我始終覺得授人以魚不如授人以漁。就算面試的時候遇到原題,不能表現出如何一步步分析條件,解決問題的過程,還是不可能通過面試的。所以與其背面經,背概念,學會如何從失敗中總結經驗以及觸類旁通才是最重要的~ 以下是我以一個大約一小時的面試過程來總結的一些經驗,也算是爲我自己這段時間的面試做個階段性的總結吧。

0. 心態

是的,比起硬實力來講,更重要的是自己的心態。在面dream company或者大廠的時候, 如果太看重得失,太在意結果的話在面試中表現出的水平往往會大打折扣,甚至還會犯一些平時絕對不可能犯的愚蠢錯誤,我自己就喫過不少這方面的虧。而當我不在意結果,心態輕鬆,甚至不做準備的去面試的時候往往會得到非常好的反饋。不是鼓勵大家不好好準備哈,準備是必要的,但日常積累也是很重要的,其實很多時候日常的積累已經足夠讓我們通過面試了,這時候千萬別讓壓力或者緊張拖了自己的後腿。

1. 自我介紹 (30s - 1m)

  1. 目的:
    a. 我的名字,在哪裏工作,什麼職位。
    b. 我的日常工作內容(概述),我對未來工作的期待(興趣)。

  2. 例子:
    Hi, my name is XXX. I am a Software Developer working at XXX(公司), in XXX(城市). It is a Company focus on XXX(公司主營業務). As a member of XXX(團隊/組), my main job is to XXX(工作內容). We also use a couple of cutting edge frameworks to improve the efficiency of our system, such as …(用的框架及目的). For now, I am looking for a new opprotunity that …(期待)。

2. 基礎問題以及項目背景(5m - 10m)

  1. 爲什麼選擇這家公司
    根據之前的對未來工作的期待結合這個職位的介紹進一步拓展:
    a. A lot of resources, which means more opprtunites to learn
    b. Talented people around, easy to get inspired
    c. Massive room to make impace, even for intern
    d. Since I’ve been working in XXX for X years, it seems to be a good fit for this role.

  2. 我的技術背景,興趣與優勢
    I have around X years experience as XXX. I am more interested in XXX. To be more specific, it included …
    關於自己的優勢,要結合自己本身的優勢與企業的核心文化來說。

  3. 項目介紹

  • 開始的時候一定不要長篇累牘糾結於細節。面試官問的時候直接用一句話來概括這個項目, 包括以下幾點就行:
    a. 項目地點, I’ve done an internship/fulltime at company XXXX
    b. 團隊 I was placed in XXXX team
    c.項目名稱, our team was doing project XXXX,
    d.項目的目的 The project was doing XXXXX,
    e.我的貢獻, specifically I was in charge of the feature XXXXXX
  • 如果面試官特指了某個項目問細節,再相應的展開。展開的時候可以根據特性分層敘述,比如可以分爲前端後端,不同的service等等。項目敘述一定要清晰,面試官很可能沒有接觸過這個項目的技術,那麼就要思考怎麼敘述才能讓一個沒有相關背景的人也能聽的懂。
  • 另外,可以準備一個模板來應對“你最具挑戰性的一個項目是什麼”這個問題。

3. 算法題 (30m - 35m)

  1. 明確題意
    理解題目的input, output以及目的,必要的時候要求面試官給一個例子過一遍,確認自己的理解是正確的。一般常見的需要確認的條件:
    a. input是不是總是合法的(是否爲空,負數情況,越界)
    b. 給定對象是結構是什麼,是否需要自己定義
    c. 列表是單列表還是雙列表
    d. 對於時間空間有什麼限制
    e. 暫時想這麼多,以後再補。。。

  2. 大體思路
    能否通過有效的交流講清楚一個複雜的概念或算法是面試中要考查的非常重要的一點。 敘述算法時可以口頭簡單過一個例子, 打表或是畫圖都是非常有用的方法,必要的時候可以用一些僞代碼。另外,表現出自己是如何通過分析條件,一步步推理出可行的算法也是考查的重點(敲黑板,不要覺得見到原題就萬事大吉了,如果沒有表現解決推導問題的能力也很可能過不了面試)。可以簡單提一下暴力算法,以及如何一步步優化算法,有什麼優缺點等等。

  3. 寫代碼
    a. 跟面試官確認使用什麼語言,函數的signiture, input, output
    b. 注意邊界條件的檢查(根據之前明確題意的部分來實現) ,避免重複的檢查或者短路。
    c. 命名規範(有意義的命名但也不要過長)
    d. 必要時儘量使用子函數,使整個代碼看上去幹淨,有條理。
    e. 寫完代碼後,別急着跟面試官說寫完了,要先自己過一遍test case,把能改的bug,typo都處理掉。千萬千萬不要在面試官要求你跑test case的時候被抓出bug,非常非常非常的傷。。。
    f. 雖然很多公司強調要think loud,但是我本人在寫代碼的時候實在是做不到邊說邊寫,非常容易分心。所以要先把自己的思路說清楚後再開始默默的寫代碼,如果有需要沉默思考的時候也要先跟面試官說明,一定不要出現沒有預警的冷場。
    g. 如果非常確定複雜度的話,可以提一下複雜度。但如果不是很有把握,就不要自爆了。。。

4. 結束問題 (5m)

可以準備一到兩個問題問面試官,但是重點是show passion,表現出自己對這個機會很感興趣的樣子。我一般在這個環節會問: what do you like most about XXX? 也有看到別人準備的非常好的問題,這裏分享下:

  1. 事先去找找面試官的LinkedIn Profile, 看看面試官的背景,問問他爲什麼當初選了這家公司,剛進公司的時候有沒有什麼不適應或者需要注意的地方
  2. 問問面試官現在在做的project, 表示無比崇拜之意
  3. 問問未來公司的roadmap,表示自己對該公司的未來充滿希望
  4. 問問組裏需要什麼樣背景的人,然後推銷自己

5. 不是結束的結束

其實,能否拿到好的offer也是有很多其他因素決定的,比如說運氣,狀態,背景與公司文化是否吻合等等。。。所以如果不幸沒有通過,也不要對自己完全否定。只要你對這個行業有足夠的熱情,喜歡鑽研技術,offer大包只不過是這個愉悅的過程中的副產品,看清得失,看輕得失。願每個辛勤努力,永不言棄的程序猿/媛們都得找到自己如意的歸宿~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章