面经练习(十一)
1.常考的算法题:旋转矩阵
var rotate = function(matrix) {
let martrixLength = matrix.length
for(let i=0; i < martrixLength; i++) {
for(let j=i; j < martrixLength; j++) {
let temp = matrix[i][j]
matrix[i][j] = matrix[j][i]
matrix[j][i] = temp
}
}
return matrix.map(item => item.reverse())
};
2.vue中 methods和computed的区别
3.new Object 和{}的区别
本质没什么区别
只是创建速度 {}略大于new Object
{}是字面量,可以立即求值,而new Object()本质上是方法(只不过这个方法是内置的)调用,既然是方法调用,就涉及到在proto链中遍历该方法,当找到该方法后,又会生产方法调用必须的堆栈信息,方法调用结束后,还要释放该堆栈
4.一道输入输出题:
let a = 20;
var b = 30;
console.log(a, b, c, window.a, window.b, window.c, window.d);
var c = 40;
let d = 50;
输出结果
let a = 20;
window.a 为undefined 要注意
5.flex布局解决了什么问题
在不同的屏幕上实现了真正的响应式布局:不再单纯地依赖百分比和float的强拼硬凑来达到设计需求,在各个屏幕上显示效果友好,弹性的伸缩元素,简洁易维护的代码。
6.flex里面的basis
主要是basis为期望flex item的大小 当其与width共同存在时,会忽略width
但是flex-basis的值会受 min-width 和 max-width影响
7.this指向理解
按照下面的顺序判断
1.函数是否在new中调用(new绑定)?如果是的话this绑定的是新创建的对象。var bar = new foo()
2.函数是否通过call、apply(显示绑定)或者硬绑定调用?如果是的话,this绑定的是指定的对象 var bar = foo.call(obj2)
3.函数是否在某个上下文对象中调用(隐式绑定)?如果是的话,this绑定的是那个上下文对象。var bar = obj1.foo()
4.如果都不是的话,使用默认绑定。如果在严格模式下,就绑定到undefined,否则绑定到全局对象 var bar = foo()
8. input:[1,2,3,3,2,4,5] output:[1,4,5]
let arr = [1, 2, 3, 4, 2, 3, 3, ];
let res = arr.filter(item => arr.indexOf(item) === arr.lastIndexOf(item))
console.log(res);
9.怎么理解HTTP协议是无状态的无连接的的协议
怎么理解HTTP协议是无状态的无连接的的协议
实际中的使用情况:
在web应用中,我们使用http协议,但是我们需要的web是有状态的,因此加入了cookie、session等机制实现有状态的的web。
web=http协议+状态机制+其他机制
为什么不改进http协议使之有状态:
最初的http协议只是用来浏览静态文件的,无状态协议已经足够,这样实现的负担也很轻(相对来说,实现有状态的代价是很高的,要维护状态,根据状态来操作。)。随着web的发展,它需要变得有状态,但是不是就要修改http协议使之有状态呢?是不需要的。因为我们经常长时间逗留在某一个网页,然后才进入到另一个网页,如果在这两个页面之间维持状态,代价是很高的。其次,历史让http无状态,但是现在对http提出了新的要求,按照软件领域的通常做法是,保留历史经验,在http协议上再加上一层实现我们的目的(“再加上一层,你可以做任何事”)。所以引入了其他机制来实现这种有状态的连接。
10.class里面的constructor和super
-
super 当做函数使用:
在 constructor 中必须调用 super 方法,因为子类没有自己的 this 对象,而是继承父类的 this 对象,然后对其进行加工,而 super 就代表了父类的构造函数。super 虽然代表了父类 A 的构造函数,但是返回的是子类 B 的实例,即 super 内部的 this 指的是 B,因此 super() 在这里相当于 ```A.prototype.constructor.call(this, props)`` -
super当做对象使用:
子类 B 当中的 super.c(),就是将 super 当作一个对象使用。这时,super 在普通方法之中,指向 A.prototype,所以 super.c() 就相当于 A.prototype.c()。
11.http协议 和 socket协议
我们都知道html5新增了 websocket
http协议 建立tcp连接后只有客服端主动发起请求后,服务端才会发起响应
而websocket 是双向的,建立tcp连接后,服务端和客户端都可以主动向对方发送消息,这个tcp连接是一个长连接通道。
websocket应用场景:
1.服务端的状态变更需要立即通知到客户端的,可以用websocket传递消息,在websocket之前,都是用客户端进行轮询请求,查看客户端是否有状态变化
2.一般用于聊天室,状态变更比较频繁的股票等。