HOME ABOUT CONTACT

軟韌體工程師面試考題 - 程式碼考題

Rain February 25, 2024
Outline

韌體考題

CAD考題

軟體考題

韌體考題 top

韌體考題較多偏向程式語法的細節、位元運算(Bitwise Operation)以及少數的程式設計, 面試韌體職缺的面試者可以多從以C語言設計的Open Source中學習實際應用的精隨。

題目1:

#define MUX(a, b) a*b
MUX(10+5, 10-5) = ?

解答:

Ans: 10 + 5 * 10 -5 = 55 (由於巨集函式的參數沒有括號,因此不會先做加減法)


題目2:

unsigned long v1 = 0x00001111;
unsigned long v2 = 0x00001202;
unsigned long v;
v = v1&(~v2);
v = v | v2;
v = ?

解答:

~v = 0xffffedfd
v1&(~v2) = 0x00001111 & 0xffffedfd = 0x111
(此運算等於最低四個16位元只要是奇數都會是1)
0x111 | v2 = 0x111 | 0x1202 = 0x1313

Ans: 0x00001313


題目3:

用一行程式碼判斷是否為2的冪次方

解答:

return N>0 && (N&(N-1)) == 0


題目4:

int a[5] = {1, 2, 3, 4, 5};
int *p = (int*)(&a+1); // a+1 is meaning shift address of an array length.
ask: the value of *(a+1) and *(p-1)?

解答:

*(a+1) = 2

*(p-1) = 5


題目5:

What's the content of array a?
int a[] = {6, 7, 8, 9, 10};
int *p=a;
*(p++)+=123;
*(++p)+=123;

解答:

a[] = {129, 7, 131, 9, 10} (這題考運算子的優先順序)


題目6:

[一線IC設計廠]


int fun(int x)
{
    Int count = 0;
    while(x){
        count++;
        x = x & (x-1)
    }
    return count;
}
                        

fun(456) + fun(123) + fun(789) = ?

解答:

4 + 6 + 5 = 15 (計算輸入進來的數字,其二進位表示有幾個1)


題目7:

[一線IC設計廠]


#define INC(x) x*=2; x+=1

int main()
{                       
    int i, j;
    for (i = 0, j = 1; i < 5; i++)
        INC(j);
    printf("j = %d\n", j);
}
                        

求J輸出值是多少?

解答:

2 (注意for迴圈沒有括號)


題目8:

[2021 外商IC設計廠]


int a = 25;
int b = 30;
int ques1 = a++ + b++;
int ques2 = ++a + ++b;
printf("%d, %d", ques1, ques2);
                        

問打印結果

解答:

右運算會較晚處理,左運算會優先處理, 因此第一行會先進行a+b,這是ques1得到的值,之後a和b各自+1。第二行會先進行a和b各自+1,然後再進行a+b,這是ques2得到的值。

Ans: 55, 59


題目9:

[2021 外商IC設計廠]
請設計一段程式碼輸出如下:
        1
      121
    12321
  1234321
123454321

參考解答:

Ans:


int main()
{
    for (int i = 0; i < 5; i++) // height
    {
        int print = 1;
        int plus = 1;
        for (int j = 0; j < 9; j++) // width
        {
            if (abs(4 - j) <= i)
            {
                printf("%d", print);
                print += plus;
            }
            else
                printf(" ");
                        
            if (j == 3)     // mid
            plus = -1;
        }
        printf("\n");
    }
}
                        

CAD考題 top

CAD考題較多會考Verilog語法或是TCL語言。TCL是相對冷門的語言,有興趣面CAD職缺的面試者要特別留意, 另外若是資工背景的面試者,也要自學一下Verilog語法。

題目1:

[2021 二線IC設計廠]
一個長字串裡,裏頭分別用空格分開了6個子字串,ex: str = [substr1 substr2 ... substr6],問如何打印第四個子字串

參考解答:

1. 印象中所有子字串的開頭字元和結尾字元都不一樣,可用此作為打印和結束打印的判斷。
2. 若沒限制使用Standard Function,可以用strstr()。


題目2:

[2021 二線IC設計廠 ]
"?"在C語言代表的意思是什麼

參考解答:

用於判斷前面敘述是true or false,之後會以":"區分true和false的操作。


題目3:

[2021 二線IC設計廠]
1. chmod
2. who
3. which
4. echo
以上四個Unix命令分別是做什麼用的?


題目4:

[2023 一線IC設計廠 資深工程師]
請用任何一種程式語言,設計一套可以剖析Verilog/SPICE語意的程式。

參考解答:

此題主要考驗是否熟悉Regular Expression,我是用TCL去設計。


題目5:

[2023 一線IC設計廠 資深工程師]
(承上延伸)若只需要取得最後兩個Instance/Module的名稱,該如何設計?

參考解答:

面試官想法是用Stack,而我是用Mod 2在迴圈內讀取名稱。


題目6:

[2023 新加坡外商 資深工程師]
給一段Verilog語法,口語解釋給面試官


軟體考題 top

軟體考題較多會考程式設計和演算法相關的考題,少部分會考C語言的觀念題, 若稍微有偏韌體一點的職缺也是會問一些作業系統相關的考題。

題目1:

[2023 人機介面商, EDA外商]
什麼是多型?

參考解答:

(簡略回答)不同的物件類別給予統一的介面,這其中包含了繼承和多載概念。


題目2:

[2023 人機介面商]
什麼是Stack Overflow?

參考解答:

程式記憶體配置超過了Stack的上限,這在不好的Recursive設計中可能存在此問題。


題目3:

[2023 EDA外商]
BFS/DFS相關問題,例如給一個樹狀結構,問BFS/DFS如何走訪

參考解答:

演算法 - 廣度優先搜尋 (Breadth-First Search)
演算法 - 深度優先搜尋 (Depth-First Search)


題目4:

[2023 EDA外商]
C Language Standard Container各種操作的時間複雜度,例如list.push_back(), set.insert()。

參考解答:

C/C++ Time Complexity of Standard Container


題目5:

[2023 EDA外商]
給幾段字串,將這些字串轉成地圖,每個字元都有代表的意義,問主角能否走到地圖的終點。

參考解答:

可用DFS走訪。


Last updated:

Related Artical List

  1. 軟韌體工程師面試考題 - 專有名詞解釋
  2. 如何準備外商軟體公司的面試
  3. 我在竹科從台商到外商之路
  4. 聊聊我覺得有毒職場具備了哪些特徵

Article List