聽說你最近在刷題:軟體工程師面試一定會遇到的資料結構與演算法關卡

聽說你最近在刷題:軟體工程師面試一定會遇到的資料結構與演算法關卡
非內文當事人照片|Photo Credit: Depositphotos

我們想讓你知道的是

準備演算法的方式,不僅只有瘋狂刷題,本文提供有效的學習方法與審題技巧。 

先澄清一下我現在沒有在刷題(我這樣講絕對不是怕很多同事會看到我的文章XD),說實在的,我覺得大家好像太過度強調「刷」題的刷,好像刷油漆似的要來回刷很多遍。我過往看過許多「刷」幾百題或每題做2~4次以上的人,分享他們的經驗,我很佩服他們投入的時間及毅力,但我自知做不到,有小孩後更是難以做到「刷」一遍。

我自己找軟體工程師的工作的經驗,2015年上完Coding Bootcamp到找到工作,大概做了60題左右的Leet Code問題,2016年底找工作比較認真,大概完成了100題左右。今天這篇文章,主要想分享我的演算法準備方式,如果你想要找如何刷題的方式,或是覺得無法「刷」幾百題很多遍的人,歡迎往下閱讀。

持之以恆,養成每天練習1至2題習慣

2015年上完Coding Bootcamp後,我陸續有一些電話面試,每天可能會有1~3個電話面試。所以在準備面試上,要研究公司,並且依照職缺來做面試的複習。因為我是面試前端相關的職缺,所以也有一部分的精力在前端的資料複習。關於資料結構及演算法(Data Structures & Algorithms)的練習,我大概維持一天練習1~2題的步調。2016年底的面試,因為還要上班,所以基本上只有晚上有時間,可能一天只能練習1題,假日有比較多時間才可以多做幾題。

解題前,先仔細審題:確認題目input、格式、desired output

看到問題的時候,我會先確保我了解題目的意思,真正在面試的時候,通常第一步也是和面試官確認我們自我的理解和面試官要問的是否一致。不要花了時間才發現一開始的理解及假設是錯誤的。我通常會立刻寫下題目給予的input有什麼、格式是什麼、desired output又是什麼。

確認好input&output後,我會思考題目可以用什麼類型的資料結構或是演算法來解。通常在面試的時候,我會和面試官說明我可能會先就一個大概可行的方式來做解答,如果他/她覺得沒有什麼問題的話,我再做後續的優化。在我開始有一些思路後,我會先寫下pseudocode,就是先用英文來說明我的解法會是怎麼樣。每個步驟和面試官確認都沒有問題後,我才會正式寫code。

「他山之石,可以攻錯」,卡題時參考別人解方並再試一次

當然有些時候不論怎麼想都寫不出來,如果是自己練習的時候,我大概在15分鐘後會開始看一些討論,嘗試學習別人的思路。但如果再花10分鐘還是解不出來的話,才會參考別人的解法。我看完別人的答案後,還是會用自己的code再實現一次。如果面試中卡住的話,則是要儘快和面試官討論,我會把我的理解,可能的解法方式和面試官說,同時也說明我的情況可能哪裏不是很確定,讓面試官在適當的時候可以給予我提示。一般來說,公司都是希望有順利的面試經驗,面試官也都願意在溝通正常下給予協助。

紀錄解法的「空間及時間複雜度(Space & Time Complexity)」並反思優化

自己練習寫完之後,我會再寫出解法的空間及時間複雜度(Space & Time Complexity),通常面試也會詢問這個部分,所以自己每個練習也要歸納一下。如果我發現我的解法時間可能不是太好,我會再嘗試看不同人的討論,研究更優化的解法,並再自己寫出不一樣的解法。有些比較棘手的問題我可能會寫2、3個解法比較彼此的優缺點。

筆記本紀錄Q&A

在之前準備面試的時候,我有準備一本筆記本,每次寫完問題之後,我會用筆寫下我在哪一天寫了哪一個問題,並且用很精簡的方式總結問題及解法。隔天要做下一題之前,我會先看一下前一天的問題,嘗試回想我是否可以再次在頭腦中想出大致的解法。如果還是不行的話,再看我自己的總結並做上記號,隔天會再做一次同樣的步驟,直到我可以順利複習出解題的邏輯思路。

如果有和公司面試,不論是電話還是onsite,面試完後我會再檢查我遇到的題目是否和我過去做過的題目類似,如果有的話,是否我的思路在面試中是清晰及正確的,如果沒有的話,我是否有利用對的觀念來解答。面試結束後,會花時間在盤點及複習,從面試中的題目和過往的練習做統整。

