前端面试真题解读2

this代表谁的问题 call apply bind 区别

  • 不解释了,讲过很多遍

用过jquery的proxy么?

  • 在某些情况下,我们调用Javascript函数时候,this指针并不一定是我们所期望的那个,比如定时器中的this;
  • 但是,在使用了jquery框架的情况下, 有一种更好的方式,就是使用$.proxy函数。
  • jQuery.proxy(),接受一个函数,然后返回一个新函数,并且这个新函数始终保持了特定的上下文(context )语境。所以,
    语法:jQuery.proxy( function, context )
//$.proxy类似于我们之前封装的processThis,都是用来保证正确的this指向;
$('#myElement').click(function() {

    setTimeout($.proxy(function() {

        $(this).addClass('aNewClass');  

    }, this), 1000);
});

jquery的事件绑定和解绑的原理

  • 事件库
  • (我要求大家能把:订阅发布+事件库 完整的写下来)

js数组和php数组的关系

一:数组
a、js定义数组:

var arr = new Array(); //定义空数组 
var arr = new Array(2); //仅指定长度,而且指定的长度没多大意义 
var arr = new Array(1,2,3); //定义数组并赋初值1,2,3 
var arr = [1,2,3]; //同上,不过比上面的速度快 

*:js数组只能通过'[]'访问属性。

b、php定义数组:

$arr = array(); //定义空数组 
$arr = array(1); //与js不同,这里是给键值0的值 
$arr = array(1,2,3); //定义数组并赋值1,2,3 
$arr = [1,2,3]; //同上,速度不知与js是否有异曲同工之妙?另高版本的php才支持这种写法 

*:php能通过'[]'和'{}'访问。

** 参考地址** http://blog.csdn.net/stpeace/article/details/50734548

对象和数组的关系

1、数组表示有序数据的集合,而对象表示无序数据的集合。
2、数组的数据没有”名称”(name),对象的数据有”名称”(name);
3、数组是对象的子类,就是说对象的一些特性数组都会继承,只不过数组扩展了很多自己独有的属性和方法。

画js盒模型 css3盒模型

  • js盒子模型:指的是通过js中提供的一系列的属性和方法,获取页面中元素的样式信息值:
    • client系列 offset系列 scroll系列
  • css的两种盒模型content-box 和 border-box 参考如下链接中的图
    ()[http://jingyan.baidu.com/article/48b558e32ea8a97f38c09a9e.html]

了解跨域么?你知道哪几种跨域? jsonp为什么只能是get请求。 cors 怎么实现等。服务器设置的头 支持正则么

了解跨域么?

域名A中的JS代码AJAX请求域名为B的服务器数据,这就是跨域AJAX请求,默认情况下是不行的。
但是HTML中有地方可以跨域请求,比如img script标签,它们的src属性指向的地址可以是不在域名A下的(即跨域)。

你知道哪几种跨域?

1、 图像ping
图像ping是与服务器进行简单,单项的跨域通信的一种方式

var img=new Image();
img.onload=img.onerror=function(){
alert("done")
}
img.src="http://www.example.com/test?name=sl";

2、jsonp(最实用) jsonp是通过动态

4、通过修改document.domain来跨子域

  • 在页面 http://www.example.com/a.html 中设置document.domain:


5、使用window.name来进行跨域

  • window对象有个name属性,该属性有个特征:即在一个窗口(window)的生命周期内,窗口载入的所有的页面都是共享一个window.name的,个页面对window.name都有读写的权限,window.name是持久存在一个窗口载入过的所有页面中的,并不会因新页面的载入而进行重置。

6、CORS

cors 怎么实现?
  • 核心思想:在服务器端通过检查请求头部的origin,从而决定请求应该成功还是失败。具体的方法是在服务端设置Response Header响应头中的Access-Control-Allow-Origin为对应的域名,实现了CORS(跨域资源共享)
  • 这里出于在安全性方面的考虑就是尽量不要用 *,但对于一些不重要的数据则随意。
jsonp为什么只能是get请求
  • jsonp的核心:script中src能够跨域获得内容的方式(src中请求都是GET);
  • 具体原因如下:

    拼接一个script标签,,从而触发对指定地址的GET请求
    那服务器端对这个GET请求进行处理,并返回字符串 "myCallback('response value')"
    那前端script加载完之后,其实就是在script中执行myCallback('response value')
    是不是就完成了跨域的请求,
    是不是就是只能用GET

跨域请求时会自动发送凭证信息么?

  • 不会,若让请求自动带上凭证,需要将withCredentials属性设置为true。
  • 需要服务器端支持,设置Access-Control-Allow-Credentials=true响应头;

如何传递cookie或token等验证信息?

  • 后端服务器有两种基本的身份验证:
    1、是基于Cookie的身份验证,使用服务器端的cookie来对每次请求的用户进行身份验证。
    2、较新的方法,基于令牌Token的认证,依赖于被发送到服务器上每个请求的签署令牌。
  • 每一次请求都需要token。token应该在HTTP的头部发送从而保证了Http请求无状态。我们同样通过设置服务器属性Access-Control-Allow-Origin:* ,让服务器能接受到来自所有域的请求。

web前端怎么用代码实现缓存优化?

针对浏览器设置过期时间,在这个时间内的请求都会先请求本地缓存的文件和数据。另外jquery的ajax请求方式可以设置是否缓存(cache:true),可以充分利用该选项。

后台如何实现缓存?

  • 无论什么后台语言,想实现缓存,把它放在redis/memcached等缓存里都是最好的选择;

缓存的代码上线后如何里面让其生效?

构建工具会帮助给js等文件加md5值

写个布局, 左面导航的高度和右侧内容的高度保持一致,如何做?

  • 参考地址http://www.cnblogs.com/mianbaodaxia/p/6256871.html

讲讲各种状态码。 304需要服务器端么? Etag和那个匹配等?

讲讲各种状态码。
  • 常见HTTP状态码

1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态码。
2xx(成功)表示成功处理了请求的状态码。200(成功):服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。
3xx(重定向)要完成请求,需要进一步操作。
301(永久移动):请求的网页已永久移动到新位置。
302(临时移动):服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来响应以后的请求。
304(未修改):自从上次请求后,请求的网页未修改过。
4xx(请求错误)这些状态码表示请求可能出错,妨碍了服务器的处理。
400(错误请求):服务器不理解请求的语法。404(未找到):服务器找不到请求的网页。
5xx(服务器错误)这些状态码表示服务器在处理请求时发生内部错误。
500(服务器内部错误):服务器遇到错误,无法完成请求。
503(服务不可用):服务器目前无法使用(由于超载或停机维护)

304需要服务器端么?
  • 服务器首先产生ETag,服务器可在稍后使用它来判断页面是否已经被修改。本质上,客户端通过将该记号传回服务器要求服务器验证其(客户端)缓存。

304是HTTP状态码,服务器用来标识这个文件没修改,不返回内容,浏览器在接收到个状态码后,会使用浏览器已缓存的文件;

Etag和那个匹配等?

Etag 和 If-None-Match 对应 Last-Modified 和 If-Modified-Since 对应

你可能感兴趣的:(前端面试真题解读2)