面試問答
Leetcode easy,各種括號是否 valid
請自己查
面試流程:Background Discussion(Hiring Manager) -> Coding Assessm
ent(One Senior) -> Background Discussion & System Design(Hiring Manager & One Senior) -> Behavioral Question(Team Lead) -> Behavioral Question(CTO)
所有面試皆為線上面試
從一面到拿到 offer:三週左右
履歷投遞:
管道:LinkedIn 看到,到 greenhouse投遞。
實際投遞時間不記得了,拿到一面邀約時還有點訝異。
一面邀約:
時間:D
通知過程:由 HR email 通知面試,透過 email 與 Appier 內部系統提供方便時段,再由 HR email 通知確定時間。
一面:
時間:D+3
面試官:Hiring Manager
面試時長:半小時
面試內容:履歷討論、投遞動機
沒有太多的細節,主要就是聊聊履歷上的經歷,為何會投 Appier 等。履歷的內容也沒有問得很深入,應該只是想確認沒有騙太大,以及技能是否匹配而已。
比較特別的是,Q&A 詢問總共會有幾輪面試,那時的答覆後續還有三面(Coding Assessment -> Behavioral -> CTO ),但到了 Coding Assessment 再問時又多了一關(Background Discussion & System Design)。
另外,面試官最後詢問我是否有其他面試時,我提到其實我已經有拿到 offer了。這也讓整體面試進度超級快速,算是額外的驚喜。因為過往查到的資訊, Appier 的面試似乎可以拖滿久的。
二面邀約:
時間:D+3
通知過程:在一面當天下午立即收到 email 邀約二面,流程一樣是由我這邊提供方便日期,HR 再 email 回覆確認。HR 也是效率超高的在當天下班前就確認二面日期。
二面:
時間:D+6
面試官:一位 Senior
面試時長:45 min ~ 1 hr
面試內容:Coding Assessment
就是 Leetcode 考題,視訊時考官分享了一個 google doc,並且貼上題目,直接開始作答。
我總共寫了兩題,一題 easy 一題 medium,題型分別為 stack 和 dp,leetcode 上都找得到一模一樣的題目,不算太難。不確定提早寫完的話是否會有 hard 的延伸題目。
我在第二題 medium 時有點卡關,還好面試官人很好,有提供線索和我討論,最後順利想出解答,也寫出 code。
這關要注意的當然就是要與面試官溝通,確認需求與think out loud。講錯也沒關係,面試官比較在乎你的思考過程。當然重點是最後要寫對。
三面邀約:
時間:D+7
通知過程:跟之前的一樣,就不贅述了。
三面:
時間:D+8
面試官:Hiring Manager + Senior
面試時長:1 hr
面試內容:Background Discussion + System Design
HR 的面試邀約信上寫得是 System Design,但實際面下來比較像是針對我的履歷上的 System 延伸討論,沒有要求設計一個全新的系統。
首先先是自我介紹,然後開始討論履歷。從 DB query 的 profiling, bench marking, stress testing,到 hot, warm, cold layer 的 trade off 與討論非常多。甚至還有 data pipeline 的規劃與選型討論。
另外因為履歷上提到不少 aws 的規劃與設計,從前端的部署(Cloudfront + s3)、caching(Elasticache/Redis)、routing(Route53/A record/CNAME record)、DynamoDB vs RDS、RDS Proxy 的應用等等都被問過了一遍。討論有廣度與也有深度。
接著討論程式碼層面的架構,從 MVC 的優劣,不同 Coding best practice,不同 lock 機制的 trade off,meta-programming等等。
這關應該全部依履歷而定,因為內容都是我履歷上有寫到、自介講到或是後續討論延伸而來的。基本上就是要非常熟悉自己做過的事情。
有趣的是,這輪 QA 我才知道該團隊是用 GCP ,沒想到面試官還滿熟悉 AWS 的部份的,也願意依我的經驗去延伸。
四面邀約:
時間:D+9
通知過程:跟之前的一樣,就不贅述了。
四面:
時間:D+10
面試官:Team Lead
面試時長:30 mins
面試內容:Behavioral Question
HR 的面試邀約信上寫得是 BQ,但實際面下來一點都不 BQ,反而主要都是技術。主要先請我自我介紹,然後開始了解我學習程式的經歷(我是非相關科系出身,剛轉職軟體工程師一年)。
接著就開始各種基礎概念轟炸,包括但不限於 Multiprocessing vs Multithreading vs Coroutine (我原本寫 python 的)、GIL 的解放、python 常見的 monkey patching、Golang 的 Goroutine 實作概念、Goroutine vs Python Coroutine 、C++ 的 mutex 和 semaphore(我說我有自學過 C++)、C++ 的 smart pointer vs shared pointer等等。
感覺得出來主要擔心我非本科系的基礎概念不紮實,所以把基礎掃過一遍。沒有到很刁難,主要就是希望知道我大概懂多少。
到一個段落沒問題後,面試內容從問與答改成輕鬆的討論與分享。後面花了不少時間在討論 Python GIL 的歷史、發展、對取消 GIL的看法、CPython 之外的 runtime 優劣等等。算是收穫很多的一關。
五面邀請:
時間:D+13
通知過程:這次 HR email直接給了我一個時段詢問我是否方便,我回給了另外幾個比較可行的,最後 HR 回覆 email 確認。
五面:
時間:D+15
面試官:CTO
面試時長:30 mins ~ 45 mins
面試內容:Behavioral Question
由於 CTO 業務繁忙,所以面試開始前 HR 還臨時通電要延後 15 分鐘開始,不過整體時程控制得宜,沒有什麼延誤。
一開始先被要求英文自我介紹,然後使用英文來回討論了一點點履歷上的技術經驗,語言沒問題後便切換回中文。接著就是很典型的 BQ,題目有分享我的優缺點、有沒有什麼衝突經驗、對自己的未來期許、為什麼想申請 Appier 等等。題目基本上 google 或是問一問 chatgpt 大概都會有相關模板。
回答時記得帶入多一點個人案例,不要只作片面回答。到了這關只要有工作經驗,應該輕鬆應對即可。
HR 核薪:
時間:D+17
通知過程:HR email 恭喜我進入核薪階段,馬上約好當天傍晚視訊討論細節。(我剛好當時人在國外,不然聽 HR 意思應該可以馬上電話討論,不需要另外約時段。)
薪水細節可以上 levels.fyi 或其他網站研究,這塊就不細講了。
比較麻煩的是, 核薪時間基本上要 5~7 個工作天跑不掉,這段時間只能等。
提供 offer:
時間:D+24
面試問答
Leetcode easy,各種括號是否 valid
請自己查
Leetcode medium,括號加星號是否 valid
請自己查
Multiprocessing vs Multithreading vs Coroutines
1. individual stack
2. need of IPC
3. locking mechanism
4. comparison of overhead
5. CPU bound vs IO bound
6. kernel control vs programmer control
...etc.
Subprocess vs Multiprocess in python
Subprocess 用來執行外部程式,Multiprocessing 用來在 Python 裡創建多個 Python 子行程以進行平行運算。Subprocess 適合執行 shell command,Multiprocessing 適合 CPU-bound 工作並能突破 GIL。
Goroutine 是啥,機制為何
A goroutine is a lightweight, Go-managed thread of execution. It is scheduled by the Go runtime (not the OS) and passes context in between using Channels.
面試建議
Appier 每個人的面試過程查下來應該都不盡相同,建議每一輪都可以詢問一下接下來的關卡,或是發信詢問 HR。
另外聽說面試時間也有可能拖很長,這部分也可在每一輪時詢問一下。
至於面試內容真的就是基本功,還有對自己的履歷有多熟悉。因為我也只是投 junior,有的時候卡住面試官也沒有特別刁難,所以打好自己的基礎應該比較重要。
最後時間要拿捏好,因為就算我明顯感覺到面試流程有加速,最後還是花了三個禮拜的時間。讓我後來有些 offer 不是要先拒絕掉,就是要麻煩延長。 這算是我這輪面試最大的失誤。
解鎖 3868 字完整內容
133 人已看過