前段时间在 GitHub 中建了一个 Daily-Interview-Question 项目, 每天提供一道高频面试题给大家, 帮助大家查漏补缺, 今天就把最近半月汇总的面试题和部分答案发给大家, 希望对大家有所帮助.
欢迎 PR 你认为不错的面试题, 欢迎在项目 Issue 区留下你的答案, 共同参与这个项目, 由于时间问题, 我只提供题目, 答案暂由小伙伴们提供.
项目地址是:
每日面试题
第 1 期: 写 React / vue 项目时为什么要在组件中写 key, 其作用是什么
解析: 第一题: key 的作用是为了在 diff 算法执行时更快的找到对应的节点, 提高 diff 速度.
第 2 期:
- ['1', '2', '3'].map(parseInt)
- what & why ?
解析: 第二题:['1', '2', '3'].map(parseInt) 解析
第 3 期: 什么是防抖和节流? 有什么区别? 如何实现?
解析: 第三题: 节流和防抖的个人见解
第 4 期: 介绍下 Set,Map,WeakSet 和 WeakMap 的区别?
解析: 第四题: Set,Map,WeakSet 和 WeakMap
第 5 期: 介绍下深度优先遍历和广度优先遍历, 如何实现?
解析: 关于第五题我的一些见解
第 6 期: 请分别用深度优先思想和广度优先思想实现一个拷贝函数?
解析: 第六题 实现深度拷贝
第 7 期: ES5/ES6 的继承除了写法以外还有什么区别?
欢迎在 Issue 区留下你的答案.
第 8 期: setTimeout,Promise,Async/Await 的区别
欢迎在 Issue 区留下你的答案.
第 9 期: Async/Await 如何通过同步的方式实现异步
欢迎在 Issue 区留下你的答案.
第 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');
解析: 关于第 10 题的一些见解
第 11 题: 算法手写题
已知如下数组:
var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
编写一个程序将数组扁平化去并除其中重复部分数据, 最终得到一个升序且不重复的数组
解析: 第 11 题: 将数组扁平化并去除其中重复数据, 最终得到一个升序且不重复的数组
第 12 题: JS 异步解决方案的发展历程以及优缺点.
解析: 第十二题
第 13 题: Promise 构造函数是同步执行还是异步执行, 那么 then 方法呢?
第 14 题: 情人节福利题, 如何实现一个 new
解析: 14 题 情人节快乐!
交流
进阶系列文章汇总如下, 内有优质前端资料, 觉得不错点个 star.
https://github.com/yygmind/blog
我是木易杨, 网易高级前端工程师, 跟着我每周重点攻克一个前端面试重难点. 接下来让我带你走进高级前端的世界, 在进阶的路上, 共勉!
来源: https://juejin.im/post/5c6977e46fb9a049fd1063dc