# 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)