找工作季——人人面试

时间:2022-01-06 18:50:05

人人一面

弱类型

AJAX

JSON怎么解析的

人人二面

1、String字符串的方法  变成unicode编码charCodeAt()

2、Object的一些方法怎么创建一个空的对象。Var temp={};创建的其实不是空的,那怎么创建空的呢?

Create()、is()判断两个值是否是同一个值、keys()返回一个由给定对象的自身可枚举属性组成的数组。

Var temp={};创建的其实不是空的。因为这样创建的对象,他的_proto_属性是Object,也就是说创建的这个空对象有原型。

创建纯净空的话,可以用Object.create(null)

3、 border只设置宽度不设置高度什么效果?

是黑色的边框

This指向问题

为什么用this?

因为this提供了一种更优雅的方式来隐士传递一个对象引用,使用this会变得简洁并且易于复用。

什么是this?

This是在运行的时候绑定的,上下文取决于函数调用方式。

当一个函数被调用时,会创建一个活动记录(执行上下文)。这个记录会包含函数在哪里被调用、函数的调用方式、传入的参数等信息。This就是这个记录的一个属性,会在函数执行的过程中用到。

This绑定规则

默认绑定:独立函数调用。可以把这条规则看作是无法应用其他规则时的默认规则。指向全局对象,window或global。函数foo定义非严格模式下,默认绑定才能绑定到全局对象;严格模式下,this指向undefined。

隐式绑定:对象属性引用链中只有上一层或最后一层调用位置中起作用。

隐式丢失,会丢失绑定对象。会应用默认绑定,把this绑定到全局对象或者undefined上。

Function foo(){

       Console.log(this.a);

}

Var obj={

       a:2,

       foo:foo

}

Var bar=obj.foo;

Var a=”oops”;

Bar();//oops

 

Function foo(){

       Console.log(this.a);

}

Function doFoo(fn){

       Fn();//foo函数的调用用位置

}

Var obj={

       a:2,

       foo:foo

}

Var a=”oops”;

doFoo(obj.foo);//oops


参数传递其实是一种隐式赋值。我们传入函数时会被隐式赋值。传引用的时候,会把引用赋值给一个局部变量。这个局部变量改变,这个引用也会改变。此时局部变量作为函数调用的时候,this指针指向的就是window。

显示绑定:call、apply、bind

New绑定:实际上不存在构造函数,只有对于函数的构造调用。New来调用函数或发生构造函数调用时,会自动指行4个操作。其中有this绑定到新对象上。

优先级:new>显示绑定>隐式绑定

This词法:箭头函数

箭头函数不使用this绑定规则,根据外层作用域来决定this。箭头函数会继承外层函数调用的this绑定。(箭头函数的绑定无法修改)用词法作用域取代了this机制。

Function foo(){

       Return(a)=>{

              Console.log(this.a);

}

}
var obj1={a:2};

Var obj2={a:3}

Var bar=foo.call(obj1);
Bar.call(obj2);//2    foo()内部创建的箭头函数会捕获调用时foo()的this。

人人三面

1、 在项目中后台处理的数据很多的时候,页面一直等着吗?想想怎么优化

2、 302表示临时重定向,怎么做的呢?如果重定向到b。b又重定向到a会发生什么?

当访问到这个网页的时候,服务器会告诉浏览器去另一个页面访问。随后浏览器重新发送请求,请求页面。

浏览器会提示太多的重定向,显示一个错误页面

3、 Cookie定义 作用

Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行Session跟踪而储存在用户本地终端上的数据(通常经过加密)

4、 http无状态怎么理解

"无状态"HTTP协议不具备保存之前发送过的请求或响应的功能。

无状态是指,当浏览器发送请求给服务器的时候,服务器响应,但是同一个浏览器再发送请求给服务器的时候,他会响应,但是他不知道你就是刚才那个浏览器,简单地说,就是服务器不会去记得你,所以是无状态协议。

5、 禁用cookie怎么办?

用到URL重写了,这种方法让服务器收到的每个请求中都带有sessioinId。

