公開看到這文章,代表的一件事就是:我終於找到工作啦!
從七月以來為期好幾個月的面試過程,面到我都開始懷疑人生了…
以下是我這次的面試一些想法記錄,多半是一些自己的反省
我真的很不會面試
這幾個月我大概面試了近十家公司,有新創也有大公司,從七月底到就九月底的面試沒有一個成功,當中有些是一面被拒絕,有些甚至在接完 HR 電話之後就沒消息了,少數是有到二面,有兩個確定是跑完面試流程了但最後還是收到感謝信
說實在有幾場表現我真的很想洗腦忘掉,整場面試我就能感受到話題朝著我不利的方向前進,我越講越沒自信,甚至明顯的感受到對方想結束面試
這還滿令人喪氣的,畢竟面試收到拒絕代表的就是在說你不夠格,我大概比較好的點是這種負面持續的不算久,這批面試都失敗後,又在網路找公司投履歷時,會發現感覺這家公司也不錯耶,就又充滿希望,不過失敗了快十家時,是有絕望到,哇,我好像能投的都投了耶 XD
我想我有一個在面試時經常會暴露的問題,那就是我是個沒自信的人,尤其是在面試的場合,當面試官追問細節或是對我的回答提出疑問質疑時,我就會變得很緊張,回答也越來越沒自信,就算最後我其實已經答了九十分的回答,被追問後我的動搖大概也讓我的整體表現掉了二十分
另一個我比較薄弱的點,是我沒有太亮眼的經歷,或許也可說我沒能自信的表達自己做過的產品,但我也是真心覺得沒有什麼好能說嘴的東西,這根源的問題大概也是源自自己的沒自信
反省
我想面試會過大概分成兩種人
- 你技術經驗強到爆,想向你學習
- 技術還可,會想與你共事
首先我技術經驗普通,所以成為第一種人不太可能,而且技術經驗是已經過去的事實,就算現在想要加強也不可能一蹴可及,那在面試裡我能做的就是"讓人覺得會想要與我共事"
這有時滿看感覺和運氣的,因為這關係到該團隊的風氣還有面試官的標準
說說我有一場還滿印象深刻的面試吧,總之我被問到一個問題:請問你覺得這有什麼開發成本?這是我第一次被問這問題,所以當下是覺得有點不知所措,但成本我想就是使用服務的費用吧,所以我就只回答了寄送簡訊服務的費用之類的,但面試官看來不是很滿意此回答,希望我在說更多,他提到並不是所有人都會看到簡訊,可以把這整體的效益也考量進去,但我當下的反應是沒人知道多少人會看到簡訊吧,討論多少 % 數的人會對簡訊有反應也沒人知道實際如何,討論這沒什麼意義吧,當下的討論方向我和面試官就是意見不合,最後就中停對方也說我不會有下一關的面試,他表示是希望找能一起思考做產品的人,不光是技術問題產品的開發,功能的效益都要思考能與大家一起討論 (細節我有點忘了,但應該差不多就是這樣的意思)
這實在是糟透的面試經驗,這也是我第一次明顯強烈感受到跟面試官討論不合的狀況,這場面試後我想了很多,我當下是太糾結於與其討論一個沒人知道實際狀況的問題不如直接做,我想對方只是想討論可以做哪些效益追蹤吧,這就是一個我不瞭解對方想要什麼以及自己當下陷入一個胡同出不來所導致的最差結果
還有另一個例子是我沒看懂問題,在回答的過程對方說看不懂我在答什麼,我又不太了解對方的提示,就這樣在彼此都不知道對方在說什麼的狀況中卡很久,整個討論就都花在搞懂問題在問什麼,過程中我也有點急,提問的方式變得有點像在質疑對方,例如說你剛剛不是說這樣嗎所以我才以為這樣之類的話,面試結束後我有自覺這一定沒後續了,也果真如此
因此我想最重要的是要聽懂對方在問什麼,能做的事就是盡量先問清楚對方要什麼,或是回答完可補充問一句說請問我還需要補充什麼嗎,另外,有一個我覺得還能做的是要說明自己的行為,減少讓面試官有過多揣測,像是考白板題,我沒那麼聰明所以我需要時間思考,那我就會說我需要一點時間自己思考,還有我也會問對方希望我怎麼回答,要我盡量把自己的思考過程說出來還是寫完再說明,我遇過的面試官都是說看我習慣,那我都是說我習慣寫完後再講解思路,這樣的互動能減少彼此歧見,我也認為可以注意
以上說的方法要求的也不多,但要覺察自己根本沒聽懂意思這點就很難,說實在我自己到最後也沒好好掌握,因為有時前面的提問可能就轟炸到身心俱疲,而沒能好好分析現在的狀況,讓自己面試時的身心都保持平靜也是很重要的一環
再來思考怎樣的人你會想要跟他一起共事,以下是我自己的想像
- 好溝通,對任何意見保持開放性態度
- 能清楚說明自己的想法
- 不會太過嚴肅
- 自信
然後盡可能讓自己在面試時維持這樣的形象,我想應能大大增加錄取的機會
遇過哪些面試問題 (列了幾個我還記得的)
常被問的問題:
自我介紹
你做過的專案中有什麼你覺得很困難?又怎麼解決的?
你的優點是什麼?缺點是什麼?
你找工作主要會考量什麼?
為什麼會想投遞履歷到我們公司?
為什麼會想離開上一份工作?
你期望的薪資?
對下一份工作有什麼期望?
職涯規劃
有什麼問題想問的嗎?
知識問題:
multi-thread v.s. multi-process v.s. asyncio
什麼是 Python GIL?如何擺脫 GIL 的限制?
MySQL v.s. PostgreSQL
什麼是資料庫正規化
什麼是 CSRF
HTTP 1.1 v.s. HTTP 2
使用 UUID 作為 Primary Key 會有什麼問題
TCP v.s. UDP
什麼是 deadlock
怎樣的資料庫欄位適合加 index
先壓縮再加密還是先加密再壓縮
若短時間有大量的請求,要怎麼防止服務被打掛
AWS Lambda 要怎麼使用第三方函式庫?怎樣的功能適用 Lambda?
其他:
review code 會看什麼
設計 API 時會怎麼設計?會注意什麼?
如果一個 SQL Query 太緩慢,你會做什麼來改善
給情境,問會怎麼設計資料庫表
會怎麼選擇?像是 Django v.s. Flask 或是 MySQL v.s. PostgreSQL
白板題:
我覺得我遇到的現場白板題都不會很難,感覺只有 LeetCode Easy 程度,是有一兩題比較難,但對方好像本來就不期待我解開,有點像是 bonus 問題,平時刷 LeetCode 練手感很重要,能短時間熟練的寫出滿加分的,我其中一個錄取主管有跟我說面試官的評價,就有稱讚我解題反應很快
但要小心別想得太簡單,我有次遇到一題是要我寫個函式判斷一個字串是否為 IPv4,我直覺想說以".“來做字串分割,然後判斷字轉 int 範圍是 0~255,不到一分鐘就寫完,但對方接著要我想幾個字串例子會讓我的程式出問題,總之這樣寫漏洞滿多的,像是 “1.1.1.1.1” 或 “1.001.1.1” 都會出問題,之後就是要我一一改進我的函式,出這題的套路可能就是要看你細不細心和 debug 能力吧
還有有時面試官會在問說有哪些地方能改善,除了時間複雜度的改善,記得也想想空間複雜度的改善方向,要不就看看 cache 能不能幫上忙,還有一種是看看多個 for 迴圈能不能一些例子提早 break 結束或 continue 下一輪
額外建議:
面試官大多都會依照你的履歷內容問相關問題,然後還滿常會依照你的回答再順勢問更深入,因此我覺得有時不要太多嘴比較好,不要說些自己沒把握的話,我有幾次就自掘墳墓,像是有次我被問到空間複雜度,我有使用到 Python dict 存東西,我就多嘴說我不確定 Python 底層 dict 怎麼實作的但我想這應該就存 key 和 value 所以是 O(N),結果對方就接著問我 hashmap 資料結構怎麼實作?我就說我不確定了…當然答不好,這就是一個多嘴自曝弱點,直接說 O(N) 可能還沒事,還有記得要準備遇到不知道怎麼回答的問題時的說詞,不要像我一樣表現得太緊張
最後
我八成的面試都是面 Senior 職缺,都沒成功,看來很遺憾的我沒有被稱為 Senior 工程師的資格
究竟一個 Senior 等級的工程師要有怎樣的表現,這也是我在求職期間一直捫心自問的問題,我想這也是我今後面對新工作的一大課題,我是有點想法,但在面試中我做不到這樣的形象,因此這裡就不多說我的想像了
另外,我面試錄取的幾個職缺,都問比較少過去經歷相關的問題,包裝經歷這點也是我的弱項,有個原因我想是我忘了我過去做了什麼,記取教訓,我下一份工作一定要認真寫工作日誌