[含心得]軟體工程師面試紀錄(下)

面試公司:Atome Taiwan/91APP/街口支付/比特數字/趨勢科技/AmazingTalker

Barney YU
19 min readMar 12, 2022
圖片來源:https://www.pexels.com/zh-tw/photo/5439376/

面試紀錄(上)篇

貼心提醒,先看完上篇再來看下篇唷

1. 新加坡輕鬆享台灣分公司(Atome Taiwan) -後端工程師

使用技術:Java

這是一間最近很夯的BNPL(buy now pay later)的電商新創,總部在新加坡,近期也積極的在亞洲布局,我自己是本來就有在關注這間公司,收到面試的邀約也相當興奮,而且他們公司這個職缺的pay相當大方,對我來說可以是夢想等級的,先說結論:一面完我就知道我絕對不會上,但這間面試跟其他間的形式不太一樣,在這邊也不怕丟臉的分享給大家!

面試流程:

他們是用大陸的一個視訊軟體”牛客”,他是結合視訊、線上編譯器(可以多人一起改程式)的招聘軟體,面試官是一位大陸人,請我自我介紹後甚麼都沒有追問,直接說”那我們開始解題吧”,就直接在線上編譯器貼上題目,如下:

A 公司 想 在 一 家 餐廳 舉辦 一 次年 會, 邀請 所有 員工 參加。 由於 COVID- 19 和 法律, 每張 桌子 只 能 容納 x 名 員工。 在 新加坡, x = 8。 假設 所有 桌子 都 可以 容納 x 名 員工 因為 公司 的 員工 太多, 我們 需要 一 個 程序 來 分配 桌子。 對於 每個 表, 我們 要 生成 一 個 包含 員工 姓名 和 其他 信息 的 標籤。 我們 會 將 這些 標籤 發送 到 餐廳, 您 會 將 其 打印 出來 並 放 在 桌子 上, 以 便 員工 現在 可以 輕鬆 知道 他們 的 座位 在 哪裡。 表格 標籤 示例: Barak Obama( M)、 Hilary Clinton( F)、 Donal d Trump( M),公司的組織結構是樹形的,CEO是這棵樹的根。

本來以為會考像leetcode的題型,結果看到題目的時候都矇了,我開始想難道我要自己建物件,要把全部程式都打出來嗎,正當我在思考要怎麼著手的時候,面試官突然貼了200多行的程式碼,接著說“我已經把這道題的代碼打完了,現在你負責幫我code review,主要是針對clean code概念和一些程式規範的錯誤做修改”,所以我的任務就是直接在線上編譯器把一些我覺得錯誤或可以寫得更好的地方直接做更改,我覺得最艱難的部分是這個編譯器就跟記事本一樣,無法檢查到非受檢例外,加上面試跟時間的壓力下,要及時找到錯誤就真的考驗真功夫了,我有檢查到的大概就是物件沒宣告、重複的程式碼寫成funtion之類的,其餘的對我來說真的很難當下注意到,像是遍歷樹狀結構的物件,最上面的資料會吃不到的問題;傳入DAO層的參數形式等等,我找出來的問題應該不到一半吧,最後只能請求面試官解說XD。

另外他也馬上在編譯器出一些資料庫的題目,大約就是關聯資料庫、aggregate functions的寫法,我猜應該是我前面太糗他才出一些簡單的給我,整體的面試大約就這樣,我不知道題目就只有這樣還是我讓他沒興趣再繼續問我了哈哈,我從應對的反應看來我應該也沒機會了,最後也沒耽誤他時間問他太多問題,面試告一段落。

必須說這間面試方式真的蠻特別的,也是第一次體驗這種code review的考法,了解到自己在閱讀程式理解程式上還有很大的進步空間,感謝Atome的面試機會,雖然沒上但那一小時內進步很多

面試時長:1hr

面試結果:無消息

2. 91APP -Backend 後端開發工程師

使用技術:C# ASP.NET MVC

第一面:技術主管(視訊)

面91的時候有點緊張,感覺公司對技術的要求門檻比較高,面試官看起來也挺嚴肅的XD,一開始一樣我先自我介紹,因為我是Java base的所以他也沒問到比較深的技術問題,但面試官說他們產品系統都很注重效能,開始問我做一些效能調教的經驗,包含後端以及SQL、如何預防SQL Injection等,這方面我的確比較沒經驗,我舉了一些把Code簡化的例子(應該不算效能調教),後來他也嘗試問我一些C#的套件庫,不過我真的都沒聽過她也說沒關係。開始介紹他們公司,主要分為3個部門,而這個team算是產品部門(OMO部門),負責一站式幫客戶架好電商平台,處理後端的會員系統及數據處理(我理解沒錯的話),系統是架在AWS上,會需要處理高流量高併發的情況,而她也看出我的忐忑跟我說會有3個月的教育訓練,包含技術、業務的學習,整體氣氛雖然嚴謹一點但我覺得還算愉快。

面試時長: 30mins

第二面:技術面試(白板)

到了91APP現場後有點壯觀,因為他所在的地方是松山車站旁邊的舊辦公大樓,但他們公司的裝潢卻非常新創,真的跟大樓的陳舊感有點違和,辦公室裡面大家散發積極、有活力的感覺,讓人不禁也想跟著一起奮鬥XD。回歸正題,主要的面試官有兩位,一位是第一面視訊面試的主管和該處的資深經理,一樣先自我介紹,大概會針對過去工作的內容做一些追問(但沒有到問很細),接著重頭戲來了:白板題,如同網路上很多大大分享的面試心得一樣,是考table的設計,面試官給一個情境,ex:一位使用者進入購物頁面,針對其中幾項喜歡的商品點擊加入購物車,那table要怎麼開以及之後使用者再度進入該頁面時能正確顯示原先已加入購物車的商品。

我如何解這題就不多做分享了,總而言之我是有解出來,但後續想想有其他更多更好的做法,在面試過程中他們也會針對我的解法提一些follow-up的問題,對於沒什麼白板題經驗的我當下真的蠻緊張,不過我很喜歡這次的經驗,讓我開始思考原本工作的table為何這樣設計以及有沒有更好的設計方式。

白板題之後回到座位繼續問答模式,我也很好奇追問面試官白板題有沒有更好的解法,但他稍微苦笑的回答:“我這種也可以啦,解法太多種…”,感覺出來不太想多花時間跟我解釋(因為我知道我解法是偏爛的那種,只是想了解比較聰明的解法),陸續我問了不少問題像是對這個職缺的期許、這個team平常的合作模式、公司的文化風氣等…,其中分享一個其中比較重要的問題,他們公司不像我原公司有分SA,SD,PG,也沒有分工分那麼細,幾乎很多東西都是RD互相討論一條龍要生出來,可能一個需求進來從table設計、開API規格、SQL撰寫、包佈版腳本等都是這個職位應具備的能力,相對我過往的經歷而言,真的是蠻大的挑戰,我相信能在91APP成長許多。

面試時長:1hr

面試結果:感謝函(我有詢問原因,他回想要找更資深的…)

3. 街口支付 -Backend Engineer

使用技術:C#,Java

簡介一下街口的工程師分為4個team,由於以前系統是用C#開發,但現任新的技術長是Java base,所以慢慢把系統移轉成Java系統。

第一面:技術主管(Team2)

這個team主要是負責街口後端的會員以及會計結算的系統,因為這個team是用C#開發,所以也沒問我太多的技術問題,主要針對我過往的經歷跟用過的技術做詢問,問比較深的是資料庫。例:

FK是否必要存在?原因為何?優缺點

2. index理解?優缺點

3. PK會設哪種類型的資料上

4. 叢集式索引 vs 非叢集式索引

5. Store Procedure的優缺點

面試官人很好,跟我分享他工作十多年的工作經驗、環境變化等等,也跟我說第二關需要進公司跟團隊的人聊聊天,也讓人資做個性格測驗。很快的我收到了二面通知!

面試時長:1.5hr

第二面:技術主管(Team4)

原以為如第一關面試官所說,二面是讓我跟團隊聊聊也和人資聊聊天而已,結果進來會議室的面試官竟然是team4的leader,他跟我解釋說team2的主管覺得我比較適合他們team而轉介給他,但我心裡還是一堆問號為啥跟他當初說的不一樣而且如果只是換個team面試其實可以也先線上…

簡介team4主要是負責街口app所有的後端API,原本街口app的API是依功能打散在各個team的,但後來他們拆分出來新的team,也是純Java開發的系統。

簡單的自我介紹後先做一題白板題,題目為:用Stack實作Queue的類別,限制是只能用Stack的push(),pop(),empty()這三個方法。後來我用了兩個Stack完成這題,過程有跟面試官討論了一下,感覺他對程式也不是太熟哈哈。之後也跟上一關一樣問了蠻多資料庫的問題,像是:設定connection pool, index, 有順序性的資料意思, 資料庫ACID特性, 針對Isolation延伸, dirty read, 高併發會如何設計等問題,我必須說我很多答的不好,甚至我連ACID都忘了…,本來想說這間去了,但竟然最後得到三面的機會!

對了,在這面後面是直接跟人資簡短的面談,但主要也是確認人格態度的軟性問題就不多介紹,不過值得強調的是他問我好幾次如果薪資不如預期的意願以及我會考量其他哪些點(我腦中瞬間浮現網路很多人評價街口老闆很摳門)。

面試時長:2hr

第三面:CTO

街口CTO對我來說沒那麼陌生,之前就看過他的報導,也在保哥youtube影片看過他介紹他們實作的抽獎系統,不過面試那麼多間卻第一次跟CTO面,心裡還是蠻緊張的。

首先在自我介紹完後就看得出來他對我沒什麼興趣了,首先是我系統是內部系統,每天的使用量小,瞬時高併發沒啥經驗,另外問了對spring的了解,發生營運問題處理的經驗,用過比較厲害的技術等,整個過程我比較不能認同的是他會一直叫我繼續說,同時卻不給點反饋,就算我真的說完了也還會叫我繼續說,真的沒東西說了他就會露出厭惡的表情說:“就只有這樣?”,還炫耀說他在阿里巴巴處理過每秒6萬多的瞬時流量,過程還問了些問題就不多贅述了,最後印象很深是我問他對工作一年多的工程師有什麼期許,他回答:以上剛剛講的全部都要會…,我承認我技術是很不足,但也期許他能用低薪找到什麼都碰過的junior工程師:)

面試時長:30 mins

面試結果:感謝函

4. 比特數字 -Backend 後端開發工程師

使用技術:Java

第一面:技術主管(現場)

其實我自己是蠻喜歡去公司現場面試的,可以看到辦公室的裝潢、氛圍,更可以更直接的了解主管,也讓他了解我,進去比特的第一印象還不錯,辦公桌椅有電競的感覺,每個人都是很大的曲面螢幕,整體上班起來感覺蠻舒適的。首先是半小時的小測驗,是紙本測驗大約7題,題目如下:

1. String特性及比較

2.實作input為1到該指定數字的隨機取六個不重複數字,以下為舉例:

random6(42) = [1,5,34,13,25,42];

3. 畫流程圖,假設自己有個交易系統的Server跟DB,需實作轉帳流程,也會透過串接銀行API,把錢從交易平台系統轉帳到銀行,除了畫出流程圖,也包含檢查邏輯/資料變化/例外處理

4. 舉例在效能前提上撰寫SQL

5. SQL, NoSQL, Redis各自適用的情境為何

6. 要如何實作定時檢查機制

7. 某環境有server 1台、DB 1台,在尖峰時刻請求都卡在DB,請問短期、長期各有什麼解決方案

可以想像因為比特數字是區塊鏈的交易所,所以對高併發的處理及效能精進都很注重,需要蠻多實戰的經驗和有一些系統設計的概念。

面試主管是某個team的leader,非常年輕也很帥,首先他會針對以上那幾題去做更深入的探討而去延伸更多的主題,所以在寫的時候真的要有一定的理解,然後了解一下面試者過往的經歷以及遇到問題解決問題的方式,對過往工作系統的設計要有一定的了解,另外提一下他問過的其他問題:thread pool vs thread, outter&inner join, spring的bean有哪些, spring排程套件, hikariCP的理解, connection pool理解, thread safe, Set vs Map原理, Redis, Kafka的理解…大概以上這些,基本上簡單對面試做個結論,對資結跟資料庫要有一定的了解程度(原理和底層設定),再來就是只要說會Java就一定要知道Spring這個框架的重點邏輯,還有一些現行比較常用的技術要去理解,相信有做功課的人能大概講出對上述提到的有些見解,應該能輕鬆通關,只是我在前一份碰到的真的很少…

面試時長:2hr(含測驗)

面試結果:感謝函

5. 趨勢科技 -Full Stack Software Developer

使用技術:JavaScript, CSS, HTML, Python, Django, Node.js

一面前:Codility測驗

看網路上大家分享的經驗就是有名的Codility測驗,一共3題140分鐘吧,第一題是找最小字串;第二題是有關二進位判斷積偶數去做處理;第三題像是leetcode-No.239 Sliding Window Maximum,主要是題目很長要讀懂要花一些時間,但讀懂了基本上想通了就會做了XD

(趨勢的面試流程應該是會把我的履歷公告出來,有興趣的team會請人資統一喬個時間一起面試)

第一面:(AR/VR team+Cloud team)

一次排兩個面試真的是疲勞轟炸,因為是排前後接續著,所以要自介兩次且都被問類似的問題是真的會心很累,我就大概簡述一下,首先是AR/VR team,主管說這個team是新的產品線,主要開發未來VR在直播應用上的平台,用的技術很廣前後端都要會,ex:Python, Django, Node.js, mobile app, VR app等,感覺偏研發性質且需要即戰力的人才,不知道為啥會對我有興趣XD,不過這位面試官大部分也都針對我過往的經驗去詢問,也偏向問軟性問題而非技術問題,像是專案中遇過最困難的事,如何解決之類的問題,不過因為我一開始臨時延後會議時間,所以這個主管只剩半小時跟我聊就去開會了。

再來緊接著是Cloud team,他們團隊主要是圍繞在Azure和AWS上以雲安全為核心概念去開發各種support的服務,很酷的是這個team的主管還有準備PPT介紹他們團隊的業務,主要有10幾個services,有點像微服務的概念吧(?服務的項目大概是監控、加密、容器、工作排程等等,每一個服務都不一定是同種語言開發的,他說有go, python, Java, node.js等,主管很鼓勵同仁去嘗試各種新技術跟語言,可以去拓展不同語言在應用的可能性。而我主要被問的問題也偏軟性,我自己感覺他不是Java base的,所以都沒問到這個語言的技術問題,我最後問他對這個職缺的期許和具備的能力,他說對Junior沒有技術上太大的要求,主要是積極的態度還有學習力(感覺像是補習班?

面試時長:1hr30mins(total)

在這裡不得不讚揚趨勢的效率,面試隔天就收到二面通知~

第二面:Cloud team's all members

結果最後是Cloud team對我有興趣給我了二面的機會,面試的人大概五位,一樣自我介紹後開始對經歷追問,尤其針對DDD領域驅動設計特別有興趣,問我的看法、優缺點、能不能更加改進等,問了平常寫程式有考量到資安問題嗎,無論後端程式或SQL(這塊我真的比較弱),講了SQL Injection和舉例jwt驗證機制,也陸續問了很多軟性問題,都沒有問到Java的技術相關,但有說他們前端是React問我能不能接受,如何學習且如何評估成效,到了面試尾聲才跟我說他們團隊會大量跟美國同仁開會討論需求,請我用英文自我介紹,當下真的矇了開始胡亂拼湊我的爛英文,整體下來算是驚險順利通關XD

面試時長:1hr

再次表揚趨勢效率,當天傍晚就收到通知三面

第三面:人資

終於來到最後一面,是直接去現場跟人資面試,主要是確認人選性格態度方面,也讓我去感受實際的工作環境。這一關還蠻親民的,主要都是軟性問題,問工作遇到的困難如何解決、團隊相處方式、在團隊擔任什麼樣性格的角色、如何跟主管反應、未來短中期目標、對趨勢的期望、對趨勢的順位等問題,甚至還問到大學時分組報告、專題等問題,整體下來真的蠻疲憊的,人資會一直追根究底的問下去,但還好已經沒技術問題了XD

面試時長:1hr

面試結果:錄取~耶

6. AmazingTalker -Backend 後端工程師

使用技術:(待更新)

一面前:測驗

測驗前要先回答一些題目,比如說"為什麼想加入"、"職涯目標和人生目標",我自己是蠻用心在回答的(想說至少看起來有心?),回答完之後就準備開始考試。很酷的是AT的考試是給一個Notion的筆記網址,裡面有四題題目,有規範用txt的方式並按照要求的檔名存下來且壓縮,然後在90分鐘內用email回傳。

第一題為Base 7,這題大概了解一下7進位的原理程式就差不多出來了;第二題為Two Sum less than K,因為leetcode這題是付費才能看的題型,所以貼別人的解題網站,這題也不難,有做過Two Sum的稍為轉個想法就會了,不過我好像沒有完全做對,但因為時間壓力能表達多少就貼多少;第三題是給你看一段golang程式碼然後要你用中文寫出應該要做甚麼測試;第四題也是給一段Ruby跟golang的程式,要你重構裡面的程式,我想也是掌握一些clean code的原則吧,但我這題因為語言不熟看不太懂加上時間不夠我就沒寫了。

第一面:技術主管(ZOOM視訊)

一開始面試直接跟我說這次面試分成三部分,題目討論、履歷補充詢問、問問題環節,最酷的是他沒要我自我介紹(真的很意外),他直接請我螢幕分享並打開我第二題的程式,開始叫我解釋我的想法,一開始我試著解釋但漸漸發現我錯蠻大的,我也跟他講為甚麼錯並直接當場重寫,我在邊寫的過程中也跟他交流為甚麼這樣寫,就大概告一個段落他就說差不多了,並附帶問一題"知道資料庫的index嗎",回答完我的想法我想應該蠻順利的吧XD,再來就是針對我履歷過去做的事做更深的詢問以及輪到我發問環節,整個面試聊天過程都挺順利的,他也很大方跟我分享他過去的經驗,並跟我說他們找的人"技術的純熟度與否是其次,主要是對系統、程式有正確的概念,以及能講出自己在寫什麼和為甚麼要這樣寫",雖然他們是ruby和golang但也歡迎熟悉其他語言的人加入再學就好。

面試時長:40mins

面試結果:感謝函

[面試心得]

在打心得的同時,已經是換去新工作一個多月的時間了。本次的面試文記錄了12間公司,但其實面的不只這些(有些沒紀錄),我想在這part分享我個人覺得在軟體業以"一年多工作經驗的"的角度需要具備跟準備哪些。

為何想換工作:

在軟體業生涯中,我覺得以前其來說可以把前3年當作同一個階段-junior,這時候你的角色定位大概就跟畢業新鮮人差不多,是職業生涯裡面最菜的時期,而以公司的角度來看,你就是一張白紙,雖然你還是要具備一些應有的條件跟技能,但基本上你可以一直試錯,不斷學習吸收跟發問,公司其實不太會期待你能為公司帶來多大的貢獻(當然能的話最好),公司願意收這個階段的新鮮人,表示他們也願意花錢跟時間來自己培養,我也是經過面試一輪後還有這些體悟,我非常非常珍惜這段時間,把握優勢盡力的去吸收,因為...過了這個階段,通常你就會被視為資深工程師,可以獨當一面的作業和要有一定的經驗能協助公司解決問題,如果在junior階段沒有把能力累積起來,之後將會有"能力"支撐不起"資歷"的落差,而導致之後很難去追趕。

我非常推薦處在這個階段的人,除非你已經在非常頂的公司,不然可以多跳幾間。每間公司無論在程式的規範上、技術上、工作流程、環境等都會相當的不同,而在這個需要大量學習和尚未被定型的階段,多去了解不同公司的差異,他們的優缺點等等,如果只待在同一個地方而沒有比較組,你可能永遠會認知A情況只能用A做法,但殊不知其他公司有B、C、D等其他更好的做法,都非常值得去學習跟挖掘。

需準備什麼:

面了十幾間下來,大概歸納了一下如何準備,如果要面一些新創或是層級比較高的公司,現在很多都會在面試前先丟一份測驗,相信不用說軟體人也都知道LeetCode是面試必刷且最好準備的東西,畢竟第一關過了後續才有機會展現自己。那我自己大致只刷了50題左右,大部分都是easy和medium的題目,比例大約3:1,自己是比較喜歡按主題去刷,這裡推薦LeetCode精選,他依每個主題都有挑了一些精選必刷題,也有分享題目中文翻譯和他的思路,對熟悉該主題的資料結構及如何解題蠻有幫助的。

再去複習一次你的履歷,相信你會把你精彩的過去都依依敘述在履歷中,有時候可能為了把自己包裝的更完善,內容會稍有浮誇,又或是通常會寫用了什麼技術去做什麼需求,但你只知道這技術的其中某功用而不太清楚他底層的原理或是可以應用的其他地方。這時候再次審視自己在履歷上列的每個點,把曾經做過但其實沒那麼熟的項目多去做一些延伸查詢,這樣在面試的時候不但能自信的闡述過去做的豐功偉業,也能在面試官問一些follow-up的問題,展現你是對這個項目真正有去了解的。

多去做功課,了解市面上的新技術。這點我覺得特別重要,因為這是讓面試官知道你是有好奇心,會利用工作之餘精進自己的一個問題。以我來說,我原本的工作用的技術非常之舊,雖然都還是能解決大部分的需求,做出像樣的web system,但可能都已經是市場退潮的技術,舉個明確的例子來說,我進去的時候版控軟體不是用github,gitlab,是用一款我完全沒聽過的叫RTC,雖然版控軟體大同小異,學習門檻也不高,但總不能去面其他公司然後說你不會git吧...? 這就是為什麼必須多做功課目前市面上廣泛流行的技術,再去相比你過往的經歷可以去思考是不是以前工作的系統導入什麼技術會更好,這些都是變向在面試中更吸引面試官的部分,讓他知道你不只能把工作做好,你還會察覺不足的地方去找solution去優化。

展現你的大方以及好的人格特質-最後這點我覺得算是能在眾多的面試者要凸出的加分項。我有問我現在主管為什麼當初會錄取我,他有特別提到會溝通、好相處也是非常重要的點,想一想也不難理解,如果今天有一個能力很強但不代會表達、溝通的和能力普通但卻可以跟團隊間合作融洽,相信大家都會選擇後者,其實在面試中就是大方的展現你自己,當然也需要有條理、有邏輯的表達,也可以視情況的跟面試官閒聊,我甚至遇過面試官因為我喜歡喝酒而對我印象加分的

總結:

如果大家發現自己在工作上的學習已經停滯住了,或是覺得公司在技術上、工作流程上等都不是很好的做法,非常建議可以多去面試其他間公司,就算最後沒有要跳也無妨,從面試中藉由跟面試官交流可以增進不少見聞,無論技術面或是心態面,也會從準備面試的過程中發現自己的不足並去補充一些知識,我自己是想說都決定要面試了,就一次多面一點,讓自己有更多選擇,也從面試中更認識自己、更了解自己的優勢和自己想要的,面試真的很累,尤其是在邊工作邊準備面試的情況下(真的會變時間管理大師),不過在薪資還有個人能力一定會有不錯的增長,我想這就是突破舒適圈該有的報酬吧!

--

--