雜談:2019職場生存手記:謀職篇(Mar — July)

Hallblazzar
Hallblazzar :Developer Journal
40 min readJun 29, 2019

從二月畢業後無縫接軌替代役開始,就一直忙著求職面試的事;加上自己又犯了一閒下來就亂開分支的老毛病,每天從服勤單位下班後真是一刻也不得閒。好在服勤時間內,由於分發到的單位還滿清閒的,還可以讓我慢慢地把之前從天瓏扛回來、沒時間看的書給消化掉,不然讓它們繼續躺在書架上,我也很心痛XD。(超佩服自己居然能在這種亂七八糟的時間配置下,擠出時間把研究所的心路歷程寫完)(雖然Par2才寫了一點點XD)。

算一算謀職的事也都塵埃落定,加上也平安地拿到退伍令,我想就把這段期間(三月初到七月底)的求職經歷記述下來,留給自己和後人作為參考,也希望能為台灣的開發者們做出一點小小貢獻。

1. 事前準備

1.1. 目標客群

先談談我的目標是什麼。

從懵懂無知的大一到歷盡滄桑(?)的現在,我做過三份不一樣的工作,包含:

  • Microsoft Student Partner
  • IC 燒錄設備公司的 Intern
  • 建設公司的RD Intern(畢業後轉為正式)

也做過一些滿特別的的Project:

  • 作為畢業專題的Software Defined Network(SDN)based 的VoIP應用
  • 從零開始建構和維護Openstack的叢集,供系上私有雲使用

還有碩士時期做的、利用人工智慧技術做金融商品價格預測的研究。

雖然我學的、做的實在是雜到不行,從最底層的IC、OS、網路到Service和Cloud、AI,但我始終鍾情於架構層面的工作。從原始碼層級的模組,到系統層級的元件或服務級的架構設計,我都非常喜歡-把不一樣的技術串在一起、構築成應用的同時,又要保有拓展的彈性,是一份既有挑戰性又有趣的工作。尤其在大四時接觸到DevOps和Site Reliability Engineering(SRE)這兩塊知識領域後,我對於架構的思維就不斷受到衝擊和成長,進而想要學得更深、更廣。不過學習是一回事,實戰又是不一樣的世界。對於現階段的我而言,我想找的還是在DevOps或SRE這塊的工作,但是我希望能夠處理的存取量夠大、需要面臨的挑戰夠多的服務,最好還可以具備高度的變動性,讓我有更多能夠學習和施展的機會。

然而以我的經驗和觀察,在台灣,對於開發的思維,很多軟體公司都還是停留在功能的層次,並不會去思考要怎麼讓服務更加穩定以及容易擴展,只專注在完成功能本身。我想也是業界的特性使然 — 畢竟大部分的公司都沒有產品的概念,都還是以代工接案居多;即便有自家產品的本土公司,也只有非常少數具備較大的使用量。所以這一次的求職,我的主力基本上都是放在具備自家產品的國外公司,並且規模越大越好。除了職涯成長外,也可以順便洗一下經歷。

歸結一下我的預設條件:

  • SRE/DevOps的職缺
  • 公司有自有產品
  • 用戶量和服務本身的存取量越大越好
  • 服務本身變動性越大越好
  • 跨國大型軟體公司為主

1.2.履歷

好啦,我必須承認,我除了履歷之外,真的什麼具體的東西都沒有準備-就像抄一把刺刀就上戰場跟人家硬幹的藍波一樣(而且還沒有人家的神勇和主角威能)。所有的東西我都是憑記憶和經驗臨場發揮,見招拆招(好孩子不要學)。好在平常蹲的馬步夠紮實,而且遇到的面試官都很Nice,不然這篇就得改名叫「雜談:2019職場生存手記:找死篇」。當然事後想起來,如果當初有針對每一個拿到面試的position準備,就可以表現得更好,也不會發生一些尷尬的狀況。

說了這麼多,要怎麼寫履歷?

其實這都已經是老生長談,最簡單的原則就是:

「除非是在人力銀行上海投,否則不要用人力銀行的樣板。」

這聽起來很簡單,但是做起來非常困難。因為大多數人都已經習慣用人力銀行的樣板 — 照表授課、填完就好(而且看完履歷後,一般對於求職者還是一知半解)。然而國外公司更看重可以一眼看完後,就能大概理解求職者所長和經歷的履歷。我個人的心法是:

  • 條列式列出經歷
  • 在每一份經歷內,簡短地描述個人貢獻

非常簡單,但是我發覺對於很多人來說並不容易。因為很多人對於經歷本身,並不能夠描述出自己的貢獻,甚至除了頭銜本身的Daily Routine之外,提不出自己在職期間有什麼作為。其實描述貢獻並不困難,從完成過什麼專案到對於工作流程有什麼改善,都可以當成是貢獻。如果說到這裡,你還是一片空白,那恐怕就得好好反省一下,是不是自己做的,真的只是高取代性的重複性勞動,而對自己職涯沒有太大的幫助和成長。

另外,同樣也非常重要的部分就是門面 — 排版和美工。這部分網路上都有不少樣板可供參考,甚至像是CakeResume這樣的平台,都已經預先打造好各式各樣漂亮的樣板。如果對於美工非常有自信,也可以考慮客製化一份專屬自己的履歷。不過還是要把握一個大原則:乾淨簡單。不要讓審視履歷的第一線人資們,被美工影響閱讀的動線。如果還是沒有概念的話,最簡單的做法就是把履歷拿給其他人讀讀看 — 從身邊的家人、朋友、同事到你的主管、老闆、指導教授都是可以給出好建議的潛在對象。就像我的研究所老闆最喜歡對我說的:

「你不要每次都自己悶著頭幹,這樣只會歪樓。要提出來討論,討論,你懂不懂….(以下省略)」

(也可以參考我放在Github上、基於大神寫的Latex樣版,下去改出來的履歷。不過考量到Latex不是一門好上手的標記語言,網路上的Word樣板或CakeResume會是更簡便省力的選擇)(什麼,你問我幹嘛用Latex嗎?私下敲我就偷偷告訴你XD)

1.3.客人在哪裡?

好了,萬事俱備,待價而沽。問題是:要去哪裡找買家?

最快可以參考這篇文末的求職網站清單,不過以我這次經驗而言,最好用的還是下面這幾個:

  • Glassdoor:找工作評價,薪資狀況的神器。Indeed連車尾燈都看不到XD。
  • 各公司自己的Careee Page:很多Linkedin或Glassdoor上的職缺,最後還是得到這邊投。而且有些職缺根本不會出現在一般求職平台上
  • LinkedIn:很多職缺都可以用LinkedIn速投,不過Head Hunter的部分比較偏運氣,以我的經驗來說,這四個月內有來聯絡的獵頭,最後都失去音訊XD

2. 大甩賣

前一章的1.1和1.2所列的,我平時便一直在更新和維護。就像我在面對新技術的態度:

「現在先學起來,以後總是有機會派上用場。」

1.3的部分,則是在離開成功嶺,分發到單位後才開始整理和使用,畢竟平台類的工具永遠都會變化,找到當下最適合的就足夠。

不過海投的過程也不是想像中順利。不少公司的履歷投遞,都不是直接上傳就可以完成。每一家Career Page的設計機制都不盡相同,多數都還是會要求必須按照其系統格式的表單填寫。不過可以很輕易發現,這些表單還是脫離不了我在1.2提到的撰寫心法。所以如果事前就有好好準備履歷,要做的就只是把履歷上面寫的東西複製貼上;再者,很多Career Page都會提供上傳履歷後,自動解析並填入表單的功能,多少也能節省一點力氣。(這部分M$家做的真的很棒…幾乎在自動填入後就不用再修改)只是每一家都要這樣做,就變成非常耗時的一件事。另外,有些公司會額外再要求Cover Letter或自我介紹,這部分也需要依照職缺的要求和公司狀況額外撰寫(要擠這些真的很難過XD,後期我甚至看到要這些東西的公司,就直接PASS掉)。所以下成功嶺後,我利用下班時間投遞了40家左右的履歷,也花了近兩周的左右(也包含查找和過濾職缺的時間)。

第一批海投之後過了一個月左右,手上已經有一部分進入面試流程,也有一些已經Offer Get。我暗忖還有可以嘗試的空間,就又集中撒了30家左右。接下來到退伍前,我就不再進行任何履歷的投遞。一方面是心目中心儀的公司基本上已經嘗試過一輪,另一方面是搜尋職缺和評估與過濾的工作,需要大量集中精神,我個人並不喜歡拿到通知再來談的作法,而是先針對:

  • 職缺的要求
  • 職缺本身的評價和狀況
  • 公司的評價和狀況

這三點進行研究,確定有把握後才會投遞。也因此在兩次投遞期間內,我幾乎暫停掉所有自由研究,專心在挖掘這些資訊。對我而言,停止成長是一件很可怕的事,所以我集中火力發射後,除非有回音或邀約,否則我完全不理會任何已經投出的履歷,繼續專心在我的自由研究上。

說了這麼多,還是回歸正題--來談談我的面試吧。

2.1. Amazon Web Services Taiwan Limited, Cloud Support Engineer [Offer Get]

會去A家是因為研究所老闆的推薦--他以前在Yahoo Taiwan的Boss現在跳槽到了台灣的A家,而且也常常和他提到缺人的事,所以我就抱著姑且一試的心態去坐坐,沒料到居然就Offer Get了。

Stage 0 — 台大就博

會叫做 Stage 0 並不是沒有原因。A家的這個缺,在當時有兩個投遞管道:

  • 直接投到A家的Career Page等通知
  • 直接拿到當年度的台大就業博覽會去

奇妙的是,當初老闆給我的傳單上還寫了第三個管道:先丟到Career Page後,再到台大就業博覽會去面試。

身為一個資訊人,當然要試試看起來最有趣的那條啊XD。

博覽會當天,儘管下著大雨,但還是澆不熄莘莘學子們奔向各大(血汗工)廠、(輪班)救台灣的決心。我穿過這樣瘋狂而熱烈的人群,來到A家的攤位。報明我的來意後,人資小姐請了一位在職中的Support Engineer大哥和我聊聊。

在那之前,我對Support Engineer是什麼完全沒有頭緒,只是想著既然有機會,不如就去坐坐。畢竟當時正處於剛畢業、又要接軌入伍的一周空窗期內,除了看看書外,我也沒有別的事好做。經過現役大哥的解說後,我才大概了解這個職缺的內容。基本上就是AWS的客服,每當開發人員在使用AWS的產品上有遇到問題,就可以向Support Engineer尋求協助。Support Engineer必須先分析客戶遇到的問題、還原情境後,嘗試在第一線先進行問題排除。如果是Support Engineer無法排除的狀況,才會再向開發服務的小組尋求協助。

再來就是面試的部分。

現役大哥問的東西其實非常簡單,像是

「用過什麼CI/CD的Tool」
「Http和Https的差異」
「(給我看三個Json data)指出那一個是不合法的Json」

這些對有心想走DevOps/SRE的朋友來說,非常非常非常(很重要所以要說三次)基礎的東西。結束之後現役大哥才說,大家都是來攤位放放履歷、聽聽資訊就走了,我是第一個照著傳單走的面試者XD。

順利Pass Stage 0。

Stage 1 — AWS 台灣總部

