# 2024 年「[資訊科技產業專案設計](https://hackmd.io/@sysprog/info2024/https%3A%2F%2Fhackmd.io%2F%40sysprog%2FH1-4KbanC)」作業 3 > 貢獻者:yumoo42 > [Resume](https://drive.google.com/file/d/15DM_SAF5b7Xl9Cg5GdKldsub4QZXEiik/view?usp=sharing) ## [Synology:Product Developer (網頁應用軟體開發)](https://career.synology.com/zh-tw/HQ/position/90) ### Job Description :::spoiler 職缺需求 You are expected to have: - Experience coding with JavaScript, and one or more programming languages, such as: Java, C/C++, Python, or Go - Excellent problem-solving, analytical, and troubleshooting skills - A genuine passion for developing high-performance and reliable systems - Excellent communication and interpersonal skills - Familiarity with Unix/Linux environments We're targeting candidates with: - Experience in web technologies, including object-oriented JavaScript, HTML5, and CSS3 - Experience with front end technologies and/or front end frameworks like React, Vue, or Angular - Experience with browser APIs and optimizing front end performance - Know-how of administrating web servers like Apache or Nginx - Experience in container-based solutions, such as Kubernetes, EKS, Docker, and ECS - Experience in integrating GitLab CI/CD ::: ### 自我評估 - 匹配能力 - 有網頁開發的經驗 - 程式語言(JavaScript、Python、C++) - Web 技術(HTML5、CSS3、JavaScript) - Git 版本控制經驗 - 需加強 - 前端框架(React/Vue/Angular) - 瀏覽器 API 和前端性能優化 - 容器技術(Kubernetes、Docker) - Web 伺服器管理經驗(Apache/Nginx 深入應用) - CI/CD 工具(GitLab CI/CD)的整合經驗 ### 面試參考資料: - [群暉 Product Developer|面試經驗分享)|面試經驗分享](https://www.1111.com.tw/1000w/fanshome/discussTopic.asp?cat=FANS&id=336258) - :::spoiler 詳細資料 - 第一關: 先考了OS基本題,process, thread, synchronize 白板題:LeetCode medium變形題 - 第二關: OOP基本題,OOP是什麼,override與overload 另外還考了計網概,TCP、UDP、DNS 白板題:LeetCode medium變形題 - 第三關: HR問了過去參與的計畫、在團隊中扮演的角色 - 第四關: 白板題:LeetCode hard變形題 + LeetCode medium變形題 ::: - [Synology 面試分享 2](https://www.dcard.tw/f/tech_job/p/253971186) - :::spoiler 詳細資料 - * Code Test - 1. String reverse,Follow-up 是 words reverse - 2. 確認二元樹是否平衡,Follow-up 是 Multi-thread 怎麼處理 race condition - * C++, OOP - 1. 解釋 Virtual function - 2. Static function - 3. 封裝、繼承、多形 - * OS - 1. Threads 是什麼 - 1-1. Threads 哪些是共享的 - 2. Process 溝通方式 - 2-1. 解釋 Message Passing - 2-2. Message Passing 常見實作方式 - 2-3. 解釋 Socket - * Javascript - 1. 解釋 Hoisting - 2. 解釋 Async, Await 以及跟 Promising 差異 - 3. 解釋 Event loop,跟他能夠 work 的原因與目的 - 4. 解釋 Block statement - 5. 解釋 Class 的繼承 - * Web APIs - 1. Local storage 的限制是什麼 - * CSS - 1. 解釋 Flexbox - 2. 說出 Position property,以及 priority - 3. Media-query 如何達到 RWD - * DOM - 1. preventDefault, stopPropagation 怎麼運作 - 1-1. 巢狀的 <div/> 被 click 誰會先被回傳 - 1-2. Event handler 第幾個 parameters 可以設定 eventPhase - * 瀏覽器 - 1. 瀏覽器 render 步驟 (含 DOM, CSSOM) - 2. 解釋 CORS - 2-1. 在 HTTP Request Header 什麼欄位認得 CORS - 3. HTTP Request Header 什麼欄位知道對方是移動端還是PC - 4. 瀏覽器收到 URL 做的所有動作 - 5. 解析 URL 並回覆給 Client 的流程 - * Networking - 1. 解釋 TCP & UDP - 2. 說出 TCP/IP 每個層數 - 3. L2 怎麼包裝 data - 4. Application layer 跟 transport layer 有哪些協定 - 5. 解釋 DNS 跟 DHCP - * 前端 - 1. React functional 跟 class component 差異 - 1-1. 說出 Class component life cycle 順序 - 2. 什麼是 Virtual DOM - 3. 解釋 Lazy loading,以及實作方法 - 4. Webpack 怎麼設定 bundle size - 5. Server-side 跟 client-side rendering 比較 - 5-1. Server-side rendering 優缺點 - * 其他 - 1. 解釋 Mergesort - 2. Docker 跟 VM 差異 - 3. 解釋直譯式語言 - 3-1. Python 跟 JS 會不會有 memory 吃太多問題 ::: - [新鮮人軟體工程師面試心得 - Garmin/群暉/LINE/華碩/玉山/台積等18間](https://medium.com/@funboy820/%E6%96%B0%E9%AE%AE%E4%BA%BA%E8%BB%9F%E9%AB%94%E5%B7%A5%E7%A8%8B%E5%B8%AB%E9%9D%A2%E8%A9%A6%E5%BF%83%E5%BE%97-garmin-%E7%BE%A4%E6%9A%89-line-%E8%8F%AF%E7%A2%A9-%E7%8E%89%E5%B1%B1-%E5%8F%B0%E7%A9%8D%E7%AD%8918%E9%96%93-4accc8ef7f3c) ## [Appier:Software Engineer, Backend Development (Graduate)](https://boards.greenhouse.io/appier/jobs/5255886) ### Job Description :::spoiler 職缺需求 [Minimum qualifications] - Fluently in any programming language.(prefer python) - Enthusiasm for learning and staying updated with emerging technologies. - Proactive, good interpersonal and problem-solving skills. - Understand what happens when you type a URL in the browser and press enter. - Familiar with git. [Preferred qualifications] - Experience with infrastructure-as-code tools (Terraform / Ansible) - Experience with any CNCF project. - Good understanding of any SQL/NoSQL database (Clickhouse / MongoDB / Redis / etc.) - Internships, projects, or personal coding experience are a plus. ::: ### 自我評估 - 匹配能力 - 有網頁開發的經驗 - 程式語言能力(Python) - 有 Git 和 NoSQL(MongoDB) 資料庫的經驗 - 需加強 - 基礎架構即程式碼工具(Terraform、Ansible)的使用經驗 - CNCF 專案的實際參與經驗 ### 面試參考資料: - [2021 軟體工程新鮮人面試心得(Appier/Umbo CV)|面試經驗分享](https://www.1111.com.tw/1000w/fanshome/discussTopic.asp?cat=FANS&id=345640) - :::spoiler 詳細資料 - 問題類型: - 過往經驗相關: - 學校 lab - 技術問題: - AWS 架構設計 - Go 語言中的 goroutine 原理及大量運行時可能遇到的問題 - 工程問題: - Data Engineering 的理解 - 導入 CI/CD 的經驗 - immutable infrastructure 應用 - integration test 和 end-to-end test 流程的經驗 - SLA 不達標時如何提升 - 多個 subteam 在 AWS 架構上做好隔離的做法 - 撰寫技術文件或新功能 proposal 的內容架構 - 情境題: - 技術選型與導入 - 跨職能或跨團隊溝通的經驗 - 如何快速學習一門從未接觸過的技術 - 在開發節奏緊湊的情況下如何維持程式碼品質 - 帶領他人學習專業技能的經驗 - 如何與他人協商採用方案 - 面對需求不斷調整的情況 - 專案時程管理 - 對同事與主管的期待 - 行為問題: - 過去工作中的角色定位 - 個人職涯與里程碑規劃 - 個人優缺點 - 與 mentor 或主管的互動 - 提問部分: - 領到了一道 system design 題目 - 問職涯建議與期望如何貢獻團隊 - 問為何加入 Appier,如何處理會議過多的情況 - code test ::: - [想進 Appier ?準備面試時,你一定要了解的公司背景|面試經驗分享](https://www.1111.com.tw/1000w/fanshome/discussTopic.asp?cat=FANS&id=348034) - [面試心得–Appier沛星互動科技](https://gocreating.lation.app/blog/interview/appier) ## [Google:Software Engineer, University Graduate, 2025](https://www.google.com/about/careers/applications/jobs/results/137721392706527942-software-engineer-university-graduate-2025) ### Job Description :::spoiler 職缺需求 Minimum qualifications: Bachelor's degree in Computer Science, related technical field, or equivalent practical experience. Experience in computer science, data structures, algorithms, and software design. Experience in Software Development and coding in a general purpose programming language. Preferred qualifications: Master's degree or PhD in Computer Science or a related technical field. Experience programming in C, C++, Java, or Python. Experience with Unix/Linux or Windows environments, distributed systems, machine learning, information retrieval, and TCP/IP. ::: ### 自我評估 - 匹配能力 - 有網頁開發的經驗 - 程式語言能力(Python、JavaScript) - 需加強 - 分散式系統實際操作經驗 - TCP/IP 協議相關知識 - Unix/Linux 環境的操作經驗 ### 面試參考資料: - [想成為Google工程師嗎? Google Software Engineer University Graduate 2022 |面試經驗分享](https://www.1111.com.tw/1000w/fanshome/discussTopic.asp?cat=FANS&id=335851) - [2022 Google Software Engineer New Grad 面試心得 | 面試經驗分享](https://www.1111.com.tw/1000w/fanshome/discussTopic.asp?cat=FANS&id=340350) - [Google Software Engineer University Graduate 2022 面試心得](https://www.technice.com.tw/work-place/mentor/12297/) ## 模擬面試 🧔:interviewer 👶:interviewee ### 1: Operating System 🧔:請你解釋 process 和 thread 的區別,並舉例說明它們在實際應用中的使用場景。 👶:Process 是操作系統分配資源的基本單位,每個 process 具有獨立的內存空間;而 thread 是 process 的執行單位,屬於同一 process 的 thread 共享內存和資源。例如,文字處理器可以是一個 process,而拼寫檢查和文件保存可以是該 process 的兩個 thread。 🧔:如果多個 thread 同時訪問共享資源,可能會遇到什麼問題?這個問題如何解決? 👶:當多個 thread 同時訪問共享資源時,可能會發生 race condition。為了解決這個問題,可以使用同步機制,例如: - Mutex:確保某一時刻只有一個 thread 可以訪問資源 參考資料: - [行程(Process)、執行緒(thread)傻傻分不清楚(中)-執行緒管理](https://ithelp.ithome.com.tw/articles/10297649) - [並行程式的潛在問題(一)](https://hackmd.io/@learnc/HkAWtWRfd) - [JavaScript中的Race Condition](https://hackmd.io/@emmmmmma/Sy5T6Otu6?utm_source=preview-mode&utm_medium=rec) ### 2: OOP 和 Design Patterns 🧔:什麼是 override 和 overload?請舉例說明它們的應用場景。 👶:Override 是子類對父類方法的重新定義,方法名稱需與父類一致;overload 是在同一類中方法名相同但參數不同的多個方法。 - Override:父類 Animal 有方法 speak(),子類 Dog 重寫該方法,使其返回 "Bark" ``` class Animal { public: virtual void speak() { cout << "Animal sound"; } }; class Dog : public Animal { public: void speak() override { cout << "Bark"; } }; ``` - Overload:在 class 中定義兩個 add 方法,一個接受兩個參數,一個接受三個參數 ``` int add(int a, int b) { return a + b; } int add(int a, int b, int c) { return a + b + c; } ``` 參考資料: - [Overload vs. Override](https://medium.com/@web_39620/overload-vs-override-36e588d36ded) ### 3: Networking 🧔:請你解釋 TCP 和 UDP 的主要區別,並舉例說明它們的典型應用場景。 👶:TCP 是面向連接的協議,提供可靠的數據傳輸(像是確認、重傳),適用於對可靠性要求高的場景,例如 HTTP、FTP。UDP 是無連接的協議,傳輸速度快但不保證可靠性,適用於實時性要求高的場景,像是視頻流媒體和線上遊戲。具體來說: - TCP:適用於電子郵件傳輸或文件下載(FTP) - UDP:適用於實時視頻通話 參考資料: - [TCP和UDP協定差在哪?](https://ithelp.ithome.com.tw/articles/10294859) ### 4: Code Test 🧔:請寫一個函數檢查二元樹是否平衡,並描述實現邏輯。接著說明多執行緒操作二元樹時如何避免 race condition。 👶:檢查二元樹是否平衡: ``` class Solution { public boolean res = true; public boolean isBalanced(TreeNode root) { maxdp(root); return res; } public int maxdp(TreeNode root) { if (root == null || !res) return 0; int l = maxdp(root.left); int r = maxdp(root.right); if (Math.abs(l-r) > 1) { res = false; return 0; } return Math.max(l, r) + 1; } } ``` 參考資料: - [[Day 21] 從LeetCode學演算法 - 0110. Balanced Binary Tree (Easy)](https://ithelp.ithome.com.tw/articles/10213283)