--- 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也該準備,這也是我還沒去理解的問題。 - 應該要明確點出缺乏的項目,未來該如何加強。