程序員代碼面試的幾種形式: 1) 寫出核心函數 2)寫出完整程序 3)在白板上手寫代碼

Level 1: 寫出核心函數

有些公司的面試官在進行算法面試時只要求你寫出實現這個算法的核心函數,其他頭文件, main()函數等不要求寫。這種形式的代碼面試難度最低,只要寫出函數就行了,而且面試官看的時候也只是看看大致思路。

我在筆試的時候遇到過這樣的題,記得是一道二叉樹的題,讓你求最大寬度,然後答題區是一個文本框(不能調試運行)

LeetCode上的題都是隻要求你寫個函數接口API
在這裏插入圖片描述

Level 2:寫出完整程序

很多時候,我們面試時,不會遇到像LeetCode這樣只讓你專心寫函數的平臺,所以80%的情況是:面試官出一個題目,然後讓你在一個他們提供的平臺上(類似IDE,但一般不會有代碼提示功能)寫出解決這個問題的完整程序,也就是要包括#include <iostream> int main ...,而且你需要自己給測試用例,然後把結果跑出來給面試官看

這種形式其是我們平時做OJ的形式,所以也還好,只不過遇到二叉樹的問題,需要自己建立一棵二叉樹Binary Tree,代碼會有點長。所以如果平時習慣於在LeetCode上寫面試題,一定要訓練一下怎麼寫出完整的程序

例如:LeetCode 1367. 二叉樹中的列表 這個題我在IDE上寫出了完整的程序
在這裏插入圖片描述
常用模版

// 情況一
// create an array
// 5
// 1 2 3 2 2
vector<int> arr;
int n, d;
cin >> n;
while (n-- && cin >> d) {
    arr.push_back(d);
}

// 情況二
struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x)
        : val(x)
        , left(NULL)
        , right(NULL) {
    }
};

// create tree by preorder, -1 means NULL
TreeNode *createTree() {
    int d;
    cin >> d;
    if (d == -1) return NULL;
    TreeNode *root = new TreeNode(d);
    root->left = createTree();
    root->right = createTree();
    return root;
}

// 情況三
struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x)
        : val(x)
        , next(NULL) {
    }
};

// create linked list, -1 means NULL
ListNode *createList() {
    int d;
    cin >> d;
    if (d == -1) return NULL;
    ListNode *head = new ListNode(d);
    head->next = createList();
    return head;
}

Level 3:白板手寫代碼

這種形式是最難的,一般大廠(如Google、字節跳動、阿里巴巴等)會要求在白板上手寫代碼

這裏所說的白板可能是一個記事本、Word文檔,也可能是在現場給你一塊白板、一張A4紙,讓你用筆把算法框架及代碼寫給面試官看

在這裏插入圖片描述
相比起傳統的編程環境,白板面試會迫使你在沒有自己喜歡的工具的情況下、在不熟悉的環境中寫代碼。這就可能導致你在緊張的面試過程中容易犯錯誤,而你在一個陌生的環境中遇見問題時的處理方式和思維方式,也將會成爲公司考量你的標準之一

白板面試可以有效地考察面試者的綜合素質,面試官一般關注更多的是:你遇到一個新問題的思考能力;你與別人的溝通能力;你遇到挫折時候的應變能力;你接受到任務時的反饋能力;你的思路是否清晰,代碼結構是否層次分明;你的代碼可讀性、可維護性等

白板面試訓練方法

手撕算法步驟:

  1. 拿到題目,跟面試官確認題目意思,避免偏題;問清要求,如時間複雜度是多少,是否可以用輔助空間
  2. 思考後,寫好算法思路框架,並與面試官溝通交流
  3. 聲明函數,在註釋寫自己的思路
  4. 判斷非法輸入、邊界等
  5. 正式解題,關鍵步驟要註釋
  6. 寫好測試用例
  7. 測試寫好的程序,運行給面試官看

很多時候,你會發現一合上電腦,讓你在紙上寫這個算法時,你可能一頭霧水,因爲你習慣了有對齊的代碼框架,有代碼提示

多在白板或白紙上寫代碼,這對你的編程能力會有很大的提高,而且有利於訓練你的思維方式,提高對編程詞彙的記憶,加深你對整個題目的理解和思路的記憶

程序員面試時手寫代碼的意義?

程序員面試被要求手寫代碼,手寫代碼真的行的通嗎?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章