拆解軟體工程師面試過程:Onsite interview和實作時要注意什麼?

我們想讓你知道的是
號稱軟體工程師界的面試天堂路「technical interview」,不是很會解題就可以通過?任職高科技產業的作者,將分析technical interview長什麼樣子?平常要怎麼mock interview才有效?
文:Mia Chen
在疫情還沒降臨前,我很幸運地曾到幾間科技公司進行onsite interview。以下和大家分享我的面試經驗,希望能為大家解惑。也希望疫情趕快結束,讓onsite interview不再是艱難的virtual onsite。
Onsite前要先過五關斬六將
在onsite interview之前,通常還有兩關考驗:
Online Assessment(OA):在線上軟體根據題目要求寫程式,通常有三題到八題不等,且每題都會有幾十個test cases,自動測試你的程式是否達成題目的要求,只要通過所有test cases就算通過。沒有面試官,但有時間限制。個人覺得這階段的體驗最差,因為沒人討論,再加上剩餘時間會顯示在畫面上,眼看時間一點一滴流逝,心理壓力很大。
Phone Interview:面試官打電話給你,在線上共同的編輯器解題目,通常會考一或兩題,每間公司限時不同,大約都是45至60分鐘。你可以在自己的紙張上寫自己的思考過程,或是列出可能的edge cases,但也因為面試官看不到,他比較難知道你的思考邏輯或給你其他思考方向。所以你必須不停地講話,讓面試官跟上你的思考,或是在共同編輯軟體上盡可能以最簡單的方式表達你的想法。
有些公司只有OA或只有phone interview,甚至有些人很幸運直接onsite interview。
進入重頭戲:Onsite interview
面試官進門,他會請你用一分鐘自我介紹。不過並不是每位面試官都會請你自我介紹,有些也只是為了幫助你放鬆才請你自我介紹。
面試官接著會開始講題目,但不一定會把所有需求或限制都講完(這同時是考驗你是否思慮周到的一環)。建議你可以先用你自己的話講出你理解的題目,並舉一個最簡單且有input與output的例子,跟面試官確認你的理解無誤後,再開始想其他edge cases。
在尚未implement前,多花一些時間在思考edge cases絕對是值得的投資(例如:input是空array、input是null、數字會不會小於零等)。edge cases想得越多越好,當然也要跟面試官確認output,避免實作時才發現未考慮的條件而亂了手腳,甚至太緊張而想不到如何修改自己的程式。
如果所有情況都考慮到了,實作也不會佔太多時間。edge cases可以寫小小的在旁邊,包含input和output,最後實作完可以用來驗證你的程式。
在思考的時候,也要記得告訴面試官你需要時間思考,不要莫名就陷入自己的思考,把面試官晾在那,畢竟面試官也在思考:「如果這個人未來是我同事,會不會很難合作或溝通?」
確認完edge cases後,你要先描述你的解法(切勿直接實作程式):演算法或是資料結構的關鍵字可以講在最前面,例如「find a cycle in the graph」、「store the data as linked list」、「solve the problem by using Stack」、「use Kruskal's algorithm」,讓面試官清楚知道你會做什麼,也向面試官傳遞「你對題目的了解是否正確」的訊息。如果面試官沒有阻止你,通常就是在對的路上。
描述解法細節時,可按順序條列你程式裡會做的事(寫關鍵字就好):用來紀錄你的想法,以確保你不會實作時太緊張而忘了下一步,也用來取代pseudo code向面試官傳遞想法的功能。因為pseudo code較花時間與版面,如果有面試官糾結你格式是否正確更是浪費時間。所以建議只要用英文依順序條列你會做的事即可。