使用隐藏表单域。添加一个隐藏字段,以便在表单提交时能够把sessionid传到服务器。

6、 304缓存和cache-control的缓存有什么区别?

304缓存是对比缓存。需要向服务器发送请求。用响应头中的last-modified字段标识数据最新更改的时间,和请求头中的last-modified-since的时间对比。如果不一致,表示缓存已经更新。

Cache-control缓存。表示强制缓存。Max-age设置的时间,是表示在这一段时间之内都可以用这个缓存,不需要向服务器发送请求。

7、 http协议的请求字段里都有什么?

包含一些客户端环境和请求正文的有用信息。

Accept 表示客户端想要接受的数据类型

Accept-Encoding:用于告诉服务器,客户机支持的数据压缩格式

Connection 表示处理完这次请求后是否断开连接还是继续保持连接

Content-length 请求正文的长度。

Cookie 缓存用户状态

Date 当前值

User-agent 表示浏览器的软件环境,是windows或者mac系统什么的

Referer 表示请求是从哪个资源来访问服务器的。

If-modified-since 资源的缓存时间

 

响应字段中都有什么?

包含一些和相应内容相关的信息

Server 表示服务器的类型

Content-length 表示浏览器发送数据的长度

Content-ecoding 表示服务端发送的数据用的压缩格式

Content-type 表示浏览器发送的数据的类型

Last-modified 资源最后缓存的时间

Refresh 告诉浏览器隔多长时间刷新一次

 

8、 短轮询、长轮询和WebSocket

这三个的作用都是向客户端向服务端询问数据,获得相应的技术。

短轮询:就是每隔一段时间就向服务器发送请求。询问服务器是否有新信息。

缺点:消息交互的实时性较低;发送的请求有些是无用的,浪费资源。

长轮询:和短轮询差不多,都是采用轮询的方式,不过采取的阻塞模式,也就是说客户端发起请求后,会停留一段时间。如果没消息,就一直不返回响应;知道有消息后,才返回响应。这是断开连接;客户端会再次发送请求,周而复始。

缺点:服务端没有数据到达时,http连接会停留一段时间,这样会一直占用服务器的资源,造成服务器资源浪费。

短轮询和长轮询都体现出了http协议的被动性。也就是说,浏览器发起请求,服务端发送一个响应,这意味着浏览器发送新请求前,服务器不会发送新信息给客户端浏览器。

WebSocket:WebSocket 是 html5 规范发布的新协议,和 http协议完全是两个不同的概念,或者说基本没关系;WebSocket 协议 和 http协议的唯一联系点在于,WebSocket 协议为了兼容现有浏览器的握手规范而采用了 http协议中的握手规范以建立WebSocket连接;

2)WebSocket协议:其客户端与服务器建立的是 持久连接;

3)WebSocket 解决了 HTTP 的几个难题

3.1)难题1(http协议的被动性):采用 WebSocket 协议后,服务器可以主动推送消息给客户端;而不需要客户端以(长/短)轮询的方式发起http请求到server以获取数据更新反馈;这样一来,客户端只需要经过一次HTTP请求,就可以做到源源不断的信息传送了(在程序设计中,这种设计叫做回调,即:server端有信息了再来通知client 端,而不是 client 端每次都傻乎乎地跑去轮询server端 是否有消息更新);

3.2)难题2(http协议的无状态性/健忘性):短轮询是每次http请求前都要建立连接,而长轮询是相邻几次请求前都要建立连接;http请求响应完成后,服务器就会断开连接,且把连接的信息全都忘记了;所以每次建立连接都要重新传输连接上下文(下面有补充),将 client 端的连接上下文来告诉server 端;而 WebSockct只需要一次HTTP 握手,整个通讯过程是建立在一次连接(状态)中的,server 端会一直推送消息更新反馈到客户端,直到客户端关闭请求,这样就无需 客户端为发送消息而建立不必要的 tcp 连接 和 为了建立tcp连接而发送不必要的冗余的连接上下文消息;

4)连接上下文补充:连接上下文,如限定客户端和服务器平台的所有头信息,认证属性,负载描述等