====Outline====
前言
事前準備
台積電 (CAD Flow)
聯發科 (數位IC/CAD/軟韌體)
群聯 (Firmware)
慧榮 (CAD Flow)
Cadence (Software)
Synopsys (Software)
群暉 (Software)
NVIDIA (Deep Learning)
結語
====前言====
各位版友好,
小弟在找工作期間受到版上文章幫助許多,
因此發一篇心得文希望也能拋磚引玉,
小弟是電子所EDA背景,EDA剛好介於IC設計與軟體中間,
用前言紀錄一下找工作與工作選擇時的心路歷程,文長可以直接跳過XD
因為個人興趣是在軟體開發上,所以是比較想進純軟或EDA公司,
但是對Design House EDA相關的工作做了一些了解後我覺得有以下優點,
1. 錢可能比較多(?)
2. 可以碰到真的Design,實際解決先進製程碰到的問題,如果是foundry可以碰到許多Silicon Data
(套句面試主管說的話,我們的工作是用別人開發好的演算法來解決問題,
所以以前在學校學到的任何EDA演算法都還是會在工作中用到,只是比較不需要自己Implement)
3. 出路廣,基本上所有Design House都會有這種職缺,也有些人工作幾年跳到EDA公司
對我來說最大的缺點大概就是比較沒機會碰到大型的程式(當然有些Design House會有in house tool的部門),
在思考很久後還是決定以興趣為重,因此我第二個抉擇是在軟體與EDA公司之間,
板上稍微搜尋一下應該可以找到滿多討論的,
坦白說現在CS的風潮滿盛的,在這種環境不免會想要趕快進軟體業跟風一下,
不過相較於半導體業,軟體的研替職缺似乎相對少?(也有可能只是我沒找到XD)
而半導體業看起來在幾年內仍然會是台灣十分穩定的產業,
加上EDA的工作應該有機會碰到滿多演算法的最佳化,這同時也是我會想要繼續學習的,
最後對於有拿到的offer衡量幾個因素包跨產業的職涯走向、薪水、地點,
我當時想了一兩天就覺得不管想再久也不可能想出一個最佳解,
最後想到系上教授在生涯規劃上給的建議:
”你唯有不斷的調整,一路走過去,才會找到最適合的地方。
如果你可以做到這樣子的話,你其實不用擔心你的initial state在哪裡,都可以。”
索性就選了一個當下覺得最喜歡的公司,
不太想被認出來所以就不說我選擇哪間了,
下方分享一下面試的準備與面試流程,
我想自己有沒有錄取也不是重點,
因此下方不會特別提說自己有沒有拿到offer,
也歡迎各位先進不吝給予指教。
====事前準備====
做了一份自我介紹的投影片,
內容包跨實習,專題,課堂project,碩士研究,
內容大致相同,但是會根據面試的公司做調整。
基本上一定會問你做出來的結果如何,
如果不理想的話是為什麼?如何改進?怎麼分工?
leetcode學期間有空閒就會寫一下,
到暑假求職期間大概練習70題左右,
大部分easy加上一部分的medium,
另外有看一本書cracking the coding interview,
這本書內容不難都是經典題,解答也寫得很好,
我認為非常適合用來對大方向的題型做了解。
複習C++,這部分用大一修課的投影片,
複習包括const, function pointer, virtual function, polymorphism…等等觀念。
複習網路上的考古題,
這部分我認為是一定要做的,
考古題重複的比例超級高,
不同公司出的題目常常也都雷同,
所以一定要複習。
另外因為要面群暉所以惡補了一下OS,
推薦清大OCW周志遠教授。
不過沒什麼被問就是了XD
事先準備好一些想問的問題,
這部分就看自己最在意什麼,最想了解公司哪部分!
====台積電 (CAD flow)====
首先提醒來GG面試的版友如果有準備投影片的話最好印出來,
雖然現在應該可以帶筆電進廠區了,但是還是以防萬一,
一到公司就先做人格測驗跟英文測驗,
之後就搭接駁車到另一個廠區面試,
面試主要是在聽我投影片做自我介紹,
介紹過程中主管會不時提出問題,
如果主管熟悉的領域問題就會比較深入,
像是我碩士研究的部分就問了很多,
如果我的回答不太合理會再繼續問下去,
最後就是介紹部門跟由我提問,
CAD部門需要在新的製程出來之前搶先了解並解決EDA Tool可能會碰到的問題,
最後由主管帶我離開結束這次面試。
====聯發科 (很多部門)====
一到面談室先帶去一個小房間做上機考(C/C++),
上機分選擇題跟程式題,
選擇題有做網路上的考古題應該就沒問題,
第一題考dynamic allocate 2d array,
第二題考字串處理相關,
老實說都不難,可是我兩題都沒寫出來...
需要注意的是題目是自己要寫scanf/cin吃測資,
另外compile很慢會當當的,所以準備上基本語法一定要記熟,
(不過後來面試沒有任何主管跟我提到這份考卷)
做完筆試就到另一間會議室跟主管面試,
總共有五個主管分別來至不同部門,
每個主管都會給你名片,這時一定要記好每個主管代表的部門,
因為最後要勾選對哪間部門沒興趣的表單,
面試的流程是自我介紹->專業問題->部門介紹->面試者提問,
自我介紹時主管就會根據內容去做提問,
因為面試的主管大部分是做數位IC設計的,
我也直接承認我不太想找寫RTL的工作,
感謝主管們認真的幫我想有什麼工作適合我XD
中間休息吃晚餐一小時,
晚上也是一樣面試五個部門,
數位IC主要就問我有沒有跑過完整的design flow,Verilog寫過什麼、怎麼架構、怎麼省面積、timing沒過有可能是什麼原因......
CAD組比較偏向問我碩士研究的方法、想法
軟韌體的team就問做過project的大小、分工、如何debug、de過最難的bug,
最後由我提問完結束面試,這裡就不細說每個部門的工作內容了。
====群聯 (Firmware)====
面試台北兩個韌體部門,
兩個部門各有一份考卷,
內容包含C語法,演算法/資料結構的概念,
簡單的程式題,OS/計結相關的問題,
如RISC vs CISC, Interrupt service routine,
面試先自我介紹然後面試官問問題,
其中有一個面試官問我為何想來應徵群聯韌體的職缺,
我說了一些像是喜歡寫程式還有認為群聯前景很好等理由,
這些理由有點虛當然也說服不了面試官XD
於是他便向我分析了軟體產業與做韌體的不同,
例如在programming上寫韌體OO的觀念比較沒那麼重視,
以及做韌體主要重視的是domain knowledge,像群聯本身是做NAND flash controller,
如果是從多媒體、通訊等等的韌體跳過來對他們來說也是要重新訓練。
非常感謝面試官的分析和介紹部門。
面試結束後主管會進來看你還有沒有什麼問題並順著問題介紹部門。
====慧榮 (CAD flow)====
公司會先寄信告知面試當天需準備的事項,
面試前會先做英文,智力測驗跟專業測驗,
英文聽力我聽得滿吃力的,不過有可能是我太久沒接觸英文,
專業測驗包含對design flow的了解,
簡單的程式pseudo code,
以及setup/hold time……等等design的知識,
做完之後一樣是投影片自我介紹,
專業問題主要環繞在我自我介紹的內容,
我當天是直接接續二面,一樣是自我介紹與主管提問,
個人認為慧榮的CAD team能接觸到的東西滿廣的,
根據主管的說法是新人會先將design flow的各個環節都摸一遍,
再依照興趣能力去分配工作。
====益華 (Software)====
新竹:
面試新竹一個做formal驗證的部門,
面試流程是分別與兩位主管面試最後再與大主管面試,
面試問題主要是針對我目前的研究題目,
以及跟我研究相關的其他領域延伸出去問,
也討論了一下我的研究中的某些function用什麼語言來寫比較方便XD
我想不同背景的人應該會被問到不同的問題,
之後就是主管介紹部門的工作內容還有提問,
因為在IC Design中的不同stage都有需要去用到這個部門的產品,
個人認為工作內容有機會接觸到的IC Design的滿多環節的。
台北:
因緣際會下知道原來台北有一個做package的部門,
面試流程為自我介紹->筆試->白板討論,
因為是軟體公司所以在自我介紹的時候就問了一些問題確認我對軟體開發的興趣能力,
筆試為程式pseudo code搭配一些有趣的個性問題,
像是如果你不做軟體工程師你的工作會是什麼XDD
題目簡單,不過我還是犯了一些錯誤被點出來,
最後是三題白板題,差不多leetcode easy~medium的問題,
像是找出array中a+b=c的組合,
還有給你一堆數字找出最大的組合,ex: 5, 70, 6 => 7065
結束之後就由主管介紹部門,部門主要是在美東,
在台灣設點共同開發一套公司的封裝軟體。
====新思 (Software)====
一面:
一面總共有兩個部門,一到公司先做兩個部門的考卷,
有一份比較難另一份稍微簡單一點,
內容包含C的觀念,複雜的pointer操作,繼承,程式題,
情境式的class設計,資料結構比較,物件生成期,程式debug,
一張考卷只有30分鐘寫起來滿趕的,
接著是第一個部門的面試,一共兩位面試官,
利用空檔時間考了一題白板題,並分析複雜度,
之後由我做自我介紹然後面試官提問,
我有些忘記哪些問題是哪個部門問的,
所以以下問題兩個部門合在一起寫,
資料結構的比較(array, linked list, hash),
static變數,繼承問題(繼承問滿細的),polymophism,寫code的一些架構與習慣,
寫過程式的大小, 組員人數......等等。
也有針對成績單上成績比較差跟比較好的地方去問,
然後筆試寫不清楚的地方會再問你一次。
二面:
只有一個部門進入二面,
一樣是先自我介紹並穿插C語言相關的問題,
二面的問題個人認為比較偏向寫程式的習慣,
像是會不會寫一些測資確定自己的程式再更動後不會有bug,
再度問到繼承,一個很有趣的問題是如果有一個base class被100多個class繼承,
如果要做一些更動會很麻煩,那你覺得這個時候用繼承還是一個好作法嘛?
有沒有其他方法?我直接答不出來XD
另外也有討論一下segmentation fault,
不過我除了pointer指到NULL以外想不太到其他caseXD
基本上主管都是順著你的回答繼續問下去,
這個部門是作frontend的simulation,
最後由我提問之後結束二面。
====群暉 (Software)====
先說結論,
看完版上眾多關於群暉的心得分享後,坦白說還滿緊張的,
但是我想寫白板題的時候就有什麼想法就說出來跟面試官討論,
這次面試中有時候我做法也想不太出來,
是靠著跟面試官討論,還有面試官給我的提示才一步一步完成。
在面試中我不斷地被問到對軟體開發的哪一塊比較感興趣,
很明確自己想去哪個部門的版友應該可以在這個時候爭取一下(?)
第一關:
第一關是兩位面試官一同面試,
由於本身是EE背景所以我先介紹了一下自己修過比較偏資工的課,
以及稍微介紹了一下研究題目,
十分意外的是面試官竟然有先google過我的研究題目,還查到了我實驗室的學長XD
因為我有修過電腦網路的課,所以問了我一下TCP/UDP這些觀念,
白板題跟regular expression有關,判斷pattern跟string是否有matching,
“.” matching any single char
“*” match zero or more of the preceding element
ex: a.b* == acbbbbbb
我用了while loop跟一堆if去討論,
花了很多時間最後也有些case沒考慮到,
好險面試官還是讓我進路第二關。
第二關:
第二關的面試官有先跟第一關的溝通過,
所以我不用再從頭自我介紹一次,
面試官問我還有沒有其他想介紹給他的,
我便說了我再資料結構這門課做的project,
接著白板題兩題,
翻轉字串hello => olleh,翻轉語句hello world! => world hello!
字串使用linked list結構,
寫完後確定沒有問題就讓我吃飯休息。
人資關:
這一關就人資會問你很多問題,
我想應該跟大部分人資的問題相似,
我就照當時想到的回答。
第三關:
面試官一進來開始跟我聊寫過的程式語言,
如何debug,之後討論了一下資料結構的優缺點,
然後再紙上討論BST的特性,還有怎麼做delete,
討論的差不多時,面試官就說那來寫code吧XDD
於是就在白板上把delete給實作出來,
後面又考了一題binary tree任意兩點最長的一條path找出來。
這一關面試官給我一種帶著我寫code的感覺而不像在考試,
寫完沒問題之後面試官說去請主管進來,到此終於鬆了一口氣。
主管關:
主管知道我沒修過OS,所以就問我對OS了解多少,
我就把我面試前背的東西說一說,主管也沒有為難我,
不過還是考了一下白板題,一題ctoi,一題BST的insert,
我用了一個不太乾淨的寫法寫完了,
主管希望我用double pointer的方法寫得好看一點,
但是我對double pointer不太熟沒想出來,
最後就看主管表演了一下double pointerXD
由我提問之後結束面試。
====NVIDIA (Deep Learning)====
履歷寄出過一陣子後接到主管的電話,並約了一個時間做phone interview,
phone interview的問題主要環繞在我做過deep learning相關project,
用過的toolkit,我回答keras跟pytorch,對底層的CUDA沒什麼研究,
也被問了EDA領域有沒有什麼deep learning相關的研究,
另外也問了我對deep learning的看法,對現在AI發展的了解,
可能是因為是phone interview沒問什麼技術問題,
之後因為答應了其他offer就婉拒了on-site interview,
這個部門的工作內容是和客戶合作完成deep learning相關的應用,
也算是幫助公司推廣deep learning。
====結語====
求職也經過滿長一段時間的,
坦白說真的滿累的,不過很高興自己也有機會能發一篇心得文供大家參考,
我想最大的心得就是對有興趣的工作真的要勇敢投遞履歷,
就算沒有錄取也賺了經驗,不會有遺憾。
最後祝所有為了求職奮戰的版友都能順利找到理想的工作!