LeetCode 是一個收集軟體工程師面試考古題的線上練功網站。
從幾年前的 100 多題,到現在已經累積超過 700 題;在上面可以選擇自己習慣的語言解題,除了鍛鍊思考外、也暫時離開編輯器的援助。
求職者為了在時間有限的面試下表現得更好,會在網站刷題練手感。
為什麼要刷題
軟體工程師因為是技術崗位,在招聘的過程會測驗應徵者的技術能力,從網路上前輩們的分享得知,會先透過電話面試、後續才會被邀請到公司進入下輪。
而電話面試會請受試者打開某個協同文件,在沒有編輯器幫助的情況下解題。差別在如果語法錯誤、或是左右括弧未成對等編輯器會跳出提示幫助,所以對於語法必須相當熟練。
白板解題更是直接離開鍵盤。
衝擊性的認知
我看的線上課程算多,不過當我最近認識 LeetCode 才發現到,兩個方向基本不太一樣,遭遇了毀滅性的認知打擊。
一般課程都是教你怎麼樣快速做出有成就感的東西,主要在「應用」層面,比如說做出幾款應用等等、表格地圖資料庫範圍。
而面試題偏向資料結構和演算法,這些東西就屬於學科裡的硬底子功夫,像是 Binary Tree 和 Linked List,可能會覺得很陌生或根本沒被提到。 除非特別做功課,不然以作品為導向的課程沒有太大幫助。
一來不懂這些依然可以做出應用,二來這並不是大部分消費者會想(需要)學習的範圍,非本科的要靠自己找書補足這方面的知識點。
被題目各種虐。
例如「不使用加減號,完成兩個數字求和」、「給出羅馬數字回推阿拉伯數字,好比”VI”會得到6、”DCXXI”得到621」。
種種看到懷疑人生的驚喜,連答案擺在前面都不知道他寫啥咪。
「a + b = (a ^ b) + (a & b << 1)」
…(;´༎ຶД༎ຶ`)??
對於能全部刷完的實在深感佩服,還看到不少刷了好幾輪為了求好offer實在是讚嘆,也覺得背脊一涼。
連這種遙不可及的成就找工作都略顯吃力,也就代表整體的素質門檻被越墊越高,光想就覺得很抖。因為 CS 熱門程度近幾年的觀察就業也嚴峻不少。
慢慢累積
回過頭來,對我來說不要說「刷題」了;基本就是大眼瞪小眼,看可否用灼熱的視線燒穿題目的深意,但基本上都是被甩巴掌的份就是。
舉上面這題來說,給一個陣列,裡面數字都是兩兩存在、但有一個落單的數字,請抓出來。假設給[1, 1 ,2],那2就是落單的數字。
所以我前面有提到,這跟講求「應用」的課程不同,更多的是硬底子思考,遇到當場就卡住了。
舉上面這題來說像移動火柴棒讓兩邊的等式成立那種遊戲,需要一個「啊哈」摩門特,有看出來就有、沒有就是沒有。
現在能解出來也不代表再有壓力的情境下可以順利完成。
嗯…第 10 行的 ^ 是什麼?因為這題才去研究 XOR,平常都只用 and 和 or 而已。
再來一題。
題目給羅馬數字,要把它轉換成阿拉伯數字。比如給”IV”得到數字4、給”VI”會得到6,”DCXXI”得到621。
再來一題。
在不使用+、-號的方式下,取得兩個數字的加總。
..
…
(°ཀ°)