解題時切莫僅追求速度,而是追求通盤理解

你可以看到我的練習方式不是很強調快,因為我希望我做完問題可以有很深的理解,所以花很多時間在做整理、複習確認,即使當下沒有那麼理解,隔天回想又想不出的話,我會再複習一次,再隔一天做新題前也會再確認。複習及思考的次數多了,真正把題目所想要考的觀念融會貫通,畢竟面試很難真的遇到原題,重點是我們對於資料結構及演算法的理解,及遇到難題如何面對的應對的思考過程。

條條大路通羅馬,每個人面試準備的方式都不太一樣,以上就是我的資料結構及演算法的準備方式,之前寫找工作的系列文章好像沒有特別提這塊,所以特別再寫出來分享。當然我不是大神每次面試都可以收割5到10個以上offer,所以就請你自己斟酌評估你的學習方法,畢竟我們都要找到對自己最能接受、且有效率的方式來準備面試。

工欲善其事,必先利其器:善用LeetCode學習

我從2015、2016年準備面試的時候,有許多練習演算法的網站,但到了今日,好像Leet Code和練習演算法關係就如同 Google和搜尋一樣,大部分我聽到的準備面試的人都用Leet Code來做練習了!我目前聽到朋友準備面試基本上都會購買 LeetCode的Premium,Premium最大的好處就是可以看到問題和公司的標註,拿過去拒絕我2次的Google為例,LeetCode就有925道題目被大家回報有在Google面試中看到。

當你正要phone or onsite interview的時候,可以聚焦你要面試的公司練習、提高效率的話還是可以提高面試的表現的。Premium還有答題評斷比較快、LeetCode官方解答、及依據公司有Mock interviews等其他功能,但主要大家好像都還是為了company tag的功能而付費,相信以大家拿到offer後的加薪,會覺得這是個很好的投資!

  • 以上內容均為作者個人經驗與觀點分享,不代表其任職公司立場

本文經半路出家軟體工程師在矽谷授權刊登,原文刊載於此

責任編輯:蕭汎如
核稿編輯:翁世航


猜你喜歡


跳起來才摸得到的叫目標!5G+產業新星揚帆啟航計畫帶你「JUMP」成為好人才

跳起來才摸得到的叫目標!5G+產業新星揚帆啟航計畫帶你「JUMP」成為好人才
Photo Credit: Shutterstock / 達志影像

我們想讓你知道的是

經濟部工業局推動5G+產業新星揚帆啟航計畫,以人才實戰為主軸並提供豐富的線上與實作課程,線上課程讓人能隨時隨地進修;實作課程讓人動手研究,全面提升技能,更能成為5G應用遍地開花的新助力。

當5G已經逐步滲透到不同場域中創造出全新應用的此刻,傳統教育體制出身的人才究竟能否滿足全新時代的技能需求?因應5G產業強大的人才需求,經濟部工業局推動「5G+產業新星揚帆啟航計畫」,以人才實戰為主軸並提供豐富的線上與實作課程,線上課程讓人能隨時隨地進修;實作課程讓人動手探究,全面提升技能,更能成為5G應用遍地開花的新助力。

你5G了嗎!全新時代的人才不能只有標配,想技能升級該怎麼做?

找不到人才,似乎成了近年產業界頭痛的問題。面對不只是以半導體為首的科技業對各種新興應用產生出更多人才需求,少子化帶來的衝擊、也讓投入市場的人力也逐漸減少,然而5G發展就迫在眉睫,產業又該如何應對?

根據經濟部工業局「未來3年重點產業人才調查及推估-通訊(含5G)產業報告」的研究分析指出,通訊(含5G)產業未來發展趨勢包含3大方向:5G多種技術持續蓬勃發展、非授權頻段技術瞄準5G訊號涵蓋缺口,以及網路基礎建設更新持續帶動通訊設備需求,雖然將能帶動相關的人才需求產生,但人才本職學能的技術含量也備受5G時代需求考驗。

不只是各項職缺都需求具備「電機與電子工程」細學類背景外,多數職缺亦有「軟體開發」細學類背景需求,而在IC設計及機構設計工程師若能額外具備「機械工程」細學類背景者更佳,可見隨著產業發展,人才所要具備的技能已不再是一招打天下,需要更加斜槓。

5G能力從線上課程開始,隨時隨地的自我加值

在無法解決人才缺口的根本結構性問題下,經濟部工業局除了藉由推動5G+產業新星揚帆啟航計畫,賦能在學學生能即早接軌5G產業應用需求、更接地氣之外,也透過豐富的課程為產業人才進行本職學能的加值與再進化。

