2018 軟體工程師面試心得(Garena/IBM/街口/17直播)
筆記一下近期(2018)的面試經驗,希望能幫的上一些人的忙。
開始之前想說一些工作不滿一年來的經驗,如果你覺得現在公司很糟,如果你覺得你領得少了,不要因為履歷不好看而待滿一年,三個月,三個禮拜,甚至第三天就好走了。講實在話,你面試下一間公司時,被問到你之前做了什麼專案,你覺得打雜一年會有加分嗎?你覺得你最年輕最珍貴的時間值得用28k賣給公司嗎?
再來我覺得薪水本應透明公正公開,我支持像是玻璃門一樣的裸奔運動,為了支持這個我還幫職場透明化運動發過小小的PR,加上大概沒什麼人認識我,所以我會在底下給個大概的薪水。
簡介一下我的背景,某科大EE畢業不到一年,CV跟強完全扯不上邊,剛畢業因為很懶得找工作(逃避QQ),實習老闆介紹一間公司,感覺薪水還可以我就去了。實際上剛畢業也有去面試個幾間(被找去的),因為薪水都被開的各種羞辱 (廢話你又不強他找你,當然是他更爛啊,你如果不帥不有錢,會有幾個正妹會主動貼上來?),我一直覺得去年職場很黑暗人生很難,加上朋友們沒念碩直接出來工作的好像薪水都在比低的,所以這個薪水還行我就去了(N*14)。
N 大約等於GG碩新人價,可以是16k 22k 45k 100k whatever,因為拿到的每個offer都說自己是密薪制,不是絕頂高薪連大學生起薪100k都給不到在那邊秘薪啥
最後就是,找工作一點都不難,如果給你28k你願意去。
現況真的很難馬上就找到好工作,投個20封15封無聲一點也不意外,如果你覺得你值那個價,總會有伯樂認識千里馬,不要花三個月的成本浪費在一間不適合的公司,你不只是在害自己,更是在害其他人,以為行情就是這麼低,害整個薪資水準下降,把台灣的人才推到其他國家去。
以下正文
Garena_台灣競舞娛樂有限公司
Position: Backend Engineer
Package: Unknown + 健身補助 & 他們說幾乎不加班
這個職位負責他們的活動頁面,買一些G社的幣啊抽獎啊什麼的頁面都是台灣工程師負責的,整個工程Team只有10來個人,語言用的是Python,但說是backend,其實他還是希望你會Frontend,畢竟只有10來人就是要你全部都會,研發總部在新加坡,G社的人表示表現好可以外派過去,但其實朋友有丟蝦皮,直接就是新加坡工程師Skype來面試,流程差不多也是問下面的東西,而且是中文面,有興趣的人可以丟丟看。
人資速度很快,在104拿到HR的Email寄出履歷五分鐘後HR打來(驚恐XD早上九點根本還沒睡醒),直接開始問典型HR題,為什麼對我們公司有興趣、你覺得你比人家適合在哪之類的。
面試總共有4關,第一關1hr筆試,基本上考得跟簡單版資工系考研題目差不多(其實我沒考過亂講的),基本上就是資結、演算、OS超簡單機率和離散SET的概念,最後加上一題SQL一題,很無聊的GROUP BY + Aggregate Function就能解出來的題目,和一題手寫演算法Reorder list,基本上就是
給一個 linked list
1->2->3->4->5->6
要輸出
1->6->2->5->3->4
當下其實沒有寫出最佳解,但其實這題不難,題目還是要多刷QQ。第二關兩個面試官,問的東西跟筆試差不多,問你merge/heap/quick sort的時間複雜度,之後延伸如果你有900MB的DATA,給你10台各100MB的電腦你要怎麼做(External Sort),然後問時間複雜度。
之後問網路TCP 3 Way Handshake、OS Process vs Thread、什麼是Race condition,怎麼解?用Lock要鎖哪?鎖DB的ROW還是鎖整張表。 然後是問DB的部分,B Tree時間複雜度,Hash index vs Tree index差在哪,char vs varchar vs text有什麼不一樣,大概就這樣然後白板兩題,
一題是合併兩個 sorted linked list
給兩個排序後 linked list
2->7->13->18
,1->4->8->9->16
之類的輸出
1->2->4->7->8->9->13->16->18
另一題是SQL,也是aggregate function + order by可以解出來的題目,其實是我忘了題目所以哈哈哈。
其實當下我有問面試官,他說表現的還不錯,但也表示DB的部分可以更好,當下問他有沒有後續,他表示共四關,二三關技術面過了就進了(最後一關根大老闆聊天),第三關是Team Lead很會問DB,要我回家多K一些MySQL的doc,當下其實我以為我蠻有機會的Q,但最後第二關後無聲卡。
IBM_台灣國際商業機器
Position: Application Developer - JAVA
Package: (N + 7) * 13 ~14
和很多人一樣原本想說外商高大上,應該不會上就沒想要丟,但是最後被朋友說服就丟了(他每天丟104來叫我丟,到底我找還是他在找工作)。喔對了,我是假畢業生丟校招。
這是面過最冗的公司。
首先我大概1月在官網看到職缺,之後等了好幾個月沒有回覆,想說應該是GG了,四月初突然接到第一關的通知,之後隔了兩個禮拜第二關,再兩個禮拜第三關,再隔幾天之後第四關,之後offer get。你以為這樣就沒了嗎?之後offer等了一個半月才下來,中間寄了一些冗到不行的文件要填,但每次間隔大概2個星期,一度懷疑我是不是被放鳥了,還好我有用人主管的Line,主管表示…
HR process is slow
WTF…
最後呢,offer letter下來,Job Title 還被改了…這又是another story了
總之呢進入主題面試,第一關考邏輯跟數學,一題兩分鐘左右,邏輯靠北難,可以Google IBM IPAT,然後數學大概就GRE的水準,英文看得懂才是重點,這關我其實睡眼惺忪的時候寫的,寫的實在很爛但還是過了。
第2關,要你下載Hirevue(一個線上錄影面試App),點進去以後當場會有數個問題,然後當場錄影回答,看到題目後有10分鐘的思考時間,之後沒有暫停時間限時3~5分鐘(忘了)回答,有點像托福口說,雖然練習的範例題題目是英文,但點進去以後就會發現要你用中文回答xd,直接一個得心應手,題目類型大概就是一些HR題:
你為什麼想來IBM?
你覺得你比其它人更適合這個職位在哪裡?
第3–1關,也就是著名的Career day,Google也可以找到不少,這關又分成兩小關,個面和團面,團面分成兩組,給你10分鐘看4頁A4的商業分析報告,內容大概是3個有關於blockchain的三個方案,然後要你分析後用一張A4紙寫成一張簡報,每個人1分鐘的時間起來報告為什麼要選其中一個方案,基本上就是how why what。之後分成兩個小組,8分鐘時間討論小組要用哪個方案,然後畫在一張海報紙上,之後一組兩分鐘起來簡報,再之後是兩組互相辯論,一邊問問題另一邊答,同時可以拋出問題,嗯,台北市長選舉也快到了,差不多就是選前之夜候選人辯論那樣。總體而言,10分鐘看4頁英文商業分析報告,還要歸納總結,若英文不好沒關係,至少要能讀能寫,否則看都看不完,何來歸納!
第3–2關,個面,簡單來說是來之前會叫你準備曾經做過的商業分析,或是軟體專案,做個5分鐘的投影片來報告,內容大概就你在團隊裡扮演怎樣的角色,你貢獻了啥之類的,很老梗的東西(但我其實準備很久,畢竟我還是習慣技術面),然後就是評審發問時間。這關很重要,你有沒有過很大一部分看這一關,坐在你前面的都是用人主管,如果他們覺得你可以,就由用人主管親自打給你邀你面試。
第4關,用人主管1vs1面試,就一樣做個投影片,但比較輕鬆比較像聊天,沒有HR在旁邊按碼表(好煩xd),主要就是DEMO之前的專案,然後就談薪水,談團隊要幹嘛福利是什麼工作性質之類的(終於…),最後技術類的面試感覺還是沒有其他business analyst之類的那麼困難,雖然這次這個面試很商管,但還好跟我一起競爭的也都工程師哈哈哈,但不得不說雖然職缺是early professional,但實際上他們還是prefer一些有經驗的人(我就是畢業學長搶校招飯碗)。
最後,老實說我以為IBM的薪水會比我想的還高,但實際上並沒有,還低蠻多的…,但必須要說,如果你學士畢業,沒有近Google微軟和一些很強的公司,如果你跟我一樣第一份工作領不到大學生起薪的一半的,它還是值得你來試試看。
街口電子支付股份有限公司
Position: Backend Engineer
Package: (N + 15) * 14
這個職位是當初在CakeResume的夏季資深工程師快速面試活動看到的(雖然我一點都不資深XD),他們家主要用.NET,產品就是最近跟line打對台打很兇的街口支付,年初過年還在大撒幣,雖然第一次大撒幣直接爆炸1小時,CTO表示Redis connection 沒有關好(工程師趕上線就是會QQ)。
除此之外他們還有用一些Python & Golang,工程架構的部分因為創業之初趕上線,.Net直接寫了一整個bulky的App,目前除了開發新功能,還有在切Microservice,對了,公司也有DevOps,跑的是看版,該有的應該都有。
面試正文開始,首先問你什麼是delegate,其實就C#版的function pointer,然後提了一下Func, Apply和Predicate,什麼是/為什麼要dependency injection,講解一下AOP,Event的機制怎麼運作,SQL server的cluster & non cluster index差在哪,知道哪些design pattern,然後問我用.NET Core有沒有遇到什麼問題,沒有什麼演算法的題目,最後二面聊聊天就Offer get,其實還蠻驚訝的,當天5個快速面試者只有2個過關,這年頭年輕的.NET工程師難找,但.NET工作還是蠻多的,但大多都,嗯,35k*13那種,以下的我就不提了...
17直播_麻吉一七股份有限公司
Position: Backend Engineer
Package: Unknown * 14 + 免費午餐 &健身補助
這間是找工作到後來,至少是目前覺得我水準還可能上的公司裡,最想進的公司(Google那種還配不上要練練QQ),為了蹭午餐&看正妹,最重要的是有朋友同學校學士剛畢業進去(N+10) * 14。
對了他們後端用Golang,用的技術都很新穎跑在很前面(k8s之類有的沒的),裡面很多社群很活躍的大大,例如Backend台灣版的版主,後端team大概20來個人,兩週一期的Scrum。整體的面試難度大概比群暉容易一些,但每一關都有白板面試,偶爾問問系統設計,總之還是要多刷題。
首先第1關,給一個array 表示分數,需要回傳最少所需要的獎勵總數,每個人的獎勵最少是1,要求如果分數比旁邊的人高的話,獲得的獎勵也要比較高,但每個人只需要和旁邊的人比。
例如:
score = [2, 3, 5, 2, 3, 3, 1]
則最小所需
reward = [1, 2, 3, 1, 2, 2, 1] = 12
如果
score = [1, 2, 3, 1, 1000, 5]
則最小所需
reward = [1, 2, 3, 1, 2, 1] = 10
(獎勵只需要比旁邊的人高,所以拿1000分還是只有2)
這題當下其實我沒有想出來,靠著提示才勉強寫一個不是暴力解,也不是最佳解的四不像解QQ(如果有人知道解答請告訴我,願答者一生平安)。
再來第2關,問如何找到一個array裡面第一個重複的元素
例如:
[1, 3, 2, 5, 7, 3, 5, 5, 5]
,回傳index = 5
嗯這題不需要多說O(n)就能找到,之後就是一連串的討論時間空間複雜度,以及問問有沒有其他解法,這關蠻輕鬆的,聊天為主。
第3關,給一個字串,給一個數字n,將所有長度大於n的單字反轉
例如:
str = "An apple a day keeps a doctor away", n = 4
則
output = "An elppa a day speek a rotcod away"
這題也很簡單。
之後是系統設計的討論,問說直播的時候乾爹們會送禮,然後會有一個排行榜會顯示目前乾爹送禮排名。然後問你要怎麼設計這個排行榜,我的答案大概是維護一個Redis的zset,這個時候面試官表示Redis cluster在大量讀的時候會有瓶頸你要怎麼處理,我就說在App裡面cache,每秒只對Redis查詢一次之後其他同時concurrent的Request通通用memory裡面的資料做回傳,等於很多Request不會直接打到Redis,當然最後面試官表示他們還有做sharding的動作,但我實在沒這個經驗,所以就到此為止了。
第4關CTO,這關被電得有點慘,首先問strstr,要求無bug寫出來
例如
str = "An apple a day keeps a doctor away", delimiter = "day"
回傳
index = 10
,如果找不到就傳-1
然後就寫出了一點小bug QQQQ,面試官也很厲害,我字那麼醜他馬上就看出來,看別人code永遠比自己寫code還難。
之後問一題演算法,three sum smaller (我承認我還蠻下流的,我google下意識打成threesome),主要就是給一個array(沒有重複),給一個數字n,找出有幾個組合(x, y, z)加起來小於n。
例如:
[-2, 0, 1, 3], n = 2
回傳 2,因為
[-2, 0, 1], [-2, 0, 3]
共兩組
好,然後這題我沒有寫出來,只有個概念但不是最佳解,回家才發現這題其實不難 (題目還是要多刷阿孩子),最後第五關就HR面,就是一些有的沒的HR題,沒什麼特別的,結論是14天之內會有結果,但最後感謝卡,偶爾去被洗一次臉長長知識還是不錯的。
最後,如果你是軟體工程師,還是多寫寫code、補充CS基本知識,更重要的是多多刷題,不要說Data Structure等基本知識用不到,之前就有遇過不知道為什麼要lock,不知道set要是什麼的工程師,如果你是以上的人,請多加油,不要讓人覺得會if/else就是軟體工程師,進而降低台灣軟體業薪資水平。
最後的最後,祝大家找到理想的工作!