實作的重點:邊寫邊講,每實作下一行前請確保面試官跟上你的進度,當你偏離面試官心目中的正解時,他才能適時地給你引導,或是提醒你這行有更多edge cases要處理。你可以想像你們在pair programming,隨時注意面試官給的回饋。
實作完後可別急著說你做完了,一定要用test cases遍歷你的程式(遍歷=test coverage 100%):用test cases走過你每一行程式,看每走完一行你的test case與各變數會變成什麼。想一個中等規模的正常例子,前面寫下來的edge cases也要拿來用。
這個步驟類似單元測試,仍算實作的一部份,所以遍歷的時候若發現程式錯了,修正是可以被接受的。因為例子是你想的,錯誤也是你自己發現的,修正當然也是合理的。
實作完的其他注意事項
接著面試官會問你time/space complexity,這裡就沒有什麼訣竅,倒是刷題的時候需要多練習(這是刷題時很常被忽略的步驟)。分析複雜度是考驗你對程式的理解程度,你是否知道這個程式的瓶頸在哪:哪裡需要花最多時間執行、哪裡需要花最多空間儲存。知道瓶頸在哪也才知道如何改善程式。
你知道瓶頸在哪,面試官也就順理成章地問你:「你要如何改善?」這時你要思考其他解法以改善你的程式,通常就是用別的資料結構存取更多資料以空間換取時間。如果面試還有時間,面試官可能會請你修改你的程式來實作改善方案,也會問你新解法的time/space complexity。
Tags:
新經濟是什麼?由新興產業持續創新與成長,所帶動的「舊經濟」變革

我們想讓你知道的是
本文將帶您了解什麼是新經濟、新經濟所帶來的影響,進而探討台灣該如何在國際市場激烈競爭的環境下,發展新經濟產業,使台灣能與世界接軌,同時帶動傳統產業轉型成長。
經過前幾年病毒的肆虐,全世界一同承受了疫情時代封城、居家辦公、社交距離等種種衝擊,人們在工作模式與市場經濟行為上,都受到了不小影響與起伏動盪。然而,即使疫情期間面臨著層出不窮的挑戰,新經濟產業成長的勢頭並未減緩,甚至更加蓬勃尋找出路。長期致力於促進台灣產業發展的民進黨立委趙天麟表示,為了因應大環境不斷變動的市場需求,台灣需要積極創新與進化,把握迎面而來的機遇,才能為市場帶來新的希望與活力。本文將探討台灣該如何在國際市場激烈競爭的環境下,發展新經濟產業,使台灣能與世界接軌,同時帶動傳統產業轉型成長。
什麼是新經濟?新經濟定義介紹
新經濟一詞起源於1990年的美國,當時的美國景氣迎來空前盛況,各行各業呈現「高成長、高所得、低物價、低失業率」的現象。部分支持「新經濟理論」的學者認為,促成此現象的原因分別為以下6點:「全球化分工生產」、「金融市場變遷」、「僱用型態改變」、「美國贏得冷戰」、「開發中國家提供市場」、「資訊技術的發展」,同時高科技產業仍不斷創新,一並拉抬了其他產業的生產力,讓社會整體呈現欣欣向榮的氛圍。時間拉回到現在,「新經濟」一詞的定義變得相對模糊,目前主要意指能為傳統產業帶來革命性影響的新興產業或科技,像是近年來的大數據、5G、AI等,都可以視為新經濟的一員。
本文以大數據舉例,說明新經濟所帶來的變化。在還沒有大數據分析的年代,各行各業收集數據受到限制,只能透過人工統計整理,難以針對收集來的數據進行全面分析,更別說從資料中找出各個事件的關聯性,在下達決策時也一律以經驗來判斷。而大數據的誕生,讓所有產業的資訊處理能力有了飛躍性的提升,企業可以快速分析數以百萬筆的資料,並從數據中預測出未來的趨勢,提高各行各業的效率及競爭力,進一步發展出以數據為主的全新商業模式。
除了上文中提到的資訊科技產業外,近年來藝文、運動等新創產業,亦是開拓新經濟所關注的重點領域,例如由趙天麟立委號召的「大高雄38區公益慢跑」,除了成功突破台灣當時最高夜跑人數的紀錄之外,立委同時也邀請了全球6大馬拉松中的日本東京馬拉松總監、與德國柏林馬拉松總監一同共襄盛舉,並共同商討將高雄馬拉松推上世界舞台的可能,促進高雄運動新經濟的誕生。
新經濟影響巨大,引領全球經濟發展方向
新經濟的影響之所以巨大到能引領全球經濟的發展方向,主要與新興產業強勁的技術研發能力有關,不僅效率獲得大幅度提升,在技術層面更是改變了整個傳統產業結構,若無法跟上新經濟的腳步,將很可能會快速被市場淘汰,也正因如此,各國才開始逐漸重視新經濟的發展,積極投入資源,並將新技術整合進傳統產業中。
以美國為例,近年來積極發展「再工業化」,將重心放到新經濟產業發展上,以潔淨能源、健康醫療、電動車、生物工程、半導體等領域為首,提供特殊稅收抵免優惠以及各種補貼政策措施,爭取技術人才、資金回流美國,進一步推動新技術與新能源的應用,再造能兼具環保節能,且擁有高效產能的全新工業型態。在這樣的政策方向下,美國許多州都推出了鼓勵再生能源發展的政策,其中包含減免相關產業的稅收和提供購電補貼,同時還為氫燃料電池與儲能技術提供大量的研究資金,促進潔凈能源技術的創新和應用。

