# 面試 ## 全景軟體 (Offer) ### 一面 首先是30分鐘的筆試,題目蠻多的,但主要都是想要確認一些觀念而已。 1. 解釋 Array/Hash/Tree/Linked List之間的差異以及優缺點 2. 說明遞迴並提供一個實作的例子,再用for迴圈改寫上述的例子 3. 解釋MultiThread,還有其帶來的好處和應該注意之事項 4. 請問物件導向(OO)是啥?解釋繼承和封裝 5. 解釋下列名詞,包含Java Applet, JSP, XML, SSL, Certificate 6. 給一個Table,要用SQL的語句取出給定的結果 7. 用ASP, JAVA, PHP讓網頁跑出前一題的表格 8. 用C++完成以下功能,輸入一個數字,回傳對應的2進位和16進位字串 9. 給一串程式碼,問輸出結果 ```c void main() { float sum = 0.0, j = 1.0, i = 2.0; while(i | j > 0.01) { j = j + j; sum = sum + i/j; printf("%f \n", sum); } } ``` 10. 以下程式有甚麼問題 ```c void main() { char a; char* b; a = 'c'; *b = a; delete a; } ``` 11. 試寫出一個Car的class,裡面包含car, door, wheel,然後有兩個功能,駕駛drive跟開門open。再寫一個TOYOTA的class繼承Car,並在main裡面創建TOYOTA並駕駛它 筆試完休息了一下,接著主管進來先給張名片,然後就是自我介紹環節,主管中途有問題就會直接提出來,一問一答讓人比較不會緊張,這點覺得蠻好的。也會詢問專案和碩士論文,不過感覺比較在意的是,有沒有用過git阿?是否跟他人合作過比較大型的程式?當然也有提問個人平時的休閒和是否有女朋友之類的。後面則是講了不少公司的一些業務和發展,最後才詢問對於Offer是否有要求,不過這是我面的第一間,所以也沒有甚麼可以比較的,唯一確定的是年薪100薛為有點困難XD ### 二面 原本想說這麼久都沒有消息,是不是被發無聲卡了,大概是HR在搞。這次面試由整個team的主管來面,人滿親切的,畢竟全景做PKI,會要去看各種加密protocol的細節,自然就對我打CTF密碼學的經歷很感興趣,所以就詢問各種攻擊手法啊,怎麼一起解題等等,後來還請副總來跟我聊聊,非常詳盡地介紹他們公司的業務啊,以及很多他們做事的想法,也提點了許多人生的建議。感覺他們大概也知道我不是把全景當首選,因此比較多時間是花在跟我聊天。 ## 趨勢 (無聲卡 now) ### 線上程式測驗 (Codility) 跟爬文看到的一樣,總共會有三題,其中兩個偏向字串處理。 1. 給定一個英文字串,問在只出現一次的子字串中,最短的長度為何 2. 給定起始數字(binary字串),奇數的時候扣一,偶數的時候除以二,問這樣要操作幾次對應的數字會變成0 3. 給定一個陣列,以及一個整數$k$,問說把連續$k$個元素移除後,剩餘的最大值與最小值的差可能的最小值為何 蠻快就寫完了,然後檢查一陣子後就交出去,希望是不會有錯,坐等訊息 @@ ### 線上面試 跟ptt版上說的差不多,大部分時候都是我在分享自己的經歷,還有像是遇過哪些挫折?如何調適?最後就是介紹他們在做的東西,大致上就是搜集end-point的資訊,然後選取一些特徵後,判斷使用者電腦當前受到的威脅程度,以及提供建議的解決方案。而因為這些服務是要架在雲端上面的,所以也會問是否使用過AWS, Azure的平台。 ## 群暉 (Offer) ### 線上面試 這次一共有兩個工程師來面,首先來個妹子,先簡單的自我介紹,然後問了很多我很不想聽到的問題XD,簡單記錄有哪些問題,可能有遺漏 1. SELECT 跟 epoll 差別 2. process 跟 thread 差別 3. multithread 要注意什麼 4. Segmentation Fault 是啥? 5. Virtual memory 的好處和一些 OS Cache 的機制 6. HTTP, HTTPS 差別 7. TCP 三向交握 8. C++ 封裝繼承跟多型 白板題的話,是要判斷一個Linked List是不是回文,稍微討論過後,另一題希望我稍微講解怎麼用condition variable去避免race condition 第二位來的時候,只有簡單問一下我密碼學常見的攻擊手法,然後就開始考程式: 1. 一個排序好的分塊陣列,如何確定某個值存不存在 2. 一個左到右上到下遞增的矩陣,如何確定某個值存不存在 3. 有隻青蛙每次跳的距離跟上次跳的距離不會差超過1,是否能跳到某個位置 4. LRU Cache 實作 ### 二面 Google了不少ppt的面試過程,我本來以為是先跟主管面,然後才是HR...。沒想到是由可愛的HR小姊姊先來跟我聊天,基本上就只是單純地問跟別人合作的專案,可能想要透過跟別人合作的經驗,得知我是否適合分工,以及面試最愛的問的:遇到最挫折的事情是什麼?也回答了不少關於公司環境和文化的事情。接著就是最重要的一關,首先就是檢驗C++的學習成果, 寫個base class logWriter,以及兩個繼承的子class filelogWriter和strlogWriter,分別會把input字串輸出至檔案或stdout。然後因為我早上剛好有看到多型,所以一開始就用virtual void,馬上就被問為什麼要用virtual,感覺講得很爛,但概念對了就沒被追究QeQ。接著就是開始增加功能, 1. 如何讓logWriter只是abstact class,也就是說new logWriter()會噴錯,這邊沒看過要答對應該是不太有機會... 2. 新增個data structure去存以前log過的字串,這邊有得知新東西const_iterator,可以確保iter指到的資料不會被更動 3. 最後一件事情是,問我外面的人怎麼call多型的東西,畢竟是早上不小心看到的,一時想不起來怎麼用,然後就真的答錯了QQ 緊接著是程式題, 1. 有兩種操作,加入一個新的數字和詢問當前的數字們的中位數。我本來想用vector或priority queue,但都沒有可以接受的複雜度。後來在提示下,才想到可以維護兩個priority queue:每次有新的數字進來時,與第一個queue吐出來的東西比較,決定要進入哪個queue,並且要記得平衡他們的size 2. A, B兩人在玩輪流拿數字的遊戲,但只能從陣列兩端拿,最後算總合。B的策略是每次都拿大的那個,問A最多能贏多少。花了點時間想到用bottom-up去DP答案,交代完複雜度後,面試官鬆口說用了五分鐘,看來是有偷偷計時XD 演算法題結束後,就問個腦筋急轉彎,有全黑,全白跟半黑半白的袋子,但是標籤是錯的,問要拿幾顆球才能知道正確地標號。還有問問題時間,算是比較清楚這個職缺要做的內容,以及會用到一些工具,聽說備份相關的security其實是別的team負責的@@ 最後他們討論有點久,大主管才進來發offer,簡單講解薪資的狀況,然後問有沒有需要討論的,不過新思還沒給我答覆,我也沒辦法談就是了XD ## 新思 (備取ㄧ, Offer) ### 一面 感覺快要看過整個team的人了,分成三組來進行,一組表定30分鐘。都是先自我介紹,然後簡單問一下履歷,就開始問問題時間。 第一個妹子問的比較多: 1. 給定一張圖,設計一個資料結構存這張圖,並且詢問3個操作的complexity:getInput, hasArc, addNode 2. 問一段程式碼在DAG上面跑出來的結果,基本上就拓樸排序 3. 在第一題設計的結構下,上述遞迴的complexity 4. 改良成有效率的演算法,不能用拓樸排序 5. 一樣要算改良後的時間複雜度 6. 時間和空間的複雜度是最好的嗎? 第二組人先要我簡單講跟別人合作過的專案,之後叫我寫個簡單的小程式:根據數字的質因數做不一樣的輸出,並且要讓程式方便維護,換句話說,要容易變更質因數集。 最後一組則是先詢問我github上Optmiziation用的演算法,然後比較優缺點,剩下的時間則要我完成某個class中Topological Ordering這項功能,也順便問了用DFS, BFS完成的輸出結果。 ### 二面 沒想到這個team還有一堆人,一樣是分成三組,但這次一組只有一個人,分別是在美國的印度主管,在上海的親切台灣人,以及在法國的法國工程師。 一開始就是先英文自介,對方馬上就問,為什麼會選擇面試這個職缺?而不是去找ML相關的工作?然後中途介紹了工作的內容後,就是問一些技術上的問題。主管問的題目很開放,不像之前面試都是問明確答案的 1. 怎麼去避免overfitting的問題? 2. 怎麼去確定greedy會得到最好的結果?有強調large scale 3. DP中bottom-up跟top-down的差別是啥? 4. 知道多少EDA?(這個直接被嗆爆,太誠實好像不太行) 5. Simplex method在什麼情況只需要看頂點?為何? 6. 說明實數比有理數多 接著是親切的台灣人,開場就先用中文閒聊,一直說什麼我這個經歷一定沒問題啦,可能是要給我建立點自信。突然就切換成英文,要求自介,然後問簡單的圖論問題: 1. Strongly connected component是啥? 2. 首先講有哪些電路pattern可以使用,問整個電路換成這些pattern的組合,最小的cost是多少。 3. 給個電路圖,並且有每個線路和gate的延遲,問整個電路跑完要多久。 我問具體要做啥,因為其實前面的人講解,我都是點頭,但並沒有真的了解。他是我覺得解釋的最清楚的,可能是因為用中文吧XD!簡單來說,Zebu就是打算把整個電路用很多個FPGA去模擬,如此就要確保這些小電路拼湊起來的邏輯跟原本設計的一樣,主要minimize FPGA之間channel連接的delay,還有像是決定要複製哪些部分,用空間換取時間,省去FPGA之間的delay。 最後是跟法國的工程師面談,不外乎又問了為什麼不去做ML?為什麼選擇這個職位?有沒有做過什麼C/C\+\+的專案?最困難的是啥?緊接著就是問C\+\+相關的知識,他似乎特別在意這點。 1. pointer是啥?pointer的pointer是啥?smart pointer是啥?還有一個我沒聽清楚 2. 問main和自己定義的function裡面用new來產生一個object後,何時會呼叫deconstructor 3. 最後的最後,要求我用奇怪的struct定義的graph,跑出對應到strongly connected component ### 二二面 可能有鑒於之前面試的過程,覺得我還是不算太爛的吧?於是安排了另外一個缺的面試,這次一樣要跟法國人面試... 而且口音比上次還嚴重,著實有點難受。這次問題就很制式,也是自我介紹和詢問專案經驗,也很在意是否了解心思的工作內容,最後有問了兩個程式題: 1. 給定一個array,找出總和最大的sub-array 2. 給定一個array,找出一組滿足 $$a^2 + b^2 = c^2$$ 的數對。