第一周笔试题

210 阅读9分钟

一、HTML5的离线储存怎么使用,工作原理能不能解释一下?**

  1. 在用户没有与因特网连接时,可以正常访问站点或应用,在用户与因特网连接时,更新用户机器上的缓存文件

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

  3. 如何使用:在cache.manifest文件的编写离线存储的资源 在离线状态时,操作window.applicationCache进行需求实现

    二、js字符串操作函数? **

  • concat() – 将两个或多个字符的文本组合起来,返回一个新的字符串。

用法:var a = [1,2,3]; document.write(a.concat(4,5));

  • **indexOf() – 返回字符串中一个子串第一处出现的索引。如果没有匹配项,返回 -1 **。

用法:var str="Hello world!" document.write(str.indexOf("Hello") + "
"); document.write(str.indexOf("World") + "
"); document.write(str.indexOf("world"));

  • charAt() – 返回指定位置的字符。

    用法:var str="hello world"; document.write(str.charAt(1));

  • **lastIndexOf() – 返回字符串中一个子串最后一处出现的索引,如果没有匹配项,返回 -1 **。

用法:var a=[1,2,3,4,5,6,7,8,9]; document.write(a.lastIndexOf(7));

  • substr() 函数 -- 返回从string的startPos位置,长度为length的字符串

用法:var atr ="Apple, Banana, Mango";

​ var str=atr.substr(7,13);

  • substring() – 返回字符串的一个子串。传入参数是起始位置和结束位置。

用法:var atr ="Apple, Banana, Mango";

​ var str=atr.substring(7,13);

  • slice() – 提取字符串的一部分,并返回一个新字符串

用法:var a=[1,2,3,4,5,6,7,8,9,10]; console.log(a); document.write(a.slice(0,8));//多一部分都是从下标开始, (start。value:可以是0 end.value:结束数值);

  • replace() – 用来查找匹配一个正则表达式的字符串,然后使用新字符串代替匹配的字符串。

用法:var str="hello world"; document.write(str.replace(/hello/,"w3c")); 替换方式:output(outputName.replace(/replaceName/,"methodname"))

  • search() – 执行一个正则表达式匹配查找。如果查找成功,返回字符串中匹配的索引值。否则返回 -1 。

  • split() – 通过将字符串划分成子串,将一个字符串做成一个字符串数组。

用法:var str="How are you doing today?" document.write(str.split(" ") + "
"); document.write(str.split("") + "
"); document.write(str.split(" ",3));

  • length – 返回字符串的长度,所谓字符串的长度是指其包含的字符的个数

用法:var arr = "I,Love,You,Do,You";**

​ var brr=arr.length;

  • toLowerCase() – 将整个字符串转成小写字母。

用法:var str="Hello World!" document.write(str.toLocaleLowerCase());

  • toUpperCase() – 将整个字符串转成大写字母

用法:var str="Hello World!" document.write(str.toLocaleUpperCase());

三、请使用冒泡排序算法为下列数组排序**

思路:比较两个相邻的元素,如果后一个比前一个大,则交换位置

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

function sort(element){

​ //外层循环,控制行数

​ //外层循环 控制比较次数,判断两个数的大小

​ for(var i = 0;i<element.length-1;i++) { ​ for(var j = 0;j<element.length-i-1;j++){

​ //如果前面的数大,放到后面

​ if(element[j]>element[j+1]){ ​ //把大的数字放到后面 ​ var swap = element[j]; ​ element[j] = element[j+1]; ​ element[j+1] = swap; ​ } ​ } ​ } ​ } ​ sort(element); ​ console.log("after:"+element);

四、简述你所知道的前端页面级性能优化**

1、减少http请求,合理浏览器缓存

**2、启用压缩:**HTML、CSS、javascript文件启用GZip压缩可达到较好的效果

**3、CSS Sprites:**合并 CSS图片,减少请求数的又一个好办法。 **4、LazyLoad Images:**在页面刚加载的时候可以只加载第一屏,当用户继续往后滚屏的时候才加载后续的图片 **5、CSS放在页面最上部,javascript放在页面最下面:**让浏览器尽快下载CSS渲染页面 6、异步请求Callback(就是将一些行为样式提取出来,慢慢的加载信息的内容)

7、减少cookie传输 一方面,cookie包含在每次请求和响应中,太大的cookie会严重影响数据传输,因此哪些数据需要写入cookie需要慎重考虑,尽量减少cookie中传输的数据量。另一方面,对于某些静态资源的访问,如CSS、script等,发送cookie没有意义,可以考虑静态资源使用独立域名访问,避免请求静态资源时发送cookie,减少cookie传输次数。

8、Javascript代码优化

9、CSS选择符优化

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

方法一(使用递归函数):

var` `arr = [9,8,55,66,49,68,109,55,33,6,2,1];`` ` `var` `max = arr[0];` `function` `findMax( i ){`` ``if``( i == arr.length ) ``return` `max;`` ``if``( max < arr[i] ) max = arr[i];`` ``findMax(i+1);``}`` ` `findMax(1);``console.log(max);

方法二(使用for循环遍历):

var` `arr = [9,8,55,66,49,68,109,55,33,6,2,1]; ``var` `max = arr[0];``for``(``var` `i = 1; i < arr.length; i++){`` ``if``( max < arr[i] ){``  ``max = arr[i];`` ``}``}` `console.log(max);

方法三(使用apply将数组传入max方法中直接返回):

Math.max.apply(``null``,[9,8,55,66,49,68,109,55,33,6,2,1])

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

运用js查找摸个字符串出现的位置以及次数indexOf

var str = 'abcabcabcabcabcabda'; var index = str.indexOf('ab'); // 字符出现的位置 var num = 0; // 这个字符出现的次数 while(index !== -1) { console.log(index); // 打印字符串出现的位置 num++; // 每出现一次 次数加一 index = str.indexOf('ab',index + 1); // 从字符串出现的位置的下一位置开始继续查找 } console.log('一共出现了' + num + '次');

七、清除浮动的几种方式,各自的优缺点?**

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

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

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

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

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

img

2.父级div定义overflow:hidden

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

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

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

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

img

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

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

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

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

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

img

4、*父级div定义height*

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

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

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

img

5、*父级div定义overflow:auto*

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

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

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

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

img

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

img

  1. setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。
  2. setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。 setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。

九、解释css sprites,如何使用?**

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

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

用CSS sprites的好处有以下几bai点: 1、减少了图du片zhi个数,这样减小了dao对服务器的请求。 2、整个图片的变小了,使得图片下载速度更快。

#beauty { width:225px; height:248px; text-decoration:none; display:block; background-image:url(../images/demo/2010/beauty.jpg); background-position:0 0; } #beauty:hover,#beauty:active { background-position:225px 0; } 将光标移动到下图上即可看到我们使用CSS sprites实现的功能。

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

  1. 只提交input,的话,给input设置一个键盘事件,就可以了,

  2. 表单支持回车提交: 我们只需要在按下回车的时候,用js将焦点设置到页面中的某一个input上,那么及时按回车之前,我们的焦点是整个页面,按回车的时候,焦点已自动转移到某一个input标签上,浏览器也会自动帮我们提交了。

js代码:

​```
<body>
		<input type="button" value="回车提交" id="auto" onclick="alert('你按了回车')"/>
	</body>

	<script type="text/javascript">
	    if((e.keyCode || e.which) == 13){
            var focusinput=document.getElementById("title")  //请根据自身页面情况选择一个input id名,我这里是title
            focusinput.focus();//获取焦点
        }
</script>

​```

vue : 给form里的元素,设置双向数据绑定,按下回车键,获取,绑定的数据就可以了