2019面試經驗分享
===
由於之前有發願,如果面試到我理想的公司要來寫面試經驗分享,因此特別來發文還願(雖然拖了有點久就是...);先交代一下背景,我是學碩都成大資工,沒有實習經驗,一共面了13家公司,大多數有拿到offer,有一家被reject,然後有幾家狀態不明XD
時程
---
由於我是2月跑完離校手續,因此大概2月底開始面試,2、3月只有零碎地面了幾家,大部分的面試集中在4、5月,然後5月底確定要去哪家公司。
各公司面試
---
### Beseye (雲守護)
* 應徵方式:認識的內推
* 流程:
一面(3位同事,其中一位好像算是主管) -> 約一兩天後二面(面試官為CEO),地點都在台北
* 面試內容:
- 一面:(約3小時)
主要是問一些AI的題目,像是給情境題,問你如何處理某個問題之類的,也有問到一些CS的題目(大概2~3題的樣子),然後還有一些邏輯題(就很像智力測驗那類的)
- 二面:(約3小時)
主要針對履歷做詢問,面試官在面試前有很認真地先看過應徵者履歷,然後會問想去的公司類型、喜歡的主管特質、不喜歡的主管特質、預期薪資這類的問題,應該主要是著重在人格特質上;C語言題目考一題,原則上沒有太難,就是給一段code問output是什麼;然後也有考一些邏輯題,跟第一天的邏輯題很類似;接著就是介紹公司,介紹到一半的時候有突然來個英文閱讀抽考,就是給一小段英文請你翻譯,接著繼續介紹公司。
* 這是一家成立有一段時間了的新創(也就是快要不是新創的新創XD),也是我第一家面的公司,CEO人很好,知道我是第一次面試,所以建議我去外面多看看,確認自己到底喜歡大公司還是新創,之後再和我連絡(是真的有再連絡啦XD),不過沒談到最後確切的薪水。
### ASUS (華碩AI部門)
* 應徵方式:104上履歷開放,HR主動聯絡
* 流程:
線上面試 -> on-site interview (地點在台北奇岩那)
* 面試內容:
- 線上面試:(約1小時)
考了一題Leetcode Medium的題目,面試透過Skype分享螢幕,用自己習慣的開發環境當場寫,然後當場測各種測資,那時候我還沒開始刷題,加上是第一次被面程式題滿緊張的,我覺得沒有答得很理想(程式有寫出來,但有些我沒想到的測資沒有過,把code改了一下後可以過了,但又會有新的沒想到的測資又沒有過…),但後來還是有有被通知二面。
- on-site interview:(一共4關,一關一小時)
每一關都是1~2題的程式題,聽面試官說理論上要自備電腦,但我事先沒被通知我自己也沒想到,所以都是用面試官的筆電…除了最後一關是白板題外,其他都是真的直接在電腦上寫然後當場compile看結果,最後一關面我的人應該是主管,只有他有問到時間複雜度,其他沒有。
* 可能是因為這是新成立的AI部門,拿到的offer金額其實是高於預期的(和一般大家對華碩pay的印象差蠻多的),加上聽起來假期很多(但有沒有什麼潛在的限制我就不清楚了),所以整體而言當下我是滿心動的,只是後來有了其他的選擇所以就沒有去了
### OnePlus (一加)
* 應徵方式:校園招募後寄履歷應徵
* 流程:
HR電話面試 -> on-site interview (地點:台北南港)
* 面試內容:
- HR電話面試:
某天下午接到人資的電話,問我是不是對什麼什麼職缺有興趣,然後能不能立刻來個簡單電話面試,我當然就說好XD 主要都是問人格特質類的問題
- On-site interview
1) 一開始去是先筆試(團體筆試),一共兩張考卷(一張邏輯、一張專業),考試內容依職位會有所不同,不過基本上考的內容就是一些C,C++的觀念,還有演算法跟資節(像是AVL tree、linked list),有選擇題也有非選,可能會給你一段code然後問你output是什麼,或是給你一段code問你哪裡有錯,還有給你一個要求,請你寫出對應的程式
2) 筆試後就是等個別面試,我是自己準備了一份投影片介紹過去做過的事,接著面試官就根據自介問一些問題,然後如果順利的話當天又會直接接著二面,二面主要就是問人格特質類的問題,像是問過去與人的合作經驗,或是給你一個情境你會怎麼處理之類的
3) 由於我面試當天有提出我對另外一個部門比較有興趣(但該部門沒有開校招缺),因此後來我又有一場電話面試,這次問的問題主要就是針對我碩論的內容做提問,還有問一些deep learning的問題,像是GAN是什麼,還有問目前手機拍照我有遇過什麼問題,如果要我改進我會怎麼做
* 個人覺得這家公司的氣氛我是還滿喜歡的,他們針對重點人才的培育也下了不少功夫,薪水我覺得不差,只是因為還有其他更高的選擇所以後來還是沒有去了><
### Ambarella (安霸)
* 應徵方式:請朋友內推
* 流程:
筆試 -> 一面 -> 二面(換了職缺,共兩關)
* 面試內容:
1) 一開始先筆試,筆試內容我只能說爆難,然後寫不完,很多很多的程式碼優化題,其他題目有像是給你一段程式碼問output是什麼,也有直接請你寫一段code產生他要的output,或是問一些計算機組織或作業系統的問題,反正整張考卷就是很難就對了
2) 接著就是面試,我事先有先被要求準備一份20分鐘的presentation,介紹過去做過的東西,面試官針對簡報內容可能會提出一些問題,由於我面試的是AI職缺,所以就是被問一些deep learning相關的問題,像是介紹ResNet、Focal Loss等,結束後就回去等通知
3) 過了好一段時間後我收到通知說他們上層決定這個職缺還是想要請博士生,但其他部門主管對我也有興趣,所以後來又安排了一次面試,這次是面不同的部門,基本上流程跟上一次差不多,最後多了一關是跟台灣的頭頭面,基本上流程也是差不多,也是先介紹了自己做過的東西,後面比較像是在聊天
* 筆試那份考卷好像只是參考用,所以不用太在意(?) 薪水也是不錯,每年還有股票可以領算是優點
### MediaTek (聯發科)
* 應徵方式:請朋友內推
* 流程:
一面 -> HR電訪
* 面試內容:
1) 一面一開始先簡單自介,接著就是用投影片報自己做過的東西,面試官會針對投影片內容做提問,接著面試官就會介紹自己部門在做哪些事,然後問你有沒有什麼問題
2) HR電訪:主要就是針對履歷上一些經驗提問,還有一些人格特質的問題,像是外務和學業我要怎麼取得平衡,英文和程式是如何自學的,以目前的offer而言會怎麼做抉擇等等
* 去之前我一直以為會有上機考還是筆試什麼的,但不知道為什麼沒有,也沒有二面(就直接讓一面的面試官決定),薪資就是聯發科薪資你知道的,沒什麼好說的哈哈
### VisualOn (視龍)
* 應徵方式:104上應徵
* 流程: 一面(一共三個面試官,地點在台北)
* 面試內容:
因為我應徵的是AI職缺,所以一開始就是問一些AI相關的問題,接下來就是問一些leetcode題目,最後是一些腦力激盪題
* 個人對這家公司印象還不錯,面試完後中午和面試官一起吃午餐,走的時候面試官還幫我叫了uber,然後當天就直接給口頭offer了,不過薪水是之後才談,但是很敢給,而且上下班時間很彈性,因此整體來說算是很不錯的!
### AI Lab
* 應徵方式:LinkedIn應徵
* 流程:
一面(因為被刷掉了所以不知道後面流程是怎樣)
* 面試內容:
面試第一個問題就是「你想來AI Lab做什麼?」,然後問你有沒有看AI Lab網站上部落格連結裡的文章,接著問你過去有做過哪些和AI相關的事,最後給你15分鐘讀一篇你不熟領域的paper,由淺入深講解那篇paper的內容,主要是想測試你對於不熟領域技術的快速掌握能力
* 這應該是我所有面試中表現最不好的一次,感覺AI Lab想找的是自己已經有idea的人,因此適合那些已經對於AI應用很有想法的人來,這方面我沒有事先準備,我都是想說未來老闆叫我做什麼我就做什麼...所以第一個問題就答得不好了,再來雖然我有事先去逛過他們的網站,但也只是稍微看過並沒有真的點部落格的文章來看,因此第二個問題又再次GG,最後的讀paper有限制不會的字不能問也不能查,我不夠有慧根所以那篇paper也是一個慘烈,我把我有限的理解講完後去個廁所回來面試官就消失了,過了一陣子人資就來跟我說今天的面試就到這裡,之後再回去等通知,果不其然就是被reject了ㄏㄏ
### Shopee (蝦皮)
* 應徵方式:Yourator上應徵
* 流程:
人資phone screening -> 3輪的tech interview(一次約1.5小時,都是線上skype interview)
* 面試內容:
1) Phone Screening: 一開始先英文自介,之後切換回中文模式,主要就是一些基本的人資問題,之後人資介紹目前有team,比較重要的是人資會問你期望薪資,而且是一定要給一個數字那種,沒辦法含糊帶過,人資沒有要求我一定要當場回答,說我可以參考一下新加坡的物價,然後在一個一定的期限內回答他(好像一天還是多久,忘了)
2) Skype interview:
- 第一round的interview面試官是台灣人,先是請我自介然後問一系列的程式題(leetcode類型)接著有再問一些Machine Learning相關的題目
- 第二round的interview面試官是中國人,問了一題leetcode類型程式題,接著考一系列的CS題目,可能因為蝦皮是主要做的是網路服務,所以考了超多網路相關的題目(即便我應徵的是AI工程師),題目範圍涵蓋socket、TCP、multiplexing、client要怎麼跟server拿東西等等,還有很多資結問題,可以說是非常的硬
- 第三round的interview面試官也是中國人,一開始先請我介紹自己以前做過的project,然後問了不少ML相關的問題,還有情境題,像是給你一些attibutes要你預測某個東西你會怎麼做之類的
* 必須說蝦皮真的超級有效率,大概面試後隔天就會知道結果,然後立刻安排下一場面試,通常就是1~2天後而已,我面試的是新加坡的職缺,因此人資還有跟我分享一些新加坡的物價資訊~我一開始期望薪資開超高 結果面第三關之前人資跟我說我開那個是senior的價錢,問我要不要改一下,因為我也不知道要多少比較合理(畢竟我跟新加坡不熟嘛XD)我就問人資意見,然後就直接改成他說的價錢,最後offer開出來也真的就是一樣的數字
### Novatek (聯詠)
* 應徵方式:104上投履歷
* 流程:
筆試(英文+專業)-> 一面(兩個面試官)-> 二面(一個面試官)
筆試和一面是同一天,二面是另一天
* 面試內容:
1) 英文考卷分兩部份,聽力跟文法,有超簡單的題目也有比較有難度,寫的速度要夠快才不會寫不完,至於專業考題不要求全部都會寫,可以挑自己會的寫,當然我還是盡量都寫啦,但有些就是不會(也沒碰過)所以也沒辦法,但似乎沒什麼影響
2) 一面有用ppt稍微報告自己過去做過的東西,二面就沒有,其實兩次面試大概都像在聊天,問的問題比較少專業的(除了針對ppt內容作提問)
* 我覺得很不錯的是因為我是從台南特別北上去新竹面試,所以聯詠有給我一張新竹-台南的高鐵票,只是只有一面有給,二面就沒有了哈哈
### OneLab (瑞嘉)
* 應徵方式:104上投履歷
* 流程:
性向測驗 -> 一面 -> 二面
性向測驗和一面是同一天,二面是另外一天
* 面試內容:
1) 性向測驗:沒什麼好說的,反正就很多的問題照當下感覺選就好了,不重要
2) 一面:面試官有兩個,一開始寫讓我寫了一張考卷(主要是一些ML的題目),接著就開始介紹我的碩論和大學專題,然後他們給一些情境題問我會如何解決
3) 二面:一樣一開始先寫了一份考卷(共三題程式題),接著就是跟技術主管聊天,理論上還要再跟總經理面一次,不過那天總經理很忙就沒有面到,和技術主管聊完後又再跟人資聊了一次,人資有問我目前其他家的面試狀況和目前有的offer有哪些
* 有500元的車馬費還算不錯,人資說如果我有確定要去的話會再談薪資福利,因為最後去了別家所以就沒談到了
### Qualcomm (高通)
* 應徵方式:校招時投履歷+直接上高通的career網頁投履歷
* 流程:
phone interview -> on-site interview (地點:新竹)
* 面試內容:
1) phone interview:面試官是外國人(印度口音),因為時差關係是早上六點半面試(超級早),整個面試流程大約一小時,一開始我先介紹自己碩論做的東西,接著面試官問了一些Deep Learning的問題,之後就用email寄一個連結考一題線上程式題,不過感覺不是要考演算法,而是在考寫一個function的時候能不能夠把防呆做好,程式題後又接著問了幾題C++觀念題,最後就問我有沒有什麼問題想問
2) on-site interview:主要是針對履歷做詢問,就是一些很general的問題,最後有考一題程式白板題
* 高通應該是我全部應徵的公司裡面流程跑最久的0.0 從投履歷到最後面試,每關之間大概至少都差個兩個禮拜以上,一直到我最後接受了別間offer的時候都還在跑核薪流程,所以沒機會知道薪資結構到底是如何,只知道他們出差都可以坐商務艙聽起來很不錯XD
### Microsoft (微軟)
* 應徵方式:認識的教授幫忙推薦
* 流程:
線上面試 -> On-site interview(共兩關,地點:台北) -> 線上面試
* 面試內容:
1) 第一次線上面試:面試官是台灣人,一開始先用英文自介,接著考了兩題程式題,然後面試官稍微介紹一下目前台灣微軟AI的研究重心,然後針對他們目前遇到的問題問我有什麼想法或解法(算是開放式答案的那種問題)
2) on-site interview:
- 第一個面試官是法國人,所以面試是全英文,面試官先自我介紹了一下,接著請我也自我介紹,然後出了一題程式白板題(leetcode題型),然後會請你優化目前的解法
- 第二關的面試官是小時候在美國長大的台灣人,所以面試是半中半英,一開始我也是先自我介紹,然後面試官出了一題deep learning的情境題,接著就是程式白板題
4) 第二次線上面試:
這次的線上面試和第一次不同的是這次的面試官是美國總部的人,所以是全英面試,基本上就是出一題程式題,that's it
* 微軟的速度也是很快,跟蝦皮有得比,禮拜二面完禮拜五就拿到offer,但要求下個禮拜二前就要決定,我問能不能延後,結果變成延到禮拜三(跟原本差一天),如果是對做AI有興趣的,我覺得微軟目前做的題目算是很有趣的
### Google
* 應徵方式:校園招募連結投履歷
* 流程:
HR phone screening -> 線上面試 -> on-site interview -> Hiring Committee -> fit talk
* 面試內容:
1) Google和其他公司最不一樣的地方就是一開始HR的電話面試問的是technical的問題,不過不是程式題啦,就是一些演算法和資結的觀念題
2) 線上面試:我的面試官是中國人所以面試是講中文,基本上就是考一題程式題,解完後會在原本的題目上作延伸加深難度
3) on-site interview:一共四關,全部都台灣人,不過有一關是全英面試,我是早上三場、下午一場,中午有Googler帶我去公司餐廳吃午餐,基本上就是第二關的線上面試模式變成現場版這樣,反正就都是考程式題
4) 面試都結束後要等Hiring Committee(簡稱HC)決定到底要不要錄取你,這需要一點時間才會知道結果,然後HC過了之後人資會幫忙安排fit talk,也就是讓你跟不同部門的主管聊天,主管會跟你介紹各自部門在做的東西,看你對哪個部門最有興趣
* Google的人資人都很好,都會很盡力地協助面試者解決問題,然後公司有提供午餐很加分哈哈
面試題目
---
我沒有全部題目都列,因為有些題目敘述比較麻煩我就懶了ㄏㄏ
* AI類題目
1) 給input size和convolution kernel size,然後問output大小和參數量
2) data augmentation的方法有什麼
3) supervised、unsupervised、semi-supervised learning的差異
4) 解釋 focal loss
5) VGG、ResNet的差異?為何ResNet比較深參數量卻比較少?
6) 解釋ReLU、Leaky ReLU,以及該如何選擇
7) k-means和k-NN的差別及其各自應用在哪裡
8) 高維的data用k-means會產生什麼問題
9) 降維的方法有哪些
10) auto encoder原理?
11) CNN、RNN差別?
12) 為什麼convolution和fully connected layer比起來更適合用在image上,其差異為何
13) 介紹AlexNet
14) 為什麼分類問題要用cross entropy而非L1 loss
15) 訓練模型時候模型參數是如何更新的(解釋back propagation),是對x(input)還是w(weight)作微分?
16) L1、L2 loss各是什麼?差別又為何?
17) 如何避免over-fitting?
18) what is batch normalization?
19) given a 300-d feature, how to select which dimensions are useful?
20) How to combine results of different models?
* 邏輯or腦力激盪題
1) given 100 coins, 20個朝上,80個朝下,關燈後(無法看到銅板的正反面)如何將這100個銅板分堆,使得兩堆面朝上的銅板數量一樣多
2) given a 天秤和五顆長得一模一樣的球,其中有一顆球特別輕,要使用天秤幾次才找得出那顆比較輕的球
3) 承上題,變成9顆球,其中一顆特別輕
4) 承上上題,變成11顆球,只有一顆重量和其他球不同
* 程式題
1) reverse string
2) merge intervals (第一類)
ex: [1,2], [2,3], [4,5], [5,7] => [1,2,3], [4,5,7]
3) merge intervals (第二類)
ex: [1,3], [5,9], [6,7], [10,13], [11,13] => [1,3], [5,9], [10,13]
4) given a list, find all the intervals of consecutive integers
ex: [1,3,2,11,10,12,1002,1000,1003] => [1,3], [10,12], [1000], [1002,1003]
5) 給定一串數字,每個數字重複3次,只有一個沒有,找出該數字
ex: 1313134 => 4
6) isomorphism
ex: "abbac" <-> "effeg" => true
ex: "abbac" <-> "effig" => false
7) 1~n數字隨意排列,其中只少掉了一個數字,將其找出
ex: 1342578 => 6
8) 實作atoi
9) reverse linked list (in-place)
10) 交錯數字
ex: [1,2,3,4,5,6,7,8] => [1,5,2,6,3,7,4,8]
11) 1代表陸地,0代表水,4-connectivity,given a 2-d array with only 0s and 1s, find the max land area
ex:
0011
1001 => max land area: 5
0011
12) 承上題,找出一共有多少塊陸地以及每個陸地的重心
13) 實作doubly linked list (包含從頭insert、從尾端insert、找出目標value在linked list中的位置等等)
14) 實作candy crush (三個以上可以消掉,一次消一組)
ex: [1,2,2,3,3,3,2,5,5] => [1,5,5]
15) merge兩個binary search tree成一個
16) 給一個已經sort過的array,build一個binary search tree且要考慮biased的問題
17) 給一個singly linked list,找出middle value(延伸:是否能夠用one-path的方法)
18) given a binary search tree,判斷其是否對稱
19) given two sorted array, merge the second one into the first one
ex: [1,3,5,0,0] & [2,4] => [1,2,3,4,5]
20) 用linked list實作queue
21) given row and column number, return the corresponding Pascal's triangle number
ex: row 4, col 2 => 6
因為巴斯卡三角形長這樣:
1 (row 0)
1 1 (row 1)
1 2 1
1 3 3 1
1 4 6 4 1 (row 4)
22) given an unsorted array, find the number that is closet to a given target
ex: {1,3,6,8,11,2,5}
target: 6 => result: 6
target:12 => result: 11
23) check if two strings are anagram
ex: "evil" v.s "viel" => true
24) find the max depth of a tree
* 觀念題
1) C++繼承分哪幾種,各自代表什麼意思,你在寫class的時候要怎麼決定用哪種繼承
2) RISC、CISC差異及其各自優缺點為何?
3) 優化 a = (b/1024)*10
4) 優化 if(a/24 > b) return 1;
5) 舉三個primitives in RTOS
6) cache的好處?為什麼不用很大的cache?
7) merge sort、quick sort等等各種sorting演算法的best、average、worst時間及空間複雜度
8) binary tree的搜尋時間複雜度
9) Python中的tuple、list、dictionary誰不能改值
10) MySQL用的是什麼data structure
11) MySQL的index如何實現
12) B-tree的好處?為什麼database要用B-tree
13) hash tabel和red black tree各自的pros and cons?
14) TCP各state代表的意義
15) malloc是如何實現的,call的是哪個system call,那個system call又是如何實現的?
16) virtual memory要如何map到physical memory
17) 如果程式遇到out of memory的error,要怎麼知道程式是執行到哪裡的時候造成的
18) 列出並比較至少2種以上的interpolation method
19) 列出並比較至少2種以上的noise reduction method及其所適用的noise type及evaluation的方法
* General Questions
1) 你預期三年後的自己在哪裡(想知道你的職涯規劃)
2) 找公司看重的條件和priority
3) 過去個人or團體做project的經驗
4) 求學期間有沒有和人合作過的經驗,其中自己扮演的角色為何
5) 1~10分,我對新事物的接受度為幾分?舉例說明
6) 研究所做的研究是什麼
7) 你的strength和weakness分別為何
8) 目前面試過的公司有哪些,有拿到哪些公司的offer了
9) 寫過最大的程式是什麼
10) 修過最有興趣的課?
11) 大學參加了什麼社團?
12) 比較喜歡research or engineering?
13) 如果成績單上有某學期成績比較差,可能就會被問那個學期發生了什麼事,或是問你主要掉分的科目為何,為什麼之類的
心得總結
---
1) Leetcode一定要刷,然後不是刷過就好,解題的時候要試著想空間或時間上要怎麼去優化,同時要練習分析自己演算法的時間複雜度,因為幾乎所有面試的程式考題不外乎都是叫你先分析複雜度,然後優化,然後再分析XD
2) 要練習寫code的時候把心裡的想法講出來,這樣面試官才會知道你的思路,也比較好給你提示
3) 英文聽力口說要練習,個人覺得全英的面試真的會比中文面試來得緊張不少,需要做好心態上的調適XD
4) 要先準備好一些問題問面試官,很多面試最後的問題就是問你有沒有問題,所以要先想好幾個備案
5) 遇到題目意思不清楚的時候就直接問面試官釐清,例如可以問說input array是有sort過的嗎、input的數字都是int嗎...之類的,有時候問一問條件變多了題目就會好解多了
6) 永遠懷抱希望XD 有幾次我覺得自己表現得沒有很好,但還是通過了,我甚至遇過我在寫程式題的時候面試官忽然跑走或是在邊傳訊息,我以為面試官大概不想理我了,不過我還是繼續寫我的程式和講自己的想法,結果還是過關了,所以在真正結果出來前不要妄自菲薄XD
7) 面試時間最好集中,太分散很容易遇到先拿到某家offer,但還在等後面的通知,有時候公司會願意等你,但也不少時間是壓很緊的,這時候就會很尷尬
8) 最後的最後,不要認為自己一定沒機會就不去投大公司或知名企業,有試有機會,沒試就絕對不可能了,就跟追男女朋友一樣的道理^.< (當然前提是要有做準備啦><)