2019實習申請過程

經歷

在履歷上提到的有

  • 台灣高中資訊奧林匹亞(TOI) 選訓營 1階
  • ACM-ICPC亞洲區域賽銀牌
  • NUS(新加坡)研究實習,做可視化,跟著掛名發了一篇IEEE InfoVIS正在等結果
  • 4個課程作業(因為沒什麼project只好寫課內)
    1. OS(只有kernel,我大概2000行寫了一個FAT32)
    2. MIPS Pipelined CPU(用verilog寫的,可以中斷、異常)
      (1, 2是合在一起放在FPGA板上跑,所以也包含了VGA驅動, PS/2鍵盤)
    3. OpenGL賽車遊戲(沒有框架、直接用C++跟OpenGL原生函數+GLSL shader寫的)
    4. 協作markdown編輯器(類似Google doc,通信用socket,左右邊分割視窗可以看markdown跟結果)

有關高中、大學,學習經歷之後看反應情況可能會再發一篇到高中版。

時間表

公司 地點 時間 事件
Google 上海 18/12/4 自己官網投履歷
Google 上海 18/12/4 過CV Review
Google 上海 19/1/26 感謝信
Google 上海 19/1/28 通知轉台北
Microsoft 台北 19/2/1 請學長內推Bing
Alibaba 杭州 19/2/21 請學長內推
Google 台北 19/2/27 1面
Google 台北 19/3/11 過1面,通知2面
Tencent 深圳 19/3/7 網申
Microsoft 台北 19/3/8 1面
Tencent 深圳 19/3/9 筆試
Alibaba 杭州 19/3/13 通知面試
Tencent 深圳 19/3/14 1面
Google 台北 19/3/15 2面
Alibaba 杭州 19/3/16 1面
Microsoft 台北 19/3/28 2面
Google 台北 19/3/28 過HC
Microsoft 台北 19/4/7 offer

騰訊

去年投過一次2018暑期實習

面試問了白板題

  1. 快速排序、找一個序列的第k大O(N),用類似快速排序的方法但不管另外一邊
  2. 動態維護輸入的前10個小的數字(用max-heap)

C++: static, virtual, ~Class(), abstract class,
哪些變數放在heap, stack
大部分都是語言的基本功
但是因為實習要3個月那個時候我暑假只有2個月就不能去了

2019暑期實習

筆試

感覺非常難,120分鐘寫5題
前2題是數學題,第三題DP
到我寫完第三題大概60分鐘了,
然而我新加坡的博後催我去做實驗,就放棄了,後面兩題沒看。

事前溝通

過幾天有個面試官打電話跟我約時間,他說是深圳做遊戲部門的,
然後說看到我CV上有OpenGL經驗,問我想不想去,但我說沒有特別想去的地方,
他說看我沒有很想去,就不收了,叫我等其他人從pool裡面拿出我的CV

面試1

平台: 電話
過了一週之後有別的人打電話給我,約晚上面試

面試問得很細,但沒有要做題,主要從我的經驗來問,我說什麼它就問得更深入一些。比如OpenGL,它就問我光照的細節,主要是Phong model(specular + diffuse),shader的輸入是glVertex,VBO存的是頂點的座標,其他點shader會自己迭代,光照需要物體座標(glVertex)、相機座標、光源座標。

OS也是問了很久,我花很多時間解釋FAT32的結構,但溝通好像不是很好,我盡可能講了一下寫一個路徑的過程
MBR -> 第一個分割區 -> ‘/‘ -> for (i = 0; i < 512; i += 32) fileEntry[i … i + 31] -> 找FAT裡面的實際位置 -> 路徑比如是’/abc/def/ghi’ -> 找FAT裡面的實際位置 -> 寫入實際位置。

Markdown編輯器,問了怎麼實現,就是用Java的socket,每次監聽兩個事件,一個是文字框改變,一個是socket發來消息,文字框改變就要發socket到server,server再發給其他client。而client接到socket就要改變文字框(但再不轉發到server)。問了一下TCP/IP, UDP,但我說沒有很懂,只會用Java的那一套。

