分類: 瑞鼎

  • [面試] 瑞鼎 – 觸控演算法工程師面試紀錄

    2023 – 11

    瑞鼎 – 觸控演算法工程師

    工作內容

    1. 客戶需求專案支援
    2. 觸控演算法開發與維護
    3. 觸控演算法數據分析

    職務類別

    演算法工程師




    白板題


    Q1-1. 不使用 size of 算出這個結構佔用記憶體大小

    struct ST
    {
        int I;
        float F;
    }AA;
    


    解答:

    struct ST
    {
        int I;
        float F;
    }AA;
    
    int mysize(struct ST* a)
    {
        return (char*)(a + 1) - (char*)a;
    }
    
    int main()
    {
        AA.I = 10;
        AA.F = 4.5;
        printf("Size of AA: %dn", mysize(&AA));
        return 0;
    }
    
    
    Terminal:
    Size of AA: 8
    

    可以這樣解的原因是結構變數指標+1 就是獲得這個結構變數後的記憶體位置,

    用 char* 算是因為 char 佔用 1 Byte。



    Q1-2. 用 C 實現 $ sum_{x=0}^{2} frac{2^{x}e^{x-1}}{32}$,不能使用 division,

                並把整數與浮點數部份分別存入 AA 結構。 

                        ($e^{-1}=0.367879, e^{0}=1, e=2.718281$)


    解答:

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    struct ST
    {
        int I;
        float F;
    }AA;
    
    
    int main()
    {
        int size = 3;
        float *exp = malloc((size + 1) * sizeof(float));
        exp[0] = 0.367897;
        exp[1] = 1.0;
        exp[2] = 2.718281;
        exp[3] = 0.0;
        
        for(int x=0; x<size; x++)
        {
            float bx = 2.0;
            bx = pow(bx, (x-5));
            exp[size+1] = exp[size+1] + bx*exp[x]; 
        }
        
        AA.I = (int)exp[size+1];
        AA.F = exp[size+1] - AA.I;
        
        printf("Result int part: %d, float part: %f", AA.I, AA.F);
        
        return 0;
    }
    
    Terminal:
    Result int part: 0, float part: 0.413782
    

    除了那個 pow 的 MATH.h 不太確定能不能用外,

    其他東西還蠻直覺的。

    Q2.利用指標反轉陣列 array arr[7] ={1,2,3,4,5,6,7}


    解答:

    void swap(int *head, int *tail)
    {
        *head = (*head)^(*tail);
        *tail = (*head)^(*tail);
        *head = (*head)^(*tail);
    }
    
    
    int main()
    {
        int arr[7] = {1,2,3,4,5,6,7};
        int *head = &arr[0];
        int *tail = &arr[6];
        
        while(head<tail)
        {
            swap(head, tail);
            head++;
            tail--;
        }
        for (int i = 0; i < 7; i++)
        {
            printf("%d ", arr[i]);
        }
        
        return 0;
    }
    
    Terminal:
    7 6 5 4 3 2 1


    Q3. array arr={1,3,5,7,9,11,13,17} ,用二分搜尋法找出 11 的 index 為何?


    解答:

      
    int find(int* arr, int H, int T, int target)
    {
        if(H==T) {return H;}
        
        if (target < arr[(int)((H + T)/2)])
        {
            return find(arr, H, (int)((H + T)/2), target);
        }
        else
        {
            return find(arr, (int)((H + T)/2)+1, T, target);
        }
    }
    
    
    int main()
    {
        int arr[8] = {1,3,5,7,9,11,13,17};
        int target = 11;
        int res = find(arr, 0, 7, 11);
        printf("Index of 11: %d", res);
        return 0;
    }
    
    Terminal:
    Index of 11: 6
    

    Q4.下面這段函式定義是否合法? 

    Q5.為什麼它合法或不合法?

      
    int* fun(int *x){return &x*&x;}
    float* fun(float *x){return &x*&x;}
    
    int main()
    {
        int x1 = 4;
        float x2 = 4.5;
        int* result1 = fun(x1);
        float* result2 = fun(x2);
        return 0;
    }
    

    解答:

    Q4 不合法

    Q5 主要有兩個原因:

            第一個是沒給編譯器定義,這關係到函式多載(Function Overloading),

            在 C 裡面就不允許函式多載、不同 IO 共用同一個函式名稱,

            在 CPP 的話就允許,但是這邊沒說到用 gcc or g++ 編譯。


            第二個是指標觀念,當函式傳入 *x,則函式內的 &x 等價 **x。

            雙重指標 **x 沒有辦法直接做乘法運算。

    心得

    現場我有把 Q2, Q3 解出,

    Q1-1肯定是我自己寫錯,Q1-2 第一眼看成積分直接空白,回來越想越不對。

    Q4, Q5 可能是我 CPP 寫太多直覺以為只考函式多載,就騰了合法兩字送出,

    還大膽解釋了一下。

    沒想到裡面還有藏指標(汗。

    以上都是英文出題,但是我沒記好英文全文,所以就憑自己印象寫出來,

    如有筆誤歡迎來信指正。

    這次是 104 主動投遞,人資主動打來約時間,

    我也問了在職的話能不能一面線上?

    結果是要到新竹現場考試,也通知筆試沒過就不面試。

    行前還要我準備碩論跟部落格的報告。

    這次整個面試流程大概是我提早半個小時到瑞鼎,

    櫃台帶我去一樓小房間,

    約定時間快到時,一位看起來像是人資(?)的人進來發考卷說寫半小時。

    考完後人資將考卷拿給主管批改,過大概二十分鐘下來說我沒過資格,

    還問我會不會出去?

    OS:這不廢話嗎?不然你以為我怎麼出現在這裡?

             嚴重懷疑你有特異功能看得到我的隱形直昇機或是隱形任意門。

    雖然回家想想自己解得不甚理想,但是從頭到尾都沒見到主管這點讓我有點火大。

    準備了一堆東西連主管都沒見著,幹麻不讓我線上開筆記本實況寫程式就好了?

    以上。