编写 JavaScript 编码问题与编写算法编码问题的不同之处在于前者通常特定于前端领域,完成它们最有意义的是使用 JavaScript(或TypeScript)。 您还可能需要使用浏览器/JavaScript 特定的 API,或利用 HTML/CSS/JavaScript 知识。 您还可能需要使用浏览器/JavaScript 特定的 API,或利用 HTML/CSS/JavaScript 知识。
这些 JavaScript 编码问题往往具有实用价值,并且可以属于以下一类或多类:
当他们已经成为语言的一部分时,实现标准类/方法可能看起来有些多余。 然而,浏览器不一致曾经是一个普遍的问题,并且一些语言 API 在旧浏览器中找不到。 当他们已经成为语言的一部分时,实现标准类/方法可能看起来有些多余。 然而,浏览器不一致曾经是一个普遍的问题,并且一些语言 API 在旧浏览器中找不到。 因此,开发人员不得不通过在下载的 JavaScript 中实现这些 API 来进行填充。 能够实现这些本地函数还显示了对前端基础知识的良好理解。 能够实现这些本地函数还显示了对前端基础知识的良好理解。
Array
方法:Array.prototype.map
,Array.prototype.reduce
,Array.prototype.filter
。Promise
和其他Promise
相关函数:Promise.all
,Promise.any
。document.getElementsByTagName
,document.getElementsByClassName
。这些函数远非显而易见的那么简单。 这些函数远非显而易见的那么简单。 让我们以无辜的Array.prototype.map
为例。 您是否知道: 您是否知道:
index
和 this
?[1, 2, , 4].map(val => val * val) === [1, 4, , 16]
。map
处理的元素范围在第一个调用callbackfn之前设置。 在调用 map 之后附加到数组中的元素将不会被callbackfn访问。 如果更改数组的现有元素,则将它们的值作为传递给callbackfn的值在map
访问它们时。 来源:[Array.prototype.map ECMAScript 说明](https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.map)您的实施不必处理所有这些情况,特别是数组突变的情况。 但是,如果您提到了这些情况,那么这是一个积极的信号。 您的实现越接近规范,您就会显得更加资深/有经验。
这些函数/类在使用 JavaScript 构建软件时通常需要,但不在标准语言中(目前)。
debounce
,throttle
,flatten
,curry
,cloneDeep
。jQuery.css
,jQuery.toggleClass
。classnames
Emitter
(它存在于 Node.js 和许多第三方库中)如果您查看这些库的源代码,您可能会发现其中一些实现非常复杂。 这是因为该库必须支持许多晦涩的真实世界用例。 与标准函数类似,您不需要在面试设置中处理所有这些边缘情况,但是您获得了调用它们的点。
JavaScript 编码面试与算法编码面试有许多相似之处。 一般来说,你应该:
类别 | 重要主题 |
---|---|
数据结构 | 数组、地图、堆栈、树、套装 |
算法 | 二进制搜索、广度优先搜索、深度优先搜索、递归 |
JavaScript 语言 | 数据类型(检查类型、类型强制转换)、范围、闭合、回调、如何使用此处关键字、面向对象编程(原型、类、方法),箭头函数与普通函数、通过Function.prototype.apply() / Function.prototype.call() 调用函数,Promise ,处理多参数 |
DOM | DOM 遍历、DOM 创建、DOM 操作、访问元素/节点属性、事件委托 |
运行时 API | 计时器(setTimeout 、setInterval ) |
JavaScript 编码面试类似于算法编码面试,应该采用相似的方法。 自然地,JavaScript 编码面试与评估候选人的方式在某些方面与算法编码面试重叠。
this
很重要。 如果一个函数接受回调函数作为参数,请考虑this
变量应该如何行动。 对于许多内置函数,this
是回调函数调用时提供的参数之一。从经验上看,在频率和涵盖的重要概念方面,最佳的 JavaScript 编码面试问题是:
GreatFrontEnd 有全面的 JavaScript 编码问题列表,您可以练习。 还有可以运行您的代码以验证正确性的自动化测试用例,以及由前 FAANG 资深工程师编写的解决方案。
请注意,我们在某些问题中故意含糊不清,并没有在问题说明中全面介绍要求。 但是,我们将在解决方案中涵盖尽可能多的方面。 在阅读解决方案时,如果您发现错过了一些内容,可能会感到沮丧,但是这可以锻炼您的提前思考,并考虑在解决方案工作时需要注意哪些可能区域。 最好在练习期间找出,而不是在实际面试中发现。