2020年5月9日 星期六

2020 New Grad 面試心得 ( 4 ) Google

Google


投遞管道: 請學長內推
時間:
2月中 投遞履歷
2/25 HR面談
3/17 Phone screen
4/7 Virtual onsite (1)

2/25 HR 面談

HR 會介紹目前 Google Taiwan 主要做的產品 Nest, Pixel
然後會介紹面試流程 Phone screen ->  4 Technical interview + Googleyness interview (onsite) 
但疫情影響有可能 onsite 會換成 Virtual
然後會考一些基本的東西  各種資料結構操作的時間、空間複雜度
會用英文問你  可以用中文或英文回答
結束之後會寄信給你一些參考資料  寫Leetcode 複習資料結構、演算法...等
會跟你說接下來的技術面談會怎樣進行
然後問你下一階段面試可以的時間  他說等我準備好再跟他說
(說大概可以排在 2~4 個禮拜後 但如果一個月後都沒給他消息他會再聯絡) 

3/17 Phone screen (45 mins)

(大概刷了180題 E80 M80 H20)

用Google Meet面試

一開始出了點狀況 

我一直連不進去面試的Meet

整個面試晚了 20分鐘才開始

面試官是台灣人  一開始自我介紹

然後問了我想進什麼組別  覺得自己擅長什麼 進去可以幫忙什麼

老實說我一開始沒預期有這類問題(而且是我第二個面試)  所以回答得很爛  想到什麼就答什麼

大概聊了10多分鐘(我心裡在想 難道延後太久不考程式題了嗎?)

然後就轉成考程式題了  在Google docs上面作答(事前會給你連結  要確認你可以編輯它)

考了一題 Array 的題目  難度大概是easy  用DP解

一開始沒什麼想法  面試官提示可以怎麼開始 然後就開始講自己的想法(一邊在docs上操作測資  講解你的想法)
講完之後 跟面試官確認可行就開始寫程式  寫到一半發現可以有改進弄得更快  就直接跟面試官說寫更快的方法
寫完之後用面試官給的測資驗證  驗證完之後  面試官提一個測資  會有小bug  解掉之後會問你有沒有漏掉的特殊狀況
或者會不會Overflow之類的  就驗證一下  或推算大概怎樣會overflow
正常會問解法時間複雜度  (但我在講解法時就有提到所以可能沒問)
程式題之後 問我有沒有問題 有點忘記我問什麼了
問完就結束了  原以為還有follow up
後來查了發現他們會根據時間的多寡來調整題目數量
總共花了一小時面試(含 20 mins delay)

03/20 HR 回覆

通知上一階段通過 換成另一個 Recruitor 幫我安排面試
因為疫情的關係 onsite被拆成兩部分
先兩個 Technical 通過才有後續的
HR 詢問我下一次可以的時間  我大概也是抓兩個禮拜後

4/7 Technical interview 1

面試官也是台灣人 確認完身分後就說這關要用英文
然後就換成英文了
基本寒暄自我介紹之後就直接進入程式題
也考了一題 Array的題目 難度大概 medium - hard 用stack解
講完我的解法之後  面試官問我能不能用更少的空間複雜度
經過一點提示後有想到解法  有共識討論完解法之後  就開始撰寫
撰寫完  先用基本測資確認正確性
我自己確認完以為沒問題  結果還是有小 bug 漏掉
完成後面試官多問了一些  sign & unsigned 的問題 (關於index的)
討論完之後 時間差不多就結束了
也是有我發問的時間 但寫文章的此刻我已經忘記當時我問的問題了
(應該是 code review 流程之類的)

4/7 Technical Interview 2

面試官一樣是台灣人 依舊是英文面試
程式題考的是 Tree + Probability 相關的 難度我覺得是easy
解法用 BFS 就可以了
因為蠻快想出解法  所以後面的 follow up 擴展成 multiple leaves (原本是 binary)
修改一下前面的程式碼就可以適用後面的要求
中間還是會不小心漏掉小bug  經過提點快速補起來
兩題結束後 面試官說程式題就到這裡
然後就是一些閒聊  我問了一些開發流程的方式  時間安排
面試官稍微跟我講了一下他們組別的流程跟時間
時間差不多就結束了

後續

因為上一次的面試 兩三天後就有消息
大概等了一個禮拜之後 我寄信問了第一階段的 Recruitor
他說接下來他們會放慢招募的速度  所以至少要一個月以後才會有消息
隔幾天後我就看到因為疫情影響  Google 大幅降低招募速度
所以大概是卡住了

4月底的時候因為 Shopee 要談薪水了
所以跟 Recruitor 詢問流程能不能加速  或有什麼其他辦法
Recruitor 馬上跟我約個時間確認我現在的狀況  問我有沒有想要等
說: 最快應該是 5月才會有消息
所以就繼續等到現在

心得

其實自己面試下來  不知道是不是運氣好
遇到的題目不是太難
但還是需要一定的練習才有辦法
因為面試時間很短

大家很害怕的英文面試也沒有到很難
因為面試官也是台灣人
所以英文有辦法溝通就好
每個面試官人都不錯

我覺得很重要的一點 (也是 Google 一直強調的)
就是你要一邊思考一邊講出你的想法
講出來面試官才能知道你現在的狀態(到底是完全沒頭緒、有一點想法...等)
至於面試官要不要幫你  真的很難保證
所以只能多刷題減少自己出錯的機會

2020年5月4日 星期一

2020 New Grad 面試心得 ( 3 ) Shopee

Shopee


投遞管道: 校園招募(email)
時間:
3/23 填 Google form
4/1 HR 回信
4/14 HR 面談(1)
4/17 Technical Interview 1
4/23 Technical Interview 2
4/24 Technical Interview 3
4/28 HR 面談(2)

HR 面談(1)

因為當初填的表裡面有很多個職缺

所以這個面談主要是跟你確認最想丟的職缺

會介紹各個職缺的工作內容、常用的語言、環境等等

確認完 最後我面是的職缺是 Backend Engineer

Technical Interview 1 (90 mins)

面試官是台灣人  會用codebunk這個網站來寫程式 (有編譯執行功能的share doc)

一開始先自我介紹 講了一些我做過得專案後就開始解題

考了一題Leetcode難度 easy 的

邊寫邊解釋想法

寫完之後考了設計概念題(還是這就是系統設計題?)

大概內容就是

如何在多台 host 收到請求的時候  針對每個請求產生一個不連續的hash value

在處理請求時  如何讓process不會卡在某個需要等待的動作(e.g. I/O)

一邊驗證(假設)情境 一邊想邊解釋各種方法的可行性

問完之後

又多考了  會選擇怎樣的 Database 來存資料 考量的點是什麼?

面試官會追問你選擇的原因  你的選擇必須要有個合理且具說服力的原因

Technical Interview 2 (90 mins)

面試官是個中國人 有明顯口音 很多咬字我聽不太懂

可能是我一直要他重複再講一次  感覺到最後面試官有點不耐煩

一樣是先自我介紹  然後丟題目給我

先有一題 easy 難度的題目

解完之後 又是設計概念題(?)

一樣是hash 不過這次的情境是一台 host 一秒內會有上千上萬筆請求

要如何確保每個請求產生的hash不一樣?

hash value要如何在資料庫裡面儲存 要考量整個資料量成長的速度  不能用太多空間

中間也問到那會選擇SQL, NoSQL的哪種? 兩種差異性  優缺點 index 差異

擴展到多台 host 時要如何實作?

後來討論完之後大概剩30分鐘時  又多一題程式題

是Leetcode hard難度

曾經寫過  但不是最佳解

所以卡很久  最後也沒寫出正確版本

不過後來事後看解法  當時最後解法方向是對的

Technical Interview 3 (60 mins)


最後一關是跟Team lead (進去之後的主管)

聽口音不是台灣人也不是中國人... 東南亞其中一國人(?)

自我介紹完之後給了 一題Leetcode easy

然後是設計概念題(?)

細節忘記了

印象中也有提到 SQL 的 index 怎麼實作的? 那優缺點是啥?

最後面試官問了一些

個人特質相關的問題  (如何跟同儕溝通, 遇到衝突如何解決)
對出國到新加坡工作的考量點

我問的問題大概是下面這些

公司風氣
Team lead 管理的人數
版本控制
Code review 大概哪些人參與

HR 面談(2)

口頭offer

HR會跟你談期望薪資

會給你新加坡物價的一些參考資料

然後可以看一下過兩天再跟他說

結果

口頭offer  還在等 Google 進一步面試的消息

心得

蝦皮面試流程真的蠻快的  而且很有效率(可能業績壓力)

意外的是他們每個階段都有設計概念題(or系統設計題?)

都是用他們實際會遇到的情況來去設計  蠻新鮮也蠻好玩的

薪水方面  聽說校園招募的工程師 價碼是 5000~8000 新幣

但我也還沒跑流程 HR 說等我 Google 那邊進一步消息 再走流程
( 因為我說想等 Google )

整體而言 面試過程的體驗還蠻不錯的


2020年5月3日 星期日

2020 New Grad 面試心得 ( 2 ) Nvidia / AWS


這篇主要介紹 Nvidia 跟 AWS

Nvidia

System software engineer

投遞管道: 官網投遞

面試流程: online interview -> (subteam interview)

時間: 
3月下旬丟履歷 

4/1 收到面試邀請 (email)

4/10 面試

上網做功課發現大家都說 Nvidia 發面試邀請都是狂丟猛丟

但這次約的是線上所以應該是有經過一輪篩選

online interview

總共面試排了 3hr 45mins

一開始會給一份 shared doc 考卷給你寫

題目類型有 pointer, OOP, OS 相關的

(給你2.5 hr寫  但我1小時就寫完了 空了兩三題忘光不會的)

之後就開始問履歷上的東西

做的專案 相關的技術細節等等

之後介紹他們組別在台灣的工作內容(會跟不同時區的sync工作) 

正在招募的組別的工作內容

聽起來大部分的工作內容是要實做 design pattern 相關的東西

然後跟各組溝通 說服各組用這個方式開發或重構

最後有問接下來的面試會是如何

工程師說會由各個 subteam 派人好幾個人同時面我一個

但我第一次面試完就沒消息

結果


無聲卡

AWS

總共面了兩個職位
AWS Cloud Support Associate
Amazon SDE

AWS Cloud Support Associate

投遞管道: 官網投遞

面試流程: online assessment -> X

時間: 
3月上旬丟履歷 

3/16 收到面試邀請 (email)

3/21 線上測驗

online assessment

主要有兩部份 第一個部份是模擬工作環境

有email 聊天室

會有客人的問題 主管的要求

需要排出你處理的優先順序

根據什麼原因排優先順序

感覺沒什麼正確答案

比較像要找看看你的做事風格跟他們要的有沒有一樣

第二部份是些技術考題  大概就是大學計算機網路概論學的東西(選擇題)

e.g. 各種應用層協定用TCP還UDP實作之類的問題

最後會要你填  各個子項目的優先順序 (應該是分組)

有Windows, Database, Infra之類的

後續

面完後大概 3~4 天收到email 約下一階段面試

但上一次的面試我發現這個職位跟我想像落差太大

這職缺比較像是技術支援的接線生

不太需要寫程式(完全沒考到)  但需要跟客戶還有主管同事周旋

所以就婉拒後續的面試了


Amazon SDE

投遞管道: 官網投遞

面試流程: online assessment -> X

時間: 
3月下旬丟履歷 

4/17 email 通知

4/20 online assessment

當時的題數大概 250  E-100 M-120 H-30

online assessment

測驗就是正常的解題 總共有三題 總共給 1.5 hr

難度估計是 2 題medium 1題medium-hard

我只解出第一題medium 另一題medium 通過只測資15/20

第三題沒有想出好的解法 卡有點久

題目不是太難

類型是 Sequence, Tree, Unknown

只是我刷題大部分都刷 DP 的題目(為了Google)

所以我只寫出Tree的(我覺得比較簡單)

Sequence的我卡好久  最後猜測應該是 edge cases 沒考慮到

結果

無聲卡

心得

Nvidia 
現在的線上面試有工程師 
所以感覺不像PTT上說的狂灑面試邀請
不然光面試新人  正職工程師都不用工作了

AWS Cloud Support Associate 
真的是對職缺的認知錯誤  不過模擬工作環境還蠻有趣的
但我還是比較想找需要寫程式的職位

AWS SDE
推薦大家測驗前到網站上測試一下環境
因為有朋友是 mac 的測驗前五分鐘才發現進不去網站

測驗網站要開鏡頭  而且規定很多  不能開分頁  不能縮小視窗
(開鏡頭我猜應該也有追蹤眼球之類的)

而且他們寫題的環境很難用
UI 很醜 像10年前的網頁
而且操作起來很卡  換一個題目要等個10幾秒
換題目的按紐也很難點  認定範圍很奇怪  要點個好幾次才會切換題目

第一題目下有一個"提交"按鈕
寫的時後以為按了提交就會交卷不能寫了  一直怕自己不小心按到
結果看到第三題有多一個"提交考卷"按鈕
才猜測  提交應該是類似存檔功能  儲存那題寫的程式碼
整個寫完心情很不好XD

只寫出一題 後面沒消息也蠻正常的




Go lang 學習筆記 - 17 Pointers

``` package main import "fmt" func zeroval(n int) {         n = 0 } func zeroptr(n *int) {         *n = 0 } func main() {         ...