[討論] 面試遇到的考題

看板Ajax作者 (嘎嘎嘎嘎嘎)時間10年前 (2014/11/11 01:40), 10年前編輯推噓6(6045)
留言51則, 7人參與, 最新討論串1/1
上個月面試一家公司出的 javascript 考題 其中有幾題很有趣 列出來跟大家討論 1. === 跟 == 這兩個運算元誰比較快? a. === 快 b. == 快 c. 一樣快 d. 不一定 看狀況 我寫 a 但是後面註解 //有人在管 js 的低階運算效能嗎??!! 根本一樣快吧... 後來主管說服我說 == 要多做一次形態轉換 所以比較慢 2. var ary = []; for(var i = 0; i < 10; ary[i++] = i); alert(ary); //顯示為何? a. 0,1,2,3,4,5,6,7,8,9 b. 1,2,3,4,5,6,7,8,9,10 c. 語法錯誤 當掉 d. 不一定 看狀況 這題我寫 a 但我後面註解 //實際上這是 "未定義行為" 任何後果都有可能 要看js引擎的實作 但是主管很肯定答案是 b 他覺得 i++ 先取值再+1 而且取完值後 一定在中括號內就作完 +1 的動作 3. 寫出你有用過的 pattern 跟 framework 並簡單介紹 這題我空白... 雖然主管只是想測試我反應 考試答案正不正確不是重點 但是我還是想知道 這幾題有沒有更好更正統的解釋? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.133.153.169 ※ 文章網址: http://www.ptt.cc/bbs/Ajax/M.1415641238.A.B39.html

11/11 07:58, , 1F
第二題很有趣,在 C 裡面因為是 undefined behavior
11/11 07:58, 1F

11/11 08:00, , 2F
沒錯(在sequence point 前同一個變數被 expression 改
11/11 08:00, 2F

11/11 08:00, , 3F
了兩次。) 但是我記得 javascript 的標準有規定運算順
11/11 08:00, 3F

11/11 08:01, , 4F
序(由左至右),所以主管說的沒有錯。 Java 的行為也
11/11 08:01, 4F

11/11 08:02, , 5F
是。更有趣的是實際上你的是正確的,因為不是所有實作
11/11 08:02, 5F

11/11 08:03, , 6F
都符合 ECMA 標準,記得有人說過不要太依賴標準XD
11/11 08:03, 6F

11/11 08:06, , 7F
第三題空白真的很可惜,最簡單的 IIFE、jquery的優缺點
11/11 08:06, 7F

11/11 08:06, , 8F
到一些常見的 design pattern 在 JS 裡的形態
11/11 08:06, 8F

11/11 08:08, , 9F
(ex:decorator、observer)都可以說。
11/11 08:08, 9F

11/11 08:14, , 10F
就算你沒有寫過像是 backbone 或 angular,大學總學過
11/11 08:14, 10F

11/11 08:14, , 11F
有掰有分數吧XDD
11/11 08:14, 11F

11/11 08:15, , 12F
至於第一題我贊同你的說法。「我認為」第一,這個效能
11/11 08:15, 12F

11/11 08:17, , 13F
不重要。第二,既然說到轉換,就應該在相同的標準(或
11/11 08:17, 13F

11/11 08:17, , 14F
說是語義)下比較。以相同語義的情況下來說,比較相同
11/11 08:17, 14F

11/11 08:18, , 15F
形態時我不覺得他們會有效能差(因比較的步驟都一樣)
11/11 08:18, 15F

11/11 08:21, , 16F
比較不同形態且需要 coercion 時說不定 == 還比較快點
11/11 08:21, 16F

11/11 08:23, , 17F
要兩者語義完全相等的情況下來比纔有意義。很重要所以
11/11 08:23, 17F

11/11 08:23, , 18F
說三遍。XD
11/11 08:23, 18F
謝謝 carylorrk 的講解 第一題 有點不懂 如果 === 兩邊型態不同 比都不用比直接 return false 所以不管怎樣都是 === 快不是嗎?? 第二題 我也用 C 的觀點去看 原來 js 標準不一樣!!!

11/11 09:11, , 19F
雖然==跟===的差距可能極小 但用===可以更早的突顯錯
11/11 09:11, 19F

11/11 09:12, , 20F
誤 不讓引擎自動做些怪事 所以能用===還是用===較好
11/11 09:12, 20F

