此面試有兩階段面試,
第一階段現場與技術人員面試,
第二階段會與主管、HR 面試,
不過實際依照當下情況而定,如果
剛好主管或 HR 有空也可能第一階段就直接面。
第一階段:現場技術人員面試
有兩位面試官,一位是拍錢包的技術主管,另一位是支付連的工程師(不確定是否為主管)。
面試過程算是滿親和的,有時候兩位面試官自己會聊起來。
主要的問題會是過去經驗的討論與口頭的技術問題。
- 自我介紹
- 離職原因
- Concurrency 經驗
- DB 連線時間過長如何處理
- 線上機器異常,無 Grafana 或 Kibana 可看,該如何處理?
- 所提到對團隊的基礎設施架構,過程中執行有哪裡遇到挑戰?是否真的有效益?做完後大家是否真的會寫測試
- 測試覆蓋率是多少?
- 寫測試會注意哪些?老舊不好寫的測試會如何處理?
- 串接金流有無遇到什麼問題?
- 若使用者付款成功後,第三方服務的 webhook 未回傳付款結果,該如何處理?
- 團隊之後會要換 .NET,有什麼想法嗎?是否可接受?
- 上一份工作中,做起來覺得最開心或最有挑戰或最有成就感的事情
- 對自己未來的規劃
- 知道自己進來後可能會負責哪些項目嗎?
- 覺得自己是個怎麼樣個性的人?公事上與私下一致嗎?
第二階段:技術主管、HR 面試
這階段的技術問題比較少,主要會是雙方來回的交流。
技術主管會了解你過去的經驗並說明技術團隊現況,也表示你可以隨時提問公司的問題,能答就答,希望面試者也能清楚公司狀況。
- 自我介紹
- 離職原因
- Race Condition 如何處理?實際使用在什麼案例
- 使用的 AI 工具,如何挑選給團隊使用?
- Copilot 與 Cursor 的差異,為何 Cursor 回答的結果比較好?背後的 LLM 不是一樣嗎?
- 管理經驗問題
- 職涯發展問題
- 個人特質問題
主管算親和但不活潑的類型,面試過程中不會覺得太壓迫,且中間就會讓面試者有提問,不需要等到最後,算是互相交流。
接著就換 HR,過程中 HR 算親切,一樣會聊到面試者的一些過去經驗與想法,
然後會刺探面試者的面試狀況與到職意願,如果有想要拿 Offer 的話這邊可能需要注意
- 離職原因
- 管理經驗問題
- 職涯發展問題
- 個人特質問題
- 近期面試狀況與到職意願問題
其他資訊:
- 公司的開發團隊組成為前後端、APP、設計、QA、SRE、PM
- 會需要與 Marketing 端人員接觸,後續會開 kick off 會議、撰寫 SA/SD 文件等
- 有撰寫測試
- 有 CI/CD
- 雲端架構使用 GCP,有 SRE 負責,一般 RD 不會直接操作
- 上班時間彈性 9:30 ~ 10:00
- 無遠端工作
- 未來全面換 .NET,現階段持續開發維運 PHP
- Laravel 最舊 4.x,最新 7.x
- PHP 最舊 5.x,最新 7
- 公司是營收為正
- 有分拍付跟支付連,拍付 2C,支付連 2B
- 算是 PCHome 底下投資的公司
花費時間:所有會議花費時間約 3 小時
公司福利:聽起來沒太多
面試問答
Concurrency 經驗
只列大方向,細節可自行搜尋資料
- Cache
- Load Balance
- Auto Scale
- 程式語言
- DB 優化
- 非同步事件處理
DB 連線時間過長如何處理
這提主要應該是要考 DB 效能的優化,當然也可以搭配快取策略,看當下面試官是否有想要追加問
- 正規化、反正規化、jsonb
- 使用 explain 調校 query
- 針對常用搜尋欄位做 index
- 避免 N+1 query 問題
- 避免 select 非必要欄位
- 定期封存資料
線上機器異常,無 Grafana 或 Kibana 可看,該如何處理?
直接上機器看 log
所提到對團隊的基礎設施架構,過程中執行有哪裡遇到挑戰?是否真的有效益?做完後大家是否真的會寫測試
請依照實際狀況說明自身過去相關經驗
測試覆蓋率是多少?
請依照實際狀況說明自身過去相關經驗
寫測試會注意哪些?老舊不好寫的測試會如何處理?
- 將過度複雜之 function 或 Class 拆分職責,使測試好寫
- Edge case 需測試到
- 實例化 Class 時使用注入方式,避免在 Class 中直接 new,難以 mock
- 適當情境下使用 mock,例如呼叫第三方 API、使用 AWS S3 時
- 取分程式碼的重要性,優先測試重點程式碼
串接金流有無遇到什麼問題?
考 transaction、race condition、lock、訂單非同步處理
若使用者付款成功後,第三方服務的 webhook 未回傳付款結果,該如何處理?
- 前端介面設計主動觸發 API 確認付款機制
- 後端 worker 排程檢查付款狀態 pending 訂單,並利用 transaction id 呼叫第三方服務取得交易結果
- 設定訂單 timeout 時間,過久沒付款則訂單列為失敗
團隊之後會要換 .NET,有什麼想法嗎?是否可接受?
依照自身意願回答
上一份工作中,做起來覺得最開心或最有挑戰或最有成就感的事情
請依照實際狀況說明自身過去相關經驗
對自己未來的規劃
請依照實際狀況說明自身過去相關經驗
知道自己進來後可能會負責哪些項目嗎?
Pi 錢包的開發與維運,可以先玩過 Pi 錢包的 APP,描述他們既有的功能
覺得自己是個怎麼樣個性的人?公事上與私下一致嗎?
請依照實際狀況說明自身過去相關經驗
Race Condition 如何處理?實際使用在什麼案例
- 悲觀鎖
- Redis lock
- 處理搶購併發扣庫存
使用的 AI 工具,如何挑選給團隊使用?
請依照實際狀況說明自身過去相關經驗
Copilot 與 Cursor 的差異,為何 Cursor 回答的結果比較好?背後的 LLM 不是一樣嗎?
Cursor 的 IDE 應該會對 prompt 做加工思考,並且會搜尋 codebase 相關的程式碼,所以比較準確,但消耗的 token 量也比較大。
近期面試狀況與到職意願問題
請依照實際狀況說明自身過去相關經驗
面試建議
面試前可先複習自我介紹,幫助自己在開頭可以講的順一點,後面也會比較順。
因為一二面都會大量聊到過去經驗,所以建議面試前需先整理過去自己做過的事情,其中會被問到的技術點也要注意。
有興趣轉寫 .NET 的話應該是個不錯的機會。
過程中有提及不少店家結算維運作業需處理,需要一些細心度來處理對帳的事情。