Resume
相關工作職缺項目
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.
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.
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 的設計與整合,並有豐富的項目實作經驗。
- 熟悉後端測試自動化流程,對 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 開發,結合安卓投影與通知功能,展示了全棧開發能力。
技能差距與改進計劃
技術不足
-
學術背景:
- 大學成績不突出,且畢業於私立非本科,未能系統性地學習計算機相關知識。
- 缺乏一線企業的相關實習與工作經驗。
-
開發經驗不足:
- 雖有全端專案開發經驗,但那只是自己私下做的練習,商業化產品的實戰經驗有限。
- 前端技術對其他框架(如 Angular,React)熟練度相對不足。
-
軟技能與英文表達:
- 英文技術文檔的理解尚可,但對技術細節的英文表達和面試答題能力仍需提升。
行動計劃
- 建立並展示更多大型專案,如構建一個完整的 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(內容安全策略)限制資源的加載來源,防止惡意腳本執行。