11/11 09:12, , 21F
很多javascript書籍都有提到這點
11/11 09:12, 21F

11/11 09:15, , 22F
當a==0時 a可以是"0"可以是false可以是""
11/11 09:15, 22F

11/11 09:16, , 23F
這會造成日後維護程式碼的各種不方便跟誤解
11/11 09:16, 23F

11/11 10:48, , 24F
所以我們是因為語義差別,而不是效能差別才選用 ==
11/11 10:48, 24F

11/11 10:48, , 25F
*才不選用 == XD
11/11 10:48, 25F

11/11 11:26, , 26F
這三題我大概也全錯XDDD
11/11 11:26, 26F

11/11 11:33, , 27F
一般而言只會用在 == null來偵測未定義變數吧?
11/11 11:33, 27F

11/11 11:34, , 28F
因為 == null 可以是 null 或 undefined,剛好都是空值
11/11 11:34, 28F

11/11 11:52, , 29F
第一題是要考你是否習慣用===,但他的理由很怪
11/11 11:52, 29F
沒錯 沒事盡量用嚴謹的 === http://goo.gl/rX4wkd 看完這篇發現 只用 == 太可怕了 甚麼怪事都有

11/11 11:53, , 30F
第二題我也認為沒啥意義
11/11 11:53, 30F

11/11 11:53, , 31F
第三題就很重要了,不過你竟然空白...
11/11 11:53, 31F
第三題 我太弱 怕裝懂被問倒... ※ 編輯: xxxx9659 (220.129.195.251), 11/11/2014 13:43:42

11/11 14:34, , 32F
我的意思是指兩個目的一樣且預期拿到結果一樣的東西才
11/11 14:34, 32F

11/11 14:35, , 33F
能比較速度。像是在學資料結構,大家都知道 hash map
11/11 14:35, 33F

11/11 14:37, , 34F
和 rb-tree map 的差別,當你只需要 access 單 element
11/11 14:37, 34F

11/11 14:38, , 35F
時當然是 hash map 快,但是當你的需要是可以 access
11/11 14:38, 35F

11/11 14:38, , 36F
單一 elemnt,然後又可以 iterate 整個 map 並拿到排序
11/11 14:38, 36F

11/11 14:39, , 37F
過的 (key, value) pairs,那顯然就是要 tradeoff 了
11/11 14:39, 37F

11/11 14:40, , 38F
你如果用 hash map,可能就要歷遍整個 map 然後再排序
11/11 14:40, 38F

11/11 14:41, , 39F
同樣的,當你預期的結果是 x == null 的話,用 ===
11/11 14:41, 39F

11/11 14:42, , 40F
你可能需要多次比較 (undefined、NaN 等等)或是
11/11 14:42, 40F

11/11 14:42, , 41F
explicit 的轉型。只有這樣的比較纔是公平的。
11/11 14:42, 41F

11/11 14:45, , 42F
== 和 === 雖然相似,但是語義上根本不同。沒有限定使
11/11 14:45, 42F

11/11 14:46, , 43F
用情景就直接問,顯然無法直接回答。
11/11 14:46, 43F

11/11 18:38, , 44F
其實第2題在執行上有一個小概念還不錯 @@ 由其是習慣一行程
11/11 18:38, 44F

11/11 18:38, , 45F
式解問題的人...
11/11 18:38, 45F

11/11 19:11, , 46F
除非就算塞在一行也不會造成語意混淆,我實在不覺得把c
11/11 19:11, 46F

11/11 19:11, , 47F
ode塞在一行可以接受,每次看到那種code都讓我很想砍
11/11 19:11, 47F

11/11 19:11, , 48F
作者,別人力壓縮混淆code阿…
11/11 19:11, 48F

11/12 09:28, , 49F
推樓上,要壓縮用 grunt 就好(誤
11/12 09:28, 49F

11/13 22:19, , 50F
怎麼辦我都自己寫code結果沒人看得懂,明明就很淺白啊,不
11/13 22:19, 50F

11/13 22:20, , 51F
然其實有時候我也會寫太長QQ造成閱讀困難
11/13 22:20, 51F
文章代碼(AID): #1KOFYMiv (Ajax)
文章代碼(AID): #1KOFYMiv (Ajax)