[讨论] 面试遇到的考题

楼主: xxxx9659 (嘎嘎嘎嘎嘎)   2014-11-11 01:40:35
上个月面试一家公司出的 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 并简单介绍
这题我空白...
虽然主管只是想测试我反应 考试答案正不正确不是重点
但是我还是想知道 这几题有没有更好更正统的解释?
作者: carylorrk (carylorrk)   2014-11-11 07:58:00
第二题很有趣,在 C 里面因为是 undefined behavior没错(在sequence point 前同一个变量被 expression 改了两次。) 但是我记得 javascript 的标准有规定运算顺序(由左至右),所以主管说的没有错。 Java 的行为也是。更有趣的是实际上你的是正确的,因为不是所有实作都符合 ECMA 标准,记得有人说过不要太依赖标准XD第三题空白真的很可惜,最简单的 IIFE、jquery的优缺点到一些常见的 design pattern 在 JS 里的形态(ex:decorator、observer)都可以说。就算你没有写过像是 backbone 或 angular,大学总学过有掰有分数吧XDD至于第一题我赞同你的说法。“我认为”第一,这个效能不重要。第二,既然说到转换,就应该在相同的标准(或说是语义)下比较。以相同语义的情况下来说,比较相同形态时我不觉得他们会有效能差(因比较的步骤都一样)比较不同形态且需要 coercion 时说不定 == 还比较快点要两者语义完全相等的情况下来比才有意义。很重要所以说三遍。XD
作者: mrbigmouth (大嘴先生)   2014-11-11 09:11:00
虽然==跟===的差距可能极小 但用===可以更早的突显错误 不让引擎自动做些怪事 所以能用===还是用===较好很多javascript书籍都有提到这点当a==0时 a可以是"0"可以是false可以是""这会造成日后维护程式码的各种不方便跟误解
作者: carylorrk (carylorrk)   2014-11-11 10:48:00
所以我们是因为语义差别,而不是效能差别才选用 ==*才不选用 == XD
作者: onininon (万)   2014-11-11 11:26:00
这三题我大概也全错XDDD
作者: mmis1000 (秋月恋枫)   2014-11-11 11:33:00
一般而言只会用在 == null来侦测未定义变量吧?因为 == null 可以是 null 或 undefined,刚好都是空值
作者: davidsky (Alive)   2014-11-11 11:52:00
第一题是要考你是否习惯用===,但他的理由很怪第二题我也认为没啥意义第三题就很重要了,不过你竟然空白...
作者: carylorrk (carylorrk)   2014-11-11 14:34:00
我的意思是指两个目的一样且预期拿到结果一样的东西才能比较速度。像是在学资料结构,大家都知道 hash map和 rb-tree map 的差别,当你只需要 access 单 element时当然是 hash map 快,但是当你的需要是可以 access单一 elemnt,然后又可以 iterate 整个 map 并拿到排序过的 (key, value) pairs,那显然就是要 tradeoff 了你如果用 hash map,可能就要历遍整个 map 然后再排序同样的,当你预期的结果是 x == null 的话,用 ===你可能需要多次比较 (undefined、NaN 等等)或是explicit 的转型。只有这样的比较才是公平的。== 和 === 虽然相似,但是语义上根本不同。没有限定使用情景就直接问,显然无法直接回答。
作者: bndan (seed)   2014-11-11 18:38:00
其实第2题在执行上有一个小概念还不错 @@ 由其是习惯一行程式解问题的人...
作者: mmis1000 (秋月恋枫)   2014-11-11 19:11:00
除非就算塞在一行也不会造成语意混淆,我实在不觉得把code塞在一行可以接受,每次看到那种code都让我很想砍作者,别人力压缩混淆code阿…
作者: carylorrk (carylorrk)   2014-11-12 09:28:00
推楼上,要压缩用 grunt 就好(误
作者: oToToT (屁孩)   2014-11-13 22:19:00
怎么办我都自己写code结果没人看得懂,明明就很浅白啊,不然其实有时候我也会写太长QQ造成阅读困难

Links booklink

Contact Us: admin [ a t ] ucptt.com