在研究所畢業後,我已經工作了一年多。但由於工作、待遇和產業等因素,
我希望能夠進入其他外商公司。然而,外商公司對於程式技術的要求較高,
因此我一直在努力練習LeetCode上的題目,有時也會參加LeetCode相關比賽
,以增強我的演算法和資料結構能力。雖然我已經對這些基礎知識有了初步
的掌握,但對於一些難度較高的題目,例如Hard類型或DP類型的題目,我仍
然感到有些困難,即使參考別人的答案也一知半解。因此,我想尋找線上刷
題課程來提升自己。當時我發現了Candice先生的課程,老師是一位知名
Google公司的工程師,並擁有面試官的經驗。這個課程是以一對一家教的形
式進行,非常適合我的需求。唯一的問題是課程費用偏高。
最初的試聽課:
在最初的試聽課上,老師出了一個關於樹狀結構的題目,要求找出所有節點
上數字之和等於sum的可能情況。當我完成這個題目後,老師進一步探討了邏
輯是否有問題、寫法優化和時間複雜度等方面。對於後兩個問題,我之前在
解題時比較容易忽略,但在老師的指導下,我逐漸意識到這是非常重要的問
題。以前只要寫出答案就滿足了,但現在我的目標是寫出高效的程式,這也
是我從老師那裡學到的最多的部分。另外,我也開始注意到程式風格的問題
。這讓我覺得很特別,因為每個人寫的程式都有所不同,同樣的解法可能有
不同的寫法。例如,對於DFS和BFS,有些人更喜歡使用其中一種方法;而對
於二分法,有的人會將索引值放在內部,有的人則會將其放在外部。這些差
異讓我在上課後更加體會到寫程式的樂趣。還記得在上DFS章節課程時,老師
用了一個很特別的方法來示範DFS題目,他用了while迴圈來實現遞迴,這讓
我驚訝,因為我以前從未見過這種寫法,這也是寫程式最有趣的地方之一。
最後,每當一個章節結束時,老師都會準備相應主題的作業,讓我們運用所
學的技巧來完成,從而加深對該章節內容的熟悉度。如果遇到問題可以提出
來,老師會在下次上課時一併解答。
面試中各種類型的題目:
我自己每個月上一堂課,總共完成了七次課程。因為有新的工作機會,所以
我也陸續參加了面試。在面試中,我遇到了各種類型的題目,例如雙指針、
字串、二分、排序和DFS等。我發現許多面試官注重效率和邏輯問題,即使程
式完成後也不一定是正確的。有時候還需要自己跑Test case,逐行分析變數
的行為以確保程式沒問題。這與上課時老師探討優化的部分有極大的相符。
經過這些實際面試經驗的累積,最後也有成功進入了我心儀的大型EDA美商公
司。對於想參加課程的同學,我建議有一定的程式基礎和演算法知識會比較
適合。這樣在程式對談時能更加順暢,降低認知上的隔閡。祝大家在未來的
職業生涯中繼續取得成功,不斷進步!