[研替] 智易研替面試 軟體部門

今天跑去智易面試,是直接投給人資獲得就面試邀請,
公司在園區二路的大樓裡面的一整層,
還有幾間其他的公司,好像跟瑞昱在同樣一層樓。

小公司給人的感覺就蠻熱鬧的,
同事間的距離也都蠻近的,也見識到傳說中的主題式會議間。

一開始進去人資會先發一份考卷,
包含英文、OS和計算機網路的觀念還有程式題。
英文就單字題和閱讀測驗,難度並不高,
OS考了polling、interrupt以及critical section的意思,
計算機網路式TCP, UDP, ARP, DHCP還有NAT的名詞解釋,
最後程式題考了C++, C, JAVA一些簡單的概念,
我C++和JAVA忘得差不多了,所以寫得也零零落落,
但是主管好像也只是稍微掃過回答的狀況,不會細問答錯的部分。

接下來的面談是由軟體部門的經理和一位人資共同問問題,
但除了一開始請我簡單講解一下印象深刻的專題之外,
剩下大部分都像在聊天,並解釋公司的方向以及訓練制度給我聽。

算是目前面到最輕鬆的公司,
接下來有加入台北的副總來一起面談。
兩位主管都蠻用心在談公司的東西,
雖然工作訓練制度可能沒像大公司這麼紮實,
但是感覺作風很自由,也蠻尊重員工,
工時也是蠻正常的一間公司。

但比較令我疑惑的一點是,
主管沒問什麼問題,不知道是以什麼當作選人標準,
但聽語氣感覺對交大電信所蠻有信心的,
很歡迎我們所的人去面試。

主管也希望我們可以在碩二結束前就先過去實習,
了解公司裡面的運作狀況以及工作內容。

因為還有MOXA二面要去,
所以他說隔一周才會再聯絡我,
不過基本上是一次輕鬆愉快的面試經驗了。

以上。

[研替] MOXA研替面試 軟體部門

今天早上結束MOXA的研替面談,
過程還算順利,不過坐車到新店倒是花了一點時間。

MOXA也誠如大家說的一樣很注重人格特質,
主管對面試表上填的內容會很詳細的詢問,
也很強調對部門工作要有興趣(就是對寫程式有興趣啦)。

一開始進去,人資會先帶到會議室裡面考C語言和邏輯測試,
C語言其實不會太難,
宣告函式指標、malloc、判斷不同型態的sizeof()回傳值、實作strcpy、
寫linkedlist的search、recursive,
而且還有給你定義好的函式用,寫起來不會太棘手。

邏輯測試主要是考描述的條件能不能達到要求,
例如:(a)班上女生有五人,(b)班上男生有八人,問班上有多少人?
所以答案應該是(a)和(b)條件都要用到,
有十五題,其實不會很難,靠常識跟邏輯判斷就好。

接著主管就會進來面談,
今天一共有兩位主管,是子公司連易的部門,
做的是IoT的ethernet和gateway的通訊,
和不同的介面之間連結的通訊協定實作。

一開始簡單自我介紹之後就會照履歷提問,
會請你詳細介紹做過的專題,從理論到實作部分都會問,
但問的不深,通常只會要你解釋在幹嘛就好。
主管會很在意你在裡面負責的部分,
還有你有沒有辦法系統化的解釋整個架構,
也會需要用到白板解釋。

接下來就會著重在人格特質的部分,
看你跟別人合作的狀況,遇到困難怎麼解決。

有沒有跟別人衝突的經驗,之後怎麼化解危機,
求學過程遇到的挫折(這題真的很容易被問),
有自信打敗其他求職者的優勢,
交換學生跟社團經驗真的蠻有幫助的,
都直接可以舉一個實例出來。

主管也會偷偷試探你對寫程式是不是很有熱誠,
感覺喜歡程式這件事對他們來說很重要。
聊一聊主管還說我的個性蠻適合做PM的,
我還心想慘了我一面就要掰了嗎?
不過好像是建議,有跟我介紹PM的工作內容,
也會把我履歷轉過去,讓我自己考慮有沒有興趣。

專業的部分其實沒有很著重,
大概只問了計算機網路的OSI七層架構功能,
TCP和UDP的不同與優缺點,TCP的三向交握的過程,
修過計網再複習應該很輕鬆。

最後的問題偷偷問了工時,
主管說部門裡面九點就全走了,
工時不會太誇張,而且福利又很不錯,
希望有二面的機會。

以上。

——————————————————————————-

今天結束二面,
是由一位事業部的主管以及另一位人資副理(不大確定)來面談。

過程不會太可怕,一樣都是以人格特質為主,
主要都專題與修課方面下手,
詢問遇到的困難點、解決辦法、思考模式等等。

面談方向基本上是由兩位主管引導,一問一答的模式,
然後看得出來他們很喜歡對程式有狂熱的人,
但也會問如果和其他人比,自己的優勢在哪裡。

不過我覺得比較特別的是,
兩位主管都沒有特別詢問社團經驗,
我還想說這是比較自豪,有東西講的部分。

最後主管也有問說面試了幾家公司,
考慮公司的點在哪,我有提到薪水不是優先考量的點,
但最後的提問還是問了薪水,
不知道會不會扣印象分…
(因為真的問到沒什麼好問了,主管還表示有什麼好奇的就直說)

結果應該兩個禮拜內會通知,
希望有好消息。

以上。

[學習] 巨量資料分析實務上之重點

今天上了統計所黃冠華老師的巨量資料分析實務課程簡介,
大部分的內容其實都已經有看過或聽過,這邊把重點稍微整理一下。

#巨量資料:
除了大量之外,型態多樣以及變異性大也是需要注意的地方。

#分析資料會結合"統計學"加上"資訊科學",
分析方法包含:資料來源(取得方式)、儲存方式、如何找到特徵(統計量)。

#身為一個資料科學家:
必須在某些領域有深厚的專業知識,足夠的電腦及程式能力,
以及有效率的溝通與解釋能力。

#大量應用資料科學的民間團體:黑客松、零時政府,
其特色為:
使用開源資料及開源軟體
跨領域人士合作
使用網頁爬取需要的資料

#一般資料科學的分析流程:
1.分析議題(目的、估計方法)
2.收集資料(採樣方式、隱私權考量)
3.資料探索(資料長相、是否有反常值、是否有特徵)
4.資料建模
5.結果溝通及視覺化
五種方法缺一不可,否則沒辦法有良好的結果。

[研替] 面試時詢問主管的問題整理

整理一下在面研替的時候可以問主管的問題,

1. 公司對新人有什麼樣的訓練,時間多久,有沒有內部訓練課程。

2. 在單位裡面的工作內容是否固定,
    還是一段時間就要學新的東西。

3. 希望現在新鮮人再多培養哪方面的能力。

4. 所在職務部門的人力配置狀況,同事前輩的學經歷大概是如何,會如何跟其他部門合作。

5. 工作氣氛,同仁間相處方式,主管對員工人格特質的期許(強調團隊或個人)。

有些是從PPT上精華區挖的,應該沒有版權問題吧?

[研替] 聯發科研替面試 軟韌體部門

今天去研替聯發科的面試,
一次被排兩場,從三點面到八點,
實在是有點瘋狂,比之前考托福還累。

不過可能是模式跟之前魯汶考試的模式很像,
先請你解釋做過的專題,再從專題裡面找和部門相關的東西問,所以並不會太緊張。
當完全沒有頭緒的時候也會試著引導你,
但是像通原那種修完就沒碰過的東西我就直接放棄了…

只能說履歷裡面的東西不能亂填,
懂不懂他們也是一眼就能看出來,不過可以還是盡量瞎掰一下。

考程式
一開始進去人資會先安排到一個電腦教室寫程式題,
總共有十題,直接用英文打在螢幕上,不能編譯。
我有寫到的題目包含:
判斷程式回傳值(指標),判斷int溢位(不能用long幫忙),
直接寫出改大小寫跟判斷大小寫的函數,交換兩數的值(不能使用變數幫忙),
用一行程式判斷是否為2的冪次方等等…

基本上就是指標與更多的指標(還有函數指標),
還有bitwise的操作也要熟悉。

結束程式題之後就是等面試,
我兩場都有五位左右的主管同時面,
所以問題也是一題接著一題來。

基本上都會照著履歷的東西問,所以忘記內容的專題記得要複習一下,
不過他們也不會問太多實作的內容,大多都會和課程做結合。

第一場
第一場主要被問到的都是專題上優化的部分,
兩場主管好像都對OS裡面thread平行化和計算機架構很有興趣。

我主要被問到的有:
1. pipeline的機制,假設有一個1MHZ的處理器經過pipeline速度會變幾倍。
2.有pipeline一定會變快嗎(假設沒有latency)?
3.cache假設可以做到無限大,我們為什麼不做得和memory一樣大。
(其實我不太懂他在問什麼,問題就是太貴不是嗎?不然就做很大了啊!)
4.解釋一下mutex, semaphore的差異以及用途。
5.當場寫出一個反轉字串的程式,輸入是一個char*。
(這題我一開始直接硬寫stack,第二次還在那邊交換記憶體位址,主管應該覺得我是智障…)
6.如何判斷一個子串陣列的大小,且不能使用strlen。
7.邏輯問題:一百顆球在袋子裡面,分別是1到100公斤,任意拿掉一顆,只秤剩下的球,要秤幾次才知道拿掉哪顆。
(這題我也莫名其妙,也沒有說一次只能秤幾顆球,害我問題目問半天,
最後我就說把袋子拿去秤就知道少哪一顆了,主管也不打算解釋清楚一點就這樣讓他過去了。)

剩下就是一些社團的問題跟自傳的問題了。

我覺得第一場的主管有點冷淡,再加上我一堆問題答不太出來,
他們應該覺得我還蠻笨的吧,有些簡單的題目也在亂講,感覺是機會渺茫,
部門做的東西我也聽不大懂,就去吃飯等第二場面試了。

第二場
第二場面試的主管有兩位看起來很年輕,
其他主管可能剛吃飽飯心情也不錯,
因為有下午的經驗,整場面試還算輕鬆,
主要有兩位主管主導面談,他們也都會適時引導,不會直接投降也不會怎麼樣。

因為他們領域包含計算機架構,作業系統,DSP,
在魯汶的那個專題就一直被拿來問,老實講我根本不懂原理啊!

這場被問到的有:
1.為什麼音訊要用dsp板處理不用CPU,同樣的操作在CPU上也可以做。
2.process和thread的不同點。
3.為什麼multi-thread可以加速,僅僅切換CPU就可以加速。
4.什麼是race-condition,如何解決。
5.優化裡面的remove branching為什麼可以加快程式。
6.專題裡面porting到DSP版上有沒有用到組語優化,和8051有沒有不同。
7.OpenMP和CUDA的平行化機制(因為我專題有)。
8.8051和DSP都是嵌入式系統,知不知道差異,8051可不可以拿來處理音訊。
9.Nyquist rate是什麼,為什麼要大於這個rate(超基本結果我也沒講完整…)。
10.物件導向的好處是什麼,C++的class的好處(我回答了動物繼承的例子還被發現是書上的…)。
11.vim的好處在哪。
12.Volatile變數的使用時機,如果不用它,平常程式會把資料存在哪。
13.談一下通原學到的東西,隨便舉幾個知道的modulation(這我直接說不會…)。

大致上是這樣,主管的問題大都圍繞著專題在問,
但幾乎不是專題的內容,還好有偷念OS和C語言的考古。
後來就是問一些為什麼大四交換成績不好,社團的經驗,
然後終於有人問到我交換學生的事了!

最後兩場都有問到一些經典問題,
你的求學困難,覺得自己比別人強(弱)更適合公司的地方在哪等等…
大概先擬一下講法就不會出什麼錯了。

另外我今天面試的部門都是與通訊底層的OS或系統開發有關,
所以面試的時候這些很重要,像其他部門就可能會被問到其他課,
基本上還是不會問太深入,感覺把書上的重要概念記住就好,真的問太難也只好放棄了。

最後總結一下:
1.履歷的內容一定要熟悉,專題實驗要把握做法跟原理。
2.基本上面試單上說對XX科目有興趣,就是會考那個科目的意思,要準備。
3.經典人生題一定會被問到,有準備就好,也可以先想一些要問公司的問題。
4.單就聯發科的話,考古題還蠻有用的,可以上網搜尋一下。

——————————————————————————–

8/28 補充:
今天去竹北面談,公司在台元科技園區,
其實還蠻偏遠的,但是整個園區弄得蠻漂亮的就是了。

今天面的部門偏向非LTE的通訊,
包含從IC驗證到系統整個產品都有做設計。
一開始還以為會被問到計算機網路,嚇個半死,
結果整場面談還是著重於專題部分。

問題都是圍繞在最佳化的部分,
從平行化如何處理critical section,
使用的API或架構的原理,等等都有被問到。
還有就是如何C語言中的最佳化,可能會使用到的技巧。
中間還有被問到論文的部分,
實在是可喜可賀。

問題都不難,沒有太多追問的內容,
但我也沒有回答得十分詳細,
不知道符不符合他們的期待。

最後主管有問到工時的問題,
我回答待到八、九點沒有問題,
主管竟然說可能會到十點…

還真的是一間十分精實的公司啊。

——————————————————————————–

9/10 補充:
今天去二面,來了無線開發本部的處長,
是一個女生,人還算蠻親切的,
不過談到專業的部分解釋得也很詳盡。

面試的時候大多都在聊履歷上的東西,
比起專業,我覺得問比較多社團、個性之類的東西,
感覺是要確認我的性格適不適合他們部門。

她也有提及希望新人是肯學習,專業領域要夠深,
但其他領域也要了解,看東西才能全面。

以上,接下來就是等消息了。

[學習] OS中的經典同步問題

最近準備面試複習OS讀到同步的章節,太久沒複習了,讀了一整天還是頭昏眼花,
在這邊記錄一下幾個經典問題的解釋:

