# KKBOX take home ![](https://i.imgur.com/u8YSPZe.png) ![](https://i.imgur.com/bYEqEfC.png) ![](https://i.imgur.com/Ribn9hV.png) ![](https://i.imgur.com/RRpbWnM.png) ![](https://i.imgur.com/wsPSFnl.png) 參考資料: [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 - ![](https://i.imgur.com/udZCSxX.png) - ![](https://i.imgur.com/40xyBep.png) - 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