現在想想,這階段的事前流程著實走得讓我心驚膽跳。Stage 0結束後2天,我就到成功嶺報到當阿替去。原先以為像網路上說的,每天晚上可以開櫃看看手機,聯絡一下家人,回覆一下A家的訊息(那時我還沒開始海投)。誰知道我運氣真的「好」到不行,被分到全替代役訓練班裡面最硬、最精實的幹訊班去(因為當個役期沒有役男分發到幹訓隊,所以就被指示來訓練新訓的役男)。其他中隊都在開頭三天內的晚上就開櫃了,只有幹訓中隊過了一週才放行(在那之前,每天晚上都在用各種方法玩我們這些未來的阿替),再加上我還被分到每次餐後要收拾餐廳、清洗所有碗盤的過水班去(講到這裡大概有人知道我是誰了,請不要私訊我認親,打死我都不會承認XD),開櫃的時間也被被壓縮到。第一次開櫃時我看到A家丟了2封信、4通電話就知道大事不妙,但又礙於過水班的開櫃時間都已經在晚間8點後,而且往往也只剩10分鐘上下。我不但不能夠直接電話聯絡人資(早已是下班時間),也只能在被壓縮到極限的時間內,快速地用破爛的英文回信(雖然是台灣區的A家,但聯絡時的書信往來還是都用英文)(崩潰(ノ`Д´)ノ彡┻━┻)。好在A家的人資超級Nice,願意和我這樣一來一往地協調面試時間,我才能順利進行這個階段。

到單位的第一週,我就請假直奔台北A家(當天還小小遲到一會Orz)。A家的總部就在101旁邊的一棟18層的大樓內,每一層樓的辦公區域都需要門禁卡進出。在一樓聯絡完A家櫃檯,上樓踏出電梯、看到A家的微笑臉Logo的瞬間,手上筆電包的握把早就被我的手汗給浸得濕透:

「我真的真的真的跑來Amazon了啊啊啊」

我被接待人員引導到的休息區就在辦公區內,不過除了休息區內的人會小聊一下,辦公區內的人都默默坐在自己位置上忙著。就這樣在一片鍵盤聲中過了5分鐘後,面試官才過來帶我到會議室去。

這次的面試共分成2個階段,每個階段一小時,分為技術和人資兩部分。技術面試官戴著黑框眼鏡,聲音非常低沉穩重,感覺是個很可靠的人。一開始不免俗的還是先雙方自我介紹、還有交換一下工作內容(其實和Stage 0的現役大哥說的差不多)。只不過他聽完我的自我介紹後,問了我一句:

「你也知道我們這個職缺是做什麼的,你沒有考慮過台灣區這邊還有IoT跟ML的職缺嗎?」

哇塞,我以為台灣區只有Support Engineer耶XD,但我也不好這樣直白地講我沒有做過功課,便掰了一個說法:

「因為我以後想走的是架構師方面的工作,我希望能夠藉著這份工作擴充我的工具箱,還有接觸更多實務上的真實案例。讓我以後更加得心應手。」

聽完後他沒有多說什麼,直接切入正題。

基本上,提問都圍繞在我寫在履歷上的經驗

「這工作是做什麼的」
「那你用這個技術,你知道這個的東西的OOO功能/特性嗎?」

針對我的回答,再臨場設計情境,像是:

面試官:「你有Maintain過Bare Metal的Web環境,那你解釋一下Http Request從發出到結束的整個環節是怎麼走的」
我:「基本上Client Host 會先問DNS目標IP…(以下省略)」
面試官:「你剛剛有提到DNS,那你解釋一下DNS是怎麼運作的」

反覆一直向下追加詢問細節。聊到我在Production Environment上佈Docker和Docker Swarm的時候,就火力全開了:

「請你解釋一下Docker Network有哪些Mode,又是怎麼運作」
「我現在有個PHP Based的Service,請你描述一下要打包成Docker Image的話,Dockerfile要怎麼刻」
「請你描述一下你是怎麼在Docker上做到Reverse Proxy和Load Balance」

這些問題其實都不難,恐怖的是面試官的反應…每一次答完,都沒有任何關於對錯的回饋,也完全沒有表情,只有稍微思考一下就繼續往下發問。我根本就不知道我回答的是不是他要的呃啊啊啊啊!!!還有像是

「你說你之前有用過GCP,那你有用過AWS的Service的經驗嗎?」

這根本就是不能問的問題啊啊啊啊

「呃…我只有用過GCP喔…因為AWS的價格比較高…」

我都已經開始懷疑我是不是跑錯棚了XDDDDDD。就這樣提心吊膽地撐了快50分鐘,這時

面試官冒了一句:「那你有用過K8S嗎」
我:「我有部署過,但我沒有到非常熟…」
話音未落,他立馬插斷我的話:「那麻煩你解釋一下RBAC」

完蛋,我那時可是只有把K8S給建起來,但是沒有成功把掛上去的Service Expose出來,更不會知道這個身份驗證的元件實際上在幹嘛。後面又因為手邊的案子都用不到K8S,就把它給冷凍起來。我只好誠實回答我這不完整的經驗。

面試官沒有說什麼,又問:「那你可以解釋一下Replica Set嗎?」

還好這題我還了解XD。解釋到一半時,人資面試官走了進來,示意Time’s Up,我才徹底鬆了一口氣Orz。

人資面試官的姐姐就非常親切,整個過程都只是很平常地聊聊天。我想這關主要的用意,是在了解人格特質和工作心態。基本上,表現出面對工作的態度是積極、熱誠地就可以了。問題大概有:

「你可以描述一下你碰過最棘手的問題是什麼呢?你又是怎麼解決的?」
「你在團隊之中都是扮演什麼角色?」
「你最近都在做什麼研究?看什麼書?」

簡直和平到爆炸!!!最後就在愉快(但還是有點不安)的感覺中結束Stage 1。我還偷偷戳了技術面試官一下:

「技術面試官平常都是那麼嚴肅嗎?我剛剛面試下來都覺得緊張地不得了呢」
「真的嗎?他平常不會這樣耶,我再跟他好好聊聊

XD。

Stage 3 — 電話面試

幾天後,我便接到另一位中國的人資的電話面試邀約,數次書信和電話往來後,敲定在Stage 2後的第二週左右進行面試(A家的手腳真的很快)。這次的電話面試,內容和台灣總部的人資姐姐聊的差不多,沒有太特別的地方,不過最後告知我:

「這一次面試結束後,我就會協同前面二位面試官們一起開會,敲定是否要錄取您」

印象很深的是,當天是周三,結果下一週的週一就來通知Offer Get了。(A家的手腳真的真的真的很快)

Offer & Take it or not

薪資部分給的真的真的真的真的真的很漂亮,我原本在電話上開的是,年薪比前一份在建設公司的時期高10–20W就好,人資還跟我說這個價格A家絕對付得起。結果A家最後開了一個比我開的高了很多很多很多的價碼,嚇得我還以為自己聽錯XD:

「喂?喂?Hallblazzar您還在嗎?」
「喔…喔!沒事沒事,您繼續說」

福利部分倒沒有什麼突出的(這部分和網路上說的一樣),唯一蠻特別的部分叫做Amazon購物金,每年有固定額度可以在Amazon上面消費時折抵。問題是…這東西一次消費只能用來扣當次的10%。想要全部耗掉的話,至少得在Amazon上面,花掉10倍於購物金的金額啊XD。

不過我當下並沒有直接把Offer拿下來,而是先要求讓我考慮一週再決定 — 畢竟當下對於這個職缺的了解還是客服性質,我並不曉得對我的職涯發展會不會有幫助。要是這份工作的期間內,除了Daily Routine的Task外,沒有任何長進,我還是不會有興趣。這些疑惑,我如實向我的老闆請教,他便為我引薦他在台灣A家當Solution Architecture的朋友替我解惑,我才對這份工作的附加價值有更深入的理解。

依據他的說法,在本職的解問題工作上,要不要寫Code或建環境下去模擬都是看各人,能夠真的跳下去動手的人可以學到更多、更深。內部也有很多訓練計畫,可以協助人員往諸如Dev、SRE、DevOps、Solution Architecture等等工作移動,可以隨個人的意願自由發展。唯一的問題是,如果想要享受這些附加價值,注定會需要投入大量的精力和時間在工作上,不過我想這對經過我的老闆訓練的研究生來說,好像不是太難。(睡覺?你跟我說睡覺嗎?你一定在跟我開玩笑XDD)

最後還是把它給拿下來。

2.2. Yahoo Taiwan, DevOps(感謝信)

這個職缺也是在台大就博上逛到的。Yahoo當時並沒有公開在就博上徵求DevOps的人員,我是走到攤位上和人資聊天後,被轉介給攤位上一位滿年輕、而且人也很Nice、很好聊的小哥後,才知道實際狀況。履歷部分則是在攤位上互加聯絡方式後,再透過這位小哥替我轉送到DevOps Team去。過程也是一波三折。和Y家這位小哥協調履歷部分的時間點和A相同,所以也沒有辦法在成功嶺內,把存在筆電上的履歷轉送給他。好不容易下了單位,才知道原來還要接受一周的專業訓練,才會正式發配到服勤地點。真正把履歷給Y家的小哥已經是台大就博後的四周的事…。

Stage 1 — 視訊面試

Y家的作業速度也是一等一,大概在兩周內就接到視訊面試邀約。不過第一次面試上我搞了個大烏龍-由於不可能等我到下班時間才面試,所以我和Y家約在中午,也就是阿替的休息時間進行。面試當天,我滿心期待地等到中午、興奮地打開Google Voice、接通面試官的時候,才剛剛自我介紹到一半,不到五分鐘的光景-說遲時、那時快,我的手機突然發出了一陣光芒、消失在空氣中…阿不是,是畫面一黑、變成了磚塊。

我:「(´゚д゚`) (´゚д゚⁠`) (´゚д゚`) (´゚д゚`) (´゚д゚`) (´゚д゚`)(´゚д゚`)(´゚д゚`)」

雖然我知道我平常沒有寶貝你、還把你摔得面目全非,但是你要壞也不要在這種時候啊啊啊啊啊!!!!!

更糟糕的是,由於我平時的「良好習慣」,除了我統一儲存的地方,我本人完全不記得我所設的每一個密碼。所以即便和同僚借用手機也於事無補-因為Google Voice的連結只存放在我信箱內…。

帶著忐忑不安的心情,回到家用我的Precision打開信箱

「Hop yor are will」
「 would you please advise another time is ok for you?」

喔喔喔我都要跪下來了!!!Y家的面試官真的真的真的超級Nice!!!重新再敲定一次時間後,繼續延續前一次未完的視訊面試。由於前一次已經大致了解我的背景,這次就換我開始先初步了解職務的狀況。(有了前一次的教訓後,我狠下心買了一台新手機,往後的面試,都帶著我的Precision去服勤單位,用它連接手機網路進行,以防悲劇重演…)

Y家DevOps的工作內容和一般的DevOps相去不遠-內部有Java、PHP和Node based的Service,環境從K8S、Container到Bare Metal都有(有一些是非常久遠的歷史遺產,沒有辦法輕易進行Containerize),除了新服務上線的CI/CD、環境監控外,還有突發狀況處置。對於Scripting Language、CI/CD和系統方面的知識都需要具備一定以上的水準,每周也得固定輪On Call。較為特別的是,Y家內部現在使用的是自己開發的CD Tool,Screwdriver,所以也提到未來進入後,也需要上手這個工具。

除了被我搞砸掉的第一次以外,整體來說感覺滿棒的。就這樣進入第二次面試。

Stage 2 — Yahoo Taiwan 總部

Y家的總部位在南港軟體園區,一棟離捷運二號出口非常近的大樓。第一次進去還搞不清楚要不要換證,直接就跟著人群跑去搭到Y家的接待大廳。接待櫃台的人員看到我也非常訝異:

「咦,一樓的警衛沒有和您換過證嗎?」
「沒有耶,我剛剛跟著人群走就搭上來了XD」

算是小小的意外XD。面試和A家一樣分為技術與人資兩關,不過時間上沒有限制。技術面試一共有四位(第一次見到這種陣仗),配置上分為現役的三位DevOps和DevOps的主管,現役的三位,按照各自發問的種類,可以粗略分為Storage/Scripting/Networking。開場暖身是由主管先遞了一份像閱讀測驗一樣的紙本題目,大致上是以英文描述一個Distribute Storage System的實作、功能和特性,針對敘述有對應的選擇題,最後還有一道申論題,整體來說並不困難。交卷後三位現役DevOps才陸續進場,正式開始四對一的攻防戰。

率先開出第一槍的是Storage的面試官

「假定你現在開了一台VM,而User向你反應資料放不進去,你會怎麼處理?」

我當下的第一個反應是

「那就把他給重開…」

他楞了一下

「沒有沒有,我想問的是你覺得是什麼狀況導致的」

其實問到這裡,我已經了解他想聽的是什麼,但是我腦袋裡實在沒有什麼想法,只好繞著「我不曉得,但是我先讓他能用」上面裝傻。最後他就直接點出問題

「那你會不會覺得是因為容量滿了?」

對耶,有可能

我:「也有可能是權限問題」

他發現我「開始」理解他的問題,就繼續往下

「那針對這兩種情形,你要怎麼處理?」

說真的,我這種死撐的做法真的非常差勁(好孩子千萬不要學)。現在想想,當下直接提出不知道,再和面試官直接針對問題討論,會是更好的做法。後續兩位面試官的問題就比較具體,也都是DevOps的好朋友

「描述一下TCP/UDP的差別」
「Telnet是基於甚麼協定?Connection Refused代表甚麼意思?」
「Https是怎麼運作的」
「你有用過Ansible,你可以描述一下它是怎麼運作的嗎」

不過正如前述我提到的,每個面試我都是裸裝上陣,我並不記得很多技術名詞,這就成了這場面試上,我最大的死穴。對我來說,平常工作時我會記得每一個工具和技術是幹嘛的,可以拿來處理什麼情境。問題是,我並不會去記得每一個技術和工具的名字,都是要使用時才去翻一下筆記,把記憶取回來。打個簡單的比方:

「要怎麼在Linux Shell下,提取出檔案內包含指定字串的每一行」

答案很明顯地是「grep」,但是如果不記得名字呢?我會回答成

「有一個Command專門處理這樣的工作,只要透過echo把內容遞送給Command,在指定字串,就可以那些內容撈出來」
「但是名字我不記得了…」

而Y家的面試非常喜歡問這類題目,後面甚至要我在白板上寫出擷取特定檔案內容的Shell Script。我也非常坦白的回答,我知道怎麼刻Shell Script,但我需要搭配估狗服用,才能精準的把要用的Command描述出來。本來三位現役DevOps還能接受我先用Python寫,但DevOps主管就不滿意了

「正式環境哪有每台都有Python的道理呢?你說Goolge你就知道對吧,那我現在讓你Google,你在這裡把我要的東西湊出來」

你把Google交給我,那不就等於把槍拿到我手上了嗎XD。後面也追加了一些像腦筋急轉彎的題目,還有針對我的經歷提出問題。整體來說,我覺得我並沒有表現得非常好,從現場的氣氛來看,我想我只會給自己打70分-60分是我清楚知道概念,但從滿足面試官們需求的層面來看,我大約只有1/4有確實打中他們的要求。所以表達部分的40分內,我只給自己10分。

第一場面試下來,我非常氣餒-花了3個多小時進行面試,卻沒有得到非常正面的回饋。這也是為什麼我在前文會寫「好孩子千萬不要學」的原因,準備充分往往可以擔保能夠應付更多突發狀況。不過話又說回來,支撐DevOps需要的知識體系非常龐大,我深知自己對於記憶和背誦並不在行;反之,我的長處在於,能夠快速對問題建立概念,再用手頭上的工具各個擊破。把Linux Command背得滾瓜爛熟很厲害,但我認為,能用在對的地方更厲害。至於每一間公司的面試和工作上的要求並不是能夠掌握的事,我只能盡量嘗試,找到能夠接受我這種思維的體系和面試考核方式。

第二場的人資部分,我才有比較放鬆的感覺。Y家的人資問的問題和A家的很接近,不過並沒有問到A家的人資那麼廣的程度,基本上還是在經歷上打轉。不過我對Y家的狀況非常好奇,問了不少關於公司走向和發展方面的問題。只是從我聽到的回答,我覺得Y家現在還是處於找不到自我的狀態。說真的,我也怕工作到一半公司就不見了XD。(尤其是經營權已經不在自己手上的現在,哪天母公司不想玩了,那就…。)(也因為這樣,最後人資詢問我意向的時候,我誠實地回答,要是A家和現在的Y家,我會毫不猶豫選擇A家)

結束後人資也帶著我到Y家的每個地方走走,相較於A家,Y家的工作區域給人感覺比較有活力。可以看見大家會聊天、交流、玩鬧,甚至有一個區域是為了因應新的直播業務所開的攝影棚(聽說有機會見到來開直播的網紅或藝人)。只看環境的話,Y家更吸引我。但考慮到職涯發展的話,A家目前還是更安定的選擇。

Offer

一周後取得Y家感謝信一份XD。

2.3. Cloudflare Singapore, Site Reliability Engineer [On Working]

Cloudflare的SRE則是在第一批海投時,直接在它們自家的Career Page上投遞的職缺;也是在這批海投後,唯一一個回覆我的公司(泣)。 相較於A家和Y家,Cloudflare的面試流程就顯得冗長 — 五階段的面試,走了兩個月才到最後一階段,每個階段之間起碼還相隔一至兩週。

Stage 1 — SRE Team 總負責人

第一次視訊面試的邀約在遞出後的一週左右。Cloudflare的邀約會透過信箱傳送一個Web Page,讓面試者自己填選希望的時間。奇怪的是,這個選填系統在指定時間時,是以絕對日期搭配時間的方式運作。也就是直接指定數個日期後,再針對每個日期指定時間。一般常見的做法,會是詢問面試者每個禮拜之中,哪些時間有空。所以每次填寫Cloudflare的邀約時,我還會在附註欄上標注:

「My available time of each week is same as the time I filled」

第一次的視訊面試的面試官,是Cloudflare在San Francisco的SRE Team的總負責人。這一次的面試主要在建立雙方的認識、以及對於職缺的深入了解。從他的描述,大概能理解這份SRE工作的組成:

  • 維護內部用的K8S和VM Platform
  • On Call監控服務運作狀態,即時進行回報
  • 新服務/新infrastructure的上線和部署(含腳本開發)
  • 開發Service監控系統

會需要的技術囊括Python、Salt、Go、Container以及維運方面的常識。(也有聊到為什麼不用Ansible,而是較冷門的Salt。理由是Cloudflare擁有自己的機房,現階段下的Ansible要做到PXE或Boot From Network,相對於Salt還是較為困難)

特別的是,Cloudflare這個在新加坡開徵的職缺,是為了在當地組成新的SRE Team。透過每個時區的工作時間不一致,分攤原先位在英國和美國的另外兩個SRE Team的On Call壓力。在我面試的這段時期,新加坡的SRE Team還只有一位開發人員而已。另外也非常特別的一點,這個SRE Team負責的系統只供內部使用,而非供給一般外部使用者的CDN和其它Cloudflare Service。只負責維運諸如內部用的資料分析平台、內部用的服務和Infrastructure等。應徵時,職缺的Title還是Site Reliability Engineer,但似乎因為不能很清楚地表達這方面的資訊,因此後來再看到Career Page時,已經被改為Core Site Reliability Engineer。(順帶一提,維運對外系統的SRE Team被稱為Edge Site Reliability Engineer)

Stage 2 — Coding Test

Stage 1結束後,Cloudflare發來Coding Test的邀請,90分鐘解2道題目。第一題是考對於字串處理的演算法,第二題則是寫出一個Web Parser。題目本身並不困難,但Coding Test的平台卻是HackerRank。和LeetCode不同,HackerRank不會將不通過的測試資料印出,導致不知道從何Debug起的窘境。最終第一題只有通過7成的測資,而第二題則是100%。

雖然表現的不甚滿意,但不知道為什麼,兩周後還是拿到下一階段的邀請XD。

Stage 3/4 — 現役Core SRE/新加坡Core SRE Team Lead

後面這兩階段就顯得奇怪。

解題後的第一個階段(Stage 3)的面試官是Cloudflare在德州的現役Core SRE。但怪異的是,一開始他並不知道我是誰,還是在接通面試之後才開始讀我的履歷。更甚的是,這位面試官還不知道我要應徵的職位是什麼。互相自我介紹完之後,還問我要應徵的是哪個職缺,接著才打開Career Page、邊看邊問問題

「這上面寫說這個職位需要寫Python,那你會嗎?」
「這上面寫說這個職位需要TCP/UDP的知識,那你可以解釋一下嗎?」

雖然這個大哥真的很Nice、一來一往的詰問之間也能知道他的底子很強(有一些問題戳到我不會的東西,還會非常細心地和我講解),不過這個狀況依然讓我對於Cloudflare的內部作業產生質疑-畢竟交接面試狀況和求職者資訊並不是太難的事,但是面試者比面試官還了解狀況就不大對了XD。

「歐,我只是被總負責人寄信通知,這個時間我要打開Goolge Hangout面試人而已」

XD。

三周後(對,真的是三周)後Stage 4,則是和Core SRE Team的新加坡負責人進行(從信件來往間,可以看出這位負責人也剛到任不到半個月),但是聊的東西都在Stage1和3時相去不遠。再者,聊天過程內,還可以明顯感受到這位負責人並沒有技術底子(事後也去LinkedIn上偷偷求證過),所以聊到工作內容時,都集中在作業流程而已,並沒有任何技術相關的談話。問題在於,這些在Stage1和3時我都知道得差不多了。整個談話中,只是把我已經問過的問題再拿出來問一次,再聽一次答案而已。

後續這兩次面試下來,多少都讓我對這家公司內部狀況的信心打了折扣。反覆做相同內容的面試不說,內部資訊傳達似乎也不甚透明。這期間內也在Glassdoor上看過Cloudflare的工作評價,雖然大致上是正評居多,但是如果仔細去看看負評部分,就會發現一些讓人不寒而慄的東西。因此心裡對於Cloudflare的好感度,也在這兩次面試後下降了不少。

Stage 5 — 新加坡Onsite [進行中]

Stage 3結束後,在信件來往時有和負責人提到,由於我當時還在服役中,一次後續面試希望都以遠端方式進行。然而由於Stage 4來得實在太晚,距離我退役只剩2周。因此便在最後向新加坡的負責人提出,可以直接過去新加坡進行Onsite的建議。沒想到Cloudflare答應的很爽快,經過一周的時間協調後,次週的周末前便取得機票和房間,以及每日日支的補助辦法。

接下來就看聊得如何,再補上這部分心得囉。

2.4. 3YOURMIND Germany, DevOps [Reject Offer]

3YOURMIND則是第二批海投時,在Stack Overflow Job上逛到的Start Up。當時已經在其他管道,將想投職缺的都投得差不多,只想著再花一點時間,挖掘看看還有什麼特別的機會,就在上頭找到這家公司。

從Stack Overflow Job上的介紹以及其Official Site,可以知道這間公司的主力產品,是提供3D印表機自動化製造方案的Service和Consulting。客戶可以透過向3YOURMIND諮詢,將自己基於3D印表機進行產品製造的工廠自動化。因為看起來滿好玩的,就透過Stack Overflow Job將履歷投遞過去。

Stage 1 — 現役DevOps

3YOURMIND的作業速度也不慢,一周後就收到面試邀約。由於有時差關係,可以避開上班時段進行面試,對我而言非常方便。唯一的麻煩是在阿替生活的習慣下(每天23:00就寢、07:20就得醒來盥洗出門),超過23:00後還要保持清醒,是一件很折磨人的事。(尤其還得在半夢半醒下、用破爛的英文和面試官溝通XD)

Stage 1的面試官是一位埃及小哥,不過他的英文並沒有太重的口音,所以溝通上沒有太大的困難。雙方交換一下資訊後,就直接切入技術面試。埃及小哥的主力放在我對Python的了解程度,問了不少關於Python的特性。除了一兩題我沒有答出來(事後一查,才知道原來不是不知道,而是針對那些特性,我知道的「名字」是中文,而不是英文XD),其餘沒有什麼問題。也稍微問了一些簡單的Docker和Linux的常識,也沒有太大難度。

從後續的閒聊中,才知道3YOURMIND的DevOps Team的主要工作組成,並沒有一般DevOps複雜:

  • 把現在還是Bare Metal的Service打包成Container
  • 把現在已經Containerized、運作在純Docker環境下的Service,轉移到K8S上
  • 新Service的CI/CD
  • 處理Bug(架構層級)

就埃及小哥所說,由於3YOURMIND提供的Service性質和業態,並不常需要開發新Service,上線後也不常有問題被回報,多數時候還是專注在Service的自動化佈署以及打包任務上。雖然因為我的英文真的太爛(QQ),溝通過程中經常有砂石,但埃及小哥人非常有耐心慢慢傾聽,所以整個面試還是在愉快的氣氛中結束。

Stage 2 — Homework

Stage 1結束時,埃及小哥給出次一階段的的任務-Homework Task。

主訴有3:

  1. 把給定的兩個Service,Django Backend和Vue.js Frontend,打包成Docker Image,並且額外加入Reverse Proxy以及SQL Service,讓兩個Service間可以連動。
  2. 把佈署流程寫成Ansible Playbook
  3. 文件描述以及回答Homework內的小問題

之所以會是前後端分離的Service,我想大概是因為3YOURMIND的Service都是基於這兩個技術下去開發(後來也去看過其開發相關職缺,證實我的推測應該沒錯),對於有心想走DevOps的開發者而言,基本上沒有什麼太大的問題。不過打包後暴露參數的部分,3YOURMIND的要求和我平時打包的習慣不一樣,還需要多花的一點時間,在Dockerfile內植入暴露參數用的Shell Script。

只是每天能開發的時間只有下班回家後,在加上同時又有老朋友找我幫忙解決採到的地雷(還是有時限壓力的那種XDDD),因此在我自己開出的時限前,還缺少了Ansible Playbook的部分、以及額外的加分題。好在埃及小哥人挺Nice的,讓我自己再延長時限。最終順利地在額外時限前,將主訴要求交付。不過加分題部分我就沒有再花力氣去做(懶阿阿阿XD)。

Stage 3 — DevOps Team Leader

交付後的一周後拿到最終階段面試邀約。

最終面試是和DevOps Team Leader進行,是一位捲髮、留了棕色絡腮鬍,有點胖胖的大叔,感覺為人也挺不錯的。這一次3YOURMIND方在視訊時的場地,看起來是在其會議室內-大概是為了節能減碳,還開著窗戶。只不過當天那邊似乎發生事故,面試的過程一直被救護車和消防車的鳴笛聲插斷,我還問了「Is everything alright there?」XD。也因為開著窗的關係,對方的聲音不時會混雜風切聲,對我這原本就英文不好的面試者來說無疑是雪上加霜啊啊啊XD。

前半段的主軸圍繞在我對Linux方面的知識,以及開發Shell Script的能力。也要求我在使用Google Hangout分享桌面的情況下,實際針對Team Leader的要求,開發一支Shell Script出來。不過不知道為什麼,就是沒有辦法把雙方Google Hangout的分享桌面搭起來;於是我提出不如以Google Docs方式進行,但Team Leader似乎較注重我在開發時,怎麼樣蒐集資料的過程。因此在無法建立桌面分享的情況下,Team Leader便直接Pass掉直接開發Shell Script的部分。

後半段則是圍繞在我對於Ansible的理解及知識。唯一被考倒的是,回答Ansible的SommandShell兩個module的差異。這部分我著實沒有印象,只依稀記得過去曾在Stack Overflow上看的某篇解說,其最終結論內推薦使用Shell為主。Team Leader本來還要我猜猜原因,我還掰了一個是不是其中一個只負責執行,並不理會執行結果是否成功的理由(寫Ansbile的朋友應該都知道,Ansible的冪等性真的是一個很棘手的東西…)。想當然是被打槍了XD。實際差異是:

透過Shell執行的Command,會透過目標主機上的/bin/bash執行,因此允許支援><|&等重新導向和輸出至文件的功能。但Command是透過python module進行,因此並不支援原生/bin/bash的功能。

最終也聊到關於工作方面的問題,大抵上和埃及小哥說的差不多。特別的是,提到On Call時,按照Team Leader說法,因為會有狀況的機率很低,3YOURMIND的DevOps Team沒有On Call Task;即便有突發狀況,頻率也接近一年只有一次XD。

大概一周後,來信通知Offer Get。

Offer & Take it or not

畢竟是歐洲國國家,Offer「看起來」比台灣還高是非常正常的事。但,實際上呢?

綜觀整個工作的附加價值,可以感受到這份工作的好處是,可以讓我擁有極高的Work/Life Balance(一週上班時數是40HR,但可以自由分配,以及一年24日的年假),還能夠隨心所欲進修(參加Conference有全額補助,以及每年固定的進修費用與開發設備配給),是一份可以做得非常舒服的好工作。但考量到現階段的我的能力,我想我還不到可以悠閒生活的程度;反之,我應該更積極爭取絕無僅有的經驗和學習機會(如同我在1.1中提到的那樣),用更高的標準和更加嚴格的程度磨練自己,成為能夠應對各種狀況和需求的開發人員。

再者,參考這篇這篇,實際了解德國軟體開發的行情以及生活狀況後,再回頭看看3YOURMIND的Offer,大概只有當地大學生畢業的水準。再從Glassdoor上看,以我現在的能力水平而言,要在柏林擔任DevOps,這樣的Offer也不到平均的薪資水平。即便再計入福利,仍然不足以吸引我遠赴異鄉一搏。加上再與A家機會一相比較下(對,它就是萬惡淵藪XD),3YOURMIND更發失色。

最終給3YOURMIND捎去婉拒信。

2.5. Google Australia, Network Engineer [感謝信]

G家的面試真的是意外中的意外。

第一批海投時,就已經嘗試過G家在美國的SRE、以及日本和美國SDE(對,我想進G家到飢不擇食的程度XD),但是都是無聲信。不過投遞時也從Career Page上,知道G家有履歷的冷凍期,即一個月內不允許再反覆投遞G家任何職缺。所以到了一個月後的第二次海投,我又不死心地丟了G家在澳洲的SRE,結果投遞隔天就收到面試邀約,嚇得我差點跪在螢幕前面XD。不過一開始的來信上提到,比起SRE,澳洲G家覺得我更適合Network Engineer的職位。因此實際上,這封來信是詢問我,是否願意轉投Network Engineer-我當然是千百億個願意啊啊啊!!!!!

Stage 0 — 視訊面試

G家的手腳和A家也有得拚,2–3天內就快速地將面試時間協調在次週的週一。說真的,G家是我求職期間內,唯一有花準備面試的公司。開頭前兩天,我先利用上班時間,把關於G家的都市傳說再看了一次,再配合職缺要求,擬定下面兩個要先補強的部分:

  • Algorithm
  • Networking

什麼,你問我Data Structure和Coding Interview呢?擬定完就只剩五天了,哪來那麼多時間看那麼多東西啊XD。這五天裡,白天上班時間就啃歐萊里的演算法技術手冊(甚麼,你問我大學買的教科書,Introduction to Algorithms嗎?我知道那是經典…但是五天要它啃完?你一定再跟我開玩笑XD),晚上回家就啃Tanenbaum的Computer Networking(只關注Layer2–4的內容,畢竟以我對Networking的了解,其他Layer的東西實在是沒甚麼好考的)。用生命不眠不休地每天挑燈夜戰到一、二點(這已經是一個阿替的極限了XD),好不容易熬到視訊面試當天。

面試官是一位皮膚略帶古銅色、講話有點口音(不確定是什麼地方的)、帥帥的小哥。這次面試連自我介紹都沒有,只有開頭寒暄兩句,就直接切入正題。一開始就直衝我最大罩門的演算法,剛剛好問的10題左右都有複習到(基本上還是圍繞在Searching和Sorting上),但是不幸地答錯一道關於某個Sorting Algorithm的Time Complexity(太相信記憶,沒有在出口前先思考一下)。第二部分考Linux和Networking,這兩部分倒是輕鬆作答。只有一題考Linux File System特性時,我本來以我的印象做答,但面試官卻想聽的「大部分」Linux的環境下會是甚麼狀況。好在這題是選擇題,在老實承認自己不知道、但面試官還是希望我能挑一個「看起來」最像的答案時,我還是幸運把正確答案推估出來。

最後一部分考關於Python和計算機基礎。一道考Python的特性,另一道考計算機概論。不幸地,兩道題目都回答錯誤QQ。Python的考題基本上是陷阱題…得怪我自己聰明反被聰明誤;計算機概論的問題在於我的破英文,硬是錯誤地理解面試官的意思。面試結束後才覺得不對勁,為什麼面試官一直要求我描述的部分,與自己想的都不一樣,這時才驚覺自己對題目的理解有誤。真是失之毫釐,差之千里Orz。(嘆)

面試官也在面試後直接給評:

  • Linux系統:專業
  • Networking:專業
  • Algorithm:普通(我只錯了一題耶面試官大人XD)
  • 系統相關知識:完全不行(這真的沒話說…不過只考兩題就被這樣評斷,真不甘心QQ)

結論:「建議您回去多唸3–6個月的書後,再回來挑戰」

反省

這次的敗因有二:

  1. 準備不足
  2. 英文程度不夠

雖然考題並不困難,但透過這一次的視訊面試,可以非常清楚的了解到,G家的標準之高,令人咋舌。我想,即便這一次運氣過人,進入第二關Phone Coding Test,我想我也沒有辦法通過-要知道,我平常完全沒有刷LeetCode的習慣,更不用提能夠憑藉運氣,矇到好上手的考題。

英文部分還是老生常談-多聽、多說、多看。不過G家這位面試官的口音,相較於其他面試中遇到面試官要來得更重,也因此不少題目都需要複誦與解釋,我才能理解題意。研究所老闆也說過,澳洲地方本身也有特殊的口音存在,我想這也是我該加強的地方。

3. 總結與反省

雖然這篇文章內只列出我拿到的面試機會,但,那些無聲信呢?

在這四個月期間,和研究所的另一位老闆聊天時,他這麼說過:

「你向丟外國履歷時,有沒有考慮過人家憑什麼要錄用你?」
「當今天存在潛質與你相當的本國人時,為何須要負擔擔保簽證和生活協助的成本,去錄用一個外國人?」
「如果你的戰鬥力沒有辦法Cover掉這部分的風險,我想你的競爭力就相對少了一大截」

聽君一席話,勝讀十年書。

原本想著向外一搏,總是有機會得到門票;再加上本著對矽谷的憧憬,多數的履歷都是往美國丟。然而,卻忘記最重要的一點-美國簽證取得不易,對於非OPT/W1B/綠卡持有人的我而言,要直接前往美國工作完全不可能。雖然二次海投時有將方向轉往相對容易取得簽證的澳、加兩國,基本上仍是石沉大海,也令我對自己現階段的能力深感不足-現在的我仍然不足以吸引好公司的眼光,更不用提將Offer拿下。

寫這篇文章的當下,即便Cloudflare還在流程中,我想我最後還是會到A家去。預計除了Daily Routine外,我想還要:

  1. 利用A家課程和資源進修,徹底摸透A家的Service(寫這篇文章的當下,不少公司的DevOps職缺都將AWS列為必要選項)
  2. 考取A家的證照
  3. 每兩周至少強迫自己去社群或Conf見見世面一次(強迫自己面對自己有多不足XD)
  4. 每天至少刷一題LeetCode
  5. 一個月至少寫一篇技術文
  6. 每一週至少要讀一章書(如果是基礎類書,至少讀懂一個項目,如:一個演算法/一個資料結構)
  7. 盡量爭取能和外國朋友講英文的機會,不論是工作上或是生活上

其餘技術類的分支就視情況審慎地開…避免自己又掉進開分支地獄的窘境。

雖然我還沒有辦法肯定自己能不能好好照表操課(對,我的意志力就跟紙一樣薄弱),但我想,這是我應該盡自己所有可能完成的項目-就像王家衛的「一代宗師」中,我非常喜歡的一句話:

「寧可一思進,莫再一思停」

期盼年底再來審視這篇文章時,能為自己感到驕傲。

與閱讀這篇文章的每一位朋友共勉之。

--

--

Hallblazzar
Hallblazzar :Developer Journal

興趣使然的開發者,專長於網路、軟體/系統架構及DevOps,目前努力進入Data Science的世界。用生命享受徜徉於程式碼與架構之美的樂趣,夢想即使80歲還能繼續熱血玩程式。Github: https://github.com/HallBlazzar Mail: hallblazzar@gmail.com