--- title: 2021 年資訊科技產業專案設計課程面試範例 tags: INFO2021 --- # 2021 年「[資訊科技產業專案設計](https://hackmd.io/@sysprog/info2021)」面試範例 > 貢獻者: 杜紫騰/Belly > ==[video](https://youtu.be/ljEsHsIW5CI)== # 課程第 1 次作業心得筆記 > 2021 年「資訊科技產業專案設計」 > 課程暱稱:杜紫騰/Belly ## LeetCode 9 - Palindrome Number 此題一開始其實便想到的轉換成字串,然後用兩個 cursor 分別指向字串的頭尾。時間複雜度當然只有 `O(n)`,兩端 traverse 到中間就結束了。 可以改進的部分是可以想想「不轉換成字串」,單單用 Number 來處理的話要怎麼做(這也是 LeetCode 上的補充,叫我們試試看)。 ### 單用數字解的思路 目前尚未實做,但一開始的想法是對數字作取得頭尾的運算。 取得尾部相對簡單,取 10 的餘數即可;取頭的話,還待思考。 ## LeetCode 58 - Length of Last Word 這題還算是蠻快就做出來了,關於字串的操作我還相對熟悉。 可以增進的部分大概是語言的熟悉程度吧,剛開始有嘗試用 trim function 看看能否直接把多餘 space 給抹去,但是 string 的 function 還不算非常熟悉,並沒有以 JavaScript 原生 function 的方法解掉此題。 ## LeetCode 77 - Combinations 這一題花了相當久的時間,最後解出來的方法感覺起來沒有到很漂亮,甚至到最後是「試」出來的。 自己總結一下花了很久時間的原因大概是 1. 對排列組合的原理已經太久沒碰了,可以推算出「排列」的公式,但「組合」的公式臨時推不出來,還得去翻文章 2. 對於遞迴及用樹的結構描述,也太久沒碰顯的陌生 反省一下,對於基本的資料結構和演算法,熟悉程度還是不太夠。 ## 影片製作 影片的錄製及剪接對我來說都算是蠻新鮮的,也因此花了一些時間研究在 Mac 上如何做到。 這次用的是 QuickTime Player 做螢幕錄影及一般錄影,加上 iMovie 剪接。 其實兩個工具都沒有到很方便,一來是剛開始碰不太熟悉,二來是稍微熟悉後發現蠻多應該有的功能卻沒有的感覺,例如更有效的將影片分段分類等等。 所以只能用比較陽春的方式剪接,也沒有加上太多過場效果。 ## 心得 這次以旁聽的身份來重新學習,雖說已經出社會一段時間,但仍感以前曾經學過的東西已經不少還給老師了😂,所以打算重新挑戰一下自己。 第一份作業就真是相當的硬!一次要寫三題、拍六份影片,但也因此碰了一些新東西,複習了很久沒做的 LeetCode,其實還是相當有趣的(吧?) # 第三次作業-他評1 ## Interviewer 優點 1. 時間控制良好,和一開始設定的 40 分鐘接近 2. 和 interviewee 互動的設計不錯,當 interviewee 直接開始寫程式時會制止他,請他說明策略等等 3. 承 2,有對第一版本的實做提出延伸的問題 4. 因為第三題的範例過長,所以有選擇使用貼上的方式加速面試的流程 缺點 1. 面試官在 4:29 問了基本的 regExp,這可能是基本語法,面試官應該會看得懂 2. 相較第三題,前兩題雖然題目短,但是不用貼上的方式來說明題目還是花了一些額外的時間 3. 34:22 也問了語法的問題,面試官應該要改成問『為什麼這裡用 pass by reference』 ## Interviewee 優點 1. 在 google doc. 有良好的排版,看起來很清楚 2. 因為使用 java script 撰寫,對內建函數有良好的理解,能夠解釋其功能和分析複雜度 3. 16:44 善用自己設計的 example 來引導自己實做 4. 19:10 開始的 testing 很清楚 (step by step 的走過實做的演算法) 和流暢 5. 第三題的 example 非常清楚/流暢,包含 tree 的視覺化,改變參數來解釋不同情境等 缺點 1. 在第一題聽完題目後沒有進行 Repeat、Example 和稍微解釋自己實做的策略,而是直接開始寫程式 (但似乎是刻意安排給 interviewer 糾正) # 第三次作業-他評2 ## Interviewer ## Interviewee 1. [34:16](https://youtu.be/ljEsHsIW5CI?t=2056) 嚴格說起來[這不能叫 pass-by-reference](https://stackoverflow.com/questions/518000/is-javascript-a-pass-by-reference-or-pass-by-value-language) 1. [35:08](https://youtu.be/ljEsHsIW5CI?t=2108) 時間複雜度有誤。雖然有提到跑了幾個節點,卻只有算最下層的。測試的方式可以代`n=4, k=4`,並在內部函數每次被呼叫的時候`console.log`。另外也未考量到[以 (...)複製陣列時有線性時間複雜度](https://stackoverflow.com/questions/57032373/whats-the-time-complexity-of-javascript-spread-syntax-in-arrays)。正解應為 $O\left(k\binom nk + \sum_{0 \le i \le k-1} \binom{n}{i}\right)$。 # 第三次作業-他評3 ## 總體回饋 Interviewee 整體表現佳節奏掌握得宜,需要注意改掉不精確的詞彙,例如:"還ok", ## Interviewer 優點 - [2:38](https://youtu.be/ljEsHsIW5CI?t=158) 有適時打斷 Interviewee 缺點 - 這三個問題都是基本題,只能考出 Interviewee 當場撰寫程式碼能力,缺乏進階(變形)題測驗 Interviewee 的延伸思考能力與資料結構熟練度 ## Interviewee 優點 - 面試開始前有先確認進行方式(程式執行、程式語言),可以再詢問字體大小是否適合 - 撰寫程式同時給予回應,解題節奏掌控得宜 缺點 - [18:15](https://youtu.be/ljEsHsIW5CI?t=1135) 測試案例說明有誤,並不會判斷到 `l == r` 的位置,算小錯誤不影響整體程式邏輯 # 第三次作業-他評4 ## 總體 - 雙方都把面試時間控制在宣言的 40 分鐘內。 ## Interviewer - [2:38](https://youtu.be/ljEsHsIW5CI?t=158) Interviewer 有適時打斷 Interviewee 不要急著寫程式碼,很好。 - [4:20](https://youtu.be/ljEsHsIW5CI?t=260) Interviewer 有詢問 JavaScript 的 regular expression 裡面反斜線的意義,我覺得相當不錯,可以確認 Interviewee 對於 JavaScript 的熟悉度。 - [34:12](https://youtu.be/ljEsHsIW5CI?t=2052) Interviewer 有詢問 JavaScript 的 spread syntax 來考驗 Interviewee 的能力,相當用心。 ## Interviewee - [7:57](https://youtu.be/ljEsHsIW5CI?t=477) 「performance 還 OK」這個說法很不精確,要改正。 - [12:39](https://youtu.be/ljEsHsIW5CI?t=759) 有跟面試官確認輸入資料型態並舉例,相當好。 - [14:12](https://youtu.be/ljEsHsIW5CI?t=849) 有跟面試官講解思路並輸出至 google doc,請繼續保持。 - [20:35](https://youtu.be/ljEsHsIW5CI?t=1235) 有跟面試官講解可能的做法,讓面試官留下好印象。 - [23:03](https://youtu.be/ljEsHsIW5CI?t=1383) 快速打出自己的想法,有夠棒。 # 第三次作業-他評5 ## 總體 - 雙方互動優良 ## Interviewer - 如果以老師上課講解為例,interviewer 可以再多跟 interviewee 互動,例如詢問題目可以怎麼變化,或是應用情境 - [18:28](https://youtu.be/ljEsHsIW5CI?t=1108) 題目還算好理解且 interviewee 陳述足夠清楚,可以打斷講解範例 ## Interviewee - [20:12](https://youtu.be/ljEsHsIW5CI?t=1214) 在不能使用字串的限制下,可以討論數值範圍 - [24:01](https://youtu.be/ljEsHsIW5CI?t=1441) 樹畫的滿好的 # 第三次作業-他評 6 ## 總體 清楚的講解出題目與例子,或許能夠再額外準備一些延伸題或者從原本的題目做變化,像是第三題有點讓 interviwee 太順利的作答,不過整體表現穩定口條也清楚 ## Interviewer - **LeetCode 58 - Length of Last Word** - 優點: [4:21](https://www.youtube.com/watch?v=ljEsHsIW5CI&t=4m21s) 沒有在一開始限制不能用套件,讓 interviewee 先自由發揮並且再針對使用到的 `regexp` 去延伸詢問 - 建議的點: [9:35](https://www.youtube.com/watch?v=ljEsHsIW5CI&t=9m35s) 個人覺得「實務上」這個詞不太精準,實務上聽起來像是要舉一個這題真實用在生活中的例子。這邊 interviwer 想要知道是否有更快的方法,或許直接問 interviewee 就可以囉 - **LeetCode 9 - Palindrome Number** - 優點: [4:21](https://www.youtube.com/watch?v=ljEsHsIW5CI&t=4m21s) 沒有在一開始限制不能用套件,讓 interviewee 先自由發揮並且再針對使用到的 `regexp` 去延伸詢問 - **LeetCode 77 - Combinations** - 建議的點: 如果想要延伸面試的長度的話,或許可以考慮先從一個固定 k 值開始討論,譬如說只要 2 個的話可以有什麼解法?因為 interviwee 有可能一開始沒辦法直接想到用 DFS 的方法(本人就是XD) ## Interviewee - **LeetCode 58 - Length of Last Word** - 優點: [10:32](https://www.youtube.com/watch?v=ljEsHsIW5CI&t=10m32s) 這邊這個 pointer 的例子講解清楚,用 google doc 在表示上也很流暢 - **LeetCode 9 - Palindrome Number** - 優點: [18:08](https://www.youtube.com/watch?v=ljEsHsIW5CI&t=18m08s) 使用例子搭配寫出來的 code 講解的很清楚 - 建議的點: [18:58](https://www.youtube.com/watch?v=ljEsHsIW5CI&t=18m58s) 這邊的例子講錯了(?) 因為是 `l < r` 所以不會比較到 `3 等於 3` 之後的點。這應該也是此題的一個考點,就是如果字串是奇數長度的話,不需要比較到最中間的數值,因為那個值只有自己本身,而如果是偶數長度也沒有最中間的值,所以上述兩個 case 都可以用 `l < r` 的方式恰好比完該比較的字元。 - **LeetCode 77 - Combinations** - 優點: [22:56](https://www.youtube.com/watch?v=ljEsHsIW5CI&t=22m56s) 同其他評論,樹真的畫得不錯XD在講解 code 與例子時相當清楚 - 建議的點: [34:20](https://www.youtube.com/watch?v=ljEsHsIW5CI&t=34m20s) 自己也是看了 [pass by ref or value](https://stackoverflow.com/questions/518000/is-javascript-a-pass-by-reference-or-pass-by-value-language) 才知道原來 js 只有 pass by value,只是在 object 裡頭的 member 的 value 是 reference,所以這邊講 pass by ref 似乎不恰當 # 第三次作業-他評 6 ## 總體 * 雙方互動良好 * interviewee邊coding邊講解時候有給例子 ## Interviewer * [2:26](https://youtu.be/ljEsHsIW5CI?t=146) 有製造interviewer打斷interviewee直接寫code的情境,Great * [9:32](https://youtu.be/ljEsHsIW5CI?t=572) 應針對"實務上"在解釋,不然interviewee會聽不懂 * [13:00](https://youtu.be/ljEsHsIW5CI?t=780) 不知道是不是個人問題,這裡interviewer直白的反問會讓interviewee有點不舒服 * [18:56](https://youtu.be/ljEsHsIW5CI?t=1136) 當l與r相等時應直接跳出迴圈,interviewer應直接打斷詢問 ## Interviewee * [00:28](https://youtu.be/ljEsHsIW5CI?t=28) 有測試interviewer是否看的見,Great * [7:56](https://youtu.be/ljEsHsIW5CI?t=476) 分析完後只要講結果就好,自己覺得OK不代表這題這樣的performence就是OK的 * [19:52](https://youtu.be/ljEsHsIW5CI?t=1192) 改進應該不是在問code寫的美不美,或是有沒有註解 * [20:47](https://youtu.be/ljEsHsIW5CI?t=1247) 要舉例反轉數字的話應舉能凸顯反轉效果的例子 如:12345