---
# System prepended metadata

title: 2023 年「資訊科技產業專案設計」作業 2

---

# 2023 年「資訊科技產業專案設計」作業 2
# 作業2 - 檢討
## 沙西米 Sashimi
> https://hackmd.io/@sysprog/S1hhirak6

**interviewer**
優點
- 與面試者有很多互動，對於程式碼的改進有給予方向，而非直接說出有更佳的解法。
- 咬字清晰

可改進處
- 建議結尾加上感謝面試者參加之類的話，讓面試有結束的感
- (英) Merge Two List 應該是常見的題目，建議可以增加一些題目變形，例如改成 Merge K List；或是討論是否有優化的可能性。

**interviewee**
優點
- 一邊寫一邊講解。 
- 清楚確認題意與邊界條件，確認雙方理解沒有落差。

可改進處
- [2:27](https://youtu.be/3IrwM1HSLoI?si=Nu18Q2xsbKHBrYUZ&t=147)、[(英)2:24](https://youtu.be/ohBt69LbsrY?si=QFbWTlGGv-8IyI1l&t=144) 停頓有一點久，建議可以解釋目前在寫的程式。

## 胡迪 Woody
> https://hackmd.io/@sysprog/BkZaJUTkT

**Interviewer**
優點
- 使用手勢輔助說明
- 語調輕快，面試氣氛良好
- 75. Sort Colors 最後有對題目進行延伸討論

可改進處


**Inerviewee**
優點
- 使用手勢輔助說明
- 一邊寫一邊解釋程式碼

可改進處
- [1:20](https://youtu.be/cJuaoweDGh0?si=4FzC3YKloUTu22Fa&t=80)、[4:33](https://youtu.be/cJuaoweDGh0?si=zsiFGDBv3aT1wMyO&t=273) 建議將舉的例子打在螢幕上，方便雙方理解。
- 建議變數 `pass` 可以考慮命名為 `remaintime`，因為在後面頻繁提到 Pass 單字，會有混淆的疑慮。
- 根據 REACTO 步驟，建議最後可以簡短的對程式碼進行測試。

## 蕭卡辰 James
> https://hackmd.io/@sysprog/H1lC18T1p#1920-Build-Array-from-Permutation

**Interviewer**
優點
- 有先確認雙方是否都有聽到聲音 
- 沒有出現上對下的名詞，整個面試氣氛良好。

可改進處
- 建議可以針對程式碼做進一步的討論，例如：
    - [2:44](https://youtu.be/tzNY52QwA2I?si=FGdlJjS_HH1H--EC&t=164) 為什麼不直接宣告 2n 的大小，而是要使用 resize。
    - [6:31](https://youtu.be/tzNY52QwA2I?si=YNiChciMR78I9OPx&t=391) 面試者修改後實際上存取的次數依舊是 2n 次，但這樣寫帶來的好處是什麼？(參考：[Loop Unrolling](https://en.wikipedia.org/wiki/Loop_unrolling))
- (英) 建議把題目敘述一遍給面試者聽，增加雙方互動。
- (英) [7:36](https://youtu.be/ND10VCttwr0?si=vOm-uKv9p8LgiNDG&t=456) 建議使用討論的方式取代直接告訴面試者存在更佳解。例如：有沒有辦法使用更少的空間。

**Interviewee**
優點
- 有一邊寫一遍進行講解。

可改進處
- [1:06](https://youtu.be/tzNY52QwA2I?si=4k2MrCFHhWWcegGf&t=66) REACTO 中 Repeat 步驟感覺像是在告訴面試官題目，建議更改複誦方式，讓其聽起來更像是在跟面試官確認題意。
- [4:04](https://youtu.be/tzNY52QwA2I?si=olWKS5oG4k5mrJAs&t=244) 影片提到「index 的因素考慮進去」，建議可以直接講考慮的因素，例如：存取到非法記憶體。
- [8:18](https://youtu.be/ND10VCttwr0?si=I__AFmOYX5H4CSh6&t=498) 建議可以更清楚的交代思考的邏輯，而非直接寫出答案。

其他建議
- [11:54](https://youtu.be/tzNY52QwA2I?si=vSbaw4sRdmIy_Q-T&t=714) 不確定翻書是否是可以的，建議可以先與面試官討論。

## 梅治玄 Marlin
> https://hackmd.io/JLn3MNc0R66HgPJxJ8vsRQ?view

**interviewer**
優點
- 咬字清楚
- 有與面試者確認是否有看到畫面

可改進處
- 建議不要直接使用 Leetcode 作為面試的畫面，容易讓面試者可以直接背誦題目。
- 建議可以與面試者增加互動：
    - 討論是否存在更加解法。例如：[18:50](https://youtu.be/_MDo9wR-2hI?si=znoz-67JmarzFo2Y&t=1130) `long long` 是否有只使用 `int` 的可能
    - 將題目做變形

**interviewee**
優點
- 明確的敘述思考邏輯，且在寫的過程中同時也有解釋程式。
- 清楚的與面試官溝通題意，確定雙方理解沒有落差。

可改進處
- 建議舉例的時候可以將範例寫在螢幕上，方便雙方進行溝通。

其他建議
- 建議把面試者與面試官兩者的音量調整至相同大小

## 東尼 Tonny
> https://hackmd.io/@sysprog/rkF5edaJa

**interviewer**
優點
- 有將題目做包裝
- 有針對程式碼與複雜度分析做討論

可改進處
- [0:28](https://youtu.be/wjSqYJdnXFM?si=ct7kpoDUfSJ9hqPX&t=28) 建議將「你要面對的第一道題目」改成有一些問題想跟面試者討論，降低面試緊張氣氛。

**interviewee**
優點
- 清楚的與面試官確認題意，確定雙方的理解沒有誤差。

可改進處
- [2:45](https://youtu.be/wjSqYJdnXFM?si=P1mrtoAvz9Kr5VxE&t=165)、[16:57](https://youtu.be/wjSqYJdnXFM?si=T-fo-ZoeUIKueJLZ&t=1017)、[22:49](https://youtu.be/wjSqYJdnXFM?si=5oMo0aywQ3zG7o_E&t=1369)、[3:24](https://youtu.be/LwsIlnniceo?si=fgk87lPeqnuJV09K&t=204) etc. 感覺可以不用把文字打出來，或是簡短的作標記即可。
- [17:55](https://youtu.be/wjSqYJdnXFM?si=K1P1AstcHeKrW3LK&t=1075) 因為比較的方式已經顯而易見，可能直接用口述的方式會比較好。
- [26:18](https://youtu.be/wjSqYJdnXFM?si=cHidrfsoseAnGsZL&t=1578) 感覺有點答非所問，也許直接回答因為使用的是比較排序法，而比較排序法的下界是$O(n\log n)$。如果有需要在進一步帶到證明感覺會比較好。
## 學到的東西
* 一些題目不同的思路
* 看到更多不同面試官與面試者之間的應答技巧

# 作業2 - 錄影

> 貢獻者: 林克-Link
>[video](https://youtu.be/0Wg8aAR5yxc)
>
🧔：interviewer 👶：interviewee
## [1. Two Sum](https://leetcode.com/problems/two-sum/)
### 測驗說明與問答
🧔: 嗨你好，歡迎來到今天的面試，我是今天的 Interviewer，等下會有一些問題想跟你討論，主要是想要了解你的想法，但還是希望你可以將想法用程式碼的方式表達。
🧔: 那我現在傳一份 Google 文件給你，裡面有等下要討論的問題。我們目前有一個使用情境是 clients 要向 servers 請求資料，每個 server 都有同時可傳送的資料上限，為了我們目前的環境考量，每個 client 只能向兩個 server 請求資料，最好的情況是兩個 server 的上限剛好等於 client 需要的資料大小，如果沒有辦法滿足的話，就挑一個上限最大的 server 進行請求。
👶: 我確認一下題意，也就是 client 的請求會被切成兩份，這兩份要剛好符合其中兩個 server 的上限，如果沒辦法滿足的話就找一個上限最大的 server。
🧔: 對
👶: 也就是說，如果 client 的請求改成 400，(略)
🧔: 對的
👶: 我想在確認一下 server 數量與 client 請求大小有特別的限制嗎？
🧔: 沒有，因為 client 的請求與 server 數量皆大於 0，你可以考慮使用 unsigned int。
👶: 我想在問一下，client 是可以直切取得最新的資料嗎？
🧔: 對，你可以假設 client 永遠拿到最新的資料，不會有任何同步的問題。
👶: 使用 key value 的方式。
🧔: 聽起來不錯，你可以用程式碼表達嗎？
👶: 對的
```cpp
vector<int> GetServer(vector<int> server, unsigned int psize){
    if (level == 0)
        return vector<int>(0,0);
    map<int, int> Table;
    for (int i = 0; i < server.size(); i++){
        if (Table[server[i]]){
            return vector<int>{Table[i]], i + 1};
            
        int remain = psize - server[i];
        Table[remain] = i + 1;
        vector<int> rtl = GetServer(vector<int>(server.begin()+1+i, server.end()), remain);
        if (rtl.size() == 2) return vector<int> {i + 1, rtl[0], rtl[1]};
    }
    return vector<int>{pmax};
}
```
🧔: 這看起來是不錯的解法，如果我想要存取的 server 數量改成 3、4 甚至是 5 個呢？
👶: 我第一個想到的方式是遞迴。
```cpp
vector<int> GetServer(vector<int> server, unsigned int psize, int level){
    if (level == 0)
        return vector<int>(0,0);
    map<int, int> Table;
    unsigned int max = 0; pmax = 0;
    for (int i = 0; i < server.size(); i++){
        if (max < server[i]){
            max = server[i];
            pmax = i + 1;
        }
        if (Table[server[i]]){
            return vector<int>{Table[i]], i + 1};
            
        int remain = psize - server[i];
        Table[remain] = i + 1;
        vector<int> rtl = GetServer(vector<int>(server.begin()+1+i, server.end()), remain ,2);
        if (rtl.size() == 2) return vector<int> {i + 1, rtl[0], rtl[1]};
    }
    return vector<int>{pmax};
}
```

### 他評01
#### interviewer優點
- [1:23](https://youtu.be/0Wg8aAR5yxc?t=83) : interviewer 有適當舉例並留有其他例子供 interviewee 發想。
#### interviewer待改進
- [0:22](https://youtu.be/0Wg8aAR5yxc?t=23) : 視訊畫面應當置於適當的位置，以 Google 文件舉例，可以放置於進行文字編輯時不會遮擋也不影響面試進行的右上角。
- [17:08](https://youtu.be/0Wg8aAR5yxc?t=1028) : 當 interviewee 解釋完實作方式後，可以與 interviewee 就當前問題與解法做討論，比方說該方法的時間複雜度與空間複雜度為何，有沒有更快的方法或可以修改的地方，等這些都討論完後再對問題做延伸。
#### interviewee優點
- [3:12](https://youtu.be/0Wg8aAR5yxc?t=190) : interviewee 有將問題的限制先與 interviewee 確認


### 他評02
#### 優點
* [2:25](https://youtu.be/KYugQe23BTc?si=dR-DmO618zMDdD9f&t=145): 在Repeat problem的部分很仔細。
#### 可改進的地方
* [11:00](https://youtu.be/KYugQe23BTc?si=dR-DmO618zMDdD9f&t=660): Test的時候一直滾動頁面很痛苦。