微軟實習心得 (backup from Dcard)

https://www.dcard.tw/f/softwareengineer/p/235458778

因為在網路上大部分文章都是實習面試的心得或者詢問微軟實習如何的文章而不是具體的講實習的內容,我想將過去實習1年(2019 7月-2020 6月)的過程跟大家分享。

我的部門主要做地圖以及geocoding,在美國有60個人左右,在台灣有4個正職加約10個實習生。由於組內大部分的人都在美國,平常溝通就是台灣的7:00-9:00用Skype(現在叫Teams),我的mentor是一個在美國工作的台灣人。組裡面的成員素質都非常高,美國那邊CS四大名校(Stanford, CMU, UC Berkeley, MIT)的畢業生每一間都有(但實習生錄取標準還是以coding能力為主,不看學校,不然我當初就進不去了XD),在這裡光是跟他們聊天就可以學到很多東西了。

從一開始我就沒有把實習當作一種體驗的心態(即使它叫做未來生涯體驗計畫),我剛來微軟1個月我就提了我想轉正,雖然那個時候提沒甚麼用,不過就讓主管有個底記得我想轉正也好。

前期我大部分的時間都只是熟悉環境,不過我覺得這樣沒甚麼事情實在不好,我就找了在台灣的同事給我一些小雜事做,比如重構以前的舊code,或者清理數據之類的,至少刷一點存在感總比發呆好。第一次跟manager 1-1之後我講了我未來的規劃還有想做的領域,我的mentor開始帶我做很多跟backend有關的事情,我在這一年裡因為平常學校沒甚麼課,我花了很多時間在做組裡面的projects (有些不是獨立完成),涵蓋的內容有訓練機器學習的模型、寫android app、做了後端的dashboard、還有寫了幫內部做data-labeling的工具。

除了做組內的事情以外我也有去幫忙一些微軟實習的活動,比如校園宣講、企業參訪,一日實習生體驗之類的活動,這個不強制,我自己想幫忙才去的,但做這些活動很花時間就是了,剛好我不用上學才能參與這麼多,也很感謝辦這些活動時其他實習生們也都付出了很多時間。

到了隔年3月左右主管開始幫大家排轉正面試(我上一篇裡面本來寫聽學長說不用面試就可以轉正,但其實不是真的XD,不過頭都洗一半了也是要好好準備面),最後我面試表現還不錯通過了之後就留下來當正職了(實習跟正職中間大概gap半年因為我要去當兵,感謝微軟願意等我)

我覺得我會轉正的關鍵主要有兩點,第一是我運氣真的很好跟到很用心帶我的mentor,我的mentor願意放心把一些比較大的project讓我做,而且也會幫我爭取在組會報告的機會(組會是在疫情前美國實體開的會,平常大概有20-40人會參加,我去報告的時候是線上加入,而我的mentor在現場看),到要轉正之前很多美國的主管對我相對於其他實習生就比較有印象,這不是因為我能力比較強而只是因為我的mentor不斷幫我提升我在組裡面的能見度。

第二個原因是高中到大二很幸運可以持續接受了大約5年的IOI & ACM-ICPC訓練,因此最後轉正面試問到的所有白板題我都可以迎刃而解。不過都實習1年了最後轉正面試還是有很大比重的白板題,個人覺得對認真做project的人反而有點不公平,不過既然制度是這樣,只能說隨時都練好leetcode比較實在。

我現在已經當完兵回來微軟做正職SDE 1了,以後應該會繼續在微軟待至少超過2年,或許從今年暑假新的實習生進來也有機會遇到我,今年實習也快要開始了,如果想要來微軟實習的話可以搜尋微軟未來生涯體驗計畫的官網,記得要填部門為Bing Maps,如果刷題還行的話應該至少都會有面試機會。

[心得] 讀浙江大學3年的經驗分享 (ptt backup)

前言

我現在是浙江大學大三計算機科學與技術的學生,從小學到高中都在台灣讀,接下來要回台灣微軟實習,又到了學測申請季,由於當初來讀浙大時,可以參考的資料實在比較少,實際到浙大發現跟想像有不少差異,故寫此文供學弟妹參考。

(這篇文只討論浙大CS生態,想知道這邊日常生活可以問問去過這邊交換、工作的人,應該都差不多,有空我也可以再分享這邊食、衣、住、行的經驗)

常見的迷思

我覺得要來浙大需要想清楚原因,通常會覺得有落差就是因為想要的跟得到的不一樣
常見的幾個原因

  • 國際觀
  • 世界一流大學(大學排名)
  • 校名優勢
  • 教學強
  • 國際交流
  • 同儕競爭激烈
  • 科研強
  • 資源多
  • 人脈多
  • 工作機會

我當初去的原因

其實很簡單,就只是學測爆炸了,但想去一個至少能讓我比ACM-ICPC的地方,我的學測成績在台灣上的學校(大概中字輩),競賽風氣沒有很强,那個時候我覺得大學能比ICPC就好了就沒多想。

現在回想是有點愚蠢,雖然我的目標都有達到(代表學校拿到亞洲區域賽銀牌、去新加坡交流、拿到實習offer),但我覺得整個過程非常累,而且生活過的不快樂。

教學

教學是大學最基本的任務。
這裏只討論浙大計算機的課程
課程分成幾個部分

  1. 通識 (15)
  2. 基礎必修 (40)
  3. 專業必修 (50)
  4. 選修 (25)

上面的數字代表學分,數字沒有很準,
我是按照上過之後自己分類

通識課

關於通識我比較沒有什麼意見,
不過你會發現你的同學在通識課上認真(惡性競爭)的程度強到讓你沒辦法輕鬆上通識課,
比如在圖書館做完通識課報告站起來看到對面也做同一個報告,但自己30頁,對面寫了50頁,
這裏的學生會毫不猶豫坐回座位繼續寫超過他。

基礎必修課

微積分,線性代數,物理,程式設計,統計等。
整體非常糟,少數有教學比較好的老師。
全部中文教材、中文教學、上課沒有課本只有學校自己印的一本講義。
注意到這些理工科目不像台大每個科系開不同的課,
尤其程式設計,計算機的程式設計跟大家一起上,
以至於大部分大一的內容大二都要更新(外系的程式觀念比較弱)。

專業必修

選課自由低,每一門課都要選,選課只是給你選時間跟老師。
關於選課自由度的好處,我覺得要對每一個方向都感興趣不容易,
沒有選課自由會造成你浪費時間又沒學會一些必修課。

教材:北美原版經典教材,不過大部分學生都買影印版或者中譯。

課程很強調底層(硬體)實現。
比起台大沒什麼硬體課來說,
如果對硬體興趣不大(比如我)會非常痛苦。

題外話:本來我對浙大的專業課評價不怎麼好,
不過最近跟某個台大資工而且去過Google實習的學長聊,
發現台大的課也沒傳説中的那麽厲害,
所以就不過多批評浙大的專業課。

語言課

  • C
  • OOP(C++, 主要考語言,不會教你太多設計思想的東西)

理論課

  • 離散數學 整本課本除了數論跟自動機都學了
  • 資料結構(教stack, list, tree, graph, shortest path, MST, hash, sort)
  • 演算法(AVL, B+tree, RB Tree, leftist heap, DP, Greedy, backtracking, Search, local search, 隨機化的演算法, 平行計算概論)
  • 計算理論(課時比較少,只學了DFA, NFA, CFG, Turing machnie, 可計算問題)
  • 編譯原理

硬體課

12學分
必修有數位邏輯、Organization, Acrhtiecture
大部分時間需要去共用實驗室用Xilinx的IDE寫FPGA版,助教驗收。
跟台大比我覺得浙大的硬體課非常難,
比如7段顯示器、VGA, PS/2鍵盤都需要自己用Verilog寫,
MIPS的CPU要寫出包含pipeline, interpret, cache。

系統課

  • 資料庫: 學SQL底層原理
  • 作業系統: 期末做一個OS,三個人一組,
    一個人做file system, 一個人做process, 一個人做memory,整體工作量很大。
  • 計算機網路: 跟大部分大學差不多,就學一些理論。

其他必修課

  • 溝通技巧: 學怎麽寫論文的survey

我選的選修課

選修課良莠不齊,不過好的選修課還是有,但也很難選。

重點提一些我選過比較有意義的課:

  • Graphics: OpenGL, GPU原理, shader, depth test, illunation, shadow, global illumatiion, Cornel box, ray tracing, 倒數第二節課去網易遊戲參觀(那個時候跟我們介紹的遊戲是逆水寒),最後一次課展示自己做的3D遊戲。

  • Operation Research: 線型規劃、單純形法、整數規劃、matroid, primal dual, 重新解釋MST, SP, s-t flow, 講了一些近似問題,圖論、匹配、證明1.7倍的bin packing近似比.

  • Vision: 傳統CV, gaussian filter, corner detection, image sitching, Canny, Hough, 光流, 鳥瞰圖, CNN簡介

出國(美國)

出國可以説是浙大計算機專業最大的戰場,
如果沒有足夠決心建議不要輕易進入,
基本上全學院400多人,前30%都是想出國的人,
你將面臨100多個TOFEL 110up, GRE 330up程度的人,
跟你一起競爭各種名額。

出國的要的準備有:

  • GPA高,在浙大GPA 3.8/4.0才比較有機會出國讀Top 30
  • GRE 330 up
  • TOFEL 110 up
  • 出國交流經歷: 建議安排在大一升大二或大二升大三暑假(越早越好)
  • 研究經歷
  • 推薦信
  • 大三結束以前發論文

關於暑假或學期中出國交流,又可以分成3種

  • 上課
    這個競爭比較沒那麽激烈,只要稍微準備就行了,
    機會算很多,學校也還行比如新加坡NUS, 加拿大UBC
    但跟台灣交大比我覺得他們的機會比較好
    (台灣交大可以去UIUC交換而且校内競爭還沒那麽激烈)

  • 研究
    這是名額雖然多但競爭可以説是最可怕的一項,
    在這裏因爲大家都想出國纍積研究經歷,
    每個人都會自願不領研究室經費去美國的實驗室做一些研究項目,
    一般稱爲署研
    (這裏特有的概念,台灣沒有這種説法,
    因爲臺大學生不需要這麽做就能申請上好的美國學校)
    整個過程大概從大三上學期就要開始準備,
    浙大比較流行的幾個學校有

    • University of Notre Dame
    • UC Davis
    • UCLA - CSST
  • 2+2或3+2或4+1,雙學位項目
    名額極少,一年就5個左右,很難拿到機會。

最近即使有前面説的那些經歷也不太夠了,
想出國還要有研究經歷,最好要發論文,
所以校内好的實驗室也是高手競爭的戰場,
你想自告奮勇進實驗室幫忙老師做研究還不一定給你這個機會。

工作

在這裏找工作機會確實比較多(高端工作),
比如阿里巴巴、騰訊、百度、今日頭條(抖音),
外商也很多比如Google, 蘇州微軟, 微軟亞洲研究院, VMware
尤其蘇州微軟是全球第二大的微軟園區。

但是找工作的難度也沒多簡單,
詳情可以看我的另外一篇文章,
2019實習申請過程
很明顯阿里、騰訊比Google、微軟難,
然而即使都能去我也只想去Google、微軟(名氣大、工作環境好、不用加班、國際化強),
另外是如果真的要在這裏工作,要有996(早9點上班,晚9點下班,一周工作6天)的準備,
目前中國互聯網產業都是996工作制。

一般來説,同一家公司,比如Google
美國Google面試難度 <<<< 中國Google面試難度
在中國雖然機會多,難度也是全世界最難的,
輸了面試找不到工作跟沒機會一樣,要有心理準備。

找工作要准備的項目有

  • 人脈(才能有人幫你内推公司)
  • 競賽經驗(ACM-ICPC,或者各種創業競賽)
  • 實務經驗(盡量要是課外有大貢獻的project,如果沒有也要有校内課程作業前幾名的程度)
  • 在校成績(業界其實還是會看在校成績,不能太爛)
  • 實習(正職很難找,一般要先實習才有機會轉正)

每一項都要很認真準備,最好大一就開始佈局,這裏生態就是這樣,
經歷不夠會被表刷,連面試機會都沒有。

校園生活

關於同學,感覺這裡的學生都很聽話,
即使是一些明顯不合理又浪費時間的事情
比如: 每天去球場打卡(意思是想讓大家每天都運動),
占體育課10分,就可以看到每天都有人去打卡。
學校突然要求每個學生一個月内跑42公里(用意同上),
用手機app打卡計算里程,還要跟著班上同一時間跑,
大家就都真的去跑了。

學生對於分數的追求很病態,為了保研汲汲營營,
為了期末分數寫email跟老師吵,
有些課是分組打分、但總分固定、小組自己分配分數,組內也會吵的很凶。
比如這個小組的表現老師打25分,組内有5個人,并不是每個人5分,
而是組内協調誰多誰少,有人7分有人就變3分,反正總和不變,很神奇的制度。

(這裏可能有點問題,似乎有些社團還不錯只是我沒參加,不能以偏概全)
學校内沒有像台灣那樣的社團生活,
有些組織是管理很官僚,
這裏社團目的性很强,很多人不是爲了喜歡一件事情,而是爲了增加自己的經歷
所以想當然,臺大有的XX之夜、XX晚會、高中生營隊,在浙大都是不存在的。

我大學到現在沒長期參加任何一個社團,
以前參加過類似系學會的組織,
大部分時間都在搬東西,打雜,感覺沒有很有趣就退了。

不知道像我一樣的人是不是多數,
以前都聽別人說上大學就輕鬆?
反正我是上大學後壓力比高中至少多2倍以上,
壓力來自很多方面,比如來浙大之後就很少回家,
課業壓力也大,而且不好融入本地生的活動,
經常處在緊綳的狀態沒辦法放鬆,
即使假日閑下來也沒什麽有意義的娛樂,
自己這三年的校園生活都不怎麽快樂,
我覺得(至少我是這樣)在浙大沒有辦法做到
追求自己想要的目標,同時過輕鬆愉快的生活。

説了這麽多,又沒頭沒尾的,
感謝你辛苦看到這裏,
做一個結論就是雖然浙大有很多優勢,但獲取這些優勢要付出的代價可能比優勢本身更大,
用游戲來比喻的話就像原本你只是玩簡單模式,來這裏就像調成困難模式的校園生活。

(我猜上交、復旦、南京這幾所學校的情況應該跟浙大很類似,如果有這幾間學校的同學可以留言談談你們的情況)

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簡單,
所以最後應該就是去台北微軟了。

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

我之前在騰訊官網投了CV(後端實習)
過幾周接到電話面試
結果非常慘,上來討拍 T T

一開始讓我說了一下自己的經歷

  • ACM-ICPC亞洲區域賽銀牌
  • 新加坡國立大學研究實習
  • 現在正在字節跳動(抖音、今日頭條)實習
  • projects :
  • OpenGL(glsl)賽車遊戲
  • verilog 寫的mips cpu
  • 簡單的OS,我寫了fat32
  • java做的共享編輯器(類似很簡單的Google文件)

然後他就問了一下Java編輯器,大概說了細節,他覺得我沒有處理好兩邊同時修改的問題,覺得我這個project沒什麼用。

又問了一些網路問題,tcp/udp的差異,但他一直說我只說了表面沒有提到核心。問了IP分片,我講了幾個flag跟offset的用途,但好像也不太滿意。

OS,問了我怎麼實現我的file system,簡單解釋fat32操作,我實現了fopen fwrite fclose fread,目錄解析,遞迴找檔案實體,修改fat的細節,fat是個類似linked list的結構。但他就又問了inode的問題,然後說怎麼沒有實現ext2那種b+ tree的結構,覺得我這個沒什麼用。

algorithm題目沒有問白板題,而是問b+ tree的定義,怎麼插入,我覺得我都回答出來了,但好像不太滿意。關於b+ tree還問了怎麼實現database底層,怎麼把DB索引跟b+ tree接在一起,我沒做過就答的不太好。

最後問了C++,第一題先問smart pointer,我說沒有用過不是很懂,只知道有垃圾回收的功能。然後問什麼是byte對齊,怎麼把一個struct傳給遠端的人,我答序列化,但他又問我序列化的細節,我不太懂序列化序號的細節,他不太滿意。

最後問我覺得我的競爭力在哪,我只能說我學習速度很快,比如OpenGL我只學了1周就能寫code,但沒說服他的樣子。

唉可能我真的還沒準備好,還是要多累積經驗,有空多看點書,多挑戰更難更底層的project吧。

新加坡國立大學署研經驗

署研經驗

我是浙大2016級 計算機科學專業 在大二的暑假去新加坡國立大學做暑研, 由於現在申好一點的北美研究生基本都需要有科研相關經驗,

