---
# System prepended metadata

title: 資訊科技產業專案設計 第三次作業

---

# 資訊科技產業專案設計 第三次作業

# 批評對象： 林宇庭-Austin ==[video](https://youtu.be/zokVE4RUmmU)==

:::info
**藍色框框是簡介！**
:::

## 總體評價
+ **寫 Code 的部分非常流暢，也幾乎沒有完全安靜的空間，非常方便 Interviewer 理解 Intervieree 想做什麼。**
:::info
以我自己繳交的影片來看，我雖然也有邊敲鍵盤邊打 code，但是還是會出現超過 10 秒的靜寂，有點好奇能怎麼改善。
:::

+ 通篇來說，Interviewer 幾乎只有朗誦問題的用處，說實話就算刪掉感覺也不構成大礙，下面會補上我認為可以問受試者的問題。
:::info
我想即使作業要求使用 LeetCode，應該也要假設這個題目是自己出的，否則撿來用實在有點不太專業。
:::

+ 我覺得頗有趣的是，在中國因為翻譯作的足夠完善，(雖然不是在程式界的經驗)我通常不會聽到名詞轉用英文的情形。但是這裡出現了中國用詞『數組』等等，卻又不用中國單詞的『索引』之類的。
:::info
這部分我沒有那麼確定，麻煩老師提點一下。
:::

+ Interviewer 的朗讀感非常重。我認為即使是 Interviewer 也應該會用比較口語的方式去敘述一個題目，又考慮到在敘述題目時應該 Interviewee 也該能看到文字說明，倘若還是複述的話其實根本沒必要。
:::info
畢竟 Interviewer 和 Interviewee 雙方都是人，應該會是用那種老師出題問學生的語氣，而不是考卷的口氣。
:::

+ Interviewee 與 Interviewer 有相同的問題，REACTO 裡的 "R" 應該指的是整理題目後清晰的說明自己的理解，而不是照著重念一次。
:::info
我有翻譯的經驗(雖然不多)，可以看得出來 LeetCode China 的題目翻譯雖然有字字到位，但是沒有常識把文字傳換成普通的中文，因此會有「在說明文字之後，補充這個條件，加註那個規定」的感覺。
:::

+  Interviewee 舉例的時候，應該要打在右方程式碼區域，而不是用滑鼠指。錄成影片都有點難跟了，如果是 LIVE 一定更困難。

## 第一題 Sorted Two Sum
### Interviewer
+ 『可以讓這個程式變得更快嗎』我覺得實在太明顯，或者說 $O(n^2)$ 本來就根本不可能是最佳解。一開始就限定解答的時間複雜度可以節省時間去問更有意義的問題，或讓 Interviewee 不『裝弱』。
:::info
回去看了一下自己的影片之後才發現應該大家都有這個問題。
我的分析是由於**害怕問了答不出來的問題**，大家的提問都趨於保守。
:::

+ 假設這個面試是指定使用 C++ 作答，我認為 Interviewer 應該同時會想知道 Interviewee 對 C++ STL 的理解，因此在撰寫 `for` 迴圈的時候我認為可以要求受試者使用 iterator 作答(殘酷一點順便叫他說明 iterator 的好處壞處)等等，看看 interviewee 到底有沒有對 C++ STL 有深入的理解。
:::info
每個語言都有它自己的特點，我想用了 C++ 就應該要想辦法展現自己對這個語言得心應手。**原本的解答如果可以用 C 達成，何必用 C++ 包在一個 Class 裡面呢？** 這是我的想法。
:::

+ 最後的統計上，使用的記憶體空間只贏過 35% 的使用者；可以問 Interviewee 到底輸給 65% 的使用者的原因為何？
:::info
Leetcode 的記憶體用量不準確也是事實...
:::

### Interviewee
+ 1:38, 這裡又變成 "vector"，不是『數組』了XD
:::info
:police_car: 支語警察
:::
+ 超時的理由如果可以自己提出更好一點。
:::info
畢竟面試時應該不會有個 Leetcode 讓你跑。
Interviewer 應該也要隨時注意 code 有哪些 edge case 對應不到。
:::
+ 6:00 左右說明時，『右邊的 pointer 往中間靠』『左邊的 pointer 往中間靠』不太精準，比如說 `[1, 2, 3, 5, 6], target = 3` 的狀況，答案的左右 pointer 都會存在『中間』的左側。應該說『往左/右靠』。

## 第二題 sqrt(q)
### Interviewer
+ 『請在不使用內建的函數或運算符號的情況下，撰寫一個求平方根整數部分的函數』就行了。
:::info
其他的我覺得讓 Interviewer 詢問就行。
:::
+ 這題的 $O(n)$ 到 $O(\log n)$ 的優化實在太明顯，和上一題有一樣的問題。
+ 在計算平方根的時候，乘法計算其實也會花掉許多時間。或許可以問問 Interviewee 『如果可以維持 O(n)的時間複雜度，你可以不用乘法，也不用迴圈模擬乘法，一樣解決問題嗎？』來考考 Interviewee 有沒有從 $n^2$ 求 $(n+1)^2$ 的數學能力。
:::info
比較像是上午的計結 quiz 會測驗的「`mul` 指令壞掉了，怎麼辦？」的感覺。
:::
+ `static_cast` 都出來了，當然可以問問『`const_cast` `dynamic_cast` `reinterpret_cast` `static_cast` 的差異』在哪裡之類的問題，一樣考驗 Interviewee 對 C++ 的認知。
:::info
在醒獅團待久了真的看到好多會用這些有的沒的，
卻根本不知道他們的用處是什麼的同學。
:::

