# 資訊科技產業專案設計HW2 ## 作業二 [HW2影片連結](https://youtu.be/gvfO49SKrv0) > :man_in_tuxedo: : interviewer > :rabbit: : interviewee ### 模擬面試過程 ## [104. Maximum Depth of Binary Tree](https://leetcode.com/problems/maximum-depth-of-binary-tree/description/) :man_in_tuxedo: :你好,公司請我來了解你的情況,並協助你更認識公司,假設你現在是我們公司技術團隊的一員,負責優化使用者的搜尋體驗,我們平台上的住宿按照選項、地理位置分類,你可以想像有一個巨大的地圖,當使用者放大一個特定區域時,他們可以看到更小的區域,這些小區域又可以進一步的放大來顯示更小的區域,一直這樣類推下去。現在為了更好的服務我們的使用者,我想要你根據他們再查看區域的深度,來優化推薦的住宿選項。假設他們在研究一個具體的小區域,可以優先推薦這個區域的住宿,如果他們只是在瀏覽大區域,可以推薦大區域內幾個最受歡迎的住宿選項。你要完成的工作是,設計一個演算法或函式,給定使用者正在查看的區域,這個函式要可以返回這個區域裡我們地理分類系統的深度。 :rabbit: : 開始寫程式之前我想簡介一下我的軟體開發經驗,我主要是以前端為主,主要負責網頁設計跟架構網站,專案的部分我有做異常值檢測的雲端運算服務,是前端跟後端的結合,前端寫一個pivottable檢測異常值,並做ANOVA分析,再連接後端的資料庫,構成一個雲端運算系統。 :man_in_tuxedo: : 好,那我大致了解你的情況了,沒有需要補充的話可以回答剛剛那個情境的可能解決方案了。 :rabbit: : 好,那我想確認我有沒有理解錯這個題目。解設我有一個二元數,它的根結點是3,左子節點是9,右子節點是20,20也有左子節點13,右子節點15。我要回傳這個二元樹的最大深度是多少。 :man_in_tuxedo: : 對,你的理解是對的,請繼續你的解釋。 :rabbit: : 如果我的理解沒有錯的話,我想可用遞迴來解決這個問題。詳細方法是找到一個node,得到這個node的left child和right child的最大深度,並取得這兩個數值中的最大值+1,就會是這個node的maximum depth。 以上面的例子來說,要得到20這個node的maximum depth,就是取13跟15的maxamum depth的最大值,也就是1,再加上1得到2,就是20這個node的maximum depth。 再透過遞迴就可以歷遍整個Binary Tree,就可以得到這個Binary Tree的maximum depth了。 :man_in_tuxedo: : 對,你的理解是對的,但你用遞迴的話會遇到一個問題,就是你要判斷這個節點是否為空。那如果你想好要怎麼寫code的話,可以開始寫你的code了。 :rabbit: : ```C++= int maxDepth(TreeNode* root){ if(!root) return 0; int maxLeft = maxDepth(root->left); int maxRight = maxDepth(root->right); return max(maxLeft, maxRight) + 1; } ``` :man_in_tuxedo: : 好,這程式沒什麼問題,那我想問你一下這個程式的時間跟空間複雜度是多少? :rabbit: : 時間複雜度是它所有節點的個數,因為它要歷遍整個binary tree,空間複雜度的部分,因為它是recursive stack,所以是level的個數。 :man_in_tuxedo: : 那我們今天的面試就到這邊,感謝你的時間。 ## 他評-01 ### interviewer - 優點 - [0:08](https://youtu.be/gvfO49SKrv0?si=7y07kT50rGsnCZxd&t=8) 題目包裝得很新穎。 - 可改進的地方 - [0:43](https://youtu.be/gvfO49SKrv0?si=tK5M4iVsVL9XHX3N&t=43) 優先推薦的部分的說明較多餘,與作答無關,有點冗長。 - [3:52](https://youtu.be/gvfO49SKrv0?si=O7-XF_bO1x6rzNjS&t=232) 實作後如果 interviewee 忽略空節點判斷再提醒即可。 - [6:21](https://youtu.be/gvfO49SKrv0?si=ZtLBVJfIhXlMlwg8&t=381) 可再針對作法引導優化。 ### interviewee - 可改進的地方 - [1:15](https://youtu.be/gvfO49SKrv0?si=xRt8RvJiiSajZ3wj&t=75) interviewer 問完問題之後,突然說明自己的開發經驗很突兀。應針對問題做回答,或者將自己過去的開發經驗連結到題目上,如:相關的開發經驗、作法為何、如何應用在此問題上等。 - [2:05](https://youtu.be/gvfO49SKrv0?si=shL0ijdEFKpcbbRd&t=125) 並未提及題目是如何連結到二元樹,進展過快。應針對題目敘述做討論,並與 interviewee 確認,如:"分類系統應包含xx結構,因此將它視為一個二元樹"、"若為二元樹的形式,則分類系統的深度即為二元樹的深度"。 - [6:11](https://youtu.be/gvfO49SKrv0?si=K_f3_f9ZSH1zkPJl&t=371) 可針對節點個數、深度、worst case 等狀況進行更多討論。 ## 簡介對其他同學的檢討狀況(總述) > 檢討同學: 鮪魚 竹間 喬喬 蔡中文 柯基 ## interviewer ### 優點 * [0:01](https://youtu.be/ZChpF6fim00) 這位同學的開場讓整個面試的環境很舒服,不會讓人覺得這個面試是面試官在施展官威的地方。 * 大多數同學都能對interviewee的情況給予適時的回應 ### 缺點 * 大多數人都沒有將題目包裝,而是直接用leetcode的原題進行問答。 * 有些人會有口齒不清的情況,導致題意傳達不清。 ## interviewee ### 優點 * 大多數人都能cover到REACTO的步驟。 * 有記得舉例子解釋題目。 * 和interviewer多溝通交換想法。 ### 缺點 * 在邊打程式邊解釋的時候會有空白期,會讓interviewer感到乏味。 * 會有過多冗詞贅字的情況。 例如:然後... 恩... 厄.... * 一開始忘記解釋題目確認想法及舉例子 * 打字太慢 ## 從中學習到什麼 透過看到其他同學的面試過程,學到了其他人所具備但我所不具備的能力,像是interviewee可以提出更好的程式撰寫方式來提升效率,interviewer可以更好的和interviewee溝通,並在講述題目的時候能適度的包裝題目來減少讓interviwee直接看出是經典題而直接被答案來應付interviewer的情況。但我也能辨識出自己的優點,像是口條,溝通節奏以及REACTO步驟的執行完整度等等。 # 第 4 次作業-他評簡介 >### 第一位檢討同學: >[月前龍馬-lonmu](https://hackmd.io/@sysprog/B1gGqmzE6) >[video](https://www.youtube.com/watch?v=Ire86ptjVtI) > ### 針對interviewer的檢討 * [0:04](https://youtu.be/Ire86ptjVtI?t=4): 避免講「我有個問題想請你解一下」,可以改成說「首先我們考慮 ___ 的情境」,因為面試的關鍵是溝通,題目只是媒介。 * [0:10](https://youtu.be/Ire86ptjVtI?t=10): 有適度的包裝題目,來避免interviewee直接背題目答案的情形發生。 * [3:35](https://youtu.be/Ire86ptjVtI?t=215): 這邊說「實踐你的想法」,蠻不錯的,因為通常大家都會說「請你開始寫程式碼」,這種說法會讓interviewee感到比較舒服。 * [10:12](https://youtu.be/Ire86ptjVtI?t=612): 說話有點結巴,且最後再說完時間複雜度時,後面有一個類似"呃"的怪聲,可能會讓interviewee沒辦法適度的了解題目,可以盡量避免這種沒有發音好的情況在問問題時發生。 * [11:18](https://youtu.be/Ire86ptjVtI?t=678):說:「需要合併的資料不是只有兩個客戶的話,是多個客戶要一起合併成一個linked list的話。」 * 這邊的"不是"的"不"講得很小聲,容易讓interviewee以為是要合併兩個客戶。在第一句結束時可以省略說"的話",在第一句和第二句中間也可以加上 "而是",來讓題目更容易被intervewee聽懂。 ### 針對interviewee的檢討 * [0:28](https://youtu.be/Ire86ptjVtI?t=28): 有適度的和interviewer溝通,做到repeat & example的步驟,而不是劈頭就直接開始打程式,在確認題意的同時又有跟interviewer互動到,可以讓interviewer留下好印象,讓Interviewer覺得之後和你一起工作是可以和你順利溝通的。 * [5:19](https://youtu.be/Ire86ptjVtI?t=319): 有新增註解,可以幫助自己和interviewer更了解程式撰寫的邏輯,之後再檢查時也可以較快的判斷程式的正確性。 * [7:20](https://youtu.be/Ire86ptjVtI?t=440): 這邊說「我想確認一下我的程式碼有沒有問題」,之後便空出了快30秒的空白時間,這段時間可以再稍微複述一下程式,避免讓interviewer不知道在這段時間不知道要做什麼事。 * [7:52](https://youtu.be/Ire86ptjVtI?t=474): 有確實做到蠻多人都沒有做到的Test的步驟,來驗證程式碼的可執行性,是一個不錯的示範。 * [10:27](https://youtu.be/Ire86ptjVtI?t=616): 這裡頻繁的移動滑鼠以及反白文字,這樣畫面會看起來很雜,也會讓interviewer看的眼花撩亂,盡量避免做出這種不必要的多於動作,來讓interviewer可以專注於interviewe想要表達的內容上。 >### 第二位檢討同學: >[埃默里 Emery](https://hackmd.io/@sysprog/H1snrzfEp#interviewee1) >[video](https://www.youtube.com/watch?v=Ukefw7g95XY) ### 針對interviewer的檢討 * [0:07](https://youtu.be/Ukefw7g95XY?t=7): 開場方式舒服,用 "問題" 取代 "題目",用"討論" 取代 "考" ,這些用詞選擇會讓interviewer跟interviewee在這場面試中,更像是同事在討論公司正在面對的問題,並提出可行的解決方案,比較不像是一種上對下的關係,這樣會讓interviewee在整體的面試體驗上更為良好。 * [0:15](https://youtu.be/Ukefw7g95XY?t=15): 有用包裝的方式來陳述題目,但在google document上卻放了原題的題目,這樣就失去了包裝題目不讓interviewee背答案的用意,google document在一開始還是保持乾淨就好。 * [0:26](https://youtu.be/Ukefw7g95XY?t=26): linked list的發音不太正確,在影片中聽起來像linking list,與實際的發音有出入,可以改善發音方式。 * [7:00](https://youtu.be/Ukefw7g95XY?t=420): 沒有跟interviewee說他剛剛的做法是否為正確,應該要先說他的想法是對的再請他開始實作程式碼。 * [11:17](https://youtu.be/Ukefw7g95XY?t=676):不知道是不是剪輯問題,在interveiwee結束講解後,interviewer應該講話來結束整個面試,講諸如:感謝你今天的時間等等的話語做收尾,但影片中卻沒有出現此段落。 ### 針對interviewee的檢討 * [0:33](https://youtu.be/Ukefw7g95XY?t=33): 有和interviewer確認題目以達到在面試中強調的 "溝通" 效果。 * [1:48](https://youtu.be/Ukefw7g95XY?t=108): 開始寫程式後語速跟打字速度稍慢,如果沒辦法講得很快的話,可以加快打字速度。 * [5:18](https://youtu.be/Ukefw7g95XY?t=318): 有實際測試來驗證這個程式碼的邏輯是否錯誤,這是大多數面試的人容易忽略的過程。 * [10:48](https://youtu.be/Ukefw7g95XY?t=648): 這邊可以等到interviewer題問再講解效率跟空間複雜度,突然開始講解會有點突兀,也減少了跟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