因此我也分享一些我自己從申請署研以及暑研過程的經驗

申請準備

首先你需要一個CV,格式可以參考別人

重要的訊息有:

  • GPA (overall, major)

  • 科研經驗(我沒有,所以沒寫。如果有參加SRTP或者加入國内的實驗室最好都寫上,有成果會更好,比如論文,不是一作也沒關係)

  • 得獎記錄(我去年(2017)暑假參加了浙大ACM-ICPC校隊,得了亞洲區域賽銀獎)

  • 項目經歷(比如做過什麽創業項目,或者SQTP?,我沒有所以沒寫)

  • 你的技能(會什麽語言(比如Python, R),什麽技術(比如機器學習))

  • 英文能力(可能不是很關鍵,暑研的話不像申請正式的項目,不會有硬性要求托福成績要多少,一般來説只要能通過實驗室老師或博士後面試就行了,同意讓你去實驗室也只需要老師同意就行了。我到暑研回來托福都還沒考😂)

找導師

其實可以問問高年級或者已經畢業的人以前去過什麽地方,好像還有個網站是能搜老師的評價?

但我自己是因爲別人推薦才去的。

面試

我的面試似乎不是很理想。。就讓我自我介紹(會什麽,得過什麽獎之類的,跟CV差不多)然後問了一下有沒有CNN的相關經驗,但也答得不是很好,後來推薦我的人幫我説了一些好話我才進的😂。

簽證

暑研要注意早點申,不然簽證時間太趕的話很危險。另外要密切注意暑研學校辦公室發來的消息。

另外就是我去NUS的時候,他要我準備一個浙大同意我去NUS的文件,這個也要早點處理,因爲能蓋章的人在浙大玉泉曹樓,大二的時候還在紫金港很不方便,曹樓辦公室的人也不一定在,而且可能不止跑一次,相關文件非常多。

自己去暑研也需要在學校登記,就跟學校其他正式的交換項目一樣。具體的做法是要先去找玉泉對外交流科,讓他幫你單獨立項,你再到教務網申請。然後要填出國申請表(兩份)。回來好像還要寫總結。

暑研的内容

本來我是跟著做一個multi-task deep learning的項目,内容是辨識飲料的時候除了直接使用飲料的名稱學習以外,還可以加上其他標簽,比如可樂裝在鋁罐裏之類的,如此可以提升正確率。

然而隔壁組的博士後在做一個Data Visualizaiton的項目,用了一個Edge Bundling的Algorithm叫KDEEB,裏面用到了OpenGL的功能,但他自己跟他的實習生沒有學過OpenGL,所以我就又做了這個project。

總體來説還是有點忙的,因爲做兩件事,沒有什麽休息時間。只有國慶日那天我一整天都沒有工作,其他一周七天都在工作,但工作内容也都很搬磚,比如Deep Learning的部分因爲模型都差不多了,所以我就負責收集跟整理數據(圖),KDEEB就是不斷的寫他們想要的東西,大概寫了2500行C++。

成果

  • 可能有一封推薦信? 還沒拿
  • 幾篇N作論文
  • CV上可以增加一個Research經歷
  • 拓展人脈(其實這點還蠻重要的)

OpenGL Off-Screen Rendering

Recently, I wrote an OpenGL off-screen rendering C++ code for Yan’s group at Dr. Brain’s lab, NUS. They already have a C# version, but it’s on-screen and wrote in C# KDEEB. They want it can be run on Linux server with more powerful GPU. So they ask me to help them implement this. There are many things need to be noticed. So I keep my experiences here.

At first, I naively think that I can use GLFW with glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE), it looks like off-screen (when I test on my PC), but what really happen is the program still need XServer. Once I use ssh to launch my program, I got error message:

Xlib: extension "GLX" missing on display ":0".

And I search this on the internet, finally I found that I should not use library which depends on xorg. The solution is to use EGL to create context instead of GLFW, and use OpenGL ES to render instead of OpenGL and GLEW.

The needed libraries:

sudo apt-get install libegl1-mesa-dev libgles2-mesa-dev

Compilation options:

-L/usr/lib/nvidia-396 -lOpenGL -lEGL

References:

Besides, OSMESA(off screen mesa) can also do off-screen rendering. But this doesn’t support modern OpenGL(like shader?), and GPU acceleration.

Reference: