--- title: 2021 年資訊科技產業專案設計課程面試範例 tags: INFO2021 --- # 2021 年「[資訊科技產業專案設計](https://hackmd.io/@sysprog/info2021)」面試範例 > 貢獻者: 布惠寫, koala > ==[video](https://youtu.be/q8anYL7F1Fc)== ## 題目挑選 光從題目挑選就碰到了不少問題,原則上要挑選的題目都要做過一遍 而且最好能夠有改進方法,否則錄製起來影片會只有簡單的一個段落. 不過最後來是選了自己有做過但是沒有更近一步改進的題目(之後再做改進) 目前挑選以下三題 * [268. Missing Number](https://leetcode.com/problems/missing-number/) * [104. Maximum Depth of Binary Tree](https://leetcode.com/problems/maximum-depth-of-binary-tree/) * [39. Combination Sum](https://leetcode.com/problems/combination-sum/) ## 檢討 ### 當面試官的問題 1. 對於能掌握的題目太少所以無法提出很好的問題 2. 因為如果面試者答不出來就沒辦法錄製,所以也沒辦法問太深入的問題 ### 面試者的問題 #### 準備期 1. 題目寫的太少 -> 能夠錄影的題型很少 -> 面試時能夠處理的題目也不夠 2. 錄影寫程式碼,如果寫的很慢會變得很難錄製,其實也可以說如果寫的很慢會導致面試不順暢,所以要在錄製前花很多時間去練習. 3. 如果用 recursive 的方式解決,也有可能會被問 loop 的解法 (ex: Tree) * 用 stack 去紀錄 recursive 的經過 #### 面試過程 1. 太急著去寫程式碼,應該要跟考官確認方案,並且指出時間還有空間複雜度 2. 寫一寫會忘記看是否有 syntax error 3. 英文的部分很常用 We,但是要改成 I 會比較好。因為是自己在解題 4. 需考慮完全寫不出來的時候 #### 面試後感想 一個 interview 剪完大概有 16 分鐘,包含額外問題的部分. 但是真實面試解題時間可能會更長,所以一個面試可能會被問個 2 ~ 3 個額外題目. ## 268. Missing Number :face_with_cowboy_hat: : 解釋題目 :disappointed_relieved: : 舉例確認是否有誤 :face_with_cowboy_hat: : 確認舉例無誤 :disappointed_relieved: : 解釋解法 :face_with_cowboy_hat: : 提出 sort 問題 : 因為 1. 這邊無法使用 python default 的 lib 重新寫一份時間會太長,是否有辦法有快速寫一個複雜度相等的 sort ? 這題目其實是有不用 sort 的解法的 :disappointed_relieved: : 提出解法 -> 帶入例子驗證 :face_with_cowboy_hat: : 確認解法可行 :disappointed_relieved: : 實際實作 :face_with_cowboy_hat: : 提出延伸題目 single number :disappointed_relieved: : 提出是否會有沒有 sigle one 的狀況 ? :face_with_cowboy_hat: : 既然題目都有說會有一個數字是 single num, 先不考慮這樣的情形 :disappointed_relieved: : 提出 xor 解 :face_with_cowboy_hat: : 聽起來可行,可否嘗試撰寫程式碼 :disappointed_relieved: : 撰寫程式並且驗證 :face_with_cowboy_hat: : 目前看起來沒有太大的問題,那時間也差不多了感謝參加這次的面試,我們會另行通知結果 ## 104. Maximum Depth of Binary Tree :face_with_cowboy_hat: : 解釋題目 :disappointed_relieved: : 解釋解法 :face_with_cowboy_hat: : 確認解法是否有誤 :disappointed_relieved: : 撰寫程式 :face_with_cowboy_hat: : 提出問題 -> 如果改搜尋 mimum depth 呢 ? :disappointed_relieved: : 提出解法 :face_with_cowboy_hat: : 確認解法是否有誤 :disappointed_relieved: : 解釋問題並改進 -> 帶入例子驗證 :face_with_cowboy_hat: : 有沒有辦法讓他更快呢 ? :disappointed_relieved: : 因為是 min 和 binary 的關係,不用執行整棵樹就可以知道結果,當跑完左子樹時就可以得到一個高度,然後當跑右子樹發現高到大於左子樹,就可以直接 return 答案 :face_with_cowboy_hat: : 聽起來可行,可以改進程式碼或驗證呢 ? :disappointed_relieved: : 改進程式碼或者驗證細節 :face_with_cowboy_hat: : 目前看起來沒有太大的問題,那時間也差不多了感謝參加這次的面試,我們會另行通知結果 ### 第三週影片重點 1. 延伸題可以考慮選 medium 的題目來增加難度 2. 練習時可以思考 leetcode 上面的限制,然後在面試時問出來,如果 interviewer 沒有表示細節 * 因為補習班的關係,interviewer 沒辦法直接照唸題目,否則補習班訓練的 interviewee 會馬上想到解法 3. 可以評估 REACTO 每個步驟的時間 (reac 在 8 分鐘內解決),看看是否有辦法最佳化 4. 怎麼短時間去驗證程式 5. 有可能會碰到眼睛有問題的 interviewer, 可以用聽看看影片是否能夠聽得懂解說 6. 再延伸題的時候只需要把 approach 說出來就可以,避免花太長的時間 7. 關鍵在互動!互動!互動! ## 第三次作業 - 他評 ### 總體回饋 Interviewer 給的意見太少,基本上是 Interviewee 的個人秀 ### Interviewer 缺點 - [0:48](https://youtu.be/q8anYL7F1Fc?t=48) 解說題目時的肢體動作沒辦法幫助理解,可以改為在分享螢幕上的 Google Docs 打字搭配解說 - [14:53](https://youtu.be/q8anYL7F1Fc?t=893) Interviewer 應該阻止 Interviewee 撰寫程式,因為這題實作面並不難且前一題已經實際寫過程式,可以直接延伸題目若輸入每個值出現 3 次該怎麼解? ### Interviewee 優點 - [2:15](https://youtu.be/q8anYL7F1Fc?t=135) 有考慮到 boundary case 缺點 - [4:19](https://youtu.be/q8anYL7F1Fc?t=259) 可以對 Timsort 多做點解釋 - [21:57](https://youtu.be/q8anYL7F1Fc?t=1317) 避免同樣的符號混用,Space complexity 可以直接寫為 $O(\log n)$ ## 第三次作業-他評2 ### Interviewer 缺點 - 一開始在講解題目的時候,可以搭配文件說明,或是透過與Interviewee問答的過程來帶入題目,如果一直空講,傳遞的效果不彰 - 有些時候都是Interviewee自己在唱獨角戲(有可能受限於一人分飾兩角剪輯上的成本),可以試著給予回饋,或是多製造互動來更了解對方 ### Interviewee 優點 - 說明題目的舉例很清楚,也有考慮額外情況 缺點 - [5:55](https://youtu.be/q8anYL7F1Fc?t=355)解釋方法時,建議可以先概述此方法的精神或大方向是什麼,再進入舉例的環節 ## 第三次作業 interviewer ### 優點 1. 互動友善XD ### 改進 1. [4:37](https://youtu.be/q8anYL7F1Fc?t=277) 當覺得 interviewee 使用的方式不適合的時候,應該在其說明的初期就打斷並進行討論。 2. [8:12](https://youtu.be/q8anYL7F1Fc?t=492) "如果你覺得OK", interviewee 可能會覺得困惑,這樣到底是可以還是不可以呢? 3. [13:09](https://youtu.be/q8anYL7F1Fc?t=789) "先不要考慮這種情況好了" -> "我們不考慮這種情形" 4. [17:18](https://youtu.be/q8anYL7F1Fc?t=1038) 結束之前沒有討論到程式碼 5. [28:37](https://youtu.be/q8anYL7F1Fc?t=1717) 應在 interviewee 實作 pseuedocode 之前多討論,避免沒有給任何回饋直接進入延伸題,且延伸題應留到實作完成後討論 interviewee ### 優點 1. 寫出 pseuedocode 2. 有回去檢查語法錯誤,也有重新 trace 一次程式碼 ### 改進 1. [1:22](https://youtu.be/q8anYL7F1Fc?t=82) 先確認題目意思,不急著開始舉例。 2. pseuedocode 可以直接寫出初步程式碼,不用用 `LOOP` 等方式表示 3. [4:37](https://youtu.be/q8anYL7F1Fc?t=277) $O(nlogn)$ 可不用寫出來,口語討論較省時間,且時空複雜度一般來說留至演算法實作完畢後討論。 4. [13:13](https://youtu.be/q8anYL7F1Fc?t=793) 突然多出一段程式碼,可能是剪輯問題,但是直接跳到 XOR 會讓人覺得是用背答案的 5. 可以把自動大寫關掉,避免一直來回修正 ## 第三次作業-他評 4 ## [布惠寫, koala](https://hackmd.io/@sysprog/B161haQIK) ### Interviewer #### 優點 * 提問時有用一些例子協助理解。 #### 可改進的地方 * Interviewee 在 coding 時可以多參與討論。 * [5:05](https://youtu.be/q8anYL7F1Fc?t=305) 應具體說明不適合、不恰當使用內建 sort 的原因,多利用討論。 * [8:08](https://youtu.be/q8anYL7F1Fc?t=488) 避免說這個解法聽起來是可以的,可以和他討論實作上的細節,引導他開始 coding。 * [12:09](https://youtu.be/q8anYL7F1Fc?t=729) 避免使用「非空集合」的 array 這種用法,空集合在數學和邏輯上有它的意義,可以使用非空 array。 ### Interviewee #### 優點 * 用文字編輯器打字協助對方理解相當熟練。 * 了解自己使用的語言的特性、內建函式結構。 #### 可改進的地方 * [28:35](https://youtu.be/q8anYL7F1Fc?t=1715) 詢問 interviewer 這樣的解法你覺得如何是多餘的。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up