前端面试中的 JavaScript 实用函数编码
原文:https://www.frontendinterviewhandbook.com/coding/javascript-utility-function/
这些是 LeetCode 问题的前端版本,但不太强调复杂的算法,更专注于实际用例。然而,它们也可能是简单的 LeetCode 问题,但是需要用 JavaScript 来回答。
几乎所有现有的实用函数都存在于 JavaScript 语言或著名的第三方库中,如 Lodash/下划线,其中最著名的是debounce
和throttle
。然而,Lodash 的实现是极度过度工程化的——重用了许多抽象函数,并支持旧浏览器的怪异和晦涩的用例,你不应该在采访中产生这样的复杂程度。
基本示例
- 实现
Array.prototype
功能:map
、reduce
、filter
、sort
- 实现承诺/承诺相关 API:
Promise
,Promise.all
- 实现 Lodash 功能:
debounce()
、throttle()
、cloneDeep()
、groupBy()
- 洛达什的
chunk()
/map()
,接着是mapAsync
(Promise.all
),然后是mapWithChunksAsync
- 将对象中的所有键转换为 snake_case/camelCase
document.querySelectorAll
(仅限于标签选择器)- 观察者模式
最好的准备方式是亲自动手实现它们,并为它们编写测试用例。
虽然这类问题的焦点不在算法上,但也要注意数据结构的选择和时间复杂度。如果在哈希映射的帮助下可以很容易地用 O(n)编写一个函数,那么就不要编写一个在 O(n 2 中运行的函数。
候选人预计会花大约 10-15 分钟来回答一个基本问题。如果你知道你收到了一个基本问题,试着在建议的时间内完成,不要故意花整个面试时间来做一个问题。在大多数情况下,你需要回答另一个编码问题。
进阶范例
高级问题通常是给更高级的候选人,预计大约 25-30 分钟完成或达成一个最低限度的工作解决方案。
- 编写一个模板引擎,执行变量替换和简单的条件。
- 执行
JSON.stringify()
。 - 从 HTML 页面生成目录/大纲(类似于 Google Docs 自动生成的大纲)。
Practice questions on Great Front End
不确定如何开始?大前端有前端面试学习计划和一个编码题的庞大题库。今天就开始练习吧!
提示
- 始终努力编写纯函数,也就是不依赖于函数外部状态并且不会产生副作用的函数。
- 如果你正在写一个递归函数,问问是否有最大堆栈深度限制。
- 一些嵌套的数据结构可以递归引用自身。一定要澄清对象中没有自我参照/循环/询问你是否需要处理它们(通常答案是“没有”)。