0%

[2022Intern] 聯發科 5G 軟韌體面試前相關問題整理和心得

我在 2022 年的四月份投了 MTK 暑期實習,這篇文章會整理關於 MTK 5G 暑期實習可能會問到的問題,除了針對履歷還會有 O.S 的基本概念(但我在面試時沒有被問到專業知識,不過還是整理部分題目上來),並且要做簡報來介紹,最後會有我對整個面試的心得。

D: 4/1 官網投遞履歷
[D+7] 填寫面試時間
[D+12] 面試
[D+19] HR 口頭 offer
[D+26] offer letter

請勿轉載,都是我的心血 :q

面試前準備

  • 事前測驗(線上,面試前一天完成)
    • C coding test
    • TOEIC 英文測驗
    • 華德士個人風格評量
  • 更新線上資料,履歷、成績單和自我評核的部分
  • 自我介紹簡報 (做大概 20 頁左右)

投影片內容

大概 20 頁左右

  1. 專案介紹
  2. 修課介紹
  3. 遇到的困難與挑戰,以及如何解決

5G 行動通訊軟韌體開發

官網介紹的內容

這個部門在做甚麼?

  • 對行動通訊、無線及寛頻連結、家庭娛樂晶片解決方案有濃厚興趣
  • 勇於表達意見,以團隊成功為目標,面對困難不輕易放棄,總是在想更好的做法,擁有創新及不斷學習的精神
  • 聯發科技邀請您,與全球最頂尖的菁英一同合作,彼此激盪最新的創意與解法,共同挑戰每一個不可能

    對於行動通訊產業有濃厚興趣
    熟悉通訊原理、數位訊號處理、電腦網路、計算機組織、作業系統

面試問題

網路上查是會問 C 語言 和 OS 等知識,下面整理幾個有查到的問題。

O.S

  • process + thread、mutex + semaphore、scheduling、virtaul memory、TLB miss / cache miss / page fault、memory management
  • OS相關基本題: Interrupt、Process & Thread、Multi-thread、Mutex&Semaphore、Spin lock、Sync相關各類問題、volatile、Pipeline
  • 印象比較深的一題是談到shared memory會有race condition的問題 我解釋完race condition如何解決後,主管分享他的畫面 給我看一段sample code(兩個function都對同一個變數(a)++) 問我這樣會不會有race condition的問題? 我答:要看這兩個function會不會concurrent的執行,還有++是不是atomic的操作 主管問:如果a++要設計成atomic,用assembly要怎麼寫 這邊我只答得出來a++的assembly,主管跟我解釋後就繼續問其他的東西
  • 主管們會穿插問一些專業知識,像是OS、計算機組織、資料結構和網路的問題,像是我提到用UDP模擬TCP運作機制,就被其中一位主管問到three-way hand shake和four-way hand shake的問題,最常被問到的就是OS的問題,尤其是interupt、multithread、race condition、mutex/semaphore、virtual memory等等最常問,另外就是一些專有名詞和機制,像是DMA、ISO網路7層、short-term scheduling、cache等等的概念,有些名詞真的是聽都沒聽過,主管又特別喜歡問你當某個現象發生要怎麼handle或是在甚麼情況下才會應用到這種機制。
  1. Process vs. Thread
    Ans:
    Process 是已經在執行的 program,每個 process 是互相獨立的,不是基本執行單位,而是 thread 的容器,一個 process 下會有多個 thread,共享資源、參數,而在 multithreading 中可能會發生 race condition,可能會產生死結。

  2. Process 如何通訊
    Ans:
    兩大方法利用 shared memory 和 message passing,shared memory 透過共享記憶體宣告參數進行存取達到溝通的目的,速度快,但不適用於分散式系統,message passing 建立通訊鏈結,訊息可以雙向傳輸,結束後釋放 Link。

  3. 什麼是 Race condition
    Ans:
    在 shared memory 中,利用共享記憶體來共享參數進行存取,如果 process 之間執行順序不同會使資料不一致。
    利用兩大策略 Disable Interrupt 和 Critical Section 來解決,前者是當 process 對共享參數存取前,先 disable interrupt(防止 CPU 被搶走),直到完成後才 enable interrupt,也稱為 automically execution,在 multiprocessor 系統中效能太差。後者是對 process 中存取共享參數的指令集合,process 中可以有多個 critical section,需滿足 mutual exclusion、progress 和 bounded waiting,首先最多只允許一個 process 在 c.s. 執行,第二個不想執行的 process 不能影響其他 process 執行,最後是若有 n 個 process 要進入 critical section,則任一 process 頂多等 n-1 次,不能有 starvation。
    [解決方法一]

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // pi
    while(true){
    while(turn != i);
    c.s.
    turn = j; // turn 給j
    r.s.
    }
    // pj
    while(true){
    while(turn != j);
    c.s.
    turn = i;
    r.s.
    })

    [問題一]
    當 pi 不想進入c.s. 時,會影響 pj 不能執行,故違反 progress。
    [解決方法二]

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    // pi
    while(true){
    flag[i] = true;
    while(flag[j]);
    c.s.
    flag[i] = false;
    r.s.
    }
    // pj
    while(true){
    flag[j] = true;
    while(flag[i]);
    c.s.
    flag[j] = false;
    r.s.
    }

    [問題二]
    會形成死結,違反 progress。
    [解決方法三]

    1
    2
    3
    4
    5
    6
    7
    8
    9
    // pi
    while(true){
    flag[i] = true;
    turn = j;
    while(flag[j] and turn == j);
    c.s.
    flag[i] = False;
    r.s.
    }
  4. 什麼是 semaphore(號誌)
    Ans:
    用來解決 critical section design 和同步問題的資料型態,由 OS 提供的一種軟體工具,提供兩個 atomic operations: wait(s) 和 signal(s)。

  5. binding 的過程
    Ans:
    決定 process 執行的 memory 起始位址,可能是在 compile 或 link 時,為靜態 binding,也可以在執行時動態 binding
    原始程式 –> compiler –> object code –> linking loader –> executable object code

  6. Long term scheduler
    Ans:
    又稱 Job scheduler,用在 Batch System 中,從 Job Queue 中挑選一些合適的 jobs,將他們載入到 memory。可調控 CPU-bound 和 I/O bound 比例。

  7. Short term scheduler
    Ans:
    又稱 CPU scheduler,目的是從 ready queue 中挑出一個 process 並分配 CPU 給他執行。

  8. Meium term scheduler
    Ans:
    當 memory space 不足又有其他 process 需要記憶體空間時會執行。先將一些 process swap-out 到 disk,當記憶體有空間時再 swap-in。

  9. Context Switch
    Ans:
    CPU 要從執行的 process 切到另一個 process 執行時,要先執行 context switch。保存目前 process 狀態資訊,並載入另一 process 的狀態資訊。

  10. Dispatch
    Ans:
    是 kernel 的一個模組,當 CPU scheduler 選出一個 process 後,dispatcher 會執行 context switch、change kernel mode 到 user mode 和 跳到執行的 entry。

  11. 評估 CPU 排班效率
    Ans:
    CPU 利用率、Throughput 產能、waiting time、turnaround time 以及 response time。

  12. Stack vs. Heap

  13. Synchronous call vs. Asynchronous call

  14. Stack vs. Queue

  15. O.S

  16. Virtual Function

  17. Data hazard

  18. pipeline 設計的好處

