身為大四學生,我經歷數次面試,其中蘇州某台資軟體公司的面試讓我徹底重塑「寫程式」的認知。以下記錄面試過程、反思與給後輩的建議。
我的初版(O(n) 迴圈):
long fn(int n) {
long temp = 0;
for (int i = 1; i <= n; i++) {
if (i % 2 == 0) temp -= i;
else temp += i;
}
return temp;
}
面試官肯定正確性,但指出 n 極大時效率低,要求優化。
我的優化版(消除乘法/模運算):
long fn(int n) {
long temp = 0, sign = 1;
while (n > 0) {
temp += sign * n;
sign = -sign;
n--;
}
return temp;
}
面試官仍不滿意,給出 O(1) 數學解:
long fn(int n) {
if (n % 2 == 0) return -n / 2;
else return (n + 1) / 2;
}
金句:「別以為 CPU 快就把所有運算丟給它,程式設計師該把代碼優化到極致,CPU 是為用戶服務,不是為程式設計師服務。」
要求極致效能。面試官展示 空間換時間:預先建立二維陣列儲存階乘值,查表直接相加,避免重複運算。
面試失敗不是終點,而是通往資深工程師的必經之路。願這段經歷能啟發更多同好。