Contents
  1. 1. Nvidia - Android SW Engineer 軟體開發實習生
  2. 2. Skymizer - 軟體工程實習生
    1. 2.1. 履歷撰寫
    2. 2.2. 面試過程
  3. 3. 後續

其實我沒有認真思考過為何要找暑期實習這件事,只是看到強者們都會努力去爭取這些機會,故利用進Lab前的空檔寫好英文履歷,有幸得到Skymizer和Nvidia的面試邀請,趁著記憶還鮮明時,把過程中的感受及心得記錄下來。

Nvidia - Android SW Engineer 軟體開發實習生

這個職位在104的工作描述,是在做Android UX的自動化測試,需要熟悉Java, Python和bash script,因為本身對自動化還蠻狂熱的,就抱著試一試的心態投了履歷,過沒幾天就得到人資的回覆,外商做事果然有效率。

面試主要分成上機測試和聊天兩個部份,上機測試的題目要求是用Python做auto cherry-pick,題目會給兩個git server的幾組change,你需要寫一個Python程式把這些change當成參數,利用Gerrit query取得change中對應的project name和reference,之後在parse一個xml檔得到project的pathname,最終才能完成cherry-pick,我最後卡在剖析JSON資料的部份,整體完成度大約50%。

聊天的部份有問到我面對一個難解問題時的處理態度及方法,及履歷上一些他們有興趣的問題,我履歷上有提到用過firebug和profiling tools做debug和效能分析的經驗,就有被問到用firebug除錯時,會深入到比javascript更低階的執行環境嗎?有沒有利用Python做過任何應用之類的,並提到說這個職缺需要實作一個內部使用,基於git的tool,要在六個月的時間中獨立完成,其實和我想像中的intern有不小的落差。

Skymizer - 軟體工程實習生

Skymizer是這次找intern的主要動力與目標,會知道這間公司也是jserv老師常在課堂及臉書上數次提到該公司的強大,公司成員多來自一流大學且在如google,聯發科技等著名公司服務過,公司主要的產品是編譯器,透過獨家技術能讓顧客的程式效能提昇30%以上。

履歷撰寫

為了這次面試我在一個禮拜內努力拼出英文履歷,並用Awesome-cvlatex排出較為清晰的履歷版型,在這之前我沒用過latex,中文履歷也是用104的制式格式,履歷內容的產出很大一部份歸功於jserv老師,老師教我如何蒐集公司資料,分析自己的優勢與劣勢,最重要的是如何把自己做過得事情和經驗,透過履歷與職務產生連結,在這次面試過程中,我的履歷也得到面試官的肯定,其中一位提到他們通常會在十秒內掃過一份履歷並決定是否給其面試機會。

我的英文履歷

在撰寫履歷期間,我參考過不少網路資料,並簡短紀錄成幾篇文章,有興趣的可以參考:

  1. 用Latex寫個人履歷 - 以Awesome-cv作為template
  2. 寫英文履歷時的筆記

面試過程

面試當天總共有四位面試官,他們首先簡短的自我介紹後,換我被要求用我的履歷做自我介紹,我原本就有準備自我介紹,但跟我履歷上的順序是不一致的,這會讓面試官無法對照履歷獲得一個有系統的認知,建議準備自我介紹的時候可以按照履歷的排列順序會比較好。結束自我介紹後,面試官針對履歷上他們有興趣的項目做進一步的細問,我被問到

  • 你用過perf和gprof,那他們有何不同的地方嗎?
  • 你覺得perf的結果準確嗎? 還有perf之所以能偵測程式熱點的機制是?
  • 你如何用perf知道程式的cache misses rate有降低,指令是如何下的?
  • 你說你用過gnu toolchain,那除了make和gcc,還有哪些utility是你有用過得?
  • 你有撰寫過ld script的經驗嗎?
  • 請問git rebase是什麼?

專題相關問題

  • 簡述畢業專題負責的部份
  • 五子棋AI的部份是到怎樣的程度
  • 有用C++做過什麼專案嗎?Python呢?

之後面試官給出了三個選擇,要上白板寫解法,一開始我用dp寫了第一個版本,被要求能否在更快呢?我把dp用來存資料的table修改為幾個variable,如此省掉array初始化的空間及array存取的overhead,因為forloop中有用到i++,就被問到說i++++i的效能差異,並寫兩個function去實作i++++i的差異,這裡我大概就卡了二十分鐘,之後回到原本的題目,被要求O(1)的解法,最後實在做不出來,面試官給出解題方向,例如可以在compile time先建制好table,並把table entry塞在GPU或CPU register中,即可在run time時以O(1)得解。

被問到的問題其實沒有很多,白板題的部份花掉太多時間,使得我有準備一些如程式設計師的自我修養中提到的知識沒機會被問到,另外,履歷中所有列出的陳述,都應該先思考被問到相關問題時該如何回答,使得在固定的面試時間內,能讓自己有更多表現的機會。

後續

Skymizer在面試過後的幾天(5/27)來信,告知沒被錄取的結果,與一般罐頭感謝信不同的是,裡頭描述了我面試過程的表現與建議,讓得知結果後的心情除了沮喪,也有溫暖再出發的心情

謝謝您申請 Skymizer 的見習勇者,我們有感受到您對此職位的熱情與積極。
你使用 gprof 和 perf 的經驗是我們所重視的,在面試的過程中,我們也發現你會主動針對自己不足的部份尋求成長的空間,不斷進取的態度讓人印象深刻,你也有找到對應文件自行判讀的能力。

很遺憾的通知您此次沒有機會與您合作,但我們看得出來你有很大的潛力,也非常期待你未來的發展。一點個人的小建議,你的能力很優秀,在面試的時候對於題目可以更主動一點提問,可以讓你更加亮眼喔!

我們會在 blog 或粉絲團上分享我們對於產業、技術的想法,歡迎你繼續跟我們交流想法,也誠摯邀請你下次再前來挑戰!

感動之餘我寫了人生第一封落榜感謝信XD

Dear Little Sky,

感謝Skymizer給了我面試機會,讓我有機會重新檢視自己並追求卓越。

撰寫履歷的過程是有趣且充滿挑戰的,我從各方面蒐集Skymizer的相關資訊,包括Luba和Peter在COSCUP的演講,
看完後除了敬佩更增添我想在Skymizer工作的念頭,再寄出履歷後過了好久才等到回音,能得到你們的面試邀請真的很令我開心。

謝謝你們在面試時點出的問題,包括履歷的錯字,自我介紹的順序等等,你們對於程式執行效率的執著令我印象深刻,我會用這樣的態度去面對我以後撰寫的每個專案,
希望未來能夠通過你們的挑戰。

Contents
  1. 1. Nvidia - Android SW Engineer 軟體開發實習生
  2. 2. Skymizer - 軟體工程實習生
    1. 2.1. 履歷撰寫
    2. 2.2. 面試過程
  3. 3. 後續