C

  • C\C++: Overloading、Virtual Function、Function Pointer、各種不同scope的Static用法、Stack/heap/.bss架構
  • 演算法: 特別需要熟悉複習的有 Sorting、Linked list各種implementation (e.g. reverse)、Stack&heap的實現

自由發問

  1. 向主管問關於他們部門的工作內容,挑比較細項的部分深入了解。
  2. 考試的內容會不會佔評分很大的比重?
    Ans:
    主管是說有的主管是不在意考試分數的,大多是做個參考,但還是希望對寫程式有興趣。
  3. 多久後會收到通知或確定自己有沒有被選上?
    Ans:
    大部分是2個禮拜左右才會通知二面,通常是一級單位會進行二面,會直接請老大出來面談,也有些主管直接一面就選人了。
  4. 實習生的工作內容、計劃
    Ans:
    主管是說按照不同實習生的能力和擅長的語言會有不同的計畫會做。
  5. 之後有幸可以實習後,若是遇到實驗室要meeting公司會怎麼安排?
    Ans:
    公司原則上是一週五天,但是研究生要 meeting 是很正常的事,公司通常會給實習生請半天~一天的假回學校meeting。
  6. 正職是否需要加班?
    Ans:
    一般來說不會,幾乎沒有。

面試結果

流程

在 Teams 上視訊面試,總時長約 1hr40min 左右,著裝我是穿襯衫而已,主要是要看起來很正式,並給予好印象。

面試心得

原本很擔心如果要到現場面試會很緊張,因為這是我第二次面試,不過好險是視訊面試,比較不會太緊張,所以表現應該還算正常,主要是把我投影片上的每個內容每個專案都研究的十分透澈,所以在履歷上的東西必須十分了解,程式碼寫了什麼都必須非常清楚。

個人認為必須要有投影片,才能按照自己的步調來介紹自己,避免沒東西跟主管聊而減少他對你的興趣,不過如果是學霸學歷或是口條很好,就當我沒說囉~

實習內容

我的部門是 CSD/MSP

參考