大前端模拟面试题
1. 实现 Promise.prototype.allSettled
语法: Promise.allSettled(iterable);
其中 iterable 是一个可迭代的对象,例如 Array,其中每个成员都是 Promise。 不同于 Promise.prototype.all, 其不管 resolve 还是 reject,最后的回调函数都会执行。
说明: 候选人可以选择 ts 或者 js 实现,当然用纯碎的 ts 实现可以加分。
if (Promise.prototype.allSettled === void 0) {
// ts
Promise.prototype.allSettled = function<T>(ps: Promise<T>[]): Promise<T>[] {
return ps;
};
// js
Promise.prototype.allSettled = ps => {
return ps;
};
}
2. 优化代码
如何优化这个代码?
提示:
- 从各种角度进行优化
- 比如可维护性,可测试性,性能,兼容性等角度
<template>
<div>
<button>点我复制</button>
</div>
</template>
<script>
export default {
methods() {
const btn = document.querySelector("#btn");
btn.addEventListener("click", () => {
const input = document.createElement("input");
document.body.appendChild(input);
input.setAttribute("value", "你想让用户复制到剪贴板的内容");
input.select();
if (document.execCommand("copy")) {
document.execCommand("copy");
console.log("复制成功");
}
document.body.removeChild(input);
});
}
};
</script>
3. 如何应对运营商劫持
如下,运营商可能往你的 html 中注入脚本,也可能修改你的脚本内容。 如何定位和解决问题。
<html>
<!-- 一种是增加一个js -->
<script src="http://your-site.js"></script>
<script src="http://not-your-site.js"></script>
<!-- 一种是修改你的js -->
<script src="http://your-modified-site.js"></script>
</html>
4. CDN 的作用和原理
我们平时都会用到 CDN,不管是自建还是用现有的 CDN 服务商。那么 CDN 给我们带来了什么样的好处,它是做到的呢?
1. 你工作中使用到的框架有遇到过什么问题吗
提示:
- 在使用中有没有遇到什么让你非常想吐槽的地方或这门框架有哪些优秀的地方
- 框架都能解决哪些问题,哪些问题用框架解决不好实现
2. 你有写过单元测试吗,在单元测试文件中有个很耗时的异步操作,执行这个文件每次都得等待很长时间,基于下面这段伪代码,你有什么解决策略吗
//假设这句同步代码会执行999次,执行一次耗时1ms
expect(add(1,2)).to.be(3)
// 这是一个很耗时的异步操作,会执行1000ms
require("fs").readFile("bigFile.jpg")
3. 假设你现在开发一个前端应用,面向国外用户
- 服务器在国内
- 国外网络不发达,可能只有 3G,2G 网络
基于这两个场景,你如何去设计你的架构,可以让国外用户顺畅地去浏览你的网站
4. 说出a.bind.bind.bind()的执行结果
声明一个函数
function a(){}
说出下列代码执行后的结果
a.bind.bind.bind()
说明:考察候选人对原型、原型链以及原生bind方法的理解
5. 你平常在项目开发中肯定会遇到很多错误,你都是怎么去做的错误处理
提示:
1.在执行代码期间可能会发生比如类型错误,引用错误 2.通信错误,比如后端服务挂掉等
6.算法题
给定一个非空数组,返回数组中第三大的数,如果不存在,则返回数组中最大的数
示例1:
输入:[3,2,1]
输出:1
解释:第三大的数是1
示例2:
输入:[1,2]
输出:2
解释:第三大的数不存在,所以返回最大的数2
示例2:
输入:[2,2,3,1]
输出:1
解释:注意要求返回第三大的数,是指第三大且唯一出现的数。存在两个值为2的数,它们都排第二
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论