申請職缺
【104人才培育計畫】Python 後端工程師 | Python Back-end Engineer
面試流程
- 預定面試時間:2小時
- 流程:
- 筆試:20 分鐘
- 技術面試 + 行爲面試:1 小時
- 職缺說明 + QA: 20 分鐘
- 備註:有提早約20分鐘抵達,先在櫃檯旁的沙發區休息。到 13:57 時,被請到會議室,開始筆試。
筆試(只考 SQL)
SQL 考兩題,共一頁,提供大概內容:
- 給一張 Table, 根據 Table 取出姓名、某欄資料總和,以及從小到大排序。
- 給兩張 Table (Table A, B):
- 根據 Table A 的某欄的值進行篩選
- 加總 Table B 的某欄值
- JOIN 後給結果。(同時提醒加總欄若缺資料則補零)
時間給的非常充裕(印象中應該給滿20分鐘),時間到時面試官還進來問說「寫好了嗎?」感覺時間規定沒有很硬性,當下覺得放鬆不少。(可以感覺是間友善友善的公司)
技術面試
面試一開始,面試官先介紹兩個面試官各自的職位,接著要求我自我介紹,時間不限。我大概花了3分鐘交代學經歷背景,以及為何會想來應徵該職缺。
接下來就進入面試環節,以技術面試為主,依照印象把題目列出來:
Python 相關問題
-
Python 有些資料型別很像,請說明 List, Set, Tuple 三者之間的差異。
-
呈上題,說明 List, Set, Tuple 三者的應用場景。
-
有聽過 Coroutine 嗎?請解釋 Coroutine 是什麼?
-
Coroutine 和 Thread 的差異為何?
-
有用過 Decorator 嗎?請說明一個 Decorator 的應用場景。
-
有沒有遇過循環引用(Circular import)的問題?若有,如何處理?
-
有看到曾經使用過 Ruff, 而你剛剛提到使用 SQLAlchemy 時,可以使用 String 而非 Class 的方式,來定義 Mapper 對應的資料型別,進而避免循環引用。那你是如何避免 Ruff Linter 的報錯呢?
(可參考 SQLAlchemy 的說明
-
我看你在履歷上有寫,希望用 TDD 開發。請解釋什麼是 TDD (Test-driven development)
Database 相關問題
- 有用過 ORM 嗎?直接寫 SQL 和使用 ORM, 主要差異何在呢?
- 我剛剛期待聽到的是 SQL Injection. 請說明 SQL Injection 如何透過 ORM 避免。
- 如果只使用 ORM, 則會特別檢查 ORM 跑出來的 SQL 語法嗎?
- 請解釋剛剛筆試的題目,請說明針對這兩題,你是怎麼處理的?
- 你說你這邊要使用 JOIN, 你會想用什麼 JOIN 呢?是 INNER JOIN, LEFT JOIN, 還是什麼呢?然後為什麼要用這個 JOIN?
- 你有規劃過 Schema Diagram 的經驗嗎?請和我們分享。
Web 相關問題
- 請設計一個登入系統,包含註冊和登入。
- 在你的 Registration Flow 裡面,你提到,會先請使用者提供 Email, 取得 Email 後發送驗證信。則當使用者點開驗證信後,就完成帳戶註冊嗎?
- 請說明你的 Login Flow 如何設計。
- 請說明你怎麼製作 Token, 以及如何進行驗證。
- 當使用者點擊某個頁面時,請說明接下來發生了什麼事,讓使用者可以看到結果。
- 我剛剛其實是想問,我看到你有說曾經使用過 Traefik, 所以針對這部分還蠻好奇的。
- 請解釋 CORS 是什麼?
- 有調整過 CORS 的細節嗎?
- 請說明 RESTful API 是什麼?
- 有曾經使用過三大雲端(AWS, Azure, GCP)的經驗嗎?請說明。
- 你有提到你有一些 Side Project, 這些服務如果不是放在三大雲端,你是放在哪裡跑呢?
- 前端、後端、DevOps, 資料分析,你自己會做想做哪個?最不想做哪個?為什麼?
行為面試
- 你有和其他人合作完成過軟體專案嗎?若有,請問你在其中的角色為何?
- 如果上級交辦任務給你,這是一個你沒做過的專案類型。上級邀請你估時給他,你會怎麼回覆?
- 承上題,若你原本估時為一個月,結果做了兩週後,發現情勢誤判,可能是需求變化的較多,又或是情況比想像中複雜,你覺得你無法在時限內完成。則,你希望如何處理?
- 請說明你近期最有成就感的一間事,跟軟體有關無關都可以。
- 請說明你的短中長期計劃。
職缺說明 + QA
職缺說明
- 說明公司單位:新創工程處,產品線多(20+)
- 主要使用 Tech Stack: Python + Vue
- 採用 Agile, 一週或兩週一個 Run
- 該單位主要是要找有經驗的人,因為新創工程處步調相較其他單位較快,一個後端工程師通常負責 1 - 2 個產品。今年剛好公司有對應計劃,想說招收一些比較沒有實務經驗的工程師進來 on site training, 跟在旁邊學
- 通常合作方式是,各專業部門出需要的人,配成虛擬小組。組成通常是:前端/後端/設計師/PM/QA/SRE.
- 偶爾可能會加班
- 狀況一:負責的專案遇到封站維護時(可能是設備撤換之類的)。此時會需要假日待命,約一季到半年一次
- 狀況二:大專案時限內完成不了時
- 其他詳細的職缺內容、薪資和後續會由人資討論
QA
Q1: 請說明公司實際開發流程細節。
公司內部有自己的 git flow, 不過跟外面可能不一樣。
有三個主要 branch.
- 開發時先開一個新 branch
- 確定開發完成後,push 到第一個 branch
- 在第一個 branch, 設計師和 PM 確認沒問題後,會到第二個 branch
- 第二個 branch 由 QA 負責測試,沒問題的話會 push 到第三個 branch
- 第三個 branch 就會後續上線。
Q2: 請說明為何選擇 Python + Vue
- Vue: 近幾年有越來越多的趨勢,不過也不只使用 Vue. Vue 為主要
- Python: 跑資料相關應用(AI 之類的)很合適。
Q3: API 文件會先開好,前後端再去開發,還是邊開發邊寫
(這題是想問 Code-First vs. Design-First
兩種模式都有,有人偏好先開好 API doc, 和前端確認後,再去開發。有人則是習慣邊開發邊調整,有時候可能就口頭快速更新。
Q4: 根據我剛剛的回答,提供建議
會建議對資料庫有更多熟悉,尤其是 SQL 語法。因為較大型資料處理時,下的 SQL 語法會比較長,因此,通常會希望工程師自己再親自確認該 SQL 語法確實能達到目標,且沒有冗餘的語法。因為資料量大時,一些細微的語法差異,就會造成執行速度變慢,進而可能引發內部系統報錯(像是運行太久導致資源佔用太久)
另外,也會建議對於資料庫的 Tuning 可以有一定程度的了解。
整體觀察
整體面試過程相當愉快,雖然在寫 SQL 筆試題時,因為語法幾乎都忘光了所以緊張了一下,但後來也沒有太要求細節,而是更重視在撰寫語法時背後的想法邏輯。
Python 部分我覺得問的偏細,幸好前陣子剛讀 Fluent Python, 對 Python 一些常用語法比較有概念。(不過 Coroutine 的部份在書的最後面還沒讀到,所以相關題目就偏慘 QQ)
Web 跟 Database 的部分感覺都問的蠻基礎的,基本上除了 Traefik 的部分是自己之前 Side Project 嘗試到,其他問題應該有做過 API 的 Side Project, 應該就都會有概念。
整體問題大概可以勾勒出後端可能的工作樣貌,從切 Schema, 切 API, 開發註冊登入,到部署的大概念,大概都問了幾個。問答的過程都蠻愉快的,很像在複習。如果有答的不符預期,面試官也會提醒或是補充說明。如果完全不清楚的,也會輕鬆跳過,不會給面試者壓力。
最後 QA 我覺得也回答得很有誠意,感覺得到有認真想要說明公司的流程。整個面試過程中,面試官也會偶爾補個小意見(像是被問到部署在哪裡時,我提到哪裡的 PaaS 免費就放哪裡,面試官微笑表示大家都差不多 XD)
面試結果
兩天後收到感謝信 😅