2020年前端笔试面试题(二.html)

403 阅读10分钟

二.HTML篇

1.清除浮动的几种方法?

a.使用空标签清除浮动。

  • 这种方法是在所有浮动标签后面添加一个空标签 定义css clear:both. 弊端就是增加了无意义标签。

b.使用overflow。

  • 给包含浮动元素的父标签添加css属性 overflow:auto; zoom:1; zoom:1用于兼容IE6。

c.使用after伪对象清除浮动。

  • 该方法只适用于非IE浏览器。使用中需注意以下几点。一、该方法中必须为需要清除浮动元素的伪对象中设置 height:0,否则该元素会比实际高出若干像素;二、content属性是必须的,但其值可以为空,可设置content属性的值设为”.”。

2.使用 CSS 预处理器的优缺点有哪些?

优点:

  • a.css的语法不够强大,需要重复书写很多重复的选择器.css预处理器刚好解决了这一问题。

  • b.提供变量和逻辑控制

  • c.合理的样式复用机制 减少代码的冗余

  • d.提高代码的可维护性

  • e.mixin 混入

缺点:

  • a.学习成本有点高。

  • b.使用这个预处理团队的难度加大

  • c.个人感觉是css本来就是很简单的东西,这样搞的更复杂

3.假若你有5个不同的 CSS 文件, 加载进页面的最好方式是?

  • 用一个大的css文件代替这5个css文件

4.xhtml的局限性

  • a.语法上更严格,放弃了一些语义不好的标签

  • b.必须要有head,body.标签必须闭合

  • c.一些老的浏览器并不兼容

5.如果把HTML5看做一个开放的平台,那么它构建的模块有哪些?

  • a.基于位置服务的LBS

  • b.Web Storage API

  • c.无插件播放音频和视频

  • d.调用相机和GPU图像处理单元等硬件设备

  • e.拖拽和Form AP

6.XHTML和HTML有什么区别

  • HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言

最主要的不同:

  • XHTML 元素必须被正确地嵌套。

  • XHTML 元素必须被关闭。

  • 标签名必须用小写字母。

  • XHTML 文档必须拥有根元素。

7.HTML5 为什么只需要写 !DOCTYPE HTML?

  • HTML5 不基于 SGML,因此不需要对DTD进行引用,但是需要doctype来规范浏览器的行为(让浏览器按照它们应该的方式来运行

  • 而HTML4.01基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型。

8.Doctype? 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义?

  • 用于声明文档使用那种规范(html/Xhtml)一般为严格过度基于框架的html文档。

  • 加入XMl声明可触发,解析方式更改为IE5.5 拥有IE5.5的Bug。

9.请描述一下 cookies,sessionStorage 和 localStorage 的区别?

  • cookie在浏览器和服务器间来回传递。 sessionStorage和localStorage不会

  • sessionStorage和localStorage的存储空间更大;

  • sessionStorage和localStorage有更多丰富易用的接口;

  • sessionStorage和localStorage各自独立的存储空间;

10.如何实现浏览器内多个标签页之间的通信?

  • 调用localstorge、cookies等本地存储方式

11.什么是盒子模型?

  • 在网页中,一个元素占有空间的大小由几个部分构成,其中包括元素的内容(content),元素的内边距(padding),元素的边框(border),元素的外边距(margin)四个部分.这四个部分占有的空间中,有的部分可以显示相应的内容,而有的部分只用来分隔相邻的区域或区域.4个部分一起构成了css中元素的盒模型.

12.行内元素有哪些?块级元素有哪些? 空(void)元素有那些?

1、行内元素:

  • a、b、span、img、input、strong、select、label、em、button、textarea

2、块级元素:

  • div、ul、li、dl、dt、dd、p、h1-h6、blockquote

3、空元素:

  • 即系没有内容的HTML元素,例如:br、meta、hr、link、input、img

13.简述一下src与href的区别

  • href 是指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,用于超链接。

  • src是指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置;在请求src资源时会将其指向的资源下载并应用到文档内,例如js脚本,img图片和frame等元素。当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕,图片和框架等元素也如此,类似于将所指向资源嵌入当前标签内。这也是为什么将js脚本放在底部而不是头部。

14.什么是CSS Hack?

  • 一般来说是针对不同的浏览器写不同的CSS,就是 CSS Hack。

  • IE浏览器Hack一般又分为三种,条件Hack、属性级Hack、选择符Hack(详细参考CSS文档:css文档)。例如:

1、条件Hack    <!--[if IE]>       <style>             .test{color:red;}       </style>    <![endif]-->

2、属性Hack

    .test{
    color:#0909; /* For IE8+ */
    *color:#f00;  /* For IE7 and earlier */
    _color:#ff0;  /* For IE6 and earlier */
    }

3、选择符Hack

    * html .test{color:#090;}       /* For IE6 and earlier */
    * + html .test{color:#ff0;}     /* For IE7 */

15.简述同步和异步的区别

  • 同步是阻塞模式,异步是非阻塞模式。

  • 同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去;

  • 异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。

16.px和em的区别

  • px和em都是长度单位,区别是,px的值是固定的,指定是多少就是多少,计算比较容易。em得值不是固定的,并且em会继承父级元素的字体大小。

  • 浏览器的默认字体高都是16px。所以未经调整的浏览器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em

17.什么叫优雅降级和渐进增强?

渐进增强 progressive enhancement:

  • 针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。

优雅降级 graceful degradation:

  • 一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。

区别:

  • a. 优雅降级是从复杂的现状开始,并试图减少用户体验的供给

  • b. 渐进增强则是从一个非常基础的,能够起作用的版本开始,并不断扩充,以适应未来环境的需要

  • c. 降级(功能衰减)意味着往回看;而渐进增强则意味着朝前看,同时保证其根基处于安全地带

18.怎样添加、移除、移动、复制、创建和查找节点?

1)创建新节点

createDocumentFragment() //创建一个DOM片段
createElement() //创建一个具体的元素
createTextNode() //创建一个文本节点

2)添加、移除、替换、插入

appendChild() //添加
removeChild() //移除
replaceChild() //替换
insertBefore() //插入

3)查找

