Try   HackMD

Resume


相關工作職缺項目

Google Backend Software Engineer, Insights, Benchmarks, and Narratives

Minimum qualifications:

  • Bachelor’s degree or equivalent practical experience.
  • 2 years of experience with data structures or algorithms.
  • Experience with standard Google systems/libraries.
  • Experience with software development in C/C++, C#, Java, Python or Go.

Preferred qualifications:

  • Master's degree or PhD in Computer Science or related technical fields.
  • Experience developing accessible technologies.
  • Experience with data analytics or online experimentation via A/B testing.
  • Knowledge of the Google Ad products.

Responsibilities

  • Write product or system development code.
  • Participate in, or lead design reviews with peers and stakeholders to decide amongst available technologies.
  • Review code developed by other developers and provide feedback to ensure best practices (e.g., style guidelines, checking code in, accuracy, testability, and efficiency).
  • Contribute to existing documentation or educational content and adapt content based on product/program updates and user feedback.
  • Triage product or system issues and debug/track/resolve by analyzing the sources of issues and the impact on hardware, network, or service operations and quality.

Google Software Engineer III, Frontend, Migration Services

Minimum qualifications:

  • Bachelor’s degree or equivalent practical experience.
  • 2 years of experience with software development in one or more programming languages, or 1 year of experience with an advanced degree.
  • 2 years of experience with data structures or algorithms.
  • Experience with Java and TypeScript and implementing user interfaces using Angular, TypeScript, or any other frontend framework.

Preferred qualifications:

  • Master’s degree or PhD in Computer Science, or a related technical field.
  • Experience with Java/full stack development.
  • Experience developing accessible technologies.
  • Ability to learn other programming languages as needed.

Responsibilities:

  • Write product or system development code.
  • Participate in, or lead design reviews with peers and stakeholders to decide amongst available technologies.
  • Review code developed by other developers and provide feedback to ensure best practices (e.g., style guidelines, checking code in, accuracy, testability, and efficiency).
  • Contribute to existing documentation or educational content and adapt content based on product/program updates and user feedback.
  • Triage product or system issues and debug/track/resolve by analyzing the source of issues and the impact on hardware, network, or service operations and quality.

Google Software Engineer, Release Infra, Project Starline

Minimum qualifications:

  • Bachelor’s degree or equivalent practical experience.
  • 2 years of experience with software development in one or more programming languages, or 1 year of experience with an advanced degree.
  • 2 years of experience with data structures or algorithms.
  • Experience developing and maintaining test automation frameworks.
  • Experience in system integration.

Preferred qualifications:

  • Master’s degree or PhD in Computer Science or related technical fields.
  • Experience with hardware/software systems and hardware-in-the-loop test infrastructure.
  • Experience in software build and test automation and CI/CD systems.
  • Experience in C++ or Python.

Responsibilities:

  • Work with the Starline platform/infra team within a group focused on real-time ML-based 3D human capture and rendering.
  • Support our team to build production-grade software to support the roll-out of a larger commercial product fleet.
  • Work with the team that leads software release infrastructure and engineering excellence.
  • Work on hardware-in-the-loop test infrastructure and processes to improve engineering productivity.
  • Help deliver our release engineering and hardware-in-the-loop testing initiatives on innovative new teleportation platforms.

Assessment

Backend Software Engineer

  • 熟悉數據結構與演算法,並具備後端開發經驗。
  • 具備 Redis 快取技術實戰經驗,熟悉 fan-out on write 的應用。
  • 有 Docker 容器化部署和 CI/CD 流程的經驗。
  • 熟悉 Flask 和 Vue.js,具備全端視角。

Frontend/Full Stack Engineer

  • 熟悉 Vue.js 前端框架,能設計用戶友好的 UI 界面。
  • 具備跨平台開發經驗,完成過 Vue.js + Electron 桌面應用,支持安卓投影功能。
  • 熟悉 RESTful API 的設計與整合,並有豐富的項目實作經驗。

Release Infra/Platform Engineer

  • 熟悉後端測試自動化流程,對 Redis-based 快取優化和系統性能調試有實戰經驗。
  • 具備基於容器技術(如 Docker)的應用構建與部署經驗。
  • 了解系統整合流程,有多服務協作的實踐經歷。

Self-assessment

技能與經驗

