[MasterThe Coding Interview] 解決問題

本篇為MasterThe Coding Interview教學影片筆記文

在面試的時候解決問題的方法是面試的關鍵,他們可能沒有想要你直接說明正確答案,他們更想看的是過程,你怎麼分析code,怎麼把你的思路跟其他人說,這也是為什麼我們必須將這些知識了解透徹,就像BigO一樣,當你今天在解題的時候一併把BigO考慮進去,這會讓自己很加分,公司要的不是天才,而是可以跟他們一起解決問題的人,只要有解決問題的能力,你就是一個對公司有價值的人。

我們在面試的時候,需要注意以下的四點:

  1. Ayalytic Skills-是否可以分析和解決問題
  2. Coding Skills-是否可以寫出好的、易讀的、簡單的code
  3. Technical Skills-是否了解對於應徵職業的基本知識
  4. Comminication Skills-你的個人特質是否符合公司文化

我們可以透過以下步驟來解決面試中的白板題:

  1. 將所有重要資訊寫在題目最上面,確定知道所有細節並表現出如何組織她們。
  2. 再次確認input和output。
  3. 找出問題最重要的部分,確認一下有time、memory的限制嗎,最終目標是甚麼?
  4. 不要問太多很小很瑣碎的問題,面試是有時間的,只要知道了前三點要的東西後就可以開始coding了。
  5. 先用最爛最直覺的解,不用把它寫出來,可以直接用說的,這表示你可以很快的想到怎麼解決問題。
  6. 告訴面試官為什麼這個解不是最好的,可以從時間複雜度的部分告訴她。
  7. 想想是不是有更好的方式,檢視一下是否所有資訊都有考慮進去了。
  8. 在開始寫程式之前,先把等等要做的步驟寫下來。
  9. 在一開始就模組化你要寫下來的程式碼,把問題區分成小塊的部分並且在適當的地方解釋一下。
  10. 正式的開始寫code,要記住知道的訊息越多,在開始寫白板題的時候越不容易出錯,千萬不要在開始寫的時候還甚麼都不清楚。記住一件事,很多人在白板題都沒辦法準時的將最好的答案寫出來,所以要怎麼讓自己表現更好,一步一步的破解,就算最後沒有解出來,也至少有留下了你所知道的部分給面試官看。
  11. 想想有甚麼案例放進去會錯誤,要假設所有人都想破壞你的code,該怎麼做才能預防所有bad inputs。小技巧就是評論自己的code,並且告訴面試官你如何修正自己的code,用討論的方式讓他知道你會注意這些細節。
  12. 不要用一些奇怪的名稱來命名你的變數或函式,讓可讀性也加入你的想法裡。這也可以跟你的面試官講,讓他知道你會注意這個部分。
  13. 測試你的code,如果沒有帶入參數或帶入0、null、undefined等等奇怪的值的時候應該要怎麼做,跟11點類似的概念,也是要讓面試官知道你的想法是最重要的。
  14. 告訴面試官還可以怎麼在改進code,還有其他種方式來解決問題嗎,這是可讀性高的code嗎,有其他特定語法可以來改寫code嗎?小技巧:可以問問面試官看過最有想法的解法是什麼。
  15. 如果面試官很喜歡這個解答,他通常會結束白板題,又或者是問延伸的問題,例如如果記憶體沒那麼大該怎麼辦等,這是Google很常面試的問題,最簡單的回答就是分而治之,divide-and-conquer,把input拆開輸入,最後output再合併。