# 資訊科技產業專案設計課程作業 3
## 工作職缺
### [MEDIATEK firmware design engineer](https://careers.mediatek.com/eREC/JobSearch/JobDetail/MTK120240301000?returnUrl=%2FeREC%2FJobSearch%3FsortBy%3D%26order%3D%26page%3D1%26searchKey%3D%25E9%259F%258C%25E9%25AB%2594%26category%3D%26workExp%3D%26branch%3D%26program%3D)
:::spoiler
#### Job Description
* ESL methodology development and deployment, system level modeling and HW/SW system level bottleneck analysis
#### Requirement
1. RTL design experience
2. Chip level architecture design or System level C/C++/SC modeling experience is a plus
3. C/C++ programming is a plus
4. SystemC, TLM2.0 and ESL experience is a plus
5. SW based emualtor (ex: QEMU) or HW based emulator experience is a plus
6. RTOS or driver porting is a plus
:::danger
Experience More than 2 Years Work Expe.
:::
#### 自身分析
##### 優勢
* 熟悉作業系統的運作原理
* 使用過SW based emulator的經驗(gem5)
* 用verilog 和 chisel寫過CPU,對RTL有一定程度掌握
* 相對於我較缺乏的嵌入式系統開發經驗,沒那麼看重
##### 劣勢
* 對TLM不熟悉
* 沒有兩年以上工作經驗
##### 匹配度
:::spoiler
:::success
80%
:::
### [REALTEK SSD firmware engineer](https://recruit.realtek.com/Job/JobDetail?jobid=2097)
:::spoiler
#### Required Qualifications:
1. Strong interest in embedded systems and low-level firmware development
2. Proficiency in C or C++ programming
3. Understanding of data structures and algorithms
4. Basic knowledge of operating system fundamentals (e.g., memory management, interrupts, multi-threading)
#### Preferred Qualifications:
1. Experience with FPGA verification is a plus
2. Understanding of Flash Translation Layer (FTL) or storage I/O operation concepts
3. Familiarity with performance profiling and system optimization
4. Exposure to debugging tools (e.g., GDB, logic analyzers)
#### Additional Nice-to-Have Skills:
1. Experience from academic projects or internships in firmware or embedded systems
2. Basic understanding of storage protocols such as SATA, PCIe, or NVMe
3. Knowledge of NAND flash architecture and limitations
4. Strong analytical and problem-solving skills
5. Effective communication and teamwork abilities
:::
#### 自身分析
##### 優勢
* 熟悉作業系統的運作原理
* 熟悉C/C++
* 熟悉資料結構和演算法
* 了解儲存系統的架構以及FTL的功能
##### 劣勢
* 缺乏嵌入式系統和底層韌體的開發經驗
* 缺乏FPGA概念
* 對儲存系統的協定不了解
##### 匹配度
:::spoiler
:::warning
60%
:::
### [MEDIATEK Wlan / Wi-Fi Software / Firmware Engineer](https://careers.mediatek.com/eREC/JobSearch/JobDetail/MTK120241119001?returnUrl=%2FeREC%2FJobSearch%3FsortBy%3D%26order%3D%26page%3D2%26searchKey%3Dwifi%26category%3D%26workExp%3D%26branch%3D%26program%3D&langKey=en-US)
:::spoiler
#### Job Description
1. Design, develop and debug 802.11 WLAN /WiFi Driver/Firmware
2. Cross-layer architecture and interface definition between Connectivity Firmware/Driver/Android HAL
3. Develop and implement test plan to verify and debug implementation.
4. Performance/Power analysis, tuning on Wlan/WiFi Driver/Firmware
5. Designing and implementing new Wi-Fi features and specifications
6. Obtaining Wi-Fi Alliance certifications
7. Conducting cross-layer analysis, including Android framework, HAL, supplicant, kernel, Wi-Fi driver and firmware
8. Performing system-wide analysis of Wi-Fi performance and power efficiency
#### Requirement
1. MS/Ph.D in computer science/electronic engineer or a closely related field is preferred.
2. Bachelor’s degree with significantly more experience can be considered.
3. Strong C/C++ programming skills is a must.
4. Good experience with Android and Linux development on kernel, device drivers
5. Experience in embedded system software programming for more than 2 years
6. Substantial knowledge of UNIX/Linux programming environments is a plus.
7. Basic understanding with 802.11a/b/g/n/ac Wi-Fi standards is a plus.
8. Hands-on experience in delivering connectivity related software will be a plus, including Wi-Fi/BT/GPS/NFC
9. Experience in peripheral device driver, such as SPI/I2C/USB/SDIO driver development is a plus
10. Experience with Android, Linux kernel, device driver and firmware is a plus
11. Experience with Wi-Fi driver and protocol development is a plus
12. Experience with Wi-Fi Alliance certification is a plus
:::danger
Experience More than 2 Years Work Expe.
:::
#### 自身分析
##### 優勢
* 待在網路相關實驗室,對網路架構及協定了解
* 熟悉C/C++
##### 劣勢
* 缺乏embedding sytem、linux kernal 和 driver的實務開發經驗
* 目前只掌握基礎知識,網路與通訊上的實作能力不足
##### 匹配度
:::spoiler
:::danger
30%
:::
## 未來精進目標
* linux kernal
* embedding system (RTOS 、ARM、MCU、driver...)
* 增加side project內容
## resume
:::spoiler
[resume](https://drive.google.com/file/d/1TLNyCDed4qhJqtg_IBLePQsOf8HjQllF/view?usp=drive_link)
:::
## 模擬面試
### C bitwise operation
>給一個整數變數a,寫出兩段程式碼。第一個要設定a的bit3,第二個要清除a的bit3。在以上兩個操作中,要保持其它位不變。
```
#define BIT3(0x1<<3)
static int a;
void set_bit3(void){
a |= BIT3;
}
void clear_bit3(void){
a &= ~BIT3;
}
```
首先宣告一個名為a的整數,並分別定義set_bit3用來設定a的bit3,clear_bit3要清除a的bit3
第一段程式的目標是要設定第三個位元為1,所以我會先製作一個遮罩,透過將0x1左移3個位元,會得到0x100,並將其命名為BIT3,接著將a和BIT3進行or運算,因為BIT3除了第三個位元是1,其他位元皆為0,而0和任何所做or運算,值都不會變,所以能在其他位元保持不變的情況下修改第三個位元。
第二段需要清除a的第三個位元,清除的部分可以用任何數和0做and運算都會等於0,因此可以沿用剛才宣告的BIT3遮罩,並將其作not運算,結果為除了第三個位元是0外,其餘都是1,而任何數和1做and運算後,仍會等於自己,所以最後a和~(BIT3)做and運算,即可得到答案
### C 觀念題
>說明struct 與 union之差異
* struct 內可以包含不同資料型態的成員,所有成員是循序排列,而且擁有各自獨立的記憶體空間,占用記憶體大小是所有成員大小的總和
* union 和struct 一樣可以包含不同資料型態的成員,但所有成員共用起始位址,占用記憶體大小是由成員中最大的決定
### 作業系統觀念題
> process 和 thread的差別
process 是 OS 分配資源的單位,擁有獨立的記憶體空間,彼此互不干擾;而 thread 是 CPU 執行的單位,包含在 Process 內,換句話說,一個process 可以包含多個thread
記憶體使用上,process 之間完全不共享;但同一個 process 內的 thread 會共享 code、data 和file,不過為了讓thread能獨自運作,每個 thread 必須擁有自己獨立的 stack 和 register
這也直接影響了context Switch 的效能。切換 process 因為涉及 page table 和 TLB ,overhead較高;相對地,切換 thread 只需要保存與恢復暫存器,速度快非常多
因此可以把thread視作輕量化的process,在繼承執行能力的同時,最大程度的降低了overhead
## 參考資料
[發哥(聯發科)上機考題目整理](https://hackmd.io/@Rance/SkSJL_5gX)
[[分享]嵌入式經典面試題](https://dangerlover9403.pixnet.net/blog/post/212366916)
[聯發科面試準備心得- Lenka Chu](https://medium.com/@lenkachu1220/%E8%81%AF%E7%99%BC%E7%A7%91%E9%9D%A2%E8%A9%A6%E6%BA%96%E5%82%99%E5%BF%83%E5%BE%97-5a6dcb46ad4)
[軟韌體工程師面試常考之考古쌮My_Dream板](https://www.ptt.cc/bbs/NTUE-CS100/M.1300374249.A.C8F.html)
[瑞昱韌體面試分享- 科技業板](https://www.dcard.tw/f/tech_job/p/254929546)
[[面試]2025 學渣軟韌面試心得- 看板Tech_Job - 批踢踢實業坊](https://www.ptt.cc/bbs/Tech_Job/M.1745288241.A.A56.html)
[C 語言考古題](https://hackmd.io/@JJJJJJ/Sk4s24gIT)
[韌體工程師的0x10個問題](https://hackmd.io/@Chienyu/S1loEqCuo)
[韌體工程師面試及資源分](https://hackmd.io/@chihenliu/HkA0HmXhC)