# 資訊科技產業專案設計課程作業 4
## [Software Engineer, Chrome OS Kernel](https://careers.google.com/jobs/results/125197406972060358-software-engineer-chrome-os-kernel/?distance=50&q=chrome%20OS)
### 職位說明
- Merge upstream features and fixes into Chrome OS kernel branches as well as work with upstream open source projects to upstream Chrome OS developed code
- Track kernel stability across devices and releases, and improve tooling to do so
- Develop new features in various areas of the kernel
- Partner with other teams in their use of specific kernel features, (e.g. tool development for said features)
- Find and fix bugs in the kernel related to Chrome OS platforms and features
### 職位需求
- Experience in C/C++ programming.
- Experience in the field of computer science, with experience in data structures, algorithms and software design.
- Experience working with open source projects
- Experience in debugging and instrumenting complex problems, involving multiple operating system components and tools
### 個人能力分析
- 有投入開源的作業系統專案經驗
- 曾參與開發嵌入式系統
- 熟悉 Armv8 架構開機設定流程
- 會調整 Linux Kernel 組態與整合 upstream 修補
### 面試題目
## [Embedded Software engineer](https://careers.mediatek.com/eREC/JobSearch/JobDetail/MTK120170503001?langKey=en-US)
### 職位說明
- Port the latest Linux Kernel to MediaTek ARM based SOC.
- Optimize the Linux Kernel for maximum performance.
- Upstream MediaTek drivers to Linux
### 職位需求
- At least 4 years of experience with embedded Linux software development.
- Knowledge and experience with Linux kernel.
- Strong programming skills in C.
- Experience with multi-processors programming.
- Experience with Android application framework.
### 個人能力分析
- 有投入開源的作業系統專案經驗,並移植到嵌入式硬體執行
- 熟悉 Armv8 架構開機設定流程,但還不了 device tree 的編寫、使用方式
- 有追蹤過部分的 Linux 核心程式碼,但是沒有 upstream 的經驗
### 面試題目
- **Process 及 Thread 的差別跟比較**
共享資源的程度不同,在 Linux 核心當中, process 與 thread 都使用 `task_struct` 來建立,但 thread 會共享同一個 address space 而 process 之間則是獨立的 address space
- **如何避免 Race Condition**
可以使用 semaphore 或 mutex 等作業系統所提供的同步工具來保護共享資源的存取與使用。在 `csv2json` 這個專案中,我就使用到 semaphore 來保護所有 thread 共享的 working queue,當有新的任務進到 working queue 時,酒會使用 conditional veriable 喚醒執行緒執行任務。
###### tags: `info2021`