面試 - Phantom Mask
題目
Building a backend service and a database for a pharmacy platform.
交付項目
- 後台管理: https://mask.langgo.app/admin/
- API測試: https://mask.langgo.app/swagger/
(須先登入後台取得授權)
- API文件: https://mask.langgo.app/doc/
- API效能分析: https://mask.langgo.app/silk/
(須先登入後台取得授權)
未實作任務
Search for pharmacies or masks by name, ranked by relevance to the search term.
搜尋藥局名稱可用關聯性做排序。但口罩名稱搜尋有實作但無法達成以關聯性做排序。Write appropriate tests with a proper coverage report.
目前沒有導入自動化測試流程,所以這部分尚未實作。
雲端部署
服務架構
部署
1 | # Login to remote server with ssh on AWS EC2 |
測試資料匯入
1 | # Operation on docker container |
.env檔
1 | #.env file |
容器狀態
任務需求
任務1
List all pharmacies open at a specific time and on a day of the week if requested.
理解為: 列出藥局,可指定篩選某星期以及幾點營業的藥局。
1 | # 測試條件: 列出週三早上八點營業且晚上八點結束營業的藥局。 |
任務2
List all masks sold by a given pharmacy, sorted by mask name or price.
理解為: 列出藥局,需附帶已販售的口罩,且可依照口罩的名稱或價格做降冪或升冪排序。
1 | # 測試條件: 列出所有藥局的販售紀錄且以販售價格做降冪排序。 |
任務3
List all pharmacies with more or less than x mask products within a price range.
理解為: 列出藥局,需附帶可販賣的口罩,且可用價格範圍進行篩選。
1 | # 測試條件: 列出所有藥局並附上販售的口罩商品,口罩商品只顯示出販售價格為10~20元區間並以銷售價格做降冪排序。 |
任務4
The top x users by total transaction amount of masks within a date range.
理解為: 列出顧客,可篩選某個日期範圍內的交易總金額,並依照交易總金額做降冪排序。
1 | # 測試條件: 列出2021-01-11~2021-01-15有進行交易的顧客且依交易總金額做降冪排序。 |
任務5
The total number of masks and dollar value of transactions within a date range.
理解為: 列出口罩,可篩選某日期範圍內的口罩交易的總金額。
1 | # 測試條件: 列出口罩,在2021-01-11~2021-01-15有販售紀錄且顯示這段時間販售的總金額。 |
任務6
Search for pharmacies or masks by name, ranked by relevance to the search term.
理解為: 列出口罩與藥局,當名稱符合關鍵字搜尋,且需要搜尋關聯性詞語做排序(此部分未實作
)。
1 | # 測試條件: 列出藥局,搜尋含有『Health』關鍵字的藥局,且附帶販售的口罩資訊。 |
任務7
Process a user purchases a mask from a pharmacy, and handle all relevant data changes in an atomic transaction.
理解為: 顧客可一次購買多筆口罩,購買結帳過程中如果發生客戶有餘額不足時,則取消此次交易,並回復客戶原本餘額以及藥局銷售金額。
1 | # 測試條件: 客戶『Ada Larson』購買兩筆口罩商品。 |
1 | # 測試條件: 客戶『Ada Larson』購買兩筆口罩商品,其中一筆產品購買數量為100。 |
資料模型
共有五個資料模型,分別為:
- Pharmacy Model: 藥局資料表。
- Opening Hour Model: 藥局營業時間資料表。
- Mask Model: 口罩資料表。
- Pharmacy Mask Model: 藥局口罩資料表,用來對應藥局與口罩的關係,每筆資料代表可販售的口罩商品。
- Customer Model: 顧客資料表。
- Purchase History Model: 顧客購買紀錄資料表。
使用 DBeaver 工具產生ER Diagram。
使用 Django migrations 來建立資料表,可控管Schema異動版本。
API
共提供四隻API,分別為:
- Search Pharmacy API: 搜尋藥局。
- Search Customer API: 搜尋顧客。
- Search Mask API: 搜尋口罩。
- Buy Mask API: 購買口罩。
使用文件
此文件主要優化閱讀性但不提供測試 https://mask.langgo.app/doc/ 。
線上測試
可進入 https://mask.langgo.app/swagger/ 直接點選Try it out
按鈕進行測試。
效能分析
使用 django-silk 套件,可在 https://mask.langgo.app/silk/ 分析過去的API請求。
測試工具
使用Apifox工具進行API測試。
後台管理介面
使用Django admin進行後台建置,提供畫面可直接對數據進行觀看與編輯。
管理員登入
藥局管理
顯示各家藥局,包含營業額、銷售數量、營業時間、與販售的口罩商品。
口罩管理
顯示各種口罩,包含銷售數量。
顧客管理
顯示各位顧客,包含可用餘額與購買紀錄。
演算法
線上面試
資訊收集
了解公司與老闆背景,以及目前公司產品與服務。
公司: 凱鈿行動科技股份有限公司
主要產品:
- Creativity 365 讓彙整資料、編輯、創作、發布的流程變得快速、簡單。一次擁有全系列產品,
包含Animation Desk、Write-on Video、NoteLedge和Markup。 - Document 365提供個人與企業用戶絕佳的PDF文件解決方案,搭載凱鈿最受歡迎的PDF Reader行動與桌機全系列軟體,滿足您在任一裝置上的各種工作情境。
- 點點簽 DottedSign將簽名流程數位化,讓您立即享有行動工作的自由。點點簽幫您將工作流程化繁為簡,讓商務推展更順暢!
- Creativity 365 讓彙整資料、編輯、創作、發布的流程變得快速、簡單。一次擁有全系列產品,
老闆: 蘇柏州 先生。
核心成員: 24位。
資本額: 3億,實收1.65億。
資訊消化
- 公司主要針對企業客戶,提供合約雲端作業平台,可在線上編輯合約內容與電子簽署等服務。
- 從提供服務類型得知,市場應該是以企業客戶為主。
- Creativity 365與Notion看似為同質性產品。
- 公司獲利來源,APP廣告與雲端服務訂閱。
- 提供的雲端數位創作,競爭應該滿大的,例如office 365、notion。
提問問題
- 公司未來發展方向應該以企業客戶為主要市場?希望再提供哪方面服務(還有哪些痛點),以目前產品點點簽應該已經解決到客戶合約簽署痛點。
- 目前技術團隊組成,APP、前端、後端規模?是否有還有其他職務?,如AI、運維?
- 三位技術經理主要負責領域?
- 公司目前使用的技術有哪些?
- 資深後端工程師職務內容,希望協助解決哪方面問題?
- 一個專案任務,從需求到實作整個過程會是如何進行討論與分配?
- 公司是否有提供創新環境?讓員工能有時間跟環境進行idea發想與創新?
- 目前公司提供的服務,對未來遠景與競爭對手有什麼看法?
- 公司主要獲利來源?
- 針對這次筆試呈現結果,是否有哪些地方需要改進?
面試過程
HR電話面談:
At 2022/11/25
輕切熱忱,主要通知技術面試時間跟內容,並介紹公司文化、背景、產品以及辦公情況。
技術視訊面試(ㄧ面):
At 2022/11/27 14:00
面試內容:
- 自我介紹,並介紹自己的經歷。
- 針對筆試內容做詢問,
- 為何使用目前Django框架?有哪些好處?
- silky工具很有趣,怎麼解讀上面數據?以及上面反應時間好壞如何判定?
- API接口設計想法?
- query custom field設計想法?
- nginx主要用途?
- nginx work connection數量設定想法?為何要設定為1024?
- db connection數量設定想法?
- 部署雲端,除了SSH外,是否有其他更安全的部署方式?
- 有用過Redis?
- 有用過Ruby on Rails?
- 有用過什麼測試框架?
- 有用過什麼CI/CD工具?
- 如果面對有百萬等級用戶,你會使用什麼服務架構?
- 有過與同事發生衝突的經驗嗎?如何排除?
- 解說目前公司團隊規模跟文化。
- 解說公司如何發想一個產品到安排實作過程。
- 解說職務內容,需要哪些技能、會負責哪個產品。
學習與檢討
- 關於參數設定,應該要多了解一下,例如nginx的work connection數量設定,為何要設定為1024?,db connection數量設定想法?
- 需導入測試框架與CI/CD,有成熟產品的公司基本上都會著重在這兩部分,值得學習。
- 大流量處理經驗,這部分比較欠缺。
- 內部對工程師要求,每次交付都需要寫測試單元,這部分對產品品質有一定保障。
- 公司會針對筆試跟面試做出完整回饋,此部分有別於其他公司,對彼此成長很有幫助。
- 這次為第二階段技術面試,如有合格會再安排第三階段面試,再與部門主管面談公司環境、薪資等等。
主管視訊面試(二面):
At 2022/12/08 14:00
提問問題:
- 職務
- 協同合作方式,從想法->規劃->實作->測試->上線->維護整個過程。
- 如何管理技術團隊,有導入一些開發流程(例如Scrum)?
- 如何分配團隊成員的任務與時間?
- 選用Ruby on Rails的原因?有採用其他方案?
- 在導入k8s有遇到哪些問題?
- 測試覆蓋率想法。
- 公司
- 團隊組成?行銷與技術成員佔比?
- 獲利模式,內部產品與外部接案?
- 公司文化理念。
- 老闆願景。
- 矽谷資本投資過程。
- 福利
- 薪資。
- 獎金。
- 配備。
- 工作型態(進公司、遠端)。
- 其他。
面試內容:
come soon~
Keyword
1 | 交付項目, Deliverable, de-live-rable |