---
# System prepended metadata

title: Shopback 面試

---

# Shopback 面試

面試時間兩個小時，分成兩個階段工程師面試與工程主管面試，原本說會考百般題但是沒有考應該是覺得我太廢惹QQ

**階段一: 三位工程師面試 時間一小時**
面試官 Linkedin，真的都是在業界超有經驗的人：
[Kevin](https://www.linkedin.com/in/powenhsiao/?lipi=urn%3Ali%3Apage%3Ad_flagship3_search_srp_people%3BetL3EVZ9Tc%2Bpd0%2FCiKTkYA%3D%3D&licu=urn%3Ali%3Acontrol%3Ad_flagship3_search_srp_people-search_srp_result&lici=JZJJD5S7QpuD6W9WqDX9hA%3D%3D)
[Ian](https://www.linkedin.com/in/ianyuhsunlin/?lipi=urn%3Ali%3Apage%3Ad_flagship3_search_srp_people%3BafKYw48QQu2tDHtl4PDV7w%3D%3D&licu=urn%3Ali%3Acontrol%3Ad_flagship3_search_srp_people-search_srp_result&lici=46LT2DtBSgS9Rlop38gvyQ%3D%3D)

簡短自我介紹後，開始從履歷上問問題。下面所有問題不會的地方補充在[這裡](https://hackmd.io/9PoRwqgxTwu9tK7gWvHh7g)。
* **請說明怎麼用 HTTP request method 設計你專案中的 API** 

* **HTTP request POST/ GET 差別是什麼？**
只回答了帶值的差別，一個放在 URL 一個放在 BODY。被追問還有沒有，我回答不知道。
這一題 Stone 有說好像可以用冪等性的角度去回答。
[答案參考](https://medium.com/@totoroLiu/http-post-%E5%92%8C-get-%E5%B7%AE%E7%95%B0-928829d29914)

* **STYLiSH 的 Load test 怎麼做？ 如何優化系統？**
大致上講了一下 artillery 的用法，還有測試的流程（先取得首頁 API，再去打第二次 product detail API）。系統架構上用了 Load balancer 去增加，最快效能雖然變慢了可是平均效能跟最差狀況變好了。然後就被追問有沒有在程式碼上面做效能優化？我回答沒有，但其實應該要講說有用 redis 做Cache 跟 MYSQL 有加 index 的（雖然那是測試前就做了，可是感覺可以講出來嘴一下)。

* **Redis 用來幹嘛？**
我說 STYLiSH 用 Redis 做 Cache。個人專案用 Redis 做 session 來防止觀看次數作弊的可能。因為講到觀看次數作弊防禦機制，所以又繼續追問下去各種繞過作弊的方法問我怎麼防禦（這部分有興趣再直接問我因為有點細節），這個問題幾乎每個面試官都說過破解方法，但沒有人說怎麼做最好XDDD。

* **為什麼用 ORM，好處是什麼？**

* **為什麼選擇 MYSQL？知不知道什麼是正規化？能不能畫出你專案的 Table 關聯？**
講完之後就問我有考慮過用 MongoDB 嗎？因為我的專案其實用NOSQL比較合適。
我說有，可是當時候有開發時程壓力所以選擇用自己最熟悉的 MYSQL。還順便嘴一下用 ORM 的好處是未來要用 MongoDB 語法蠻像的。

* **知不知道 Transaction 是什麼？ACID？**
我這邊完全忘記了 XDD 當下覺得無地自容來鬧的

* **知不知道 MYSQL 有什麼引擎？差異分別是什麼？**
只回答了InnoDB，差異在 InnoDB 的 Index Tree 是 B+tree，其他就不知道了。
[如何查找自己的 DB 有支援什麼引擎](http://n.sfs.tw/content/index/10656)

* **知不知道要怎麼樣在 MYSQL 存多國語言不會造成亂碼？**
設定編碼 UTF-8_mb4

* **SocketIo 是什麼？請說明 WebSocket 協定跟 HTTP 協定，不用 WebSocket 能不能做即時同步？**
這邊就稍微提到 polling 跟 long-polling

* **有沒有對 socketIo 做過 load test？**
回答沒有，可是我猜他會想問 socketio server 承載的問題所以就說明一下如何建置 muti-instance 的 socketio server。

* **你怎麼使用 GIT/ GITHUB？說明一下流程？有沒有做過 PR？解決過 conflict 嗎？知不知道 GIT/ GITHUB 的原理？**
最後一題問的人好像也覺得自己問太難，決定自己解釋，不過我根本沒聽懂只是猛點頭。

* **換我問問題**
    1. **未來會不會有新的軟體 feature？**
    有！很多，但是都不能告訴你！
    2. **工作流程？**
    跑 Scrum，一個禮拜一次會議，PM 規劃 Story，開發團隊依據 story 切 task，unitest 看需求緊急程度決定要不要開發，太急就以後再開發，功能施作完成後交給 QA 測試，然後丟給 DEVOPS 發佈，因為有專門的 DEVOPS 所以 server 有緊急狀況不會找上你，不需要 on-call。
    3. **團隊分工？**
    用產品線來分團隊，所以每個團隊都會有自己的前後端APP，然後也會很常跟國外單位合作。
    4. **對新技術的態度是？**
    想要用新的技術就要先研究好，以各單位的同仁能夠上手維護為主。
    5. **有讀書會嗎？**
    會有技術分享兩周一次，想開讀書會就開。
    
**階段二:工程師主管面試**
面試官 Linkedin:
[Eva](https://www.linkedin.com/in/eva-ou-23628044/?lipi=urn%3Ali%3Apage%3Ad_flagship3_search_srp_people%3BkgY7Lm2fTo%2BX7yFNlXNDjA%3D%3D&licu=urn%3Ali%3Acontrol%3Ad_flagship3_search_srp_people-search_srp_result&lici=%2F533emmuQ%2Bipj7fec12BhA%3D%3D)

再自我介紹一次，開始問問題，全部都是問個人特質經歷相關沒有技術相關。
* **在 School 遇過最大的挫折？如何解決？**
* **co-working project 有沒有跟同學爭吵過？如何解決？**
* **詢問以前的工作內容，平常都在做什麼事？**
* **黑客松競賽做了什麼，擔任什麼角色？**
* **根據你的自我介紹還有以前的工作經驗，我覺得你當產品經理就好了為什麼想當工程師？**
* **有沒有其他 offer 了？都是什麼樣的公司？**
* **只讓我問一題因為時間不夠了**
* **對新人的基本要求是？**
基本上 Shopback 還是在快速成長中，所以找人還是以 senior 為主，需要即時戰力原則上希望能進入後一個月開始有產出。QQQQQQQQQQQ