未命名

Photo Credit:TNL Brand Studio

提供300多門課程供大家線上學習。

正因5G產業應用場景更加多元與複雜,因此不只是在封閉或企業內部創造出更好的應用環境,也更該發揮5G特性擴及到消費者身上,從各種應用場景端下手,全面提升消費者的各種體驗。然而這一切的根本、仍是取決於產業人才是否具有相關的技術足以「點石成金」。

看準產業人才眼前這個急欲成長與突破的強烈需求,5G+產業新星揚帆啟航計畫提供超過300門線上課程,要讓每個人都能隨時隨地不受時間、場域限制,自我加值技能。

以5G六大重點領域匯整國內外學習資源,從5G+獨家課程、天線、射頻、晶片封測、關鍵材料、小基站/無線接取、SDN/NFV解決方案、5G應用等線上課程外,還有跨國公司Nokia合作的精選課程,藉以提升與持續精進企業在職人士及學生5G研發技術知能,助益產學的人才挹注。

此外,還提供人才結構化自學架構,以「職能」為核心建構線上學習地圖,系統化、彈性化、動態化的整合平台之國內外學習資源,藉由學習地圖指引與自學資源機制,檢視自我的需求選擇合適的課程進行進修,朝更全面的5G達人邁進。

02

Photo Credit:TNL Brand Studio

「學習地圖」的清晰圖面設計,幫助在職人士/學生根據自己的需求選擇進修內容課程。

線上/實作課程的完美結合,打造全方位5G達人

5G+產業新星揚帆啟航計畫不只提供300多門線上課程,更邀請產學專家合作開設混成式培訓課程;以今年度為例,開設包括「天線模擬與量測系列」與「SDN/NFV技術及軟體架構應用實務系列」等線上直播課程,並辦理如「Probing-OTA於天線設計之應用」與「5G應用智慧車聯網應用工作坊」等精彩實作課程。藉由線上直播共學與線下實作體驗融合的混成式培訓課程,為希望成為全方位5G的達人,提供一個具備高專業、高互動的優質學習環境與平台。

直播共學-5G_SDNNFV技術及軟體架構應用實務系列

Photo Credit:5G JUMP

直播共學-5G SDN/NFV技術及軟體架構應用實務系列

實作課程-5G應用智慧車聯網應用工作坊

Photo Credit:5G JUMP

實作課程-5G應用智慧車聯網應用工作坊

此外,也有不少國內企業借助5G+產業新星揚帆啟航計畫提供的線上、直播共學或實作課程,規劃至企業內部訓練,滿足企業需求。包括提供無線通訊量測服務、系統整合及創新研發的「川升股份有限公司」、軟板專業製造服務的「台郡科技股份有限公司」、開發電腦周邊、通信技術及消費性電子產品予品牌供應商的「和碩聯合科技股份有限公司」;專精於無線通訊產品的設計、研發、製造與封測的「啟碁科技股份有限公司」;專注5G及各項天線設計製造的「連騰科技股份有限公司」;高階電競及專業創作領導品牌「微星科技股份有限公司」;以及提供無線射頻技術服務供應商的「耀登科技股份有限公司」等,藉由產官學合作,共同提升在職人士的5G能量。

實作課程-5G應用智慧商店實作工作坊

Photo Credit:5G JUMP

實作課程-5G應用智慧商店實作工作坊

實作課程-應用於5G通訊系統的關鍵基板材料研發實務工作坊

Photo Credit:5G JUMPPhoto Credit: 5G JUMP

實作課程-應用於5G通訊系統的關鍵基板材料研發實務工作坊

你準備好「JUMP」了嗎?

5G+產業新星揚帆啟航計畫不只從校園出發,鼓勵學生在學時期就能觸類旁通,多瞭解當前市場5G的場域應用,從中了解到自己還需要強化哪些領域的技能,為未來接軌5G市場做準備;同時也為補足當前市場上人才、在職人士所缺少的能力,提供線上與實體課程,將有助於產官學界一起為人才在5G的本職學能上加值,不只是能促成產業內部技術人才投入5G的產業研發,更希冀在需才孔亟的時代,積極培育出5G技術與應用人才,強化我國5G競爭力,為產業再開拓另一條護城河。

▶瞭解更多5G+產業新星揚帆啟航計畫,為5G職涯啟程做準備!

延伸閱讀:《5G人才布局之道,給5星級的你知道!》特別報導專區

經濟部工業局 廣告


猜你喜歡