@greenfavo
2016-10-27T14:40:04.000000Z
字数 3273
阅读 738
面试
http get和post方法区别
//get
1,从服务器上请求资源
2,请求可以被缓存
3,请求可以保留在历史记录中
4,会显示在浏览器地址栏中,不应在处理敏感数据时使用
5,有长度限制,主要是URL长度的限制,最大2048kb
//post
1,向服务器提交要被处理的数据
2,不能保留在历史记录中
3,对数据的请求长度没有限制
4,数据不会显示找URL中
http的一些缓存头
//缓存协商阶段
Last-Modified/if-modified-since
ETag/If-None-Match
//本地缓存阶段
Cache-Control/Expires
浏览器判断缓存的完整过程
1,本地缓存阶段:先在本地查找该资源,如果有发现该资源,而且该资源还没有过期,就使用这一个资源,完全不会发送http请求到服务器;
2,协商缓存阶段:如果在本地缓存找到对应的资源,但是不知道该资源是否过期或者已经过期,则发一个http请求到服务器,然后服务器判断这个请求,如果请求的资源在服务器上没有改动过,则返回304,让浏览器使用本地找到的那个资源;
3,缓存失败阶段:当服务器发现请求的资源已经修改过,或者这是一个新的请求(在本来没有找到资源),服务器则返回该资源的数据,并且返回200, 当然这个是指找到资源的情况下,如果服务器上没有这个资源,则返回404。
有哪些缓存头可以返回304状态码
Last-Modified/if-modified-since
ETag/If-None-Match
响应头有哪些字段
Content-Length:8056
Content-type:image/png
Date:Tue, 03 May 2016 18:06:30 GMT
Expires:Wed, 03 May 2017 18:06:30 GMT
Last-Modified:Thu, 21 Apr 2016 03:17:22 GMT
Cache-Control:public, max-age=31536000
css全称是什么?层叠是怎么体现的
层叠样式表,层叠体现在后定义的样式会覆盖前面的样式,优先级高的样式会覆盖优先级低的样式
css样式的优先级,选择器的优先级
//优先级递增的选择器列表
1,通用选择器(*)
2,元素(类型)选择器(p,h1)
3,类选择器(.class)
4,属性选择器(input[type='text'])
5,伪类(:first-letter ::after)
6,id选择器
7,内联样式
设置了!important的样式为什么优先级最高
当 !important 规则被应用在一个样式声明中时,该样式声明会覆盖CSS中任何其他的声明, 无论它处在声明列表中的哪里
各个选择器混合使用时的优先级怎么判断
一个行内样式+1000,一个id+100,一个属性选择器/class类/伪类选择器+10,一个元素名/伪对象选择器+1。
权重越大优先级越高
清除浮动的几种方法
//1
.parent{
overflow:hiddlen;
}
//2
div::before{
content:'';
clear:both;
}
//3
.parent{
float:left
}
BFC是什么?还有什么能触发BFC
BFC是块级格式上下文
//哪些元素会生成BFC
float(除了none)
overflow(除了visible)
display(table-cell/table-caption/inline-block)
position为absolute或fixed
ajax readyState有几个值?分别代表什么意思?
0;//请求未初始化
1;//服务器已建立连接
2;//请求已接收
3;//请求处理中
4;//请求已完成且响应已就绪
字符串转成数字的几个方法?除了parseInt还有什么
parseInt('1');//1
Number('1');//1
+'1';//1
js数组的api有哪些?
concat()
join()
pop,push
reverse()
shift,unshift
slice,splice
添加节点的方法?用原生js模拟jquery的after方法
function insertAfter(newElement,referenceElement) {
var parent=referenceElement.parentNode;
parent.insertBefore(newElement, referenceElement.nextSibling);
}
合并2个数组的方法?除了concat,一行代码实现
var a1=[1,2,3],a2=[4,5,6];
Array.prototype.push.apply(a1,a2);//方法1
a1.push(...a2);//方法2 用es5的扩展参数
//gulp和grunt的异同点
1,易于使用:采用代码优于配置策略,Gulp让简单的事情继续简单,复杂的任务变得可管理。
2,高效:通过利用Node.js强大的流,不需要往磁盘写中间文件,可以更快地完成构建。
3,高质量:Gulp严格的插件指导方针,确保插件简单并且按你期望的方式工作。
易.于学习:通过把API降到最少,你能在很短的时间内学会Gulp。构建工作就像你设想的一样:是一系列流管道。
数组去重算法
function unique(arr) {
var result=[];
var hash={};
arr.forEach( function(element, index) {
var key=element+typeof element;
if (hash[key]!==true) {
result.push(element);
hash[key]=true;
}
});
return result;
}
function prime () {
var k=0,result=[];
for(var n=2;n<=100;n==2?n++:(n+=2)){
var found=1;
for(var i=2;i<=Math.sqrt(n);i==2?i++ : (i+=2)){
if (n%i===0) {
found=0;//不是质数
break;
}
}
if (found) {
result.push(n);
}
}
return result;
}