TikTok 专访:您可能有兴趣了解的 4 个前端问题
这是一次难忘的面试经历
Photo by 安德烈科·波迪尔尼克 on 不飞溅
最近,我的好朋友在换工作,在网上收到了很多offer。
其中一个来自一家名为 抖音 ,你可能非常熟悉。他们让我的朋友当场写代码来实现4个复杂方法的功能。
1. 尝试实现 Promise.all API
这 承诺.all() 方法将一个可迭代的 Promise 作为输入,并返回一个 Promise,该 Promise 解析为输入 Promise 的结果数组。
当输入的所有承诺都已解决,或者输入可迭代不包含任何承诺时,此返回的承诺将解决。
它会在任何输入承诺拒绝或非承诺抛出错误时立即拒绝,并将拒绝第一个拒绝消息/错误。
自己实现一个
做个测试
2.设计一个可以设置过期日期的localstorage API
localstorage不会像cookies一样自动过期,所以过期时间需要自己维护。
我的思路是:
使用 setItem 时,保存过期时间。使用getItem时,将时间与当前时间进行比较,如果大于当前时间,则直接返回该值,否则需要通过removeItem移除该值并返回null。
做个测试
基本符合题主的要求。当然我们也可以处理异常,比如空间满、设置错误等。
3.找到两个节点最近的公共父节点,包括节点本身
介绍:
oNode1 和 oNode2 在同一个文档中,不会是同一个节点。
函数 findCommonParent(oNode1, oNode2) {
_// 这里填写_
}
相信大家看到这个问题都会用到递归,但是没有明确的思路。
这个时候不要紧张。从问题中找出更有效的信息,尽量多用笔画(如果是现场面试,记得只带一支铅笔,有时多画就会有想法)。
1.1 两个节点处于同一级别
让我们试着画出这两个节点之间可能存在的关系。如下图所示,它们的直接父节点就是答案。
1.2 两个节点互为祖先
oNode1 是目标节点。当然,反过来也是一样的。 oNode2 也可以是 oNode1 的祖先。
1.3 两个节点之间没有关系
如下图所示,这两个节点的距离很远,似乎没有任何关系,但是从其中任何一个节点往上搜索,肯定能找到一个包含oNode1或oNode2的点。
1.4 递归实现版本
根据上面的分析,相信你很快就能写出下面的代码了。
1.5 遍历实现版本
递归很容易理解,仅仅通过遍历就可以实现吗?事实上,递归问题往往可以通过遍历来解决。
4.使用reduce实现map功能
这个问题会比较简单,我们直接写代码
输入:[1,2,3]
输出:[2、4、6]
最后
谢谢阅读。 我在看 **** 转发您的关注和阅读更多优质文章。
[
“我因为 Promise.all 而失去了工作机会”
一次面试经历让我很伤心。
javascript.plainenglish.io
](/i-lost-a-job-opportunity-just-because-of-promise-all-be396f6efe87)
[
采访者:“npm run xxx”发生了什么?
一个大多数人都不知道的秘密。
javascript.plainenglish.io
](/interviewer-what-happened-to-npm-run-xxx-cdcb37dbaf44)
[
面试官:“x !== x”在 JavaScript 中可以返回 True 吗?
你可能不知道的五个神奇的 JavaScript 知识点!
javascript.plainenglish.io
](/interviewer-can-x-x-return-true-in-javascript-7e1d1fa7b5cd)
[
现在是 2022 年,不要再滥用箭头功能了
不应该使用箭头函数的 4 种情况。
javascript.plainenglish.io
](/its-2022-don-t-abuse-the-arrow-function-anymore-905862a9c668)
更多内容在 ** 纯英语.io** .注册我们的 ** 免费每周通讯** .跟着我们 ** 推特** , ** 领英** , ** YouTube** , 和 ** 不和谐** .
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明
本文链接:https://www.qanswer.top/17538/54320600
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/287813.html