---
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 的 ?