本篇題目累積時日已有七年之久,相當於我任職工程師的年資,目前每年都還是會參與至少一兩場的面試,若有時間我仍會持續更新本篇內容。
有些題目已經算是歷史題目(約在2017~2018年左右),特別是韌體考題的部分,過去很多題目都是為了考而考而設計,不確定現在是否還會這樣出題,但若讀者是應屆畢業生,建議還是可以多多參考。這一兩年的面試經驗,感覺比較流行的是考系統設計或是經驗相關的問題,特別是外商或新創公司,但也可能是因為我已經有一定年資了,才不太考基本的 Coding,頂多問問一些觀念是否還清楚而已。
本篇題目是從時間最早到最近的面試考題來排序,也相當於我工作領域的轉換路程,希望這些題目可以幫助到大家準備面試。
韌體考題較多偏向程式語法的陷阱題、位元運算(Bitwise Operation)以及少數的 Coding,關於陷阱題的準備,只能建議大家多參考留意,一般工作時並不太會遇到這種題目的情況。
#define MUX(a, b) a*b
MUX(10+5, 10-5) = ?
Ans: 10 + 5 * 10 -5 = 55 (由於巨集函式的參數沒有括號,因此不會先做加減法)
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
用一行程式碼判斷是否為2的冪次方
return N>0 && (N&(N-1)) == 0
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
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} (這題考運算子的優先順序)
[一線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)
[一線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迴圈沒有括號)
[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
[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 考題較多會考 Verilog 語法或是 TCL Script 和 C Shell Commands。TCL 的部分比較會考 RegExp 使用情境,而若是有 CAD 工作經驗的面試者,Verilog 語法也可能會是常被問的題目。
[2021 二線IC設計廠]
一個長字串裡,裏頭分別用空格分開了6個子字串,ex: str = [substr1 substr2 ... substr6],問如何打印第四個子字串
1. 印象中所有子字串的開頭字元和結尾字元都不一樣,可用此作為打印和結束打印的判斷。
2. 若沒限制使用Standard Function,可以用strstr()。
[2021 二線IC設計廠 ]
"?"在C語言代表的意思是什麼
用於判斷前面敘述是true or false,之後會以":"區分true和false的操作。
[2021 二線IC設計廠]
1. chmod
2. who
3. which
4. echo
以上四個Unix命令分別是做什麼用的?
[2023 一線IC設計廠 資深工程師]
請用任何一種程式語言,設計一套可以剖析Verilog/SPICE語意的程式。
此題主要考驗是否熟悉Regular Expression,我是用TCL去設計。
[2023 一線IC設計廠 資深工程師]
(承上延伸)若只需要取得最後兩個Instance/Module的名稱,該如何設計?
面試官想法是用Stack,而我是用Mod 2在迴圈內讀取名稱。
[2023 新加坡外商 資深工程師]
給一段Verilog語法,口語解釋給面試官
軟體考題較多會考 LeetCode 題型或演算法相關的情境題,以及系統設計,少部分會考 C 語言的觀念題,若稍微有偏韌體一點的職缺也是會問一些作業系統相關的考題,可參考另一篇 軟韌體工程師面試考題 - 專有名詞解釋。
[2023 EDA外商]
BFS/DFS相關問題,例如給一個樹狀結構,問BFS/DFS如何走訪
演算法 - 廣度優先搜尋 (Breadth-First Search)
演算法 - 深度優先搜尋 (Depth-First Search)
[2023 EDA外商]
C Language Standard Container各種操作的時間複雜度,例如list.push_back(), set.insert()。
C/C++ Time Complexity of Standard Container
[2023 EDA外商]
給幾段字串,將這些字串轉成地圖,每個字元都有代表的意義,問主角能否走到地圖的終點。
可用DFS走訪。
[2024 FAANG外商]
GPU 伺服器系統架構、Job Scheduler 設計 (例如有300台機器同時撒 Job,該如何排班? 又該如何分辨優先級?)。
可參考書籍 - [內行人才知道的系統設計面試指南]
[2025 AI 語言模型外商 - C++ GPU Engineer 職缺]
LLM 開發經驗相關問題、如何偵測使用者的設備、如何下載正確版本的 Binary File、在 Windows 上實作寫 Log File,會遇到那些可預期的問題。
Last updated: