為什麼這篇ShopBack 前端 面試鄉民發文收入到精華區:因為在ShopBack 前端 面試這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者leograce (吐司)看板Soft_Job標題[心得] 後端工程師-準備&面試-[W...
<代po>
後端工程師-準備&面試-[WritePath/Ukeas/Onramp-lab/Shopback/Garmin/Yahoo]
最近剛過完年,原本想說再給自己一至兩個月時間面試年後職缺,沒想到年前面的公司突然
回歸重點,這篇主要是我面試的心路歷程以及公司面試的考題,希望對面試這些公司的人有
我面試的公司有 WritePath, Ukeas, Onramp-lab, Yahoo, Garmin 及 ShopBack等
個人背景
先說我的經歷,我是讀國立後段大學的電子系,但自己主要接觸的領域是資工, 主要寫JavaScript及PHP,大學參加過比賽和接過兩個外包專案,前後端是一路自學上來的,自己花了很多時間在學技術以及編程,算是junior full stack。
由於大學三四年級忙於開發專案的緣故,我決定畢業賭一把直接找工作,自己也看過很多資工碩士出來找工作比較吃香的文,很擔心自己是不是畢業也淪為廉價勞工,不過就以結果來說,我覺得如果你有經歷,經歷的質量足夠且具備不差的基礎技能,直接找工作是不壞的選擇。
再來是一下薪資方面,講白了第一份工作幾乎取決於你的學歷,資訊background的大學新鮮人起頭大概都會落在30000-35000,但有些不錯公司會願意開35000-43000不等(個人看法,參考就好),這沒有一定標準,自己也是一路面下來,根據offer在調整自己預期薪資,因為先求有再求好,累積經驗才是本錢。
講那麼多廢話,我先談自己面試準備過程,我畢業完,等兵當兵總共浪費六個月生命,退伍完已經是一月,前後花了大概一個多月的時間做準備,我自己準備以下:
製作中英履歷,104跟cake resume都有用,這邊要提一下Cakeresume個人覺得找工作非常好用,不僅美化履歷還能增加很多曝光度,現在很多公司HR或hunter都會到這家網站去看(像我自己就收到8-9個新創公司邀請,另外也有趨勢科技, Garmin, Accedo, Micron, Manpower等等的邀請函,比我在104回覆的還多,不知道該高興還難過)。
網站作品demo,有自己開發過的專案或是side-project,有自己架站更好,可以方便展示自己以前開發的專案(自己租糖果server 因為之前接專案的緣故,如果想要免費HOST的話可以找找AWS, Heroku...),雖然面試時不太會要求demo,但需要時會大大加分。
刷Leetcode跟學CS相關知識,尤其是Leetcode超級花時間(我到現在只做了60幾題,一開始碰覺得自己根本智障,連這麼簡單的解都做不出來)。
前端就複習JavaScript API, OO (call, apply, Object.prototype, defineProperty...), Ajax, DOM manipulation, functinoal programming(closure, nested function...), hoisting, HTML5, SEO, JSONP, Promise and Deferred, Asynchronous(non-blocking), ES6 (const vs let, rest parameter...), 再來根據你熟悉的框架做延伸,像React就要知道lifecycle, Redux, Flux, Flow, HOC, Container/Presentational component, CssModule..., Angular就TypeScript(只寫過Angular1,2以上的其他不清楚);
後端就複習PHP API, HTTP protocol(100 - 500 status code), CORS(Access-Allow-Control-Credential...), Web Cache(Control-Cache, Etag, Last-Modified...), File format(JSON, XML, YAML), metadata type, Database (SQL Optimization, Index, Normalization, data-structure, features...), Cache(Redis vs Memcached), Auth(Session/Cookie, JWT, Oauth2...) MVC (Lifecycle, Dependency Injection, RestfulAPI, ORM, Configuration...), Security(XSS, SQL Injection, CSRF, hijacking clicking...)
此外我是有準備Regular expression(不過目前面試下來沒有用到),thread vs process(starvation, deadlock, race-condition...), OSI和design pattern(Factory, Singleton, Adapter, Sub/Pub, Template, Strategy, Proxy, flyweight 在實際專案比較常用)。
----------------------------------------------------------------------------------
WritePath(雲翻譯)
Backend engineer
新創公司,我收到他們的邀請函,覺得公司評價不錯決定去試試。性質類似接案,他們系統會先自行翻譯客戶文件,之後再交給與他們合作的翻譯專家幫忙翻譯,省時省錢。
他們目前公司網站後台是用PHP Laravel,但翻譯有應用machine learning,使用Python 開發,現階段前端不會著重太多。
在趕往面試途中,當下才發現他們的樓層居然沒有電梯(傻眼,害自己找路找很久,有點狼狽)。工作環境不算大,大概10-16張辦公桌椅一間會議室,面試我的是之前的PM,是當時創始成員,人也很親切,他們說目前後端缺人,需要有實戰經驗的人才加入。
接著開始問問題,一開始就從經歷開始問起,整體的問題都是著重Laravel
怎麼學這些技術及程式語言,用什麼管道去學習相關技術?。
Cache Redis vs Memcached ?
Laravel session有好幾種(null, Filesystem, cache, database),他們的優缺點個別是什麼?
如果現在我們有網域名子叫https://writepath.com,說一下在Laravel運行的系統流成?
(這邊我覺得自己講太久,uri從.htaccess RewriteRule後存取 /public/index.php,載入 composer.php 建立App和Request,之後外部load Kernel, ErrorHandler...,內部load basebinding..., Container bind,執行請求觸發Kernel的bootstrap,加載ServiceProvider, 配對Route,執行 middleware controller一直到Response...)
現在這個網域想分多國語系,我們想要讓網域變成https://writepath.com/{locale}/path,請問你有幾種方式去做?
(我一開始講在web.php設定routing {parameterNames},後來他問我能不能在serviceProvider裡面加,讓我用手機查。)
如果現在有多台server,如何在後台進行有效率的routing maintain ?
解釋什麼是API?
Dependency Injection (Container)
之後來一位RD,是來自新加坡,考了我一題演算法,
現在有5 * 5 陣列,請印出a[0][0].a[0][1].a[0][2].a[0][3].a[0][4].a[1][4].a[2][4]...印完(跑到底轉彎)?
這題我沒做出來,只是大概講一下會用recursion,參數設行,列和benchmark這樣解
再來換人資,就問一些人資問題(廢話)
個人特質
有沒有跟人一起工作過
你的優點和缺點
你想從這邊學到什麼
期待薪資(我第一次面,一開始喊35000 * 12)
最後說他們評選,如果有機會技術長會請你面試並派作業。
結論: 無聲卡
我自認為覺得當天狀態還不錯,可能是Session store in cache vs Database(這個我還真的沒有去仔細做功課),Cache的比較和演算法這邊做不好,
覺得公司乾淨整潔,算是挺有潛力的新創公司。
----------------------------------------------------------------------------------
Ukeas 大英國協教育資訊中心
Backend engineer
外商公司,幫忙申請海外留學的工作,HeadHunter在Cakeresume寄給我邀請函,hunter人超nice幫我校正英文履歷(非常感動),說是對新鮮人的優待。公司前後端都有徵,後端也是用Laravel,前端聽起來是用jQuery,不知道有沒有使用framework。
當天面試排在WritePath之後,公司在大安區,總共有兩層樓,(題外話,因為是公寓式建築,覺得有些外部設施沒有這麼友善),面試我的主管是外國人,全程用英語面試,技術問題沒有到非常的深,只是用英文回答非常吃力
自我介紹
介紹一下後端工作在做什麼
是否了解我們的工作內容
什麼是OOP(這我答不好,沒提readable, expansible, resusable, testable)
try, catch(一開始還聽不懂他在說啥 以為是套件)
過去有debug的經驗嗎(我就提mail, database log)
過去有處理同時上傳非常多檔案的經驗嗎(no,但還是講一下會用queue去用)
分別說一下未來兩年和五年規劃
在大學有跟同學合作過嗎 然後在大學在做什麼
Demo project and code (主要demo 我做的小型購物網專案,給他看mobile的購物介面,和demo angular1和slim的程式碼)
面試進行大概一小時半,面完整個人就像被榨乾一樣,第一次用英文面試講話超卡,有時講到一半詞窮,接不下去,後面在Q&A基本上都沒在聽了,哈哈,但還是努力撐完。
結論: Offer get (人生第一個offer) 37k trial 3 month, after 43k * 9, no year-end bonus,附免費英文課程
人資說這個職缺salary是4w-5w之間,不喜歡可以再商量,我覺得對於剛出社會大學生待遇已經很好了,一度想要進去。
----------------------------------------------------------------------------------
Onramp-lab
Backend engineer
公司市場都在美國,以前是電商著重婚紗產業,後來擴張領域到kidguard 跟售票系統,他們的賣點是行銷非常頂尖,提供新創公司資金以及行銷技術(他們有投資許多國內外的新創公司,投資方式有合資,融資...),每年夏天會開放國外學生暑期實習,個人覺得非常厲害。公司落在信義區,環境非常像下午茶咖啡廳,有零食bar,交誼聽(裏頭有VR Switch),外牆有大的落地窗,往外看可以看到101,是我個人最喜歡的工作環境。
這職缺是後台管理系統,方便行銷人員管理廣告發布和行銷通知,使用PHP Laravel。
一面
總共三位工程師,兩位主要是目前開發此系統的工程師,另一位比較資深,有負責這專案和其他專案,聽他說有些領域涉及一些data science。整個面試問題以我自己做過的專案為主(尤其是最後開發的購物網)
自我介紹
如何設計購物網站的tables schema ?
如果產品分類複雜化,如何處理 ? (自己是提多件資料表跟使用複雜data-structure像json...)
MVC Middleware (我提Lavavel使用Pipeline,運用array_reduce 實作closure去組裝這些middleware function)
開發過的專案有使用Laravel嗎 ?(no, 上個專案主要是以Slim3開發,只有串接Laravel ORM,實作整個Laravel只有在畢業後自己做side-project裏)
Laravel 跟 Slim差別
有沒有使用過Cache(Redis, memcached)
前端framework為何選React(我原本是接觸Angular1,後來因為台灣市場大部分以React為主而開始轉向去學)
React lifecycle, Redux
前端有沒有使用過Vue.js (因為Laravel本身就套好Vue的關係)
購物專案在管理者後是否應用data mining / analysis (no,自己一人開發客戶跟管理前後端就花費許多時間,無心力著重)
有沒有使用過WordPress(no, 這是別人寫好的專案,如果要直接套一套就好)
他們工程師說蠻親切的,跟我說有關專案的開發現況以及使用技術,主要是幫助公司內部的行銷管理,CEO對此專案非常重視,會經常meeting測試開發功能,聽起來算是有挑戰的工作。
接著換人資問問題,詳細跟我介紹公司文化以及公司內部發展,問一下期望薪資跟一些人格特質。我覺得HR挺親切的,他們會主動策畫活動(像辦電影派對或是英文講座),談了許多職場文化。
# 二面
二面請的是CTO(master Frontend)和 PM,基本上沒有出什麼技術考題和演算法,很像純聊天。
自我介紹
前端使用什麼技術(我提一開始碰jQuery,後來開始學習MVC框架幫助了解主流的前端開發,開發不少UI component)
後端使用技術(提一下RestfulAPI, Session/Cookie Auth, CSRF token, Database ORM, Cronjob...)
介紹一下自己最有自信的功能(我demo之前專案,主要給他們看UI,接著介紹串接7-11跟縣市地址的資料,一個是用Curl請求,改Referer Header可取得,另一個用JSONP)
購物網建立了多少資料表?
因為我提到訂單產品內容是用json,他問我如何統計分析訂單內容的各個商品項目?(後來有提示我再建一個資料表就好)
tables item design(我提到char(1) vs enum,char(1)存取速度稍快,在我自己第一個專案用蠻多的,但沒有enum來的語意化)
有沒有在後台report analysis?(跟一面問同個問題!?)
覺得兩位主管人非常親切,CTO 在前端專精前端,所以我有問哪個語系是目前開發主流(VanillaJS, TypeScript, ES6 + Flow),他是回答現在逐漸趨向TypeScript,因為它可以幫助快速編成及維護,著重原生語言程式的人會開始減少(但還是有不少人力挺原生);另外我問到為何禮拜五會放音樂,他們笑說是為了培養休假情緒(haha),然後他們補假會自行宣布放假不用上班,還蠻有趣的。
結果: Offer get 38000-45000 * 13 我自己是非常喜歡這家公司,但後來因為其他原因所以發感謝函給他們。
----------------------------------------------------------------------------------
Garmin
軟體工程師(Web Application)
這家在桃園汐止,在科學園區裡面很像竹科,有許多建築大樓,但我覺得外圍生活機能頗差,出了園區真的荒涼。
Garmin大家應該都知道,就不提太多。看到這個標題,正常都會聯想到後端,結果當天面試全問前端,蠻錯愕的。
職缺是HR看我的Cakeresume,寄邀請函問我要不要參加面試,確定時間後,就有性格測驗跟英文測驗,我覺得性格測驗做的挺腦殘的,二選一然後一直重複很煩(像什麼我喜歡取悅我的主管,如果別人不喜歡我我會很煩, WTF...,這到底是什麼鬼測驗阿);再來是英文測驗是限時一小時,半小時聽力半小時閱讀,可以測驗多次,但只會選第一次的成績(聽完深刻體會自己聽力真的超癈)。
面試當天,之前看板上說會提供奶茶,結果現在他們走健康路線,只提供無糖紅茶(...)
一開始是HR面試,問我期待薪資,我談38000-45000,他接著說大學生在公司起薪基本上是5w(...WTF...,本來想過待遇已經很好了,沒想到會這麼多,當下覺得被雷打到)
HR也說生活機能沒有很完善,目前是已經有接駁公車可以直達火車站,未來會慢慢改善,公司內部有員工訓練和旅遊或餐廳補助,裡面資源確實是蠻豐富的。
HR問完人資問題後,之後來兩位工程師進行技術問題。
自我介紹 (我個人覺得這部分看很重,Garmin感覺比較重視經歷,類似參加比賽,接計畫或是做過什麼專案,為了這個還特地做PPT demo一下,可惜沒有demo project)
有沒有應用React在之前的project裡面(no, 只有在side-project)?
解釋Redux。 為何需要Redux(因為需要再額外的程式碼),好處是什麼? Redux 總共有幾種架構(印象中是提 Action, Reducer, Store 這些)
情境題: 假設你現在有統計分析的使用者介面,從載入圖表到滑動操作都非常的慢,請診斷問題和改進performance(
前端: DOM Manipulation, lazy-loading, CSS3 (transform > animate), Event throttle(設事件間隔timeout,避免頻繁事件請求),這邊忘記提Design pattern的singleton...
後端: SQL optimization, cache (Filesystem, Redis/Memcached, Web Cache), lightweight Architecture.
)
何謂Babel?
ES6 const vs let, var vs let (第二個我沒答出來,後來覺得差在iteroatr loop在外部存取let會throw error)
何謂Hoisting?
什麼場合會用Redis (唯一的後端問題,我提通知notification跟登入失敗cd時間Rate-limiting)
整體我覺得沒有問很難,技術部分沒有問非常深(正常該多考closure, Object OO和Non-blocking...,可能覺得我不夠好吧)
兩位工程師主要工作是內部系統的使用者分析介面,僅供公司產線使用的dashboard,他們重視安全使用server在公司內部加上私有網路,使用語言是TypeScript + Angular5 (完全與自己技術不符),後端Server是C# (更不符),他們說這邊的工程師,基本上都要會C#,遇到問題可以請團隊協助,有時要去產線觀察內部作業,其中蠻大的問題是要與其他部門協商(好比說分析介面顯示哪個流程效能不好,但其他部門不買單不願採納等等),了解到蠻多公司內部文化。
結果: 無聲卡
個人覺得這職務一面門檻沒有特別高,技術沒有問太多也沒考演算法,沒有版上說的那麼硬,感覺評分依據著重在自介。他們說面完之後有二面,可能是二面後會比較有挑戰吧。
----------------------------------------------------------------------------------
ShopBack
Software Engineer-Backend (Freshman)
這家是在104投的,他們現在可以稱東南亞最大的現金回饋平台,知名度大家應該不陌生,公司後端語言是Node.js(覺得js因為前端的關係,近幾年在後端市場逐漸增加),他們面試流程篩選蠻嚴格,看起來很重視工程師的素質,真心覺得不錯但整個面完會花許多時間。
一面是phone interview,請一個主管做skype面談,時間半小時,主要在問為何想投這家公司,評估公司標準等等,沒什麼技術問題,就只是想讓你問公司問題而已。會談完,過幾天發給我Node.js assignment,不限時間要我做module,主要是在處理HTTP URI, methods 跟 Header請求,需要config做Header參數的客製化配置,不符合的就直接error response,說白了就像middleware,不需要寫複雜的core library。自己node.js沒什麼碰,就花個一天簡單寫一些main module, config, helpers等套件交上去。
結果: 婉拒二面
交完assignment,他們邀請我參加二面,說會考technical topics 跟白板algorithms,我原先是蠻想參加的,但在那之前已經接受offer了,只能婉拒。
-------------------------------------------------------------------------------------------------
Yahoo (Vorizon Media)
Software engineer
原先是Oauth,但這部門被外商投資大筆資金併購,現在改稱Verizon Media,產品功能不變,只是名稱改了(變成一個勾勾)
這個職缺是約聘(contractor),基本上學校畢業應徵的職缺以約聘居多,除非你技術非常怪物到可以變成他們正職。
先說這個還蠻有淵源的,我四下再找工作的時候是先投前端職缺到104,沒想到隔天下午就回我說目前缺後端
要不要面試,當時就做第一次的phone interview(印象中考 require vs include, require vs require_once performance, GET vs POST, MVC concept, Session/Cookie Auth, CSRF, XSS, SQL injection, Database primary key vs foreign key vs unique key, SQL optimization, RestfulAPI, CORS, JSONP, PDO prepare, PDO bind, PDO transaction, OOP, abstract vs interface, design pattern, CSS id vs class selector, JS hoisting, closure, 最後再來個鋪克牌隨機洗牌演算法)。 主管覺得我不錯,說先幫我放進pool,等我當完兵幫我內推。
Yahoo整體來講是我目前面過最硬的,問的題目涵蓋很廣且由淺入深,重點就是底層的語言及技術要夠扎實。
# 一面
一面因為已經有經驗了,所以整體下來都還好
require vs include
require vs require_once
unset, unlink
Encapsulation: public, protected, private,使用時機 (public => API, Unit test, protected => refactor)
abstract vs interface 說明使用時機(這我覺得有點難,他們用圖真的差不多,只能憑經驗講,我是舉門的開關用abstract, 自動門或旋轉門的額外功能會定義在interface, 某方面也算遵循SOLID 的Interface segregation principle)
繼承存取parent object (parent::__construct)
trait,使用時機(我提Laravel Request會擴增額外logic,像flashdata, content types 和input,你不想使用繼承死綁定,想在原有物件上增添新服務,也就是在inheritance 跟 polymorphism不好用時, 使用trait是個好選擇,講白話就是expansion)
再來問這樣會不會違反abstract, interface principls(我答會, 因為它會違反原本物件的定義形式,不理會interface 跟abstract規定介面)
RestfulApi (URI, methods, response status, Stateless, Cacheable...)
PUT VS POST, 何謂Idempotent (POST => Create entities,輸出結果會異動 {x}, PUT => replace entities,輸出結果保持不變 {v})
Autoload (magic function, 可用在namespace, use...)
SQL Injection (escape char, slash ...)
PDO vs mysqli (PDO 多了OO, named parameters, 方便編程)
CSRF, 如何防範(我提Session/Cookie Token => [session_id + user_id] or [random_id + user_id], JWT)
Unit Test (這個不熟,只碰過一點,光開發跟學技術就沒空了,沒時間額外寫這個)
如何使用test private method (不會,後來才知道可以用closure去test但一般基本上都測public method)
假設專案需要引用很多dependencies,會不會測試困難,要怎麼解決 ? (這題完全不會,但主考官後來跟我講用Mock Stub 可以解決外部依賴注入的問題,可以幫助測試單一物件,另外還能幫助DB DA test)
CI/DI auto-implementation (自動測試發布,看過但沒用過)
PSR PHP-FIG (編程標準,稍微提一下autoload, container, error interface, autoload)
最後來一題演算法,直接在Google document上實作merge sort,我覺得難的部分是請你推倒時間複雜度(F...,只能硬著頭皮慢慢算)
那時我問主考官,約聘是不是跟正值待遇差很多,他是說還好,享有的福利都差不多,聽起來覺得鬆口氣。
還有面試基本上是分三面,這大家應該都知道,就不多提。
# 二面 onsite-interview
二面會考經典的白板演算法,要去南港展覽館,我還記得當天一直找錯路,差點遲到頗驚恐。
當天來了三位主考官,我以為最右邊的小姐是HR,結果是她是這個部門的大主管(震驚...)
他們為了讓我緩解情緒,先從簡單的開始問
RestfulAPI
Session vs Cookie
Cookie parameters (我好像只提了secure, http, expires, path...)
資料庫正規化(normalization) 1NF, 2NF, 3NF(不會...,以前讀的全忘光)
說明一下Auth 功能 (其中一個主考官看了我的github source code, 好像有三四個問題都是從我的code出的, 我超級感動的阿...)
HTTP prococol
SQL Injection
require vs include
require vs require_once
HTTP Domain vs path
接著 考演算法吧!!
1. 假設有一陣列[A, B, C],請印出AAAAABAACABAABBABC...所有可能(這是我最大的敗筆,個人認為算easy,原先以為要考慮4個以上,當下花很多時間卻沒做出來,直到回去路上才想到)
2. 一個陣列找出第二大的值(這個我之前碰過了,就分別給O(n)和O(nlogn)的解)
完了之後,主考官就問我Design pattern有哪些(我提Singleton, Pub/Sub, Template, Factory, Adapter, Strategy, Chain這些) 在說明一下應用在哪裡?(我就大概講factory應用在 Driver Manager, Template 寫一些hook...)
如果目前有搶票系統,同時上千人在搶票,如何寫一個只有第一人能搶到的功能(我提queue 緩存請求)
面完之後,整個超沮喪,三位主考官叫我先在這邊等,過沒多久大主管回來稍微跟我聊一下天,然後談一下這邊福利待遇跟目前部門的組織狀況,她有提到目前學校會寫程式的人,通常都是把功能做出來會動就夠了,而不會去講究更深層的編程開發,因為Yahoo是大公司,因為那個招牌,必須要講究high-quality的應用程式,所以從微觀(algorithm)到巨觀(design pattern)必須樣樣講究,每個程式區塊都必須unit
test,嚴格把關測試,在開發上通常都會在security跟performance上面做取捨(聽到這邊真心認為他們那些工程師完全跟自己是不同檔次的,只能說自己太爛)。再來就是工作開會採scrum開發,每天都要站立會議然後做sprint衝刺和檢討
,有效的開發產品。
最後輪到我發問的時候,我才知道,原來我現在正在第三面阿...,主管說她想盡快決定人選,所以當天就直接三面(當下才驚覺,想說怎麼問我預期薪資是多少,當下一整個狀況外,haha)
最後要我把第一題做不出來的演算法帶回去完成再寄給她。
結果:
Offer Get !!,(45000 - 49000) * 12,(......我當下直接叫出來,以為在作夢...haha)
說實話,我儘管三面完全不認為自己會上,運氣的成分占了大多數,原本已經開始準備年後的公司面試,沒想到星期一就給我offer,真的是給我一個非常大紅包。
以上是我的面試心得,整體來講,總共面試六家有三個offer,我覺得自己算非常幸運也很開心待遇都不差,只是很可惜的是我沒能面試Shopee,趨勢科技(那時寄給我邀請函的時候正好在當兵,之後回已經是無聲卡),KKBox 跟 群暉(聽說考題演算法非常多加上技術硬)。過程中也受到許多人的幫助,我非常感謝,即便是大學新鮮人也是有機會挑戰不可能上的大公司,希望對剛出社會的新鮮人一個勉勵,確定自己的目標並努力實踐,說不定會得到出乎意料的答案。
-----
Sent from JPTT on my HTC_U-3u.
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 84.78.21.229
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1551251447.A.362.html