2021.4.13 聯發科面試心得

Page content

投了聯發科實習,面試軟韌的經驗

交通

4.13

我是搭 uber 去,花了 191 (- 40 優惠碼) 元,從那裡回來則是騎 ubike,地圖秀快 20 分鐘能到,但我沒走過,邊找邊迷路也花了 40 分鐘吧,好累。

由於大概早了 30 分鐘到,進入大樓換證後我先在大廳的沙發等待,複習一下之後可能會考的內容,在約定時間大概 10 分鐘前有人帶我進去。

筆試

筆試部分覺得沒有考得很好 (雖然說是筆試,但都是用電腦啦 XD)

有印象的考了

  • 基本的 bit operation (誰 & 誰等於多少,但沒有這麼直接,搭配了一些 if-else)

  • fclose(fd1, fd2, fd3) 會怎樣 (( 我都一個一個 file descriptor 關欸

更新:這樣是編不過的,錯誤訊息是 error: too many arguments to function call, expected 1, have 2

#include <stdio.h>
 
int main(void)
{
    FILE* fp1 = fopen("test.txt", "r");
    FILE* fp2 = fopen("test.txt", "r"); 
 
    fclose(fp1, fp2);
}
  • 簡單的遞迴 (印象中 sum(n) = n + sum(n/2) - 1,問 sum(10) 多少)

  • union 的概念 (union {int a[2]; char c[8];}; 他 a[0] 放 3406,問你 c[0] 會 cout 出什麼)

更新:自己跑了一下,結果是印出 N

#include <iostream>

union data{
    int a[2];
    char c[8];
};

int main(int argc, char const *argv[])
{
    union data d;

    d.a[0] = 3406;

    std::cout << d.c[0] << std::endl;

    return 0;
}

3406 = 0xD4E

  • var += bar(++var); … 如果是加號兩邊的話,我知道是沒有規定先後順序的,(i++) + (i++) 之類的是 undefined behaviour, += 我就不確定了

更新:這樣的程式會噴 Warning

#include <stdio.h>

int i = 0;

int a(int x) {
    printf("in a(): %d\n", i);
    return i;
}


int main(int argc, char const *argv[])
{
    i += a(i++);

    printf("in main: %d\n", i);

    return 0;
}
test.c:13:13: warning: unsequenced modification and access to 'i' [-Wunsequenced]
    i += a(i++);
  • include guard: ifdef, idndef, if, elif, if, undef,在電腦上 trace 這種沒有縮排的看起來超累,不能直接標注在 code 上,題目又落落長

  • 還有指標 dereference 和 ++, +1 混合著寫。這個部分要很熟悉才行

等等

上機

我大概花 23 分鐘在筆試,留 27 分鐘寫上機,有點趕,因為還有他那難用的環境要熟悉,不像筆試會按上/下一題、會點選擇題、會填入答案就好。

那個 termMsg 鍵詞限制不知道是啥,奇怪的環境。

筆試 + 上機總共 50 分鐘,如何分配是自己決定,他們建議事先寫筆試,螢幕上也有建議的分配 (忘了)。如果再讓我寫一次,我應該會再分配多一點點在上機,畢竟還有環境要熟悉。

上機他們的介面好難用,編譯也不快,平常習慣邊編譯邊改 code 的習慣在這不太適用,也沒有自動補齊變數、函數的功能,好像只有打左括號會生出右括號。

上機的第一題是輸入 n 個數字,印出當前的中位數,例如

1   2  3   4 5
1 1.5  2 2.5 3

和 LeetCode 不同的是要處理輸入、輸出的部分 (LeetCode 通常只要寫最核心的部分)。

這題我時間不夠沒寫出來 嗚嗚嗚… 明明就不算難的。

第二題則是不用 sizeof 但印出某個 struct 的大小,我的想法是用 pointer 的 arithmetic,解法如下。這題應該有答對 (吧)。

#include <stdio.h>

struct Some_struct
{
    int a;
    char c[10];
};


int main(int argc, char const *argv[])
{
    struct Some_struct ss[2];

    printf("%d\n", (int)(ss+1)-(int)(ss));

    return 0;
}

面試

原本 HR 幫我準備的會議室只有 HDMI,但他信件中要我帶 VGA 的,還好後來他們幫我換了一間。我下次應該會儘量去弄一顆 HDMI 的轉接頭吧,不然好麻煩。

面試部分基本上很多時間都是圍繞在我準備的投影片,稍微延伸出相關 OS、計算機組織的概念。

專題方面有問一些基本問題

  • 你在這份專題中負責哪個部分,如何分工
  • 你覺得這個專題中最困難的部分是什麼

感覺他們覺得我的作品太淺了,怎麼需要這麼多人,娃

專題部分很多地方感覺要再熟悉一些,講得仔細一點。

由於我有放修過的相關課程,所以他也有問這些課程中最有心得的是哪一門。

白板題和直接問作業系統、計組的題目沒出什麼,因為感覺他們主要是想問通訊的東西,但我沒修過,所以也沒辦法問。這個部門要找有通訊相關背景的人,估計我是沒什麼機會了。

第一次正式的面試,還很多東西要學RRRRR,加油!!



^^^^^^^^^^^^^^^^ 預留結果的區域 XDD