上一篇: 【科技業面試】軟體工程師—(1)前置準備篇


上一篇我們談到如何做基本功課,和履歷的寫作

1. 有人說多做 LeetCode? 不全是這樣!

LeetCode 是只幫你面對白板題,但面試者不只是要看到這一個技術層面的事。有人刷了400題的題目,但是還是沒有成功拿到offer。因為面試者忘記從公司的角度思考,寫程式的能力只是工作技能的一部分,另外還有溝通能力,團隊合作及其他特質主管需要評估的。因此準備 LeetCode 只是準備面試的基本功。

2. 在面試的前兩分鐘已經決定要不要用你了!

熟悉深度優先、廣度優先、資料結構、遞迴、雜湊表…是可議讓你輕鬆拿到offer嗎? 其實在面試的前兩分鐘,面試官已經決定好要不要錄取你了。因為面試是一件主觀的事,如果他不想讓你錄取的話,他可以刻意出一些語意不清或特別難的題目。反之如果面試官喜歡你,想要幫你一把,他可以出簡單的題目給你,給你各式各樣的提示,幫助你走過面試的流桯。(甚至本人遇過面試官說我可以拿出手機google的)

有研究指出,你第一眼看到一個人,在這個5~15秒之間,你已經決定你喜不喜歡他了。面試也是一樣,在自我介紹的階段,面試官已經大致決定好要不要你了,根本不用等到後面問專業問題的環節。

3. 考官們在觀察的,是你有沒有成為資深工程師的可能。

Coding 的技術本身,是一個成為軟體工程師基本門檻。為了讓面試官覺得你有成為資深工程師的能力(或潛能),你必須展現你具備有領導能力解決複雜問題的能力團隊能力整合能力溝通能力友善對於學習的熱情

4. 如何看待程式題

當面試官丟出一個問題的時候,他不會想要看到你講出已經背誦過的解法。其實他想要知道的是當你面對這個問題的時候,你採取的步驟與思考邏輯。因為在軟體工程裡面,大多數的時候並沒有一個已經有解答的問題,而是你必須全盤思考為甚麼要如何解決。這個時候需要分析能力、權衡能力、以及團隊討論的能力以及接受別人的批評。

They want to know how to approach to the question, not whether you can reach the answer.

舉例來說:面試官如果出一題題目,你知道最佳的解法是利用「Quick Select 非遞迴型式」解決的,但考試的當下,你並沒有那麼多時間寫下這個白板題。你的做法應該是利用其他比較好處理的辦法,例如:「Heap」或甚至暴力法處理。你必須跟考官說你的邏輯:「這題的最佳解是用xxxx,但因為時間的緣故,解法顯得太複雜了,我改用oooo解決。

不用最佳解!

ps: Quick Select 的程式碼放在文章最後

5. 他要的是可以一起工作的人,而不是尋求許可的下級!

不要問這種問題:

「這樣是正確的答案嗎?」
「這樣如何?」
「你覺得這樣是最佳解嗎?」
「我覺得最佳是用動態規劃寫,但我不確定這樣可以嗎?」

以上說法顯得你沒有自信。你面試進去是要和他們一起工作,要有能力獨立工作,做好你份內的事然後和他們一起完成專案。若問以上的問題代表你還沒準備好接下這份工作。

6. 重點不是你做過甚麼,而是未來你的潛能!

你曾經做過甚麼應該都不是很重要。他們想要知道

  1. 你要如何完成
  2. 你能夠自學程式語言嗎?
  3. 你對於程式有熱情嗎?
  4. 對於新的事物你的接受程度?
  5. 團隊合作的能力
    如果你能夠在自我介紹的時候就展現這一些特質,你就能在程式題出現以前就能給別人留下強大的印象。讓他覺得你能夠身為他們團隊的一份子。在程式題給你最多的提示。

當然如果你還是沒辦法解出題目,那就是你的問題了。所以準備好基本程式能力,在自我介紹的時候展現那些特質,把問題中思考的流程說出來給考官聽,這樣你就比較容易錄取想面試的工作了。

7.附錄: STAR Method(敘事方法)

使用 STAR Method 可以讓你的敘事有面試官想聽到的關鍵字。讓你講話更有重點。

STAR方法,就是Situation(情境)、Task(任務)、Action(行動)和Result(結果)4個單字的字首組合。它是結構化面談中非常重要的概念。

  • S(situation)情境:面談的過程中我們要面試者描述對方執行某件重要的事情時,所發生的背景情況,透過事件來做為我們評核的標準。
  • T(task)任務:透過考察背景環境中所扮演執行任務的角色,藉由考察面試者是否擔任的描述職位,以及是否具備該職務的相關能力。
  • A(action)行動:分析面試者在任務當中所擔任的職務是如何執行任務。
  • R(result)結果:即任務在執行後的結果與效益。

當你要敘述一件事情的時候就可以在腦袋中備有這個觀念

例如說,你從班上倒數名次變成第一名。請看下面附表

Situation:我大一的時候,數學很不好,因此在班上排名很後面。
Task: 想要改善數學弱的問題。
Action: 分析為甚麼數學不好,花的時間不夠? 觀念沒弄懂? 做了甚麼特訓。
Result: 最後成為班上第一名,而且很樂於跟別人解題,分享怎麼進步的。

擅長用這個方法以後,面試官會覺得你講話是清晰有邏輯的,更能夠決定你是不是符合現在的這個職缺。


備註:Quick Select in C

#include <stdio.h>
#include <string.h>

int qselect(int *v, int len, int k)
{
#    define SWAP(a, b) { tmp = v[a]; v[a] = v[b]; v[b] = tmp; }
    int i, st, tmp;

    for (st = i = 0; i < len - 1; i++) {
        if (v[i] > v[len-1]) continue;
        SWAP(i, st);
        st++;
    }

    SWAP(len-1, st);

    return k == st  ?v[st]
            :st > k ? qselect(v, st, k)
                : qselect(v + st, len - st, k - st);
}

int main(void)
{
#    define N (sizeof(x)/sizeof(x[0]))
    int x[] = {9, 8, 7, 6, 5, 0, 1, 2, 3, 4};
    int y[N];

    int i;
    for (i = 0; i < 10; i++) {
        memcpy(y, x, sizeof(x)); // qselect modifies array
        printf("%d: %d\n", i, qselect(y, 10, i));
    }

    return 0;
}
最後修改日期: 10 5 月 2020

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。