前端常见面试题!

243 阅读6分钟
  1. HTML5的离线储存怎么使用,工作原理能不能解释一下?

HTML5的离线存储是基于一个新建的.appcache文件的,通过这个文件上的解析清单离线存储资源,这些资源就会像cookie一样被存储了下来。之后当网络在处于离线状态下时,浏览器会通过被离线存储的数据进行页面展示。

  1. js字符串操作函数?

concat() (康开特) – 将两个或多个字符的文本组合起来,返回一个新的字符串。 indexOf() – 返回字符串中一个子串第一处出现的索引。如果没有匹配项,返回 -1 。 charAt() (扯儿特)– 返回指定位置的字符。 lastIndexOf() – 返回字符串中一个子串最后一处出现的索引,如果没有匹配项,返回 -1 。 match() (嘛吃) – 检查一个字符串是否匹配一个正则表达式。 substring() (塞博死蠢)– 返回字符串的一个子串。传入参数是起始位置和结束位置。 replace() (瑞普雷斯) – 用来查找匹配一个正则表达式的字符串,然后使用新字符串代替匹配的字符串。 search() – 执行一个正则表达式匹配查找。如果查找成功,返回字符串中匹配的索引值。否则返回 -1 slice() (斯莱丝)– 提取字符串的一部分,并返回一个新字符串。 split() (丝扑累特) – 通过将字符串划分成子串,将一个字符串做成一个字符串数组。 length – 返回字符串的长度,所谓字符串的长度是指其包含的字符的个数。 toLowerCase() – 将整个字符串转成小写字母。 toUpperCase() – 将整个字符串转成大写字母.

3.请使用冒泡排序算法为下列数组排序?

var arr=[100,0.6,28,49,94,67,11];

function bubbleSort(array){ var len = array.length; for(i=0;i<len;i++){ for(j=i+1;j<len;j++){ if(array[i]>array[j]){ var temp = array[j]; //temp用来暂时存储array[j]的值 array[j]=array[i]; array[i]=temp; } } } return array; } var a = ["B","A","E","C","D"];

4.简述你所知道的前端页面级性能优化?

  • 请求数量——合并脚本和样式表,CSS Sprites,拆分初始化负载,划分主域
  • 请求带宽——开启Gzip,精简JavaScript,移除重复脚本,图像优化
  • 缓存利用——使用CDN,使用外部JavaScript和CSS,添加Expires头,减少DNS查找,配置ETag,使Ajax可缓存
  • 页面结构——将样式表放在顶部,将脚本放在底部,尽早刷新文档的输出
  • 代码校验——避免CSS表达式,避免重定向

5.减少http请求图片懒加载

懒加载原理: 一个网页可能会有成百上前张图片,如果一次性加载这么多的话,浏览器负荷量太大,很有可能会给用户造成空白页(虽然浏览器一直在加载,但是用户并不知道),所以就产生了图片懒加载,在图片即将出现在屏幕显示区域时,再发送该图片的http请求。 主要思想: 当滚动条的top值和屏幕的高度之和小于图片的距离外层div的上边线值 优化: 利用节流控制滚动条事件的次数,优化代码。

  1. 找到数组-1,-2,1,10,4,11,8中的最大值,至少 写出两种方法?

1 . var arr = [-1,-2,1,10,4,11,8]

arr.sort((a, b) => {

return b - a

})

arr[0]

2 . Math.max(...arr).

  1. 写一个方法,找出字符串abcabcabcabcabcabda中ab出现的次数置。

var str = 'abcabcabcabcabcabda' var re = new RegExp("ab", "g"); var arr = str.match(re); console.log(arr.length);

  1. 清除浮动的几种方式,各自的优缺点?

1.使用空标签清除浮动clear:both。

(1)原理:添加一个空div,利用css提高的clear:both清除浮动,让父级div能自动获取到高度

优点:通俗易懂,容易掌握

缺点:会添加很多无意义的空标签,有违结构与表现的分离,在后期维护中将是噩梦

建议:不推荐使用,但此方法是以前主要使用的一种清除浮动方法

2.父级div定义overflow:hidden

(1)原理:必须定义width或zoom:1,同时不能定义height,使用overflow:hidden时,浏览器会自动检查浮动区域的高度

优点:简单,代码少,浏览器支持好

缺点:不能和position配合使用,因为超出的尺寸的会被隐藏

建议:只推荐没有使用position或对overflow:hidden理解比较深的朋友使用.

3、父级div定义伪类:after和zoom(用于非IE浏览器)

(1)原理:IE8以上和非IE浏览器才支持:after,原理和方法1有点类似,zoom(IE转有属性)可解决ie6,ie7浮动问题

优点:浏览器支持好,不容易出现怪问题(目前:大型网站都有使用,如:腾迅,网易,新浪等等)。

缺点:代码多,要两句代码结合使用,才能让主流浏览器都支持

建议:推荐使用,建议定义公共类,以减少CSS代码

4、父级div定义height

(1)原理:父级div手动定义height,就解决了父级div无法自动获取到高度的问题。

优点:简单,代码少,容易掌握

缺点:只适合高度固定的布局,要给出精确的高度,如果高度和父级div不一样时,会产生问题.

5、父级div定义overflow:auto

(1) 原理:必须定义width或zoom:1,同时不能定义height,使用overflow:auto时,浏览器会自动检查浮动区域的高度

优点:简单,代码少,浏览器支持好

缺点:内部宽高超过父级div时,会出现滚动条。

建议:不推荐使用,如果你需要出现滚动条或者确保你的代码不会出现滚动条就使用吧。

  1. Javascript 中的定时器有那些?他们的区别及用法是什么?

setTimout (赛特特猫头) 这是定时器 用于倒计时

setInterver (瑟特因听佛) 这是计时器

  1. 解释css sprites,如何使用?

CSS Sprites其实就是把网页中一些背景图片整合到一张图片文件中,再利用CSS的“background-image”,“background- repeat”,“background-position”的组合进行背景定位,background-position可以用数字能精确的定位出背景图片的位置。

CSS Sprites为一些大型的网站节约了带宽,让提高了用户的加载速度和用户体验,不需要加载更多的图片.

如果要让表单支持回车提交表单该怎样做?

input 添加onkeydown

function keyEnter(){ if (event.keyCode == 13) { alert('OK'); } } document.onkeydown =keyEnter;