Skip to content

Instantly share code, notes, and snippets.

@Po-Jen
Created May 20, 2018 04:03
Show Gist options
  • Save Po-Jen/a70b18151dccf40ad2fedc9fc29c1b54 to your computer and use it in GitHub Desktop.
Save Po-Jen/a70b18151dccf40ad2fedc9fc29c1b54 to your computer and use it in GitHub Desktop.
軟體工程師面試資源最簡整理與技巧分享 for 柏豪

軟體工程師面試資源最簡整理與技巧分享

前言

只要是在 CS 產業,想要當軟體工程師,基本的資料結構和演算法功力是必須要時時打磨的,這次就整理一些好用的工具,而且盡量把資源最小化,讓大家在準備面試時有足夠資源,又不會被太多資料弄得暈頭轉向。

線上練習寫 code 網站

如果是剛開始刷題,可以透過寫 Hackerrank 的題目幫忙複習基本的資料結構和演算法。 DS ALG

Lintcode 有一些 ladder 也還不錯,可以幫助循序漸進地刷題。比如說下圖的 bit manipulation ladder: lint ladder

Leetcode 應該就不用多說,很多人應該都知道,只要你有了一定基礎,需要大量練習題目,那 Leetcode 絕對是不二選擇。

而且 Leetcode 也可以按照不同的 topic,區分難易度,甚至可以花錢看到各公司常出的題目,也是很不錯。

leetcode

線上課程

九章算法是中國有名的演算法教學網站,他們現在也推出了許多課程,如果是喜歡有人幫忙把資料整理好、並包含講解的,也可以先來上這個課,再好好刷題。

技巧

各項能力分開練習

基本上要寫出一道題目,而且要做到 bug free,必須要有下列能力:

  1. 釐清問題(展現細心程度,可以跟面試官溝通清楚問題範圍再下手)
  2. 想出演算法(展現資料結構和演算法的應用能力)
  3. 寫出 pseudo code(展現把初步想法變成可運行程式的能力)
  4. 寫出 code(展現程式語言的掌握能力)
  5. 人體 debug(展現 unit test、integration test 的基本能力)
  6. 溝通能力(問清楚問題、把自己的想法講清楚、在必要時尋求協助)

如果把所有能力都混在一起練習,就很容易混亂,因為每一道題目讓你卡的點可能都不同;反之,如果有意識地發現自己容易卡在什麼地方,就容易專項加強(例如你常常可以想出演算法並實作,但常常掛在 edge case,那你應該先加強 1,讓自己考慮的 test case 更完善,再開始想演算法;然後也要加強 5,讓你在測試自己程式時,可以更完整)。

記錄過自己寫過的題目還有解法

這一點 非常非常非常 重要!如果能夠把想過的解法清楚地寫下來,之後想要複習就會事半功倍,畢竟有很多很 tricky 的題目,如果每次都要重想,會花非常多時間。 此外,如果想要準備得更充足,寫完問題想一想 follow-up question 會怎麼出也是很重要的,如果沒有文件累積,每次看到題目連以前想懂的東西都要重來,那又怎麼有時間準備更進階的問題呢? 紀錄的工具很多種,像是寫個 blog、gitbook 或是 github repository 都是不錯的選擇。可以參考 這個 gitbook - leetcode note

資源不用多,只要足夠就好

說真的,網路上的面試準備資源超級多,整理得很用心的 github repository 也很多,但是,重點還是在於能否把題目寫出來。所以與其收集一堆資源但不會寫,不如就專注在 leetcode 好好寫題目。

總結

以上幫大家整理了一些好用的面試準備資源,如果你想要上手,可以從 hackerrank 跟 lintcode 開始找回資料結構和演算法的基本手感。要練習各種變形題目的話,就上 leetcode 狂刷題。如果看到某個知識想要更加了解,google 看看或是參考 awesome-competitive-programmingawesome-algorithms 之類的整理也很夠用了。

祝大家準備愉快!

延伸閱讀

  1. 軟體工程師面試資源整理
  2. Google Code Jam 賽制介紹
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment