# KKBOX take home





參考資料:
[RSS Feed 連結](https://feeds.soundcloud.com/users/soundcloud:users:322164009/sounds.rss)
[avplayer](https://developer.apple.com/documentation/avfoundation/avplayer)
## 要做的事 - 預估時間(單位:小時)
* 架構分層 - 5
* 研究 OC - 10...?
* 研究 RSS XML decode - 3
* 研究 AVplayer - 3
* 優化 - ...?
## 需求分析 - 預估時間(單位:小時)
* 抓取解析 RSS內容 - 6
* 刻靜態畫面 (AVPlayerLayer) - 6
* 流程串起來,傳值(假資料 - 3
* 串真的資料 - 6
* 播放語音(AVPlayerLayer) - 3
* 控制進度條播放進度(AVPlayer) - 3
* 點擊按鈕播放上下則語音(AVPlayer) - 4
* 自動播放下則語音,若無則停止播放(AVPlayer) - 4
## 架構
* Modal: 解析RSS,有 struct來decode和包裝
* VC: 刻靜態畫面
* ViewModel: 邏輯
## 問題
* 有用到其他的套件嗎?
* Kingfisher -> 快取圖片,因為有一百多集
* 架構?MVC/MVVM
* MVVM,但也沒被問
* 比較好測
* OC怎麼下手,從頭開始?還是需要寫什麼的時候去找怎麼寫?
* 至少要知道怎麼宣告、型別、return、func
* GitHub上面找答案拼湊
* 先用Swift完成需求,後期再翻譯成OC
* 投影片要做什麼?寫什麼?
* 要如何demo 作品
* 要寫測試?
* 會加很多分
* 沒寫有被問為什麼沒寫
* 易於未來擴充與變動?建議要如何做會比較好?
* 承認沒做好,直接線上refactor
* 在哪個部分的時間會佔比較多?
* 寫OC
* 用Swift寫只花兩天,後面的時間花在OC
* 曾經有哪些坑要注意?
* XML parser只有Swift,改用原生的
* OC先看完基礎的
* kingfisher 快取圖片
* XML parser有原生的方法,去GitHub找
## 注意
* OC的部分:RSS 就好
* OC + Swift 同時運作的時候要調整一下bridge,官方有清楚的教學
## 面試
* 先簡報作業,丹丹會code review 直接refactor、Dino也是
* 先講想法,有想法的話就會請你直接打
* 幾乎都是口頭
* 問 ==為什麼會這樣寫==
* 資深PM問一些產品想法
* 問處理衝突的經驗
* 問工作流程
* 去年WWDC的內容有什麼可以應用到公司產品上
* 程式上要怎麼寫
## Unit Test
- 
- 
- Priority
- RssParser
- `parseFeed` method: 知道這個url可不可以使用,並能不能用 xml decode
- 中間 `delegate` method: 是否可以讀取到的各個 rssItem tag
- HomeViewModel - `RssParserDelegate`
- `successParsedResult` method: 確認model是否有傳遞資料過來
- EpisodeViewModel/HomeViewController - `init` method/`UITableViewDelegate` -`didSelectRowAt`
- 確認EpisodeViewModel中的 podcast/episode details是否和使用者選擇的集數內容是否正確
- EpisodeViewController
- `loadDetails`: 是否有把data放入元件的參數裡面
- EpisodeViewController/PlayerViewController - `tapPlay` @objc method/ `init` method
- 確認是否不為nil的viewModel(含podcast/episode details),有用正確的 init method建構出包含playerVM的 playerVC instance