Try  HackMD Logo HackMD

2022 年「資訊科技產業專案設計」 作業 3

學生: 達克魯 Duck


JD

1. NVIDIA

Embedded Software Engineer

  • 職缺介紹:
    • 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軟體工程師/技術副理(新竹)
  • 職缺介紹:

    • 撰寫或移植裝置驅動程式
    • 撰寫硬體模組測試程式
    • 進行硬體模組測試及驗証
    • 分析系統問題
    • 分析及改善系統功粍或效能
    • 平台安全架構 (SMMU, Hypervisor, TEE)
  • 職缺所需要的能力:

    • 熟悉嵌入式 Linux 軟體開發
    • 熟悉 ARM 架構及 RTOS
    • 熟悉 C programming
    • 具 Linux device driver 及 kernel 相關經驗

3. 群暉

Product Developer (嵌入式系統軟體開發)

  • 職缺介紹:

    • 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語言實作出來!

那題目是:

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的題目。
以下是我的作法:

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