在 2018 年底,仍有大多数面试者在被问到 AJAX 的问题时,回答依然是使用 jQuery。这里举一些能说明这种差距的典型例子:CSS Grid 和 Flexbox 已经得到广泛支持。然而,在面试的时候,仍然在讨论 CSS 中如何使浮动实现多列布局和行内块级元素居中。模块打包器(Module bundler)是为大规模( large-scale)应用而设计的规范。然而,当谈到架构时,我们讨论的又是minification和concatenation。在面试中我们有几次真正讨论过 Webpack?如果 97% 的代码来自 NPM,但面试的重点是排序数组或迭代对象。更有甚者,对于找出 typeof null 的值仍然很感兴趣。为什么不能在选择合适的库、框架或工具这件事上采用理性点的方法呢?我们仍会让面试者在原型之上进行经典继承,但并不是要验证对这些错误想法的需要。我们有更多的方法模式。当然,JavaScript 类、新引入的私有和静态属性也值得讨论。这能帮助我们更好地理解面试者的想法,对关键决策的思考等。对缓存的讨论仍局限于 Cache control headers和 CDN。像 IndexDB,HTTP/2 或 Service Workers 这些技术只是路人而已。面试者数不胜数,但面试评估与实际工作需要之间又相去甚远。一方面,我们的前端技术取得了巨大的飞跃,另一方面,我们庞大的社区又还没拥抱这些新技术。残破的社区永远不是一个好兆头。这是一条灾难之路。差距总会催生一些新的东西,它强大到足以摧毁我们迄今所创造的一切。我无法想象 Java 开发者使用 GWT 编写另一个 Facebook。面试是催生变革和汇聚人才的好方式。作为面试官的你,如果仅仅把面试当成「面试」,那么你只能自我膨胀,最终一无所获。要使一场面试成功,必须对其进行讨论。
它必须是一个交换思想的地方。
它应该引发人们思考并客观地分析给定的问题。
它要能帮助我们理解人们做决策的过程。
它要能帮助我们了解一个人对技术和解决问题的热情。
它意味着要了解未来可能的同事。
所有那些谜题,tricks 或 typeof null 都不能真正称为面试。以下是我们在面试讨论中提出的一些问题。我们希望它可以帮助面试官和面试者准确地看清期望,需求和现实。太长不看版:我们要先把自己当成面试官。基本的JavaScript问题1、使以下代码正常运行:2、以下代码在 JavaScript 中返回false
。 请说明为什么:3、JavaScript 中有哪些不同的数据类型?提示:只有两种类型 - 主要数据类型和引用类型(对象)。 有六种主要类型。4、解决以下异步代码问题。
检索并计算属于同一教室中每个学生的平均分数,例子中教室 ID 为 75。每个学生可以在一年内参加一门或多门课程。以下 API 可用于检索所需数据。编写一个接受教室 ID 的函数,并根据该函数计算该教室中每个学生的平均值。 该函数的最终输出应该是带有平均分数的学生列表:
[
{ “id”: 1, “name”: “John”, “average”: 70.5 },
{ “id”: 3, “name”: “Lois”, “average”: 67 },
}复制代码使用普通回调,promises,observables,generator 或 async-wait 编写所需的函数。 尝试使用至少 3 种不同的技术解决这个问题。5、使用 JavaScript Proxy实现简单的数据绑定提示:ES Proxy 允许你拦截对任何对象属性或方法的调用。 首先,每当更改底层绑定对象时,都应更新 DOM。6、解释 JavaScript 并发模型
您是否熟悉 Elixir,Clojure,Java 等其他编程语言中使用的任何其他并发模型?提示:事件循环,任务队列,调用栈,堆等。7、“new” 关键字在 JavaScript 中有什么作用?提示:在 JavaScript 中,new 是用于实例化对象的运算符。 这里的目的是了解知识广度和记忆情况。另外,请注意 [[Construct]] 和 [[Call]]。8、JavaScript 中有哪些不同的函数调用模式? 详细解释。
提示:有四种模式,函数调用,方法调用,.call() 和 .apply()。9、解释即将发布的任一新 ECMAScript 提案。提示:比如 2018 的 BigInt,partial function,pipeline operator 等。10、JavaScript 中的迭代器(iterators)和迭代(iterables)是什么? 你知道什么是内置迭代器吗?