2020 軟體工程師 面試心得分享-Amazon

記得職缺是在台灣Amazon很難得一見的Backend Development Engineer。

這是蠻意外得到的面試機會,是系上學長幫忙內推的,同一個職缺,我自己投都無回應(泣

特別以這篇感謝學長大大~感謝學長幫忙內投完履歷後,隔沒幾天又幫我再去問hiring manager面試機會(跪

內投後過了兩週收到HR電話,跟HR簡單聊,我有說到,我自己1個多月前也有投這個職缺,但都沒有回應,於是HR大大回我,他一天光內推收到的履歷就有100多份⋯⋯聽到這,忽然開心一下接到電話(๑¯∀¯๑)

面試時間是早晨,為了配合美國的時間,所以是早上7點,面試官是一位美國人。

因為NDA,面試題目就不公布了。跟LeetCode題差蠻多的,不過現在好像有股這種趨勢,像我面試Google on site & Facebook時,我覺得題目跟LeetCode都還蠻不像的~但寫LeetCode過程練習的思維習慣跟資料結構熟悉度,是會對你有幫助的。

前面有一段時間是在英文自我介紹,跟對方好奇問了我在YAHOO的各種project經驗。

當時剛拿到幾個正在抉擇的offer,也因為我準備面試的第二個月,都在複習系統知識,像Kafka, redis, SQL performance enhancement 這類,所以有1個月沒有寫題目了。

手感⋯可能因為面完Google on site後,整個鬆懈,外加原本刷題量就不高,所以雖然只隔1個月,手感還是有差( º﹃º )

跟面試官聊天過程,知道Ring是近期被Amazon收購的,面試官說,開發的部分,很多東西都還在起步階段。

這場面試給了我蠻多收穫,特別是應用在最近的工作上。

因為面試過程,一開始問清楚需求,跟各種情境的edge case,和複雜度後,我有把程式寫出來,把採用的資料結構,空間複雜度跟時間複雜度分析完~

面試官會說,請你跑看看幾個test case,當然test case是我要自己舉例的,面試官感覺是藉此觀察我的思路🤣

一開始的幾個case都能順利跑完,基本edge case也有考慮到,當我內心滿滿雀躍時候……面試官把test case加了一點複雜度,然後問你有沒有辦法從現有程式改出來。

明明當時還剩10分鐘,但不知道是當時太緊張,還是因為在獅子會碰到前任&一群前會長們一週鬧3次太疲憊,最後沒有給出完整的新解法,過程中只是會一直覺得原來的程式改一點點就可以了,聽著面試官說「It’s very close」,會莫名感受到希望與絕望並著( ͡o ͜ʖ ͡o),而不是開心雀躍「喔耶我快解出來了」( ͡o ͜ʖ ͡o)

用英文描述coding邏輯,資料結構跟演算法的緊張感,再加上生活上碰到的烏煙瘴氣消耗大量精力,也許是一方面的理由,但總感覺是自己有些寫程式開發的思維不習慣。

再次覺得厲害的軟體工程師,除了熟悉技能,面對緊急狀況&生活壓力的消耗,你要能隨時提醒自己的情緒波動,讓自己腦袋快速冷靜,並能理性想出解法……再次體會以前公司大神說過「玻璃心的人不適合當工程師」,大概就是這意思吧(′゜ω。‵)

後來在近期的工作有了新領悟,就是不斷訓練自己面對題目的「先想測試,再想怎麼開發」思維。

也想起以前YAHOO大神說過的「熟悉度不夠的話很難在動手寫程式前,先想好測試怎麼寫」,但其實TDD(Test Driven Development)的開發思維,會比較能寫出減少code refactor機會,或是更加考量到所有case的feature,當然還包括clean code,這也是小的我最近2個月工作上或寫LeetCode時,不斷在練習的。

也因為Amazon的這場面試,搭上最近工作不斷自我訓練TDD思維,大概能理解為何以前跟著YAHOO大神的時候,會說這不容易,因為除非你對程式語言的習性,encapsulation,design pattern……等等,以及常見的幾種unit test要素,比如Table Driven, Given When Then, 有一定熟悉度,你很難在開始開發之前,先想好每個module,以及你class的架構會長什麼樣子。

程式語言的習性我認為倒不是語法,就好比一樣都要access某個class裡的method,你用Inject寫,還是create a new object的方式寫,會導致unit test呈現不一樣的寫法,也會導致整個程式有不同程度的相依性,或者說有些寫法可以decoupling你的設計。

最後,講到測試,有個跟好友聊天的有趣題外話~

好友在顧問業工作,曾問我說「處理人的問題好麻煩,像你們工程師應該不會碰到那種上一秒可以,下一秒就不行的狀況吧?」

我:「有啊,當你的程式有bug,測試程式有bug,全部測完都OK,下一秒上線,就被使用者踩到問題了」

好友:「………..」

(´◔​∀◔`)(´◔​∀◔`)(´◔​∀◔`)

最後小總結~

每一次的面試相遇,都是提醒你還要補足哪些能力,用對方法努力,實力才會有效率往上成長~

生活上的挫折,也都是為了強化你的抗壓性 & 急速冷靜能力而來,如果你在面臨很難得的人生機會的準備時,也碰到了各種……光怪陸離的事情時,轉個念也許有天你會感謝這些經歷……想想我當時面試前幾天,人家是準備刷題,我是找當了律師的同學,幫我臨時3小時內生出給會長的律師函……現在想想都很不可思議為何要花錢做這種事(賺錢辛苦啊啊啊),直接聽父親大人的話快閃不就好了,因為當下都有其他人跟會長說了,處理方式根本不應該要我去生律師函
(´-ι_-`)

現在看去,沒有碰撞就不會有update人生視野,並短時間培養出急速冷靜->邏輯梳理問題->判斷不同解法的tradeoff 能力的機會
(´・_・`)(´・_・`)(´・_・`)

事情的發生不是最重要的,最重要的是你面對的心態與姿態。

大概是我Amazon面試前碰上獅子會這波事件,最大的體會。

就像面試當下,程式寫出來了,edge case都考慮到了,時間空間複雜度都分析對了,也不要太開心,要隨時迎戰下一秒的變化題~這概念有點像工作上你會隨時去思考程式擴充性 ᶘ ᵒᴥᵒᶅ

最後沒有通過也不要氣餒,因為想通補強點,這次面試經驗可能都會對你日後工作的成長有幫助,希望這篇分享,可以給各位一點方向哦~!
*ଘ(੭*ˊᵕˋ)੭* ੈ✩‧₊˚

《延伸閱讀》
至此除了感謝現在工作上的大大們給我很多靈感,讓我又可以不斷快速成長外,也感謝以前的同事們,有興趣可以參考這篇~

最近也常收到很多讀者的鼓勵,有些意外自己的文章跟故事很激勵人心~ ٩(。・ω・。)و

目前收到讀者們反饋後,正在寫草稿的主題有
1.用華人音樂比喻常見價值觀疑惑 & 解析
2.靠家裡x給家裡靠x有家裡可以靠 的實例解析,你現在是哪一種呢?
3.如何6年還完負債5百多萬並存到第一桶金?

繼續多寫一點不同主題的~~目前2週內發過的主題有職場、人際、情感工具文、原生家庭、法律、美食、價值觀跟純技術文章,歡迎大家留言跟我說想看的主題哦~~ ( ◕‿‿◕ )

There are a thousand Angels in a thousand people's eyes. 一千個人有一千個Angel.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store