我在 2022 年的四月份投了 MTK 暑期實習,這篇文章會整理關於 MTK 5G 暑期實習可能會問到的問題,除了針對履歷還會有 O.S 的基本概念(但我在面試時沒有被問到專業知識,不過還是整理部分題目上來),並且要做簡報來介紹,最後會有我對整個面試的心得。
- 公司: MTK
- 職缺: 2022暑期實習_軟韌體開發_5G 行動通訊
- 職位: 暑期實習
- 部門: 不方便透漏
- 地點: Teams 視訊面談
D: 4/1 官網投遞履歷
[D+7] 填寫面試時間
[D+12] 面試
[D+19] HR 口頭 offer
[D+26] offer letter
請勿轉載,都是我的心血 :q
面試前準備
- 事前測驗(線上,面試前一天完成)
- C coding test
- TOEIC 英文測驗
- 華德士個人風格評量
- 更新線上資料,履歷、成績單和自我評核的部分
- 自我介紹簡報 (做大概 20 頁左右)
投影片內容
大概 20 頁左右
- 專案介紹
- 修課介紹
- 遇到的困難與挑戰,以及如何解決
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或是在甚麼情況下才會應用到這種機制。
Process vs. Thread
Ans:
Process 是已經在執行的 program,每個 process 是互相獨立的,不是基本執行單位,而是 thread 的容器,一個 process 下會有多個 thread,共享資源、參數,而在 multithreading 中可能會發生 race condition,可能會產生死結。Process 如何通訊
Ans:
兩大方法利用 shared memory 和 message passing,shared memory 透過共享記憶體宣告參數進行存取達到溝通的目的,速度快,但不適用於分散式系統,message passing 建立通訊鏈結,訊息可以雙向傳輸,結束後釋放 Link。什麼是 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.
}什麼是 semaphore(號誌)
Ans:
用來解決 critical section design 和同步問題的資料型態,由 OS 提供的一種軟體工具,提供兩個 atomic operations: wait(s) 和 signal(s)。binding 的過程
Ans:
決定 process 執行的 memory 起始位址,可能是在 compile 或 link 時,為靜態 binding,也可以在執行時動態 binding
原始程式 –> compiler –> object code –> linking loader –> executable object codeLong term scheduler
Ans:
又稱 Job scheduler,用在 Batch System 中,從 Job Queue 中挑選一些合適的 jobs,將他們載入到 memory。可調控 CPU-bound 和 I/O bound 比例。Short term scheduler
Ans:
又稱 CPU scheduler,目的是從 ready queue 中挑出一個 process 並分配 CPU 給他執行。Meium term scheduler
Ans:
當 memory space 不足又有其他 process 需要記憶體空間時會執行。先將一些 process swap-out 到 disk,當記憶體有空間時再 swap-in。Context Switch
Ans:
CPU 要從執行的 process 切到另一個 process 執行時,要先執行 context switch。保存目前 process 狀態資訊,並載入另一 process 的狀態資訊。Dispatch
Ans:
是 kernel 的一個模組,當 CPU scheduler 選出一個 process 後,dispatcher 會執行 context switch、change kernel mode 到 user mode 和 跳到執行的 entry。評估 CPU 排班效率
Ans:
CPU 利用率、Throughput 產能、waiting time、turnaround time 以及 response time。Stack vs. Heap
Synchronous call vs. Asynchronous call
Stack vs. Queue
O.S
Virtual Function
Data hazard
pipeline 設計的好處
C
- C\C++: Overloading、Virtual Function、Function Pointer、各種不同scope的Static用法、Stack/heap/.bss架構
- 演算法: 特別需要熟悉複習的有 Sorting、Linked list各種implementation (e.g. reverse)、Stack&heap的實現
自由發問
- 向主管問關於他們部門的工作內容,挑比較細項的部分深入了解。
- 考試的內容會不會佔評分很大的比重?
Ans:
主管是說有的主管是不在意考試分數的,大多是做個參考,但還是希望對寫程式有興趣。 - 多久後會收到通知或確定自己有沒有被選上?
Ans:
大部分是2個禮拜左右才會通知二面,通常是一級單位會進行二面,會直接請老大出來面談,也有些主管直接一面就選人了。 - 實習生的工作內容、計劃
Ans:
主管是說按照不同實習生的能力和擅長的語言會有不同的計畫會做。 - 之後有幸可以實習後,若是遇到實驗室要meeting公司會怎麼安排?
Ans:
公司原則上是一週五天,但是研究生要 meeting 是很正常的事,公司通常會給實習生請半天~一天的假回學校meeting。 - 正職是否需要加班?
Ans:
一般來說不會,幾乎沒有。
面試結果
流程
在 Teams 上視訊面試,總時長約 1hr40min 左右,著裝我是穿襯衫而已,主要是要看起來很正式,並給予好印象。
面試心得
原本很擔心如果要到現場面試會很緊張,因為這是我第二次面試,不過好險是視訊面試,比較不會太緊張,所以表現應該還算正常,主要是把我投影片上的每個內容每個專案都研究的十分透澈,所以在履歷上的東西必須十分了解,程式碼寫了什麼都必須非常清楚。
個人認為必須要有投影片,才能按照自己的步調來介紹自己,避免沒東西跟主管聊而減少他對你的興趣,不過如果是學霸學歷或是口條很好,就當我沒說囉~
實習內容
我的部門是 CSD/MSP