看板 Soft_Job 關於我們 聯絡資訊
看到最近的學界轉業界討論串很感慨, 因為自己就是付諸行動的其中一員。 過程冷暖自知,在成功轉職之前, 總是在思考自己這樣半途而廢, 到底是逃避還是有自知之明? 之前在本版發了一篇詢問下一步的文章, 在那之後,加入的校內CS系的機器學習實驗室, 並且收到了google recruiter的聯繫。 期間不僅在學習換領域的知識, 同時也得面對家庭方面的壓力(詳見婚姻版)。 雖然之後總算取得了先生的支持, 無奈自己不爭氣,沒把握住機會。 最近這半年投履歷的結果: 自己海投:很多很多(但沒投FLAG這種等級的) --> 完全沒下文 HR內推:google --> onsite (Boston) 之後被拒 背景: 美國數學PhD,做偏微分方程 非統計積率、非金融、非數值分析……就是很純很純的那種,用紙筆工作 數學系博後第三年。 Coursera自學Java, Python, R (目前最愛Java,最頭大的是R,覺得Python普普,可是很多公司愛用。) 以前號稱會C++,但是Java熟到一個程度之後,覺得C++水好深... 面試準備: Leetcode刷了大概250題。 以下都拿Leetcode上類似的題,原題就不說了… 電話面試:Combination Sum  (第一場、也是至今唯一的一場電面) 這題對本科系的人來說,可能小菜一碟。 但當時自己做得坑坑疤疤的, 加上電話雜音特別多, 寫code用的google doc一度變成打字對話板。 面完隔天HR打電話來約onsite, 並且告知feedback(總之就是一堆溢美之詞)。 但自己實在是被電面嚇到了, 於是問HR能不能把onsite約在一個月之後:「這樣會不會太晚?」 HR笑回:「對google來說,沒有太晚這件事。」 (好吧,我錯了,就結果來說,是太早了…嗚嗚嗚) onsite面試 一共五輪+午餐 (第一場、也是至今唯一的一場onsite) 第一輪:Alien Dictionary 第二輪:這題找不到類似的…大意是判斷兩句子是否同義。 第三輪:Fizz Buzz 第四輪:Continuous Subarray Sum 第五輪:Most Frequent Subtree Sum (意思不同,但工具一樣) 平心而論,題目都不難,聽完當下至少都白板寫完了初版。 只怪自己沒有好好把握,不夠有效率,又有bug。 再加上面試前兩天剛被google code jam輾過一輪,身心俱疲。 (以後若有其他面試機會,絕對不會再白目跑去玩比賽了…) 面試官們人都很好,透過談話自己也學了不少, 而且午餐也很貼心了安排了一個華人陪我(雖然我們還是講英文)。 面完一個禮拜之後,HR打電話來告知沒過, 但是安慰說:「You are in good shape.」又說咱們保持聯系,明年再試試。 (這種打擊自信的事情還要再來一次嗎><) 雖然早就有心理準備,但是真的聽到沒過的消息還是哭了一下。 畢竟整個過程都是第一次經歷,初戀分手總是特別難過的…… (這也是發這篇文的原因,用文字來療傷) 現在自己也很迷茫,不知道下一年要做什麼。 繼續待在目前的lab? 再申請個CS Ph.D. program (Ph.D.才有全額獎學金)? 破釜沉舟,無業自學? 還是趁暑假回台灣做實習?(我是真的很想看看業界在做什麼阿) 美國很多實習的職位都只給註冊在學的學生, 不知道台灣是不是也這樣子? 補充一下Fizz Buzz這題,老實說至今尚不太明白這題的重點。 題目:從1數到n,如果是3的倍數,print Fizz    如果是5的倍數,print Buzz    如果是15的倍數,print FizzBuzz    如果都不是,就print 數字本身 這題面試時寫了兩個版本 版本一 for(int i = 1; i<= n; i++){ if(i%15 == 0){ System.out.println("FizzBuzz"); continue; } 以下類推… } 版本二 for(int i = 1; i <= n; i++){ String result = ""; if(i%3 == 0) result += "Fizz"; if(i%5 == 0) result += "Buzz"; if(result.length() > 0) System.out.println(result); else System.out.println(i); } 自己是覺得兩個版本沒有本質上的區別,都是O(n), 而且用continue還可以減少if判斷次數。 但面試官大推第二個版本,他覺得continue不好,不應該使用。 想問一下,在業界continue、break是盡量不用的東西嗎? (我只知道goto是禁招...) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 24.177.245.51 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1492460824.A.D51.html ※ 編輯: Cauchy2008 (24.177.245.51), 04/18/2017 05:33:37
fishfish1314: 能去google面試已經贏版上9成了好嗎 這樣有安慰到? 04/18 05:48
n3oanderson: goo.gl/VJuJQ6 04/18 05:50
n3oanderson: FizzBuzz: the Programmer's Stairway to Heaven 04/18 05:50
saiba: 今年google SWE已經freeze了,所以最近HC的bar非常高... 04/18 06:29
saiba: 前幾週被拒前HR打來說即使過HC到2018年前都沒有SWE的缺了 04/18 06:30
drajan: 他們是要看你的problem-solving skill 跟你的thinking 04/18 06:52
drajan: process 正確解題也不見得能夠讓面試官信服你有能力面對 04/18 06:53
drajan: 不知答案的問題 04/18 06:53
Lordaeron: goto? unix 上天天都見啊. 04/18 06:53
Lordaeron: 而第二題比第一題正解多了吧. 3X5=15..... 04/18 06:57
cha122977: 第二種擴充和修改都比較容易 04/18 06:57
drajan: https://goo.gl/ifbL2v 04/18 06:58
amatt: Linux kernel一堆continue跟goto的 04/18 07:04
stosto: 他第一題沒把全部打出來啦 04/18 07:06
stosto: 減少branch是對的 不過這邊影響不大啊 04/18 07:07
對,那時面試官說要一種減少if數的寫法,所以才又給他第二版
bemyself: 我不懂 你是剛換領域 要看業界可以先進軟體業 04/18 07:14
問題是進不了T_T 除了google,沒有其他面試了…
bemyself: 一下就因為被google拒絕而挫折 這樣換得了領域? 04/18 07:15
※ 編輯: Cauchy2008 (24.177.245.51), 04/18/2017 07:32:37
shnobi: Goto不是禁招,遇到錯誤結束程序就很適合用goto 04/18 07:35
sunpedro0202: 我覺得你很厲害了,加油! 04/18 07:46
steve1012: 其實部分大公司反而對轉專業的更友善吧 面過很多小的 04/18 07:51
steve1012: 考更多fundamental 04/18 07:51
steve1012: 感覺原po很強啊 加油! 04/18 07:51
A4P8T6X9: goto 統一出口很好用的說 04/18 07:51
Sex5F: 區域變數 ....result出去無法呼叫 04/18 07:56
Sex5F: 再加油吧! 04/18 07:56
什麼意思@@ 這題是要print一串東西, 整個for是被包在一個static function裡面。 (因為想問的是for的事情,外皮的function和class就省略了) 不需要從外面call result
za755188: 沒錯 90%都用不到 04/18 08:02
za755188: 但是當你要用到那10%時 就會覺得當初屨及好好學了QQ 04/18 08:03
za755188: 應該orz 04/18 08:03
※ 編輯: Cauchy2008 (24.177.245.51), 04/18/2017 08:08:24
cjSucks: 有可能問題都太簡單或考古題太多 看不出鑑別度被拒了 04/18 08:06
fishlinghu: 第1題你如果用if /else if /else if /else 04/18 08:09
fishlinghu: 這樣就不用continue了吧? 04/18 08:09
fishlinghu: 建議你多找內推繼續投 被G拒連本科生都很正常吧XDD 04/18 08:09
fishlinghu: 另外我個人覺得數學好做ML滿吃香的 CS很多學生都沒 04/18 08:10
fishlinghu: 這種數學底子 04/18 08:11
關於避免用continue,那時還寫了一個第一版的變形 if(AA && BB) 這種,四個if寫完收工(面試官無言…) 我覺得他心目中的解答是第二版,然後我剛開始一直沒抓到他要的。 那時其實很慌:到底為什麼要糾結在這題這麼久!! ※ 編輯: Cauchy2008 (24.177.245.51), 04/18/2017 08:16:19
fishlinghu: 阿不過可能是統計機率比較相關啦 04/18 08:11
steve1012: 這題跟區域變數有啥關聯? 04/18 08:13
bcew: 版本一會多做一次%15又多一次branch判斷 04/18 08:28
WangDaMing: 要去g面試不難啊!能上才難好嗎 04/18 08:30
doranako: 有美國數學phd很強,在美國金融跟軟體都很多人要,我覺 04/18 08:43
doranako: 得可以繼續嘗試 04/18 08:43
paint: 感謝分享 大家學歷好高啊 04/18 09:23
Murasaki0110: fizzbuzz leetcode上面不是有嗎 怎還寫出第一種 04/18 09:38
maxqq: 遞迴... 04/18 09:53
ssccg: 感覺差最多的在擴充性吧,再多別的數的倍數要加的if數量.. 04/18 10:03
maxqq: 貼錯文 04/18 10:04
wens: linux kernel 的 goto 幾乎都是 exit path, 不是亂用的 04/18 10:08
chenxiaowoo: 對google沒有禁招~只有好跟不好,至於第二個版本在面 04/18 10:41
mecumi: 只有我覺得第一個比較簡單易懂嘛XD 04/18 10:42
chenxiaowoo: 試官的眼裡比較好,是因為簡潔、邏輯清楚(歐美邏輯 04/18 10:42
physheepy: 我看到你第一種解法的第一個想法就是WTF 本身有維護過 04/18 11:15
physheepy: 大型專案程式碼 有些寫法雖然沒有錯 複雜度也沒比較高 04/18 11:16
physheepy: 但會讓原作者以外的人看的很痛苦 建議你試做看看專案 04/18 11:18
physheepy: 你可能會比較有感覺 04/18 11:19
ahli: 可以請問一下第一種解法不好看的點嗎? 04/18 11:36
ahli: 以前被code review的人講過類似的點 但不太清楚@@ 04/18 11:37
ggttoo44: 別用string因為太多暫存記憶體會導致頻繁GC改成stringbu 04/18 11:39
ggttoo44: ff然後else if從15開始到3。 04/18 11:39
remmurds: 我也很好奇continue到底哪裡不好 難道一串else-if就一定 04/18 11:41
remmurds: 比較好嗎? 04/18 11:41
ggttoo44: if(n%15==0){}else if(n%5==0){}else if(n%3==0){}從大 04/18 11:44
ggttoo44: 到小類似這樣 04/18 11:44
ahli: 條件的順序我也是寫15->5->3 (不用continue的話) 04/18 11:50
steve1012: 第二個蠻漂亮的吧 第一個每個條件裡面都要print? 要是 04/18 11:57
steve1012: 很多條件會蠻多重複的code? 04/18 11:57
WashFreeID: if順序 15->3->5 判斷次數會比較少吧 04/18 11:59
WashFreeID: 然後用length==0明顯不好 要用empty吧 04/18 12:00
WashFreeID: 最後print那邊也可以改用三元運算子 一點小看法... 04/18 12:00
physheepy: 第一個解法不好看的原因: 當我閱讀到continue 我知道有 04/18 12:02
physheepy: 一長串code在某些狀況下會被略過 當我想要詳細了解什麼 04/18 12:03
physheepy: code會被略過 我必須把整個loop很仔細全看過 而當我想 04/18 12:04
physheepy: 加入一段新的程式碼 我會開始困惑 到底該從哪插入 才不 04/18 12:04
physheepy: 造成bug 當你寫的程式很大 loop裡面呼叫許多其他函式 04/18 12:05
physheepy: 這些函式又內含許多loop裡面一堆continue 你會被搞得 04/18 12:06
physheepy: 暈頭轉向 大罵到底是誰寫出這種無俚頭的結構 04/18 12:07
physheepy: 寫這種小程式 你看不出來continue的問題在哪很正常 04/18 12:09
physheepy: 參與一些稍微有規模的專案 吃過幾次虧 就會知道什麼結 04/18 12:10
physheepy: 構會讓人抓狂 補充:要如何判斷一段程式碼結構好不好? 04/18 12:10
physheepy: 當你一個月後回去看 還能一眼看懂當初在寫啥 那你就算 04/18 12:11
physheepy: 成功了 我現在寫code都會盡量要求自己做到這點 04/18 12:11
physheepy: 另外 continue 不是不能用 是沒必要的時候少用 04/18 12:13
kita: 不太懂, 如果今天要改成15倍數印"FB",或要加進14倍數 04/18 12:25
kita: 第二種寫法有比較好擴充嗎? 04/18 12:25
javatea: 不好看的原因是不需要用continue 還用continue 04/18 12:27
javatea: 寫四個 if-elif 這還ok吧 = =跟大型專案洨的沒關係 04/18 12:28
jj0321: 好害羞 專案洨 >////< 04/18 12:29
javatea: 像那種講一堆話 但重點只有一句的 維護起來會比較頭疼 04/18 12:29
kita: 用continue跟改用else不是差不多的邏輯嗎? 04/18 12:31
kita: 其實想問,不懂題目的重點,不能直接問面試官嗎? 04/18 12:35
fishlinghu: 說真的我覺得if else比較好看懂吧 一看就知道4 cases 04/18 12:39
fishlinghu: 倒是string那種寫法 還要仔細看一下string如何相加 04/18 12:39
O187: 取餘數要花時間,所以版本一不好 04/18 12:52
marsyang1: break or 直接return常用,因為能判斷早點出迴圈,con 04/18 12:59
marsyang1: tinue 不常使用。 04/18 12:59
remmurds: physheepy講的東西比較像是open close principal沒做好 04/18 13:05
remmurds: 跟用不用continue沒啥關係 04/18 13:06
javatea: 做大型專案看不出來這東西根本不需要continue? 然後在錯 04/18 13:08
javatea: 誤的認知下去分析一堆東西 這我也是醉了 04/18 13:08
javatea: 今天這非多大的東西, 就事論事本來就是一個工程師本分= = 04/18 13:10
vfgce: 呃,數學底子卻對R苦手? 我是不是誤會什麼了.... 04/18 13:14
vfgce: 進機器學習,結果最熟java,R及python不在行..... 04/18 13:20
Cauchy2008: R很亂(對不起...)我喜歡Java這種風格 04/18 13:20
vfgce: 您數學底子做機器學習是大加分,但工具..... 04/18 13:21
vfgce: 以CS的角度看,R當然很不易入門,但R的資料格式適合資料分析. 04/18 13:25
vfgce: 語法簡潔,頭腦清楚的,幾行R就可以做java數十行才能做的計算 04/18 13:26
vfgce: 若您喜歡語法嚴謹,接近CS領域的,那也該選python 04/18 13:26
vfgce: java在機器學習領域不易使用啊.... 04/18 13:29
Cauchy2008: 在學校通常是先用Matlab跑小數據,再翻成C++在雲端平 04/18 13:29
Cauchy2008: 行計算...其實我沒有熱愛Python的原因跟Matlab相似, 04/18 13:29
Cauchy2008: 這樣只好練C++了 04/18 13:29
vfgce: 如果用java是為了效率可以理解,但python底層的package, 04/18 13:37
vfgce: 是用C/c++寫的,實際執行不見得慢多少,真要遇到大數據,也是 04/18 13:38
vfgce: 可以在hadoop/Spark底下執行... 04/18 13:39
drajan: 喜歡JAVA風格又數學很好 那當然投入Scala的函數式懷抱囉 04/18 16:09
artopll: 你的背景能夠加入到機器學習非常吃香啦 我自己本身應數 04/18 16:47
artopll: 碩士 念最佳化的 04/18 16:47
artopll: 做兩年android 現在轉機器學習相關工作,真的開心很多 04/18 16:48
artopll: 雖然要重K一些數學 還有papareXD 04/18 16:48
ahli: 感謝p大 有點sense了 04/18 18:27
Sunal: 很純很的純數組,機器學習會很吃香嗎?還是我對純數組有些 04/18 19:57
Sunal: 誤會 04/18 19:57
ACMANIAC: 管他什麼組,機器學習的東西讀得懂就吃香,讀不懂就吃屎 04/18 20:54
Cauchy2008: 純數組的優勢嘛...大概只有對「感覺複雜」的buffer拉 04/18 21:09
Cauchy2008: 很高,很多統計的東西還是得補,程式得練 04/18 21:09
Cauchy2008: 自己是覺得寫程式的感覺和寫paper很像,把大問題拆成 04/18 21:14
Cauchy2008: 很多小定理,再從主證明去呼叫它們;如果有很多類似 04/18 21:14
Cauchy2008: 表現的東西,就給它們一個class,再規範運作細節 04/18 21:14
Aweil: 很純的PDE 是指像Caffarelli、Nirenberg等人在做的那種嗎? 04/18 22:08
Aweil: 非線性elliptic PDE;free boundary之類的? 04/18 22:11
Cauchy2008: 樓上內行!關鍵字除了free boundary以外全中 04/18 22:33
Aweil: 跪一下 純橢圓方程高手養成不易 文章看來是鐵了心要轉行 04/18 23:41
Aweil: 預祝順利 04/18 23:41
eva19452002: 能去google面試已經是人中之龍了 04/19 05:21
sayya2311: 真心覺得大材小用... 04/19 21:42
aacs0130: 如果想了解業界,台灣軟體公司的正職可以試試,非實習 04/21 07:58
k47100014: 如果他又加了個7的倍數你是不是又要多寫21,35,105? 04/21 08:29
Csongs: 唉 英文真的要練惹 04/21 08:53
popoblue: 台灣的軟體工作就不太需要考慮了... 連 Leetcode 都不考 04/23 12:22
popoblue: 想找實習 在美國找找看吧 @@ 04/23 12:22
brian980466: 機器學習還是python一支獨秀 04/25 02:35
sppmg: 竟然沒人用case解? 05/01 02:57
sppmg: ((n%3) << 1) & (n%5) case 0,1 ,2,3,* 05/01 03:00
sppmg: 突然想起,寫錯啦! 05/01 04:57
sppmg: 改這樣: (((n%3)>0) << 1) | ((n%5)>0) 05/01 04:59
sppmg: 後來看回文才發現有類似解法 05/01 05:01
sppmg: 咦,還是錯,==0才對。該睡了 05/01 05:02
HowLeeHi: 樓上... 08/08 21:12