申請職缺

【104人才培育計畫】Python 後端工程師 | Python Back-end Engineer

面試流程

  1. 預定面試時間:2小時
  2. 流程:
    1. 筆試:20 分鐘
    2. 技術面試 + 行爲面試:1 小時
    3. 職缺說明 + QA: 20 分鐘
  3. 備註:有提早約20分鐘抵達,先在櫃檯旁的沙發區休息。到 13:57 時,被請到會議室,開始筆試。

筆試(只考 SQL)

SQL 考兩題,共一頁,提供大概內容:

  1. 給一張 Table, 根據 Table 取出姓名、某欄資料總和,以及從小到大排序。
  2. 給兩張 Table (Table A, B):
    1. 根據 Table A 的某欄的值進行篩選
    2. 加總 Table B 的某欄值
    3. JOIN 後給結果。(同時提醒加總欄若缺資料則補零)

時間給的非常充裕(印象中應該給滿20分鐘),時間到時面試官還進來問說「寫好了嗎?」感覺時間規定沒有很硬性,當下覺得放鬆不少。(可以感覺是間友善友善的公司)

技術面試

面試一開始,面試官先介紹兩個面試官各自的職位,接著要求我自我介紹,時間不限。我大概花了3分鐘交代學經歷背景,以及為何會想來應徵該職缺。

接下來就進入面試環節,以技術面試為主,依照印象把題目列出來:

Python 相關問題

  1. Python 有些資料型別很像,請說明 List, Set, Tuple 三者之間的差異。

  2. 呈上題,說明 List, Set, Tuple 三者的應用場景。

  3. 有聽過 Coroutine 嗎?請解釋 Coroutine 是什麼?

  4. Coroutine 和 Thread 的差異為何?

  5. 有用過 Decorator 嗎?請說明一個 Decorator 的應用場景。

  6. 有沒有遇過循環引用(Circular import)的問題?若有,如何處理?

  7. 有看到曾經使用過 Ruff, 而你剛剛提到使用 SQLAlchemy 時,可以使用 String 而非 Class 的方式,來定義 Mapper 對應的資料型別,進而避免循環引用。那你是如何避免 Ruff Linter 的報錯呢?

    (可參考 SQLAlchemy 的說明

  8. 我看你在履歷上有寫,希望用 TDD 開發。請解釋什麼是 TDD (Test-driven development)

Database 相關問題

  1. 有用過 ORM 嗎?直接寫 SQL 和使用 ORM, 主要差異何在呢?
  2. 我剛剛期待聽到的是 SQL Injection. 請說明 SQL Injection 如何透過 ORM 避免。
  3. 如果只使用 ORM, 則會特別檢查 ORM 跑出來的 SQL 語法嗎?
  4. 請解釋剛剛筆試的題目,請說明針對這兩題,你是怎麼處理的?
  5. 你說你這邊要使用 JOIN, 你會想用什麼 JOIN 呢?是 INNER JOIN, LEFT JOIN, 還是什麼呢?然後為什麼要用這個 JOIN?
  6. 你有規劃過 Schema Diagram 的經驗嗎?請和我們分享。

Web 相關問題

  1. 請設計一個登入系統,包含註冊和登入。
  2. 在你的 Registration Flow 裡面,你提到,會先請使用者提供 Email, 取得 Email 後發送驗證信。則當使用者點開驗證信後,就完成帳戶註冊嗎?
  3. 請說明你的 Login Flow 如何設計。
  4. 請說明你怎麼製作 Token, 以及如何進行驗證。
  5. 當使用者點擊某個頁面時,請說明接下來發生了什麼事,讓使用者可以看到結果。
  6. 我剛剛其實是想問,我看到你有說曾經使用過 Traefik, 所以針對這部分還蠻好奇的。
  7. 請解釋 CORS 是什麼?
  8. 有調整過 CORS 的細節嗎?
  9. 請說明 RESTful API 是什麼?
  10. 有曾經使用過三大雲端(AWS, Azure, GCP)的經驗嗎?請說明。
  11. 你有提到你有一些 Side Project, 這些服務如果不是放在三大雲端,你是放在哪裡跑呢?
  12. 前端、後端、DevOps, 資料分析,你自己會做想做哪個?最不想做哪個?為什麼?

行為面試

  1. 你有和其他人合作完成過軟體專案嗎?若有,請問你在其中的角色為何?
  2. 如果上級交辦任務給你,這是一個你沒做過的專案類型。上級邀請你估時給他,你會怎麼回覆?
  3. 承上題,若你原本估時為一個月,結果做了兩週後,發現情勢誤判,可能是需求變化的較多,又或是情況比想像中複雜,你覺得你無法在時限內完成。則,你希望如何處理?
  4. 請說明你近期最有成就感的一間事,跟軟體有關無關都可以。
  5. 請說明你的短中長期計劃。

職缺說明 + QA

職缺說明

  1. 說明公司單位:新創工程處,產品線多(20+)
  2. 主要使用 Tech Stack: Python + Vue
  3. 採用 Agile, 一週或兩週一個 Run
  4. 該單位主要是要找有經驗的人,因為新創工程處步調相較其他單位較快,一個後端工程師通常負責 1 - 2 個產品。今年剛好公司有對應計劃,想說招收一些比較沒有實務經驗的工程師進來 on site training, 跟在旁邊學
  5. 通常合作方式是,各專業部門出需要的人,配成虛擬小組。組成通常是:前端/後端/設計師/PM/QA/SRE.
  6. 偶爾可能會加班
    1. 狀況一:負責的專案遇到封站維護時(可能是設備撤換之類的)。此時會需要假日待命,約一季到半年一次
    2. 狀況二:大專案時限內完成不了時
  7. 其他詳細的職缺內容、薪資和後續會由人資討論

QA

Q1: 請說明公司實際開發流程細節。

公司內部有自己的 git flow, 不過跟外面可能不一樣。

有三個主要 branch.

  1. 開發時先開一個新 branch
  2. 確定開發完成後,push 到第一個 branch
  3. 在第一個 branch, 設計師和 PM 確認沒問題後,會到第二個 branch
  4. 第二個 branch 由 QA 負責測試,沒問題的話會 push 到第三個 branch
  5. 第三個 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)

面試結果

兩天後收到感謝信 😅