--- tags: interview --- # 面試經驗 ## 個人資料 大學: 國立中央大學機械工程學系 碩士: 國立成功大學機械工程學系 ## 2022聯發科暑期實習 ### 流程 面試職位: [軟韌體開發_Embedded System software (新竹)](https://careers.mediatek.com/eREC/JobSearch/JobDetail/MTK120220225024?langKey=zh-TW) 很感謝學長內推,也順利拿到限定推薦 ``` D 學長收到履歷 D+1 填寫限定推薦,收到面試時間填寫 D+2 確認面試時間 D+9 面試 D+14 offer get ``` ### C 語言測驗 憑記憶把印象深刻的題目補上去,一共有16題 (7 選擇 + 7 填充 + 2 程式) ,好像是考 50 分鐘(最後檢查到一半突然交出去) #### 選擇題 1. 問輸出 (印象薄弱但大概意思有到) ```c #include <stdio.h> #include <string.h> void foo(int B[][3]) { B[2][1] = 1; } int main(void) { int A[3][3] = { {1,2,3}, {4,5,6}, {7,8,9}}; foo(A); printf("%d", A[2][1]); return 0; } ``` 2. 問編譯會不會過 ```c #include <stdio.h> #define SWAP(a,b,c) (c t; t = a, a = b, b = t) int main(void) { int x = 10, y = 20; SWAP(x, y, int); printf("%d %d\n", x, y); return 0; } ``` 3. 問 `a2` 地址可能為何 (memory layout) ```c #include <stdio.h> static int a1 = 0; // 假設地址為 0x6xxxxxx int a2; // 地址? int main(void) { static int a3 = 0; // 假設地址為 0x6xxxxxx int a4; // 假設地址為 0x4xxxxxxx printf("%p", &a2); return 0; } ``` A. 0x8xxxxxx B. 0x6xxxxxx (a1 地址 + 4) C. 0x4xxxxxxx D. 0x6xxxxxx (a3 地址 + 4) 4. 問 static 變數/函式在函式內外還有模組內外的敘述(敘述有點長忘ㄌQQ) 5. 問下述程式碼行為 ```c #include <stdio.h> int foo(int x, int n) { int val = 1; while (n) { if(n%2 == 1) val = val * x; val = val * foo(x*x, n/2); n /= val; } return val; } ``` A. pow(n, x) B. 都不是 C. x * n D. pow(x, n) 6. 問輸出 (這題超怪,題目的確類似長這樣QQ) ```c #include <stdio.h> int main(void) { int arr[5] = {8, 4, 0, 1, 2}; int *ptr, index; for (index = 0, ptr = arr; index < 2; index++, ptr++) { printf("%d %d ", arr52, *ptr); } (*ptr)++; printf("%d %d ", arr52, *ptr); return 0; } ``` 7. 問輸出 ```c #include <stdio.h> void foo(char *str) { int index = 0; while (*str++) { index++; } printf("%d", index); } int main(void) { foo("I am a FW"); return 0; } ``` #### 填充題 1. 問輸出 ```c int main(void) { char src[] = "Hello world!"; char dst[20]; strncpy(dst, src, sizeof(dst)); printf("%ld\n", strlen(dst)); memcpy(dst, src, 5); printf("%ld\n", strlen(dst)); strncpy(dst, src, 5); printf("%ld\n", strlen(dst)); return 0; } ``` 2. 重新寫函式指標 ```c 原本 void(*(*papf)[3])(char *); 後來 typedef__________; pf(*papf)[3]; ``` 3. 問輸出 ```c #include <stdio.h> #define ADD(a,b) a+b int main(void) { int p = ADD(3, 4) * 5; printf("p = %d", p); return 0; } ``` 4. 問輸出 ```cpp #include <stdio.h> void foo(int *a, int& b, int c) { c = *a; b = 3; *a = 2; } int main(void) { int a = 1, b = 1, c = 3; foo(&a, b, c); printf("%d\t%d\t%d\n", a, b, c); return 0; } ``` 5. 問輸出 ```c #include <stdio.h> int main(void) { int i = 10, j = 0; while(i-- != 0) { j++; } printf("%d", j); return 0; } ``` 6. 問輸出 ```c #include <stdio.h> int main(void) { int A = 26; if(A & 0xF > 0x8) printf("MORE %d", A & 0xF); else printf("LESS %d", A & 0xF); return 0; } ``` #### 程式題 1. 輸入 n 印出 n 層的直角三角形 ``` Input: n = 3 Output: * *** ***** ``` 2. 不使用運算子 `sizeof()` 算出結構大小 (自己是用 `__alignof` 乘上結構成員數量 (雖然過了但感覺不是很對XD)) ```c struct ABC { int a; float b; char c; }; ``` ### 英文測驗 一共 60 分鐘,分成聽力跟閱讀各 50 題,聽力口音很重聽不太懂... ,閱讀我覺得文章不會很困難,單字題反而比較難,很多沒看過的字 ### 面試過程 兩個主管,表定 2 小時,最後面了 1 小時 50 分 先自我介紹,會針對 PPT 問問題,最後是主管介紹部門,過程中都可以問問題 :) #### 一些常見問題 1. 你可以簡介一下什麼是 DMA 2. 我稍微看了你的 Github ,發現你有些程式是直接蓋掉的,想問你為什麼不想把原本的程式碼保留 ? (我自己爛那時候不太會用 github XD) 3. 請問你可以接受的工時大概是多少 ? 4. 如果來實習,大概可以來幾天 ? 5. 平常去實驗室的時數大概多少 ? 6. 實驗室以外的時間大部分都在做什麼 ? 7. 碩論的研究方向大概是什麼 ? 8. 有沒有參加過什麼社團,或是擔任領導的經歷 ? 9. 擔任幹部的期間有沒有遇過什麼困難 ? 10. 有用過示波器嗎,什麼課程使用 ? 11. 有使用過 FPGA 嗎 ? #### [biRISC-V](https://github.com/Risheng1128/biriscv) 1. 闡述為什麼這個 CPU 會產生 dual-issue ? 2. 根據你產生 dual-issue 的條件,為什麼這樣不會導致 race condition ? 3. 說明一下這個 CPU 的 branch prediction 為何 ? 4. 你在做這個專題的時候,是怎麼跟隊友溝通的 ? #### [fibdrv](https://github.com/Risheng1128/fibdrv) 1. 量測的結果有一些的突刺,你認為這是什麼原因 ? (我回答可能是 page fault 或是 cache miss) 2. 那你覺得 page fault 和 cache miss 哪個比較可能才是對的 ? #### [ARM](https://github.com/Risheng1128/CM4-FreeRTOS) 1. 根據 FreeRTOS 的 context switch 原始碼,這邊的 `isb` 指令是做什麼的 ? (跟 memory barrier 有關) 2. 你知道 thumb 嗎 ? 4. ARM cortex-M 是怎麼控制 thumb ? 5. ARM 跟 thumb 指令集有什麼差別 ? 6. 既然你提到 AAPCS ,能否說明一下 AAPCS 的主要流程 ? 7. 你知道 trusted zone 是什麼嗎 ? (M 系列 ARMv8 後才有的樣子) 8. 有用過 A 系列嗎 ? #### [kecho](https://github.com/Risheng1128/kecho) 1. 稍微解釋為什麼 kernel space 比 user space 還速度還快 ? 2. 可以說明一下 CMWQ 是什麼嗎 ? 3. 為什麼使用 CMWQ 可以增加效能 ? 4. CMWQ 是怎麼去管理 CPU 的 ?