2019/03/11~2019/03/25【前端工程師 Front-End Web Developer】錄取
地點位於台北捷運七張站附近,公司規模約20人,前端約2人,後端含Devops約2人;辦公空間與另一間公司共享,有開放式也有隔層式,不過工程師座位會是隔層式,而且桌子是L型的大空間;上下班打卡,每日表定工作8.5小時,但可以自己彈性調整,只要每月合計工時達標即可;薪資保證13個月外加每季至多0.25個月的績效獎金,按績效比例計算。
請見ReactJS.tw貼文open_in_new或CakeResume職缺連結—前端工程師 Front-End Web Developer,Niceday玩體驗open_in_new
整場面試由2位面試官主持,一位是後端技術主管,而且慣用系統是Linux,另一位是前端技術主管。
技術棧的部分後端是Laravel,前端是React及GraphQL,以Jenkins自動化測試,但手動部署至AWS Load Balancer;公司現階段商業模式是與賣家分潤,但想尋找新的商業模式,所以目前打算開發模組化介面租給廠商,讓廠商可以客製化自己的行銷網站,所以這個時間點錄取的話是能夠開發全新功能,而不必接手前人的程式碼~~,算是一個很吸引人的誘因~~。
最近的產能都投注在Scribo的開發上,只好端出來賣弄一下了,在Niceday的面試也是我第一次開著用Scribo寫的履歷進行自我介紹,好險Live Demo時沒出什麼問題XD,面試官在面試前也很用心地看過我其他篇的面試心得,是個有點意料之外的驚喜!
由於面的是前端職缺,所以接下來都由負責前端的面試官主持,首先是口頭的技術問答,憑印象記得的題目及回答如下:
Q: SPA和傳統網站的差異? 有什麼優勢?
A: SPA只有初始載入時會傳輸完整html,其餘靠AJAX動態載入,傳統網站則是每次request都會傳輸完整html;SPA可以減輕server負擔,也可提升前端使用體驗
Q: 如何加速頁面載入? 前後端皆可,請舉三個例子
A: lazy loading, gzip, minified js
Q: let與var的差異?
A: let是block scope, var是function scope
Q: 如何判斷 Object 和 Array?
A: lodash
Q: js的繼承機制?
A: prototype blablabla
Q: 如何複製陣列?
A: Array.slice()或是ES6的spread operator
Q: 相較於其他前端,你覺得自己有什麼優勢?
A: 資工本科系的背景及受過的完整訓練有助於開發上的思考及品質
接下來面試官把他的筆電投影至電視,準備了3題js的程式碼,問我執行結果,具體題目雖然無法完整重現,但是各題考的觀念大致如下:
Array的filter()、map()、reduce()
let arr = [ {/* ... */}, {/* ... */}, {/* ... */},]let result = arr .filter(/* ... */) .map(/* ... */) .reduce(/* ... */)console.log(result)
Functional Programming、compose
let compose = (...fns) => {/**/}let discount = (price) => (price * 0.8)let commafy = (str) => (/* 某種regex,將數字每三位數標上逗號 */)compose( discount, commafy, console.log)(2000) // 結果是 2000 * 0.8compose( discount, discount, commafy, console.log)(2000) // 結果是 2000 * 0.8 * 0.8
JS的同步、非同步及event loop機制
console.log(1)setTimeout(() => { console.log(2)}, 0)new Promise(resolve => { console.log(3) setTimeout(() => { console.log(4) resolve(100) }, 0)}).then(data => { console.log(data)})console.log(5)// 結果是 1 3 5 2 4 100
最後階段是慣例的問答,然後後端主管應該同時有負責人事,所以向我說明工作時間、薪資結構等情況,然後帶我稍微參觀了一下辦公環境,順利結束本次的面試。