面试题精选汇总(实时更新)(评论区欢迎补充)

 1. 数组扁平化去重

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

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})

 2. 关于async/await、promise和setTimeout的执行顺序

async function async1() {
	console.log('async1 start');
	await async2();
	console.log('asnyc1 end');
}
async function async2() {
	console.log('async2');
}
console.log('script start');
setTimeout(() => {
	console.log('setTimeOut');
}, 0);
async1();
new Promise(function (reslove) {
	console.log('promise1');
	reslove();
}).then(function () {
	console.log('promise2');
})
console.log('script end');
script start
async1 start
async2
promise1
script end
asnyc1 end
promise2
setTimeOut

3. Set、Map、WeakSet 和 WeakMap 的区别?

Set——对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用

WeakSet——成员都是对象;成员都是弱引用,可以被垃圾回收机制回收,可以用来保存 DOM 节点,不容易造成内存泄漏;

Map——本质上是键值对的集合,类似集合;可以遍历,方法很多,可以跟各种数据格式转换。

WeakMap——只接受对象最为键名(null 除外),不接受其他类型的值作为键名;键名是弱引用,键值可以是任意的,键名所指向的对象可以被垃圾回收, 此时键名是无效的;不能遍历,方法有 get、set、has、delete。

4. 深度优先遍历和广度优先遍历

深度优先遍历——是指从某个顶点出发,首先访问这个顶点,然后找出刚访问 这个结点的第一个未被访问的邻结点,然后再以此邻结点为顶点,继续找它的 下一个顶点进行访问。重复此步骤,直至所有结点都被访问完为止。

广度优先遍历——是从某个顶点出发,首先访问这个顶点,然后找出刚访问这 个结点所有未被访问的邻结点,访问完后再访问这些结点中第一个邻结点的所 有结点,重复此方法,直到所有结点都被访问完为止。

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

promise 构造函数是同步执行,then 方法是异步执行

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

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

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

1、由 React 控制的事件处理程序,以及生命周期函数调用 setState 不会同步更新 state 。 2、React 控制之外的事件中调用 setState 是同步更新的。比如原生 js 绑定的事 件,setTimeout/setInterval 等。

 8. 有以下 3 个判断数组的方法,请分别介绍它们之间 的区别和优劣

Object.prototype.toString.call()

每一个继承 Object 的对象都有 toString 方法,如果 toString 方法没有重写的话,会返回 [Object type],其中 type 为对象的类型。但当除了 Object 类型的 对象外,其他类型直接使用 toString 方法时,会直接返回都是内容的字符串, 所以我们需要使用 call 或者 apply 方法来改变 toString 方法的执行上下文。

这种方法对于所有基本的数据类型都能进行判断,即使是 null 和 undefined 。

常用于判断浏览器内置对象时。

instanceof 

instanceof 的内部机制是通过判断对象的原型链中是不是能找到类型的 prototype。 使用 instanceof 判断一个对象是否为数组,instanceof 会判断这个对象的原型 链上是否会找到对应的 Array 的原型,找到返回 true,否则返回 false。

[] instanceof Array; // true

但 instanceof 只能用来判断对象类型,原始类型不可以。并且所有对象类型 instanceof Object 都是 true。

[] instanceof Object; // true

Array.isArray()

功能:用来判断对象是否为数组 instanceof 与 isArray 当检测 Array 实例时,Array.isArray 优于 instanceof ,因为 Array.isArray 可以 检测出 iframes

  • 19
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YG·玉方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值