1. 後端開發

  • 使用 Flask 實現了多個 RESTful API,支援用戶認證、資料處理等功能。
  • 整合 Redis 作為高效快取系統,實現了基於 fan-out on write 的社群平台貼文分發。
  • 熟悉 MariaDB 資料庫操作,並實現了 Connection Pool 機制以提升性能。

2. 前端開發

  • 使用 Vue.js 開發了多功能前端,包括多圖上傳、Dark/Light 模式切換等功能。
  • 整合 Vuetoast 實現用戶行為通知,提供良好的交互體驗。
  • 完成了 Vue.js + Electron 桌面應用開發,通過 child process 集成 scrcpy,支持安卓投影功能。

3. 容器化與部署

  • 熟悉 Docker 容器技術,將社群平台的前後端和 Redis 快取打包進容器,實現快速部署。
  • 使用 Nginx 部署前端靜態文件並反向代理後端 API,提升系統性能與穩定性。

4. 專案實作

  • Twitter 類社群平台
    • 從零構建,包括前端(Vue.js)、後端(Flask)、快取(Redis),並完成多功能擴展如貼文多圖上傳、留言功能。
    • 實現 fan-out on write 的快取機制,提升高流量下的系統效能。
    • 透過 Nginx 優化部署,支援前端靜態文件加速與後端 API 的反向代理。
  • 跨平台桌面應用
    • 使用 Vue.js + Electron 開發,結合安卓投影與通知功能,展示了全棧開發能力。

技能差距與改進計劃

技術不足

  1. 學術背景

    • 大學成績不突出,且畢業於私立非本科,未能系統性地學習計算機相關知識。
    • 缺乏一線企業的相關實習與工作經驗。
  2. 開發經驗不足

    • 雖有全端專案開發經驗,但那只是自己私下做的練習,商業化產品的實戰經驗有限。
    • 前端技術對其他框架(如 Angular,React)熟練度相對不足。
  3. 軟技能與英文表達

    • 英文技術文檔的理解尚可,但對技術細節的英文表達和面試答題能力仍需提升。

行動計劃

  • 建立並展示更多大型專案,如構建一個完整的 CI/CD 部署流水線,或在開源專案中積累貢獻記錄。
  • 持續加強英語技術文檔的閱讀與表達能力,並參與英語技術討論或專業論壇。
  • 參與前後端相關的開源專案(如 GitHub 開源專案),累積商業化專案經驗。
  • 加強算法與數據結構能力,準備應對技術面試中的白板題。

模擬面試

背景詢問

🧔:介紹你在社群平台專案中的角色和貢獻。
👶:我負責整體系統的架構設計,包括前後端的開發與 Redis 快取優化。例如,實現了 fan-out on write 的快取機制,有效提升高流量下的系統性能。

🧔:介紹你在桌面應用開發中的技術細節。
👶:我使用 Vue.js + Electron 開發了桌面應用,通過 child process 集成 scrcpy,實現了安卓投影功能。同時整合 Vuetoast 提供用戶通知,優化用戶體驗。


背景知識問題

資料庫與快取

🧔:這個系統的架構如何設計?為什麼選擇這樣的技術棧?
👶:採用前後端分離的架構:

  • 前端使用 Vue.js 搭配 Vuetify 快速構建響應式單頁應用(SPA),提升用戶體驗。
  • 後端使用 Flask 提供輕量級的 RESTful API 支持,與前端無縫交互。
  • Redis 作為快取層處理高頻數據訪問,降低資料庫負載。
  • MariaDB 作為主要數據庫,處理結構化數據存儲需求。

🧔:你如何優化資料庫的性能?
👶:透過 Connection Pool 減少連接建立的開銷,並使用 Redis 作為快取層實現高效的數據訪問。針對高頻讀寫操作的場景,使用 Redis 作為熱數據的快取層來減少資料庫負載。

🧔:什麼是 RDBMS 與 NoSQL 的區別?什麼情況下適合使用 NoSQL?
👶:RDBMS 遵循 ACID 定理,適合需要嚴格數據一致性的場景,比如金融系統。NoSQL 提供靈活的結構,支持 Sharding 和高可用性,常用於分散式系統或需要快速擴展的應用,例如社交媒體平台。