1. Bounded-Buffer Problem
有一個生產者和消費者的組合,生產者會不斷生產物品放到倉庫中,直到倉庫塞滿,
使用者會持續消費倉庫中的物品,直到倉庫清空。

使用者不能在空倉庫中消費物品,生產者也不能在滿倉庫生產物品。

解法在維基百科有十分詳細的解釋,需要使用三個semaphore:full, empty, mutex,
才能同時解決deadlock和race condition的狀況。

詳見:生產者消費問題

2. Readers and Writers Problem
通常對同一個檔案或同一份資料,不同的程序(process)會想對它做讀或寫的動作,
檔案可以接受同一時間被多個程序讀取,但寫入檔案一次只能由一個程序作,而且寫入時其他程序不能嘗試讀寫。
所以這邊必須用到兩個semaphore的機制(或者可以說是mutex),再加上限制讀取人數的reader count。

Semaphore rw_mutex= 1 ,mutex = 1; Integer read_count = 0
rw_mutex:控制reader/writer進入的mutex
mutex:控制reader修改reader count,不會被其他reader影響的mutex

//reader
do {
          wait(mutex);                                    //會修改reader count,所以限制其他reader進入
          reader_count++;
          if(reader_count == 1)
                    wait(rw_mutex);                    //第一個reader進入
          signal(mutex);                                //其他reader可以讀

          …
          /*reading*/
          …

          wait(mutex);                                   //會修改reader count,所以限制其他reader進入
          reader_count–;
          if(reader_count == 0)
                    signal(rw_mutex);                //沒人在讀,把鎖打開
          signal(mutex);
} while(true);

//writer
do {
          wait(wr_mutex);                            //writer想寫入,必須看鎖有沒有開

          …
          /*writing*/
          …

          signal(wr_mutex);
} while(true);

◎Starvation Issue
當有無限個reader連續進入想要讀取資料,writer就不可能有機會可以寫入,造成starvation。
此時可以加入一個新的semaphore來限制最大reader數量,在此假設為3,
每次reader要進入讀取時,就wait(),所以至多三個reader可以讀取資料,且結束後並不做signal()。
而signal()的指令會放在writer call裡面,當writer寫入完才會釋放semaphore,

但此方法也會造成不常被寫入的檔案會限制reader數量的問題,
不確定能不能使用timestemp來幫助釋放semaphore。

3. Dining Philosopher
假設有五位哲學家圍著一個圓桌吃飯,每兩人中間都有一根筷子,
哲學家除了吃飯之外就是思考,但當他們要吃飯就需要兩根筷子。

do {
          wait(chopstick[i]);
          wait(chopstick[(i+1)%5]);

          /*eating*/

          signal(chopstick[i]);
          signal(chopstick[(i+1)%5]);

         /*thinking*/
} while(true);

當所有哲學家同時想吃飯時,他們很有可能會各自拿到一根筷子,並等待另外一根,造成starvation。
另外當1,3號哲學家連續進食,夾在中間的2號哲學家就有可能得不到筷子而餓死,
此時semaphore也無法解決問題。

網路上解法有不少,其中一個是加入一個可以宏觀看到哪位哲學家想要用餐的使用者,
並制定出想用餐必須先舉手獲得授權才能得到筷子的規則(先左手再右手或相反),
並由宏觀的使用者來授與筷子,就可以解決starvation的問題。

參考資料:
宅學習,作業系統部分筆記
http://sls.weco.net/node/21326
YOUTUBE Channel Ranjit Kolkar
https://www.youtube.com/channel/UCD9td9yyUSuFcELrH2mOgKw

[生活筆記] 普羅旺斯燉蔬菜

今天吃飯的時候看到菜單上琳瑯滿目的加入法國地名菜名,
其中有一道普羅旺斯燉蔬菜被同行的朋友嫌沒有節瓜和茄子,不怎麼道地。
我笑著回應他可能是用台灣當季的蔬菜吧!

但仔細想想,如果叫做普羅旺斯燉蔬菜就必須道地,
那麼市面上很多料理都不能稱作X國或XX料理,頂多只能說是X式料理了。

如果消基會開始嚴格管制店家名稱,
如此一來,很多異國料理店勢必就關門大吉,或是把自己的名字改成X式料理。
聽起來跟在包裝上標示本產品果汁含量未達10%一樣傻呢。

有趣的是,在台灣反而很少看見寫著台灣料理的店家,
通常招牌都是寫台式熱炒,或是台式便當,
是大家都對自己的料理沒信心嗎?
還是積非成是大家就都這麼說了,我也不知道。

總之今天那道燉菜得到的評價不怎麼樣就是了,
雖然如此,我點的燉羊膝倒是香濃軟爛。
不過即使去過法國好幾次,我到現在還是沒辦法評斷我那道主菜夠不夠道地。