---
title: 2022 年資訊科技產業專案設計課程面試
tags: INFO2022
---
# 2022 年「[資訊科技產業專案設計](https://hackmd.io/@sysprog/info2022)」 作業 3
> 學生: 達克魯 Duck
---
## JD
### 1. NVIDIA
#### [Embedded Software Engineer](https://nvidia.wd5.myworkdayjobs.com/zh-TW/NVIDIAExternalCareerSite/job/Taiwan-Taipei/Embedded-Software-Engineer_JR1962146?jobFamilyGroup=0c40f6bd1d8f10ae43ffaefd46dc7e78&timeType=5509c0b5959810ac0029943377d47364&locationHierarchy1=2fcb99c455831013ea52ed162d4932c0)
- 職缺介紹:
- Work directly in developing or integrating NVIDIA automotive or embedded software technology into various NVIDIA automotive or embedded platforms.
- Create and implement software features.
- Might work with customers to provide deep technical assistances.
- Assist customers to achieve fully optimized design with NVIDIA products.
- Provide partner feedbacks as to product features and software improvements.
- 職缺所需要的能力:
- Experience in relevant domain.
- Good English language skills to work effectively with global teams.
- Full experience at Linux, QNX or Android.
- Excellent C skills.
- Experience working on embedded systems and ARM processor specific.
### 2. 聯發科技
##### [嵌入式Linux軟體工程師/技術副理(新竹)](https://careers.mediatek.com/eREC/JobSearch/JobDetail/MTK120200724001?langKey=zh-TW)
- 職缺介紹:
- 撰寫或移植裝置驅動程式
- 撰寫硬體模組測試程式
- 進行硬體模組測試及驗証
- 分析系統問題
- 分析及改善系統功粍或效能
- 平台安全架構 (SMMU, Hypervisor, TEE)
- 職缺所需要的能力:
- 熟悉嵌入式 Linux 軟體開發
- 熟悉 ARM 架構及 RTOS
- 熟悉 C programming
- 具 Linux device driver 及 kernel 相關經驗
### 3. 群暉
#### [Product Developer (嵌入式系統軟體開發)](https://career.synology.com/zh-tw/HQ/position/8)
- 職缺介紹:
- Collaborate with both external and internal teams to bring-up and enable new hardware platforms.
- Analyze and solve challenging, often unique, problems.
- Develop and integrate Linux devices drivers.
- Identify performance bottlenecks and opportunities for optimization.
- 職缺所需要的能力:
- Good understanding of hardware/software interaction.
- Familiarity with C language.
- Familiarity with CPU architecture and assembly language.
- Familiarity with compiler/toolchain.
- Familiarity with PCIe, SATA, SAS, and NVMe interfaces.
- Experience in x86 BIOS development.
- Experience in ARM bare-metal programming, bootloader, or firmware.
- Experience in Linux device drivers.
- Experience in Linux process management and/or network stack manipulation.
---
## 自身評估
- 學歷
- 國立成功大學 資訊工程所 碩士(在學)
- 國立台北大學 資訊工程學系 學士
- 具備 相關經驗與能力:
- 熟練C語言
- 熟悉OS課堂基本知識,包括一些小型實作project:
- Little shell.
- Multi-thread programming.
- Kernel module programming.
- Simulate memory manager.
- 熟悉FreeRTOS基本知識,包括一些小型實作project:
- Rate-monotonic on FreeRTOS.
- Heap memory management的改動.
- Interrupt的應用(硬體sensor如何設定interrupt, 如何透過SPI/I2C存取硬體register值, 如何收到硬體發出的interrupt訊號以及ISR的對應。)
- Linux kernel開發
- 論文題目是有關 Linux kernel I/O stack 路徑的修改。
- 理解一個I/O request 在kernel執行的路徑。(e.g. 從read sys.call -(trap)-> VFS層 -(page cache miss)-> FS -(bio)-> block layer -(request)-> device driver -(command)-> SSD -(SSD DRAM cache miss)-> FTL -> flash storage)
- 培養trace source kernel code的能力。
- 架設測試環境、編譯以及安裝kernel。
- Debug的能力。
- 缺乏 相關經驗與能力:
- 不熟悉 ARM 架構
- 良好的英文溝通
- 缺乏 QNX or Android的開發經驗
- 不熟悉 compiler/toolchain
- 不熟悉 PCIe, SATA, SAS, and NVMe interfaces.
- 沒有 x86 BIOS development.
- 不熟悉 linux network stack manipulation.
---
## 模擬面試
🐷:interviewer 🦆:interviewee
>聯發科技 嵌入式Linux軟體工程師
🐷:同學你好,歡迎來到我們部門面試,請你先自我介紹一下。
🦆:好的,主管好,我是XXX,目前就讀於國立成功大學資訊工程所二年級,實驗室主要研究領域為嵌入式作業系統,所以我對linux的開發 和 FreeRTOS 都有一定的理解和掌握。目前的研究主題也是有關linux kernel I/O stack 上的開發,那在找職缺的時候,有看到貴部門是和我研究的專業高度相關,所以希望能在這邊找到工作機會。
🐷:喔~那你應該對OS和C語言很熟悉吧? 那接下來會分別問你幾個問題,首先是程式題目,希望你用C語言實作出來!
那題目是:
```clike=
unsigned long v1 = 0x 00001111;
unsigned long v2 = 0x 00001202;
unsigned long v;
v = v1&(~v2);
v = v | v2;
the value of v?
```
🦆:好的,這題是有關bitwise operation的題目。
以下是我的作法:
```clike=
~v2: 也就是v2做not = 1111 1111 1111 1111 1110 1101 1111 1101
v & (~v2) : v再和剛剛的結果做and = 0000 0000 0000 0000 0000 0001 0001 0001
v | v2 : v2再和上一個結果做or = 0x 00001313
```
所以答案會是 0x 00001313.
🐷:非常好,那接下來會是有關OS觀念的問題,
請說明甚麼是critical section?
🦆:好,那說到critical section,這其實是一種解決race condition的方法,而race condition就是一個著名會導致資料錯誤的問題,發生在shared memory的場景上面,如果某兩個process是透過shared memory來溝通。如果兩個process都想對某變數去存取的話,就有機會發生資料錯誤。
而critical section就是指程式中去存取共享變數的片段,
critical section之上的地方就叫做entry section,離開的地方叫做exit section。而我們programmer就可以對entry和exit section去做一些控制來達到一次只會有一個process進入critical section的效果。
而一般hardware能提供C.S的方法都會是 compare-and-swap 或是 test_and_set。
🐷:很好,解釋得不錯,那最後這邊問一下兵役問題,請問你當兵了嗎?
🦆:兵役的部分還沒服完,如果可以的話希望能簽研發替代役。
🐷:了解,那這部分的需要,我會幫你向公司內部申請看看,那面試就差不多到這邊,感謝同學的參與!
🦆:謝謝面試官
---
## 作業3 檢討
- 應該要練習到自我介紹那塊,也是面試的重點。
- bahavior question也該準備,這也是我還沒去理解的問題。
- 應該要明確點出缺乏的項目,未來該如何加強。