🧔:如何在這樣的架構中管理微服務間的通信?
👶:通過 Docker Compose 中的 depends_on 和容器內部的網絡配置實現服務之間的通信:

  • Flask 通過 DATABASE_URL 環境變數與 MariaDB 交互。
  • Redis 直接通過容器名稱 redis 訪問,用於數據快取。
  • Vue 前端通過反向代理 Nginx 將 API 請求轉發至 Flask 後端。

🧔:什麼是 CAP 定理?如何在分散式系統中應用?
👶:CAP 定理指分散式系統中一致性(Consistency)、可用性(Availability)和分區容錯性(Partition Tolerance)三者最多只能同時滿足兩者。在實際應用中,AP 系統(如 Cassandra)更適合需要高可用性和最終一致性的場景,而 CP 系統(如 MongoDB)更適合對數據一致性要求較高的場景。

🧔:如何實現高效的用戶驗證與授權?
👶:

  • 使用 JWT(JSON Web Token)實現用戶的安全驗證,避免每次請求都查詢資料庫。
  • JWT 的過期機制保證了令牌的安全性,並且減少了資料庫的查詢壓力。
  • 利用裝飾器模式(@token_required)統一驗證邏輯,減少冗餘代碼。

🧔:你如何設計 Redis 快取層?有哪些應用場景?
👶:

  • 在 Redis 中存儲用戶的帖子 Feed,減少高頻讀取對資料庫的壓力。
  • 帖子和評論數據按需存取,Redis 缺失時才查詢資料庫,並將結果回填到 Redis。
  • 使用 Redis 的列表結構管理用戶的 Feed 順序,支持快速插入與檢索。

🧔:如何解決圖片上傳與存儲問題?
👶:

  • 將圖片保存到後端靜態文件夾(/static/images),並生成唯一文件名。
  • 在 Docker Compose 中設置卷(static_data),確保圖片在容器間共享。

前端與框架

🧔:你在 Vue.js 開發中遇到過什麼挑戰?如何解決?
👶:挑戰之一是實現多圖上傳和動態預覽功能。我通過使用 Vue 的 data binding 和 UUID 生成唯一文件名稱,避免文件覆蓋的問題。此外,為了提升效能,在圖片預覽功能中採用了懶加載技術,減少瀏覽器渲染壓力。


容器化與部署

🧔:如何設計高效的 Docker 容器架構?
👶:將前端、後端和 Redis 快取分別設置為獨立的容器,使用 Docker Compose 管理它們之間的相依性。通過 Nginx 配置反向代理和負載均衡,確保前端和後端的請求高效分發。此外,利用 Docker volume 持久化用戶上傳的文件,避免容器重啟時的數據丟失。

🧔:Nginx 的反向代理是如何運作的?
👶:Nginx 作為反向代理,攔截客戶端的請求並將其轉發到後端伺服器。這可以隱藏後端伺服器的細節,減少安全風險,同時支持負載均衡與靜態資源快取,提升系統的整體性能。此外,反向代理能解決跨域問題,通過設定相關 Header 允許瀏覽器訪問。

🧔:為什麼使用 Docker Compose?
👶:Docker Compose 提供了一鍵啟動整個應用的能力:

  • 簡化了多容器應用(如 Vue 前端、Flask 後端、Redis、MariaDB)的管理。
  • 支持開發與生產環境的統一配置,減少環境差異帶來的問題。
  • 容器化使部署更加輕量且高效。

系統設計與安全性

🧔:HTTP 和 HTTPS 的區別是什麼?
👶:HTTP 傳輸未加密的數據,容易被攔截。HTTPS 則使用 SSL/TLS 協議加密數據傳輸,並通過 CA(數位憑證機構)發放的證書驗證伺服器身份,確保數據的完整性與機密性。

🧔:什麼是 Stateless(無狀態)伺服器?
👶:無狀態伺服器不保存客戶端的請求狀態,每次請求都需要攜帶足夠的上下文信息。這使伺服器設計更簡單,易於擴展,但需要額外的機制(如 JWT 或 Cookie)來管理用戶會話。

🧔:你如何防範 XSS(跨站腳本攻擊)?
👶:通過輸入驗證和輸出編碼防範 XSS。例如,在處理用戶輸入時,過濾不安全字符;在返回數據時,將特殊字符轉換為 HTML 實體。此外,設置 CSP(內容安全策略)限制資源的加載來源,防止惡意腳本執行。