年薪三百萬軟體工程師的歷程 第二集 物件導向面試

2021年8月22日 12:54
第一集
第三集
如果看完第一集 成功過了第一輪面試 再來第二輪 除了會有 coding部分以外 開始會有設計題型 而第二集介紹的就是 物件導向設計 object oriented design (OOD) 或是 object orient programming (OOP) 以下有些會用(OOD or OOP)簡稱 以下是我自己的解釋 可能不是那麼好 對於物件導向的定義 我自己會這樣解釋 簡單來說就是可以更好的重複使用一些工具 假設你今天需要鎖螺絲 你可以直接去買個螺絲起子 不需要重頭開始學如何做一個螺絲起子 對於軟體來說是一樣的道理 你可以創建一個class 物件導向可以讓你重複使用 比如我今天建立一個叫做shape 裡面可以算面積 體積 長度 我可以再用shape 去創建不同形狀 像是circle square OOP 基礎學習: 其他程式語言的OOP可能需要另外找 我自己是用java, C++學 以下是一些資源 OOP Basic:
Java OOP Basic:
Java Encapsulation:
幾個練習重點就是 Abstraction 抽象化 Encapsulation 封裝 Inheritance 繼承 Polymorphism 多型 參考網站
這部分練習 我是跟著網站上的練習開始做的 這個網站上給了很多OOP範例 一開始不會的時候也是照著抄 抄完之好去理解為什麼要那樣寫 用上面形狀的例子 去考慮為什麼不同形狀 可以共同用一個算面積程式 如果今天題目是車子 可以共用什麼物件 car - model, type, size, door, passenger 等等 理解這些練習會幫助你了解 接下來下個部分要說的面試準備 一方面也可以幫助你熟悉這個程式語言 ex: String如何輸出,擷取 如何運算使用class內資料 什麼資料要放class內 或是使用global function, method怎麼寫 要帶進去什麼 什麼資料可以用enum綁在一起 面試準備: 我個人覺得幫助我的網站 grokking的我也覺得真的很實用 把仔細步驟寫出來
很適合面試前兩個禮拜開始看 因為通常這會是第二輪 常常混合著上一集的coding interview 我會一天練習2~3題leetcode + 0.5~1題OOP 0.5是因為有些oop一天可能準備不完 要花兩三天去想程式架構以及完成 一些學習一些影片 youtube 上我會直接搜尋 例如:OOP Design car park
有些20~40分鐘不等的影片 影片很長 但是全部看完一遍 因為到時候面試 就是你自己要講那30~40分鐘 自己可以先跟著唸一遍 或是寫一些重點 想自己要如何表達如何code 不會的題目github上找別人做過 自己抄過一遍 再根據幾個範本自己改一個版本 下面我會列一些題目以及例子 通常可以上glassdoor 或是論壇上 找面試你公司以前出過的OOP題目 這樣也可以多做一些類似題目跟連結 本篇結尾會附上一些連結可以參考 面試過程: 我自己覺得最好的方法是 依照grokking的連結做例子 參考這上面的流程
1. 系統需求 在面試官提供完題目之後 開始寫之前一定要把框架需求問清楚 你可以根據題目去想需要的問題 如果是你有準備的題目你可以先把問題先想好 臨陣發揮的話就是想什麼資料會被使用 根據資料來提問 而通常這關面試都是很開放的 如果中間有什麼遺漏的都可以補問 面試過程面試官也會跟你一起合作改程式碼 程式碼的部分也不用擔心 通常這輪面試 會要你做個大概結構 不會把所有應用都寫出來 但是一邊寫要一邊解釋 為什麼要這樣寫 OOP 通常也不會問到資料庫設計 這部分留到下一集系統設計再來說 我個人推薦的話 一開始一定要把大方向問清楚 這也是考驗作為工程師 自己的溝通能力 舉例來說 今天設計停車場 你要詢問: 幾層樓 幾種車 幾個出入口 使用者人數 停車格種類 停車格總數 費用計算 付款種類 付款是否支援外接API 如果有想到更多問題可以繼續問 但記得大概花5~10分鐘討論就好 2. User use case 在前面問完問題之後 這時候可以走一遍基本的流程 有時候可能是一些很基本 類似常識的使用方法 但是就是越基本越需要提出來 例如按電梯 我需要按按鈕 電梯才會到 停車場的話 我需要按取票 才會給我票 有時候就是這個使用過程 會影響到整個設計 這部分就是在說完use case之後 詢問面試官 這個使用方法有沒有問題 如果有的話 面試官也會提出或是補充 記得上面兩個階段的問題跟流程 全部要記錄下來 我這部分是寫在code 註解上 這會幫助你後面設計 3. 結構設計 接著先把大方向寫出來 根據上一個階段的流程 寫出會用到的class 像是停車場 會有 停車格 車 付款機 樓層 出入口 這些是不是都要寫個 class 根據面試官 看有沒有需要畫關係圖 接著再去考慮每個裡面會有什麼參數 需要儲存 4. 細節設計 接著要花時間把class寫出來 有些資料可能會用到enum 或是要寫一些class function 帶入輸出的資料 5. Corner Case討論 通常面試官會在這中途 提出一些變化題 或是一些案例 來判斷你的臨場反應 如果你能在自己寫的時候提出來 有時候會是個加分 拿停車場當例子 面試官可能會問你 如果要你設計付款系統你會如何處理 像這時候可以回答使用第三方api 一方面可以減少 或是會問你 小車停車格滿了怎麼辦 這時候可以考慮用大車停車格 總結: 幾本上過程會是這樣 記得不會的部分不要害怕 直接詢問面試官 這部分是作為工程師很重要的部分 不會要問! 以下是一些題目總結 我如果有看到其他題目可能會再更新下面範本 通常小一點的公司這一輪就會結束了 基本上準備到這邊就可以了 如果是要繼續往上的目標 (Google Amazon Facebook Microsoft ....) 就可以繼續準備系統面試 這部分留著下集討論! 系統面試也是需要最多閱讀準備的部分 希望各位準備以及面試加油! 歡迎提出疑問或是有錯誤需要更改 題目範本: 設計一個停車場
設計一個電梯
設計一個機場
80
留言 4
文章資訊
4 篇文章326 人追蹤
Logo
每天有 177 則貼文
共 4 則留言
物件導向最大的價值就是封裝,不會污染全域變數……多人協作好用。
國立虎尾科技大學
第一個接觸的程式就是物件導向 然後就回不去C了
輔仁大學
已收藏~期待下一集