Skip to Content
Nextra 4.0 is released 🎉
前端面试题合集50道前端面试题

50道前端面试题

1.写React / Vue项目时为什么要在列表组件中写key,其作用是什么?

2.['1".'2"."3].map(parselnt) what & why?

3.什么是防抖和节流?有什么区别?如何实现?

4.介绍下Set、 Map. WeakSet和 WeakMap的区别?

5.介绍下深度优先遍历和广度优先遍历,如何实现?

6.请分别用深度优先思想和广度优先思想实现一个拷贝函数?

7.ES5/ES6的继承除了写法以外还有什么区别?

8.setTimeout、Promise、Async/Await的区别?

9.Async/Await如何通过同步的方式实现异步?

10.异步笔试题请写出下面代码的运行结果

async function async1() { console.log('async1 start') await async2() console.log('async1 end') } async function async2() { console.log('async2') } console.log('script start') setTimeout(function() { console.log('setTimeout') },0) async1() new Promise(function(resolve) { console.log('promise1') resolve() }) .then(function() { console.log('promise2') }) console.log('script end') //输出 //script start //async1 start //async2 //promise1 //script end //async1 end //promise2 //setTimeout

11.算法手写题

已知如下数组,编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组

var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];

使用 Set 方法去重,flat(Infinity)扁平化

Array.from(new Set(arr.flat(Infinity))).sort((a,b)=>{ return a-b})

12.JS 异步解决方案的发展历程以及优缺点。

13.Promise构造函数是同步执行还是异步执行,那么then方法呢?

14.如何实现一个new

15.简单讲解一下http2的多路复用

16.谈谈你对TCP三次握手和四次挥手的理解

17.A、B机器正常连接后,B机器突然重启,问A此时处于TCP什么状态

如果 A 与 B 建立了正常连接后,从未相互发过数据,这个时候 B 突然机器重启,问 A 此时处于 TCP 什么状态?如何消除服务器程序中的这个状态?(超纲题,了解即可)

因为 B 会在重启之后进入 tcp 状态机的 listen 状态,只要当 a 重新发送一个数据包(无论是 syn 包或者是应用数据),b 端应该会主动发送一个带 rst 位的重置包来进行连接重置,所以 a 应该在 syn_sent 状态

18.React 中setState什么时候是同步的,什么时候是异步的?

1、由 React 控制的事件处理程序,以及生命周期函数调用 setState 不会同步更新 state 。

2、React 控制之外的事件中调用 setState 是同步更新的。比如原生 js 绑定的事件,setTimeout/setInterval 等。

19.React setState笔试题,下面的代码输出什么?

class Example extends React.Component { constructor() { super() this.state = { val: 0 } } componentDidMount() { this.setState({ val: this.state.val + 1 }) console.log(this.state.val) // 第 1 次 log this.setState({ val: this.state.val + 1 }) console.log(this.state.val) // 第 2 次 log setTimeout(() => { this.setState({ val: this.state.val + 1 }) console.log(this.state.val) // 第 3 次 log this.setState({ val: this.state.val + 1 }) console.log(this.state.val) // 第 4 次 log }, 0) } render() { return null } } // 答: // 0, 0, 2, 3

20.介绍下npm模块安装机制,为什么输入npm install就可以自动安装对应的

21.说出3个判断数组的方法,请分别介绍它们之间的区别和优劣

22.介绍下重绘和回流(Repaint & Reflow),以及如何进行优化

23.介绍下观察者模式和订阅-发布模式的区别,各自适用于什么场景

24.聊聊Redux和Vuex的设计思想

25.说说浏览器和Node事件循环的区别

26.介绍模块化发展历程

27.全局作用域中,用const和 let声明的变量不在window 上,那到底在哪

28.cookie和token都存放在header 中,为什么不会劫持token?

29.聊聊Vue的双向数据绑定,Model如何改变View, view又是如何改变

30.两个数组合并成一个数组

31.改造下面的代码,使之输出0 -9,写出你能想到的所有解法。

for (var i = 0; i < 10; i++>) { setTimeout(() => { console.log(i); }, 1000) }

解法一

for (let i = 0; i < 10; i++>) { setTimeout(() => { console.log(i); }, 1000) }

解法二

for (var i = 0; i < 10; i++>) { ((i) => { setTimeout(() => { console.log(i); }, 1000) })(i) }

32.virtual DOM真的比操作原生DOM快吗?谈谈你的想法。

33.下面的代码打印什么内容,为什么?

var b = 10; (function b(){ b = 20; console.log(b); })();

34.简单改造下面的代码,使之分别打印10和20.

var b = 10; (function b() { b = 20; console.log(b); })();

var b = 10; (function () { b = 20; console.log(b); })();
var b = 10; (function () { console.log(b); b = 20; })

35.浏览器缓存读取规则

36.使用迭代的方式实现flatten 函数。

37.为什么Vuex的mutation和 Redux的reducer中不能做异步

38.下面代码中a在什么情况下会打印1?

var a = ?; if (a == 1 && a == 2 && a == 4) { console.log(1); }

解法一

var a = { i: 1, toString () { return a.i++; } } if (a == 1 && a == 2 && a == 4) { console.log(1); }

解法二

let a = [1, 2, 3]; a.toString = a.shift; if (a == 1 && a == 2 && a == 4) { console.log(1); }

39.介绍下BFC及其应用。

40.在Vue中,子组件为何不可以修改父组件传递的Prop

41.下面代码输出什么

var a = 10; (function () { console.log(a); a = 5; console.log(window.a); var a = 20; console.log(a) })()

42.实现一个 sleep函数

比如 sleep(1000) 意味着等待 1000 毫秒,可从 Promise、Generator、Async/Await等角度实现

const sleep = (time) => { return new Promise(resolve => setTimeout(resolve, time)) }

43.使用sort()对数组[3,15,8,29,102,22]进行排序,

44.介绍HTTPS握手过程

45.HTTPS 握手过程中,客户端如何验证证书的合法性

46.输出以下代码执行的结果并解释为什么

// TODO

47.双向绑定和vuex是否冲突

48.call和apply的区别是什么,哪个性能更好一些

49.为什么通常在发送数据埋点请求的时候使用的是1x1像素的透明gif图片?

  1. 没有跨域问题,一般这种上报数据,代码要写通用的;(排除 ajax)
  2. 不会阻塞页面加载,影响用户的体验,只要 new Image 对象就好了;(排除 JS/CSS 文件资源方式上报)
  3. 在所有图片中,体积最小;(比较 PNG/JPG)

50.实现(5).add(3).minus(2)功能

例: 5 + 3 - 2,结果为 6

Number.prototype.add = function(n) { return this.valueOf() + n; }; Number.prototype.minus = function(n) { return this.valueOf() - n; };

51.JavaScript有哪七种内置数据类型?

52.JavaScript类型判断,常用的方法有哪些?它们之间的区别和联系?

53.instanceof是做什么的,能用代码实现一个instanceof吗?

54.如果在浏览器中使用原生ES模块方案,需要在标签上添加什么属性?

55.对JavaScript模块化的发展有什么看法

56.模块化对于”循环引用”的处理有什么不同的表现吗?

57.ES模块化导出有哪两种方式?建议使用哪种?为什么?

58.全局环境下的this,箭头函数的this,构造函数的this等,各自是什么?

59.请用一句话总结this的指向

Last updated on