問C++, static的各種用途
vector的內部實現,每一次擴大兩倍,但是均攤插入還是O(1)。
map內部實現是紅黑樹
unordered_map內部實現是hash table,問了hash table為什麼要,
怎麼用、怎麼設計hash function,還問了一下碰撞怎麼處理。
總共時間大約一個小時。

面試2

[心得] 騰訊實習面試 (ptt backup)

台灣微軟

1面

平台: Microsoft Team

10.a.m to 11.a.m.

題外話是因為我自己時間安排的不好,
面試的時候只能找個全家坐著用電腦連手機4G面試,
訊號非常糟,還讓面試官一直聽全家的開門聲,真是抱歉。
細節不能說,但大概就是觀念題+白板題,我覺得不難,
觀念題大概都是那種聽完題目30秒內回答完的程度。
(課本或上課ptt大字那種觀念)
白板題好像都是Leetcode medium題。

資格問題

1,2面中問,HR問了我是不是台灣人,能不能來實習,
所以稍微耽誤了一點時間,不過最後沒什麼問題。

2, 3面

平台: Microsoft Team

約了9 a.m. 到10 a.m., 10 a.m. 到 11 a.m.
兩個面試,都是西雅圖的印度人面試我

第一個一上來就直接問白板題,做完了一題(雖然好像不是最佳解,我寫了O(N^2),其實可能可以O(N) )之後,他手算幾個輸入到我的函數裡面的結果,確認都是正確,就再開了一題讓我做,然後就第二題我說完想法時間就到了,溝通還算順利,雖然我的英文不太好。

第二個非常親切,還問了我一下我這裡天氣如何,問我平常有沒有運動,然後也是直接做白板題,做完一題接了第二題(第一題的延伸),做完之後他說知道我是對的,但要我解釋,我有點卡,耽誤了一下但還是正確地講完了。

第二題寫完之後還有一點時間,讓我看了第三題,我一樣說了想法,做了一下,然而沒做完。最後他問我有什麼問題,我說沒有;他反問我為什麼想來微軟,我說我從小把電腦打開就看到Windows, Office,想來是很自然的;然後問我有沒有用Bing,我說因為在中國Google不能用,我就會用Bing,因為我不想用百度。

題目都是leetcode medium難度的感覺,是不是原題也不確定,我刷的不多。

Google

最早是投了上海Google,大概投了一週後就收到面試通知。期間等了快2個月,最後突然取消面試跟發了感謝信感覺很崩潰(那為什麼當初還要說可以面試),不過隔兩天在台灣接了一個021(上海)開頭的電話,他說是Google HR,問我是不是台灣人,想不想轉去台北Google面試。

1面

平台: Hangouts
面試官是台灣人,用中文。
實現一個有某種功能的Data Structure,可能有leetcode hard程度,沒看過的題目,不說太多細節。我做題就慢慢的做,感覺不是很難,期間保持跟面試官溝通,其實有些地方沒想到面試官會提示,然後我也反覆的問還有沒有額外的限制條件來套提示。聽後來幾個面上海而且是中文面試的人說題目好像是一樣的,看來題目會重複使用。

2面

平台: Hangouts
過了幾週HR問我2面時間,但我只有晚上有空,它就安排別的時區跟我面試。
面試官在愛爾蘭、用英文
英文方面我感覺不難?我學測英文才12級,
(或者我可能大學英文有進步XD)
面試語速其實不快,聽不懂就請他再說一次。
題目不說太多細節、leetcode medium
但我思路想偏,用tree map寫壞了,
前面討論加寫花了大概20分
面試官說我的複雜度不是最佳,有些數字重複出現的問題也會壞,
然後後面慢慢的改,他提示tree map改成hash複雜度就對了,
數字重複想了一些解法可以處理大部分問題,但還是有例外,
最後他說時間到了問我有沒有問題,我隨意問了一下那邊的Google有沒有晚餐,
他說沒有,他的同事經常5點回家,他自己有時候會6點才回家。