### Interviewee
+ 更嚴重，說明的時候連滑鼠都不動了。假設 Interviewer 像我一樣聽人說話無法專心，但是看影像專心到不行，Interviewee 直接完蛋。
:::info
實話，這影片每段都要重播個 3、4 次
:::
+ 很多『應該』，自信一點。
+ 11:05，`long` 的使用原因很奇怪。`long` 就是那個在各個 CPU Architecture 跟 OS 上會有不同大小的奇葩人，在 『Windows』 和 『IA-32 的 Linux』 上是 4 Bytes, 在 『Intel-64 的 Linux 和 max OS』 上是 8 Bytes，僅僅說『因為我們要把 int 平方所以我們用 long』反而會讓人暴露自己不太懂的東西。
  - Standard 只規定 `int` 需 $\geq 16$ bit，`long` 需  $\geq 32$ bit，但 `long` 不一定比 `int` 大。
:::info
Mac OS 是查來的，有點好奇為什麼沒有 32 bit。
:::

# 批評對象： 琪怪 ChiGuai ==[video](https://youtu.be/_eIbSRmkFKo)==

## 總體評價
Interviewee/Interviewer 雙方完全就是在朗讀，以對方的視角來說，聽到『則將 XXX 設為 0，並往更高位數探討之。...』，我不會覺得他是在回答我的問題而是在背課文。
:::info
這個真的誇張到讓我驚艷。
:::

## 第一題：
+ `lvalue` 和 `rvalue` 的差別這個問題本身就有問題。在
  - Interviewer 使用的詞是 `lavlue` 和 `rvalue`，Interviewee 不應該擅自更改成『左值』與『右值』。
  - `lvalue`，`rvalue` 等並不是一個「值」，而是 Expression 的分類。
  - [這份文件的 3.10 Lvalues and rvalues](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3690.pdf) 有更詳細的說明。
  - 假設 `x` 是一個 object，`++x` 並也可能被 overload 成一個 `lvalue`，`xvalue` 或 `prvalue`。問這種問題應該要提供 `x` 的 type，若是一個自定義的 class 也應該提供 overload, constructor 和 deconstructur 的實作。
  - 這個問題跟需要解的題目完全沒有關聯。
:::info
這個題目真的非常暴力，想知道老師對這種「**需要熟讀 Document 才回答得出來**」的題目有什麼看法？
:::
+ Interviewer 說話太卡，會讓 Interviewee 懷疑 Interviewer 是不是根本不知道自己在考什麼。
:::info
我其實到現在還是懷疑：在這份作業，到底該先順過自己的台詞，還是像 FIRST TAKE 一樣呈現最真的自我？
:::
+ `vector<T>.insert()` 的實做我認為是個不太適當的問題。簡單來說可以看做是『在一個 Linked List 中插入一個額外的 node』。
  - Interviewer 回答了迭代器操作，卻沒有回答 vector 的實作方式。這樣鐵定會被問『那，迭代器是什麼？』 『position 迭代器又是什麼』
+ **Iterator 不是指標！！！！！！！！！！！！！:angry:**
:::info
iterator 是個好東西。每個 C++ 使用者都應該要去讀 Addison Wesley 的 Generic Programming and the STL (?)
:::

## 第二題
+ String 和 `char` array 的差異我就覺得是個很好的問題。如果沒有平常就玩 `<string.h>` 的習慣其實說不太出來，我覺得。
  - 然而回答有點不盡人意。以中括號賦值聽起來很像 `char arr = [apple]`，我的意見是該稱為『對 array 賦值』。以雙引號更奇怪，應該說『string literal』，如果 interviewer 要求再說明這是什麼東西。
  - `\0` 應叫做 "null character".
  - 並非『不知道字串結束』，而是 `\0` 代表的是字串終結，有點反果為因。

:::info
以上的說明有點說明不足的感覺，但又不知道從哪邊可以改進，不知道 Jserv 怎麼看？
:::

+ 有詢問到 blue 後方的空格滿可以體現對題目例外的敏銳度。
+ 『index 為空，則可以 break 字節』已經是兩岸三地一心同體了，用詞統一一下。
:::info
支語混雜難免，但是可以混成這樣我也是很意外XD
:::

+ 例外條件的對應沒有解釋到為什麼加一可以解決問題。
:::info
我甚至覺得指出沒考慮到的部分應該放在程式撰寫之後？
:::

+ 『為什麼要從 `str.lenth() - 1` 開始迴圈』也跟 null character 不太相關。`std::string str = "apple"; str.length()` 的確會得到 5，但減一的理由僅僅是因為 string 是 0-indexed，不會有 5 這一格。
  - **再者，`std::string` 根本就不是 null-terminated.**
  - `std::string` 儲存的是字串長以及字串值，`\0` 在 C++ 中並不會讓字串結束。例如：
```c++
int main(){
    string str;
    str[0] = '\0';
    cout << str << "\n";
    return 0;
}
```
  - 會輸出
```shell
esting
```


## 其他的話
+ 