# 資訊科技產業專案設計 第三次作業 # 批評對象: 林宇庭-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 ``` ## 其他的話 +
×
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