面完之後感覺大爆炸了,
看了leetcode發現有原題
才趕緊在1週內快速看了大約150題medium,
少數覺得不好寫的寫了一下。
(當時下週還有微軟2面)

HC

過了幾週通知我HC過了,看來我之前可能太害怕了,不過不知道Team Match結果會怎麼樣。

阿里

1面

平台: 電話
問我的projects
我說我做過OS,三個人一組,記憶體管理、進程調度、檔案系統,一個人做一塊。
問了我實現FAT32的細節,改FAT,新增檔案、改資料夾的描述,32bytes 的file entry
又問了Memory mangement
Slab, kmalloc, malloc, tlb
kernel/user mode的差別
白板題leetcode medium有,我有做出來,
然後面試官也提示一些可以優化的細節。
(複雜度對,但沒有考慮優化遍歷array的速度)
結果1面沒過幾天就通知不錄取,不過說了可以再投阿里別的部門。

總結

刷題

本來的想法是覺得Leetcode很簡單,很多題都是看到腦中就有code出來,
感覺跟以前高中IOI、大學ICPC完全沒得比,所以完全沒刷過題,
我在Google2面結束之後覺得有點爆炸(應該說做題不夠順)才開始刷題,
所以我覺得題還是要稍微刷,Leetcode的方向比較是考你正確性、穩定性,
還有面試的時候不能題一上來就寫,一定要多溝通,盡量要讓他知道你想寫什麼才開始寫。

技術

(被各位說了不要提自己技術弱,
其實原義只是想表達我技術方面相對準備不夠全面,
而且還有之前騰訊洗臉技術的經驗,
不管面試過程合不合理
確實還有很多可以改進的地方)

拉高自己特殊競爭力
肯定要挑戰刷題沒辦法學會的東西,
最基本就是OS, Network, DSA的課本概念
再來就是多往底層鑽,雖然自己還是有很多不足,
之後有空可能自己練習寫database底層,
彌補之前被騰訊洗臉經驗。

學術經驗

發現不管哪一家公司都沒有在意我的學術經驗,
但不清楚CV有沒有把我去過NUS納入考慮,
所以可能做研究對找工程類工作沒什麼幫助?
(如果其他人有相反經驗可以指正)

面試結果

關於怎麼找要投哪些地方,其實我沒有刻意找,就只是看到別人分享就投。

面試後拒絕: 騰訊, 阿里
台北微軟: offer
Google: 等team match
自己放棄筆試、面試: 騰訊後來給的第二次機會, 上海Morgan Stanley, 蘇州微軟
沒有面試機會: VMware, 網易
(可能是我的投遞方式不太對,我寫了一封沒有內文的只有CV的信給招聘廣告下面留的email)

感覺中國跟美國面試風格有很明顯差異,
中國公司重技術,美國公司重思考跟溝通,
不過不評價好壞,只是陳述自己經驗。

其實去年12月是沒有規劃暑假找公司實習,
本來想找美國大學實驗室再做一個研究實習,
看能不能申請前拼一個比較強的研究成果,
但自己英文實在太爛,看著同學一個個都TOFEL 110up, GRE 330up考出來,
覺得出國讀書沒什麼希望了才轉戰找工作,
如果一開始就規劃找工作的話可能會做更充分準備。

目前的話雖然Google有機會上,但考量到微軟1年可以做比較多事情,
然後因為我Google沒有內推是自己投
(其實應該找認識的學長,但那時覺得不想麻煩別人,有點蠢)
明年應屆畢業以我現在這個經歷加實習過微軟一年,應該至少有辦法面試,
面試內容如果也還是白板題,我覺得只要不到ICPC那種超級難的題目就都還可以應付。
另外是微軟我加入的team已經是跟美國合作的team,之後轉正去美國沒有找新的team的問題,轉正微軟也比Google簡單,
所以最後應該就是去台北微軟了。