既然新經濟勢不可擋,有哪些新經濟產業值得我們耕耘呢?
新經濟產業的興起,大多與科技發展和滿足人們的需求有關,而能讓台灣有機會成為領頭羊的新經濟產業有4種領域,分別為健康醫療、能源科技、電動車、數據相關產業。這些產業之所以能成為新經濟的契機,主要是他們擁有以下特性:
- 有新技術誕生,或是技術有重大突破
- 與人們的日常生活息息相關
- 政府重點關注發展的產業
- 投資人一致看好,願意挹注資金
- 順應國際市場趨勢
舉例來說,各國為了降低交通運輸產生的碳排放量,正在積極發展使用電力驅動的交通工具。而為了提高用電效率,過去不被看好的氫能,於近年來也逐漸受到關注。相較於鋰電池來說,使用氫燃料電池效率更高,且能提供更多的能量,許多專家都認為氫能未來很可能會發展成能影響整個電動車市場的產業,甚至有機會成為各行各業不可或缺的能源供應技術。身為台灣氫能發展重要推手的趙天麟立委也表示,台灣的氫能供應鏈,從上游製氫到下游氫燃料電池的供應,已佈建得十分完整,甚至包括工業餘氫或家庭廢水,都能成為供電循環系統之一,讓工業、家庭用電能與氫能串接起來,大幅降低台灣的碳排量。因此政府與民間應更重視對氫能的投入,讓台灣在能源科技新經濟領域得以佔據領先地位。

如何推動台灣新經濟?從趙天麟立委的「運動新經濟概念」啟發
台灣仰賴出口貿易,容易受到全球經濟環境的影響,且疫情與國際經貿情勢的動盪,讓各行各業的工作型態發生巨變,在穩定發展的前提下,台灣目前仍需依賴強勁的半導體產業帶動整體發展。不過,考量到分散風險對於穩健經濟體的重要性,台灣公家機關與各大企業也沒有停下腳步,積極推動產業升級與轉型,除了關注工業及高科技產業的發展之外,運動產業與藝文產業也是值得我們關心的領域。
立法委員趙天麟在過去高雄市長初選期間,便曾提出「運動新經濟」政見,希望將高雄馬拉松提升到世界頂級馬拉松之列,成為「世界第7大馬拉松賽事」,以此來吸引參加比賽的國際遊客,間接帶動高雄的觀光熱潮。另外,趙天麟立委也注意到,日本沖繩做為日韓兩國職棒的「春訓基地」,每年為當地帶來非常可觀的觀光產值。然而,高雄不只春季雨量較沖繩少,氣溫也更平均,相較之下擁有比沖繩更優越的氣候條件,很適合打造成新的職棒春訓基地,若能結合當地旅遊景點的優勢,帶動棒球迷前來朝聖,將能透過發展運動新經濟為高雄帶來十分可期的觀光效益!
在藝文新經濟方面,也可以發現台灣近年來積極建設文化中心,循序漸進地推廣藝文產業,例如趙天麟立委曾到瀨戶內海藝術季參訪,希望能效仿「藝術帶動觀光經濟」的模式,邀請頂尖藝術家在原住民古獵道或是海岸線等地,設置裝置藝術或進行藝術表演,用藝術吸引全世界的遊客來訪,讓藝術不僅療癒人心,還能為地方創造新經濟貢獻。
現在世界各國正急於加速復甦經濟,一方面希望能妥善因應疫情帶來的經濟衰退、另一方面則期盼能降低通貨膨脹帶來的衝擊,為此各國都想站在新經濟的浪頭上,掌握新經濟產業的主導權,其帶來的不僅是新商機,甚至可能影響到10幾年後的經濟局勢。因此,我們迫切需要找到適合發展的新經濟產業,並善加經營,才有機會在國際舞台上佔有一席之地。
本文章內容由「趙天麟國會辦公室」提供。