[Resume](https://drive.google.com/file/d/1zVzMkDMEpKwfgShlvggODzkGTUowNZhj/view?usp=sharing) --- ## 相關工作職缺項目 ### [Google Backend Software Engineer, Insights, Benchmarks, and Narratives](https://www.google.com/about/careers/applications/jobs/results/76907518390870726-backend-software-engineer-insights-benchmarks-and-narratives?distance=50&location=Warsaw&q=Backend%20Software%20Engineer%2C%20Insights%2C%20Benchmarks%2C%20and%20Narratives) > :::spoiler **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](https://www.google.com/about/careers/applications/jobs/results/93161234920022726-software-engineer-iii-frontend-migration-services?distance=50&location=Warsaw&q=Software%20Engineer%20III%2C%20Frontend%2C%20Migration%20Services) :::spoiler **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](https://www.google.com/about/careers/applications/jobs/results/75400127274984134-software-engineer-release-infra-project-starline?distance=50&location=Mountain%20View&q=Release%20Infra%2C%20Project%20Starline) :::spoiler **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(內容安全策略)限制資源的加載來源,防止惡意腳本執行。