面試經驗

個人資料

大學: 國立中央大學機械工程學系
碩士: 國立成功大學機械工程學系

2022聯發科暑期實習

流程

面試職位: 軟韌體開發_Embedded System software (新竹)

很感謝學長內推,也順利拿到限定推薦

D     學長收到履歷
D+1   填寫限定推薦,收到面試時間填寫
D+2   確認面試時間
D+9   面試
D+14  offer get

C 語言測驗

憑記憶把印象深刻的題目補上去,一共有16題 (7 選擇 + 7 填充 + 2 程式) ,好像是考 50 分鐘(最後檢查到一半突然交出去)

選擇題

  1. 問輸出 (印象薄弱但大概意思有到)
#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;
}
  1. 問編譯會不會過
#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;
}
  1. a2 地址可能為何 (memory layout)
#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)

  1. 問 static 變數/函式在函式內外還有模組內外的敘述(敘述有點長忘ㄌQQ)

  2. 問下述程式碼行為

#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)

  1. 問輸出 (這題超怪,題目的確類似長這樣QQ)
#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;
}
  1. 問輸出
#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. 問輸出
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;
}
  1. 重新寫函式指標
原本
void(*(*papf)[3])(char *);

後來
typedef__________;
pf(*papf)[3];
  1. 問輸出
#include <stdio.h>
#define ADD(a,b) a+b

int main(void) {
	int p = ADD(3, 4) * 5;
	printf("p = %d", p);
	return 0;
}
  1. 問輸出
#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;
}
  1. 問輸出
#include <stdio.h>

int main(void) 
{
    int i = 10, j = 0;
    while(i-- != 0) {
        j++;
    }
    printf("%d", j);
    return 0;
}
  1. 問輸出
#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:
*
***
*****
  1. 不使用運算子 sizeof() 算出結構大小 (自己是用 __alignof 乘上結構成員數量 (雖然過了但感覺不是很對XD))
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

  1. 闡述為什麼這個 CPU 會產生 dual-issue ?
  2. 根據你產生 dual-issue 的條件,為什麼這樣不會導致 race condition ?
  3. 說明一下這個 CPU 的 branch prediction 為何 ?
  4. 你在做這個專題的時候,是怎麼跟隊友溝通的 ?

fibdrv

  1. 量測的結果有一些的突刺,你認為這是什麼原因 ? (我回答可能是 page fault 或是 cache miss)
  2. 那你覺得 page fault 和 cache miss 哪個比較可能才是對的 ?

ARM

  1. 根據 FreeRTOS 的 context switch 原始碼,這邊的 isb 指令是做什麼的 ? (跟 memory barrier 有關)
  2. 你知道 thumb 嗎 ?
  3. ARM cortex-M 是怎麼控制 thumb ?
  4. ARM 跟 thumb 指令集有什麼差別 ?
  5. 既然你提到 AAPCS ,能否說明一下 AAPCS 的主要流程 ?
  6. 你知道 trusted zone 是什麼嗎 ? (M 系列 ARMv8 後才有的樣子)
  7. 有用過 A 系列嗎 ?

kecho

  1. 稍微解釋為什麼 kernel space 比 user space 還速度還快 ?
  2. 可以說明一下 CMWQ 是什麼嗎 ?
  3. 為什麼使用 CMWQ 可以增加效能 ?
  4. CMWQ 是怎麼去管理 CPU 的 ?