getElementsByTagName() //通过标签名称
getElementsByName() //通过元素的Name属性的值
getElementById() //通过元素Id,唯一性

19、实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制。

/*
* 对象克隆
* 支持基本数据类型及对象
* 递归方法
*/
function clone(obj) {
    var o;
    switch (typeof obj) {
        case "undefined":
            break;
        case "string":
            o = obj + "";
            break;
        case "number":
            o = obj - 0;
            break;
        case "boolean":
            o = obj;
            break;
        case "object": // object 分为两种情况 对象(Object)或数组(Array)
            if (obj === null) {
                o = null;
            } else {
                if (Object.prototype.toString.call(obj).slice(8, -1) === "Array") {
                    o = [];
                    for (var i = 0; i  obj.length; i++) {
                        o.push(clone(obj[i]));
                    }
                } else {
                    o = {};
                    for (var k in obj) {
                        o[k] = clone(obj[k]);
                    }
                }
            }
            break;
        default:
            o = obj;
            break;
    }
    return o;
}

20、如何消除一个数组里面重复的元素?

// 方法一:
var arr1 =[1,2,2,2,3,3,3,4,5,6],
    arr2 = [];
for(var i = 0,len = arr1.length; i< len; i++){
    if(arr2.indexOf(arr1[i]) < 0){
        arr2.push(arr1[i]);
    }
}
document.write(arr2); // 1,2,3,4,5,6

21、在Javascript中什么是伪数组?如何将伪数组转化为标准数组?

伪数组(类数组):

  • 无法直接调用数组方法或期望length属性有什么特殊的行为,但仍可以对真正数组遍历方法来遍历它们.典型的是函数的argument参数,还有像调用getElementsByTagName,document.childNodes之类的,它们都返回NodeList对象都属于伪数组. 可以使用Array.prototype.slice.call(fakeArray)将数组转化为真正的Array对象。
function log(){
      var args = Array.prototype.slice.call(arguments);  
//为了使用unshift数组方法,将argument转化为真正的数组
      args.unshift('(app)');
 
      console.log.apply(console, args);
};

22.请描述一下cookies,sessionStorage和localStorage的区别.

  • sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。而localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。

23.web storage和cookie的区别

  • Web Storage的概念和cookie相似,区别是它是为了更大容量存储设计的。Cookie的大小是受限的,并且每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽,另外cookie还需要指定作用域,不可以跨域调用。
  • 除此之外,Web Storage拥有setItem,getItem,removeItem,clear等方法,不像cookie需要前端开发者自己封装setCookie,getCookie。但是Cookie也是不可以或缺的:Cookie的作用是与服务器进行交互,作为HTTP规范的一部分而存在 ,而Web Storage仅仅是为了在本地“存储”数据而生。

24.手写数组快速排序

  • 关于快排算法的详细说明,可以参考阮一峰老师的文章快速排序

“快速排序”的思想很简单,整个排序过程只需要三步:

  • (1)在数据集之中,选择一个元素作为”基准”(pivot)。

  • (2)所有小于”基准”的元素,都移到”基准”的左边;所有大于”基准”的元素,都移到”基准”的右边。

  • (3)对”基准”左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。

25.一次完整的HTTP事务是怎样的一个过程?

基本流程:

  • a. 域名解析

  • b. 发起TCP的3次握手

  • c. 建立TCP连接后发起http请求

  • d. 服务器端响应http请求,浏览器得到html代码

  • e. 浏览器解析html代码,并请求html代码中的资源

  • f. 浏览器对页面进行渲染呈现给用户

26.CSS优化、提高性能的方法有哪些?

  • ①尽量将样式写在单独的css文件里面,在head元素中引用

  • ②避免使用复杂的选择器,层级越少越好

  • ③精简页面的样式文件,去掉不用的样式

  • ④利用CSS继承减少代码

27.XML和JSON的区别?

  • (1).数据体积方面。JSON相对于XML来讲,数据的体积小,传递的速度更快些。

  • (2).数据交互方面。JSON与JavaScript的交互更加方便,更容易解析处理,更好的数据交互。

  • (3).数据描述方面。JSON对数据的描述性比XML较差。

  • (4).传输速度方面。JSON的速度要远远快于XML。

28.cookie 和session 的区别?

  • 1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

  • 2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。

  • 3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能, 考虑到减轻服务器性能方面,应当使用COOKIE。

  • 4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。