Web前端笔试面试题汇总(转自github)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web前端笔试面试题汇总(转自github)相关的知识,希望对你有一定的参考价值。

 

前言

本文总结了一些优质的前端面试题(多数源于网络),初学者阅后也要用心钻研其中的原理,重要知识需要系统学习,透彻学习,形成自己的知识链。万不可投机取巧,只求面试过关是错误的!

面试有几点需注意:

1.面试题目: 根据你的等级和职位变化,入门级到专家级:范围↑、深度↑、方     向↑。

2.题目类型: 技术视野、项目细节、理论知识题,算法题,开放性题,案例题。

3.进行追问: 可以确保问到你开始不懂或面试官开始不懂为止,这样可以大大延     展题目的区分度和深度,知道你的实际能力。因为这种关联知识是长时期的学         习,绝对不是临时记得住的。

回答问题再棒,面试官(可能是你的直接领导面试),会考虑我要不要这个人做我的同事?所以态度很重要。(感觉更像是相亲)

资深的工程师能把absolute和relative弄混,这样的人不要也罢,因为团队需要的你这个人具有可以依靠的才能(靠谱)。

前端开发面试知识点大纲:

html&CSS:

    对Web标准的理解、浏览器内核差异、兼容性、hack、CSS基本功:布局、盒子模型、选择器优先级及使用、HTML5、CSS3、移动端适应

javascript: 

    数据类型、面向对象、继承、闭包、插件、作用域、跨域、原型链、模块化、自定义事件、内存泄漏、事件机制、异步装载回调、模板引擎、Nodejs、JSON、ajax等。

其他:

   HTTP、安全、正则、优化、重构、响应式、移动端、团队协作、可维护、SEO、UED、架构、职业生涯

前端工程师,必须掌握的知识点:

    1、DOM结构 —— 两个节点之间可能存在哪些关系以及如何在节点之间任意移动。

    2、DOM操作  ——如何添加、移除、移动、复制、创建和查找节点等。

    3、事件    —— 如何使用事件,以及IE和标准DOM事件模型之间存在的差别。

    4、XMLHttpRequest —— 这是什么、怎样完整地执行一次GET请求、怎样检测错误。

    5、严格模式与混杂模式 —— 如何触发这两种模式,区分它们有何意义。

    6、盒模型 —— 外边距、内边距和边框之间的关系,及IE8以下版本的浏览器中的盒模型

    7、块级元素与行内元素 —— 怎么用CSS控制它们、以及如何合理的使用它们

    8、浮动元素——怎么使用它们、它们有什么问题以及怎么解决这些问题。

    9、HTML与XHTML——二者有什么区别,你觉得应该使用哪一个并说出理由。

    10、JSON  —— 作用、用途、设计结构。

………………

一.HTML&&CSS

1.CSS选择器有哪些?哪些属性可以被继承?

元素选择器、类选择器、 ID选择器、属性选择器、后代选择器、子元素选择器、相邻兄弟选择器、伪类、伪元素......

CSS继承特性主要是指文本方面的继承,常用的例如:font-size , color , font-family , font-weight , text-align , text-indent , line-height 等,都是可以继承的;而关于与盒模型相关的不带继承。

具体:

不可继承的:display、margin、border、padding、background、height、min-height、max-height、width、min-width、max-width、overflow、position、left、right、top、bottom、z-index、float、clear、table-layoutvertical-alignpage-break-after、page-bread-before。

所有元素可继承:visibility和cursor。

内联元素可继承:letter-spacingword-spacingwhite-spaceline-height、color、font、font-family、font-size、font-style、font-variant、font-weighttext-decoration、text-transform、direction。

终端块状元素可继承:text-indent和text-align。

列表元素可继承:list-style、list-style-type、list-style-position、list-style-image。

 

2.HTML5为什么只需要写<!DOCTYOE HTML>,作用是什么?

HTML5 不基于 SGML,所以不需要引用 DTD,因此没有声明DTD;

作用:<!DOCTYPE>声明不是 HTML 标签;它是指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令。(浏览器获知文档类型);

(**在 HTML 4.01 中,<!DOCTYPE>声明引用 DTD,因为 HTML 4.01 基于 SGML。

SGML(Standard Generalized Markup Language),即标准通用标记语言;DTD (Document Type Definition)规定了标记语言的规则,这样浏览器才能正确地呈现内容。**).

3.CSS3中如何实现屏幕的自适应?

(1)添加在HTML页面的元元素<meta>,<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no">;

( 2 )将CSS中的固定值修改为相对值;

( 3 )栅格系统(流式网格布局);

( 4 )CSS3的媒体查询;

 

4.HTML中放入CSS样式的几种方式。

内联样式:style=”属性:属性值;”

内部样式:<style>选择器{属性:值;}</style>

外部样式:<link href="css/style.css" rel="stylesheet" type="text/css">

5.简述如何居中div,如何居中一个浮动的元素,如何让绝对定位的div居中?

绝对定位和浮动的元素居中:知道定位元素本身的宽高的话,例:宽高是300px  position: absolute; left: 50%; top: 50%;  margin:-150px 0 0 -150px;

水平垂直居中:

1 inline-block配合text-align加上table-cell配合vertical-align

.parent{

    display: table-cell;

    vertical-align:middle;

    text-align:center;}

.child{

    display: inline-block;}

2 absolute配合transform

.parent{

    position: relative;}

.child{

    position: absolute;

    left: 50%;

    top: 50%;

    transform: translate(-50%,-50%);}

3.

.parent{

    display: flex;

    justify-content: center;

    align-items: center;}

4. (水平居中)

.div{position: absolute;

  width: 1200px;

  background: none;

  margin: 0 auto;

  top: 0;

  left: 0;

  bottom: 0;

  right: 0;

}

 

 

#####6.利用CSS实现等高布局

i.左侧宽度的30%背景色为灰色,右侧宽度70%背景色为红色

ii.左侧高度随着右侧高度变化而变化(右侧高度不定)

 

利用padding-bottom|margin-bottom正负值相抵;

设置父容器设置超出隐藏(overflow:hidden),这样子父容器的高度就还是它里面的列没有设定padding-bottom时的高度,当它里面的任一列高度增加了,则父容器的高度被撑到里面最高那列的高度,其他比这列矮的列会用它们的padding-bottom补偿这部分高度差。

<head>

       <meta charset="UTF-8">

       <title>等高布局</title>

       <style type="text/css">

           .container{

              overflow:hidden;

           }

           .left{

              float:left;

              width:30%;

              background-color: #ddd;

              padding-bottom: 2000px;

              margin-bottom: -2000px;

           }

           .right{

              float:left;

              width:70%;

              background-color: #f00;

              padding-bottom: 2000px;

              margin-bottom: -2000px;

           }

       </style>

    </head>

    <body>

       <div class="container">

           <div class="left">lorem</div>

           <div class="right">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Veniam tenetur facilis possimus, voluptate fugit nesciunt dignissimos libero enim, eligendi aspernatur nam, officia temporibus iure sunt. Error laudantium nam, quam! Quam. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquam dignissimos cupiditate omnis. In possimus sequi rem esse expedita quibusdam, eaque laboriosam quo id quos sapiente inventore, temporibus delectus, neque soluta.</div>

       </div>

    </body>

 

7.Margin属性应用。

http://www.zhangxinxu.com/wordpress/?p=48

         (1)控制元素周围空间的间隔,从视觉角度上达到相互隔开的目的。

         (2).页面上实现css sprite背景定位效果

关于页面上背景定位效果,可以参见我的文章“IE6下png背景不透明问题的综合拓展”有关页面上定位的demo实例页面

(3).在选项卡等边框线的处理

下图显示的是一种比较常见的选项卡样式,旧版的迅雷首页就是这样子的选项卡。

 

我其实已经在图上做了点小小的标注,使用margin-top:-1px;解决选项卡下边框显示的问题。类似的,如果您要用四个div实现5条1像素的左右边框,就像表格一样的效果,就可以使用让每个div都有左右1像素的边框,然后margin-right:-1px;或是margin-left:-1px;让之间的边框重叠,这样就实现了四标签实现5边框的效果了。

(4).图片与文字对齐问题

图片与文字默认是居底对齐了。所以当图片与文字在一起的时候往往都是不对齐的。尤其图片较小时就更加明显了,我看到很多人使用vertical-align:middle;对齐。在火狐下效果是不错,但是IE下,虽然是效果好了些,但还是不够。
如果,图片是个20像素*20像素左右的小图片,文字也差不多12px大,则使用vertical-align:text-bottom;是不错的个方法。还有个屡试不爽,兼容性不错的方法就是使用margin负值了。img标签是个很不错的标签,支持margin四个方向的正的和负的定位。一般img标签打头的小图标与文字对齐的话,img{margin:0 3px -3px 0;}可以说是公式版的东西,能实现效果和兼容性俱佳的对齐效果。

8.position的应用(属性值以及区别)?

http://www.cnblogs.com/bokin/archive/2012/12/14/2816864.html

 

9.Border属性。

 

10. 为什么要进行CSS样式重置。

-因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异。

 

-当然,初始化样式会对SEO有一定的影响,但鱼和熊掌不可兼得,但力求影响最小的情况下初始化。

body,h1,h2,h3,h4,h5,h6,dl,dt,dd,ul,ol,li,th,td,p,blockquote,pre,form,fieldset,legend,input,button,

textarea,hr{margin:0;padding:0}

body,button,input,select,textarea{ font:12px/1.5 "宋体",arial, verdana, sans-serif}

h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}

li{list-style:none}

fieldset,img{border:0}

table{border-collapse:collapse;border-spacing:0}

q:before,q:after{content:”}

button,input,select,textarea{font-size:100%}

legend{color:#000}

small{font-size:12px}

hr{border:none;height:1px}

a{text-decoration:none}

a:hover{text-decoration:underline}

.cle:after{content:".";display:block;height:0;clear:both;visibility:hidden}

.cle{ display:inline-block}

.cle{ display:block}

.clear {clear: both;}

豆瓣上的几种重置模板:https://www.douban.com/note/330400235/

11.a元素target属性规定在何处打开页面上所有链接,请举例说明。

         http://www.doc88.com/p-130783716484.html

1._blank      <a href="document.html" target="_blank">my document</a> 

                  浏览器会另开一个新窗口显示document.html文档   

         2._parent     <a href="document.html" target="_parent">my document</a>      

                  指向父frameset文档   

         3._self       <a href="document.html" target="_self">my document</a>           

                  把文档调入当前页框  

4._top        <a href="document.html" target="_top">my document</a>          

                  去掉所有页框并用document.html取代frameset文档

12.选择器优先级排序(由大到小),写出示例;(标签选择器,ID选择器,类选择器)

ID选择器>类选择器>标签选择器

 

13.样式中:before,:after的作用?

:before,:after是伪元素选择器,定义到元素内容之前,之后要配合content: “ ”;一起使用.

解决问题:1、撑起包含浮动元素的父元素的高度

(1)、指定元素高度

                            (2)、overflow:hidden;

                            (3)、追加空子元素,clear:both

                            (4)、div:after{                           

content:"";

                  display:block;

                   clear:both;

               }

                     2、上外边距溢出问题:

#d2:before{

           content:"";

           display:table;

            }

14. 行内元素有哪些,块级元素有哪些,空元素(单标签)有哪些,请举例说明,每种至少3个?

         行内元素:<a>,<span>,<i>,<em>,<strong>,<label>,<code>,

<img>,<input>,<select>,<textarea>,<button>

块级元素:<div>,<p>,<h1>...<h6>,<ol>,<ul>,<dl>,<table>,<form>

空元素(单标签):<br>,<hr>,<img>,<input>,<link>,<meta>

15.Doctype作用? 严格模式与混杂模式如何区分?它们有何意义?

(1)<!DOCTYPE>声明位于位于HTML文档中的第一行,处于 <html> 标签之前。告知浏览器的解析器用什么文档标准解析这个文档。DOCTYPE不存在或格式不正确会导致文档以混杂(兼容)模式呈现。

(2)严格(标准)模式的排版 和JS运作模式都是以该浏览器支持的最高标准运行。在混杂(兼容)模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为以防止站点无法工作。

16.页面导入样式时,使用link和@import有什么区别?

(1)link属于XHTML标签,除了加载CSS外,还能用于定义RSS, 定义rel连接属性等作用;而@import是CSS提供的,只能用于加载CSS;

(2)页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;

(3)import是CSS2.1 提出的,只在IE5以上才能被识别,而link是XHTML标签,无兼容问题;

17.html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5?

(1)HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加:

 ①绘画 canvas;

 ②用于媒介回放的 video 和 audio 元素;

 ③本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;sessionStorage 的数据在浏览器关闭后自动删除;

 ④语意化更好的内容元素,比如 article、footer、header、nav、section;

 ⑤表单控件,calendar、date、time、email、url、search;

 ⑥新的技术webworker, websocket, Geolocation;

(2)移除的元素:

      纯表现的元素:basefont,big,center,font, s,strike,tt,u;

      对可用性产生负面影响的元素:frame,frameset,noframes;

(3)支持HTML5新标签:

     ①IE8/IE7/IE6支持通过document.createElement方法产生的标签,可以利用这一特性让这些浏览器支持HTML5新标签,浏览器支持新标签后,还需要添加标签默认的样式。

 ②当然也可以直接使用成熟的框架,比如html5shiv;可以把HTML5的新元素转换成IE6认识的内容。只需要在你的head中调用这段代码就行:

<!--if lt IE 9]>
         <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
  <![endif]-->

 

(4)如何区分HTML5: DOCTYPE声明\\新增的结构元素\\功能元素

18.简述一下你对HTML语义化的理解?

1.用正确的标签做正确的事情。

2.html语义化让页面的内容结构化,结构更清晰,便于对浏览器、搜索引擎解析;

3.即使在没有样式CSS情况下也以一种文档格式显示,并且是容易阅读的;

4.搜索引擎的爬虫也依赖于HTML标记来确定上下文和各个关键字的权重,利于SEO;

5.使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。

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

https://segmentfault.com/a/1190000000732617

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

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

使用:

如何使用:

1、页面头部像下面一样加入一个manifest的属性;

2、在cache.manifest文件的编写离线存储的资源;

CACHE MANIFEST

    #v0.11

    CACHE:

    js/app.js

    css/style.css

    NETWORK:

    resourse/logo.png

    FALLBACK:

    / /offline.html

3、在离线状态时,操作window.applicationCache进行需求实现。

20.浏览器是怎么对HTML5的离线储存资源进行管理和加载的呢?

https://segmentfault.com/a/1190000000732617

在线的情况下,浏览器发现html头部有manifest属性,它会请求manifest文件,如果是第一次访问app,那么浏览器就会根据manifest文件的内容下载相应的资源并且进行离线存储。如果已经访问过app并且资源已经离线存储了,那么浏览器就会使用离线的资源加载页面,然后浏览器会对比新的manifest文件与旧的manifest文件,如果文件没有发生改变,就不做任何操作,如果文件改变了,那么就会重新下载文件中的资源并进行离线存储。

离线的情况下,浏览器就直接使用离线存储的资源。

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

 

22.iframe有哪些缺点?

(1)iframe会阻塞主页面的Onload事件;

(2)搜索引擎的检索程序无法解读这种页面,不利于SEO;

(3)iframe和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载。

如果需要使用iframe,最好是通过javascript动态给iframe添加src属性值。

 

 

 

 

23.label的作用是什么?是怎么用的?

label标签来定义表单控制间的关系,当用户选择该标签时,浏览器会自动将焦点转到和标签相关的表单控件上。

(1)

<label for="Name">Number:</label>

<input type=textname="userName" id="Name"/>

(2)

<label>Date:<input type="text" name="B"/></label>

24.HTML5的form如何关闭自动完成功能?

给不想要提示的 form 或某个 input 设置为 autocomplete=”off ”。

(自动完成允许浏览器预测对字段的输入。当用户在字段开始键入时,浏览器基于之前键入过的值,应该显示出在字段中填写的选项。)

25.介绍一下标准的CSS的盒子模型?低版本IE的盒子模型有什么不同的?

(1)有两种, IE 盒子模型、W3C 盒子模型;

(2)盒模型: 内容(content)、填充(padding)、边界(margin)、 边框(border);

(3)区  别: IE的content部分把 border 和 padding计算了进去;

26.CSS3新增伪类有那些?

 

 

语法

作用

目标伪类

 :target

突出显示活动的html锚元素。

 

元素状态伪类

:enabled

匹配每个已启用元素

:disabled

匹配每个被禁用的元素

:checked

匹配每个被选中的input元素(限于radio和 checkbox)

 

 

结构伪类

:first-child

匹配属于其父元素的首个子元素(td:first-child)

:last-child

匹配属于其父元素的最后一个子元素

:empty

匹配没有子元素的每个元素

:only-child

匹配属于其父元素的唯一子元素

:nth-child(num)

匹配是其父元素中的第 num 个子元素(td:nth-child(2))

否定伪类

:not(selector)

在一组元素中将 满足 selector 选择器的元素排除出去

table td:not(:first-child)

27.display有哪些值?说明他们的作用。

  block         块类型。默认宽度为父元素宽度,可设置宽高,换行显示。

  none          缺省值。象行内元素类型一样显示。

  inline        行内元素类型。默认宽度为内容宽度,不可设置宽高,同行显示。

  inline-block  默认宽度为内容宽度,可以设置宽高,同行显示。

  list-item     象块类型元素一样显示,并添加样式列表标记。

  table         此元素会作为块级表格来显示。

  inherit       规定应该从父元素继承 display 属性的值。

28.position的值有哪些值?

absolute:生成绝对定位的元素,相对于值不为 static的第一个父元素进行定位。

fixed :(老IE不支持)生成绝对定位的元素,相对于浏览器窗口进行定位。

relative:生成相对定位的元素,相对于其正常位置进行定位。

static:默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right z-index 声明)。

inherit:规定从父元素继承 position 属性的值。

29.CSS3有哪些新特性?

      新增各种CSS选择器  (: not(.input):所有 class 不是“input”的节点)

  圆角           (border-radius:8px)

  多列布局        (multi-column layout)

  阴影和反射        (Shadow\\Reflect)

  文字特效      (text-shadow、)

  文字渲染      (Text-decoration)

  线性渐变      (gradient)

  旋转          (transform)

  增加了旋转,缩放,定位,倾斜,动画,多背景

30.请解释一下CSS3的Flexbox(弹性盒布局模型),以及适用场景?

https://segmentfault.com/a/1190000003942546

box-flex是css3新添加的盒子模型属性,它的出现打破了我们经常使用的浮动布局,实现垂直等高、水平均分、按比例划分。但是它有一定的局限性,在firefox、chrome这浏览器下需要使用它们的私有属性来定义:firefox(-moz)、chrome(-webkit)。

31.CSS里的visibility属性有个collapse属性值是干嘛用的?在不同浏览器下以后什么区别?

http://www.webhek.com/visibility-collapse

visibility有第三种值,visibility,hidden,collapse。当一个元素的visibility属性被设置成collapse值后,对于一般的元素,它的表现跟hidden是一样的。但例外的是,如果这个元素是table相关的元素,例如table行,table group,table列,table column group,它的表现却跟display: none一样,也就是说,它们占用的空间也会释放。但是各种浏览器对collapse值的处理方式不一样。

32.使用 CSS 预处理器吗?喜欢那个?

css预处理器也叫动态样式语言,拥有编程的变量、继承、运算、函数的特性,它可以让你的CSS更加简洁、适应性更强、可读性更佳,更易于代码的维护等诸多好处,常用的有less、sass、stylus。

SASS 和 Compass 指南:http://ruby-china.org/topics/4396

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

http://www.zhihu.com/question/19886806

1、提高代码性能

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

2、不使用@import

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

4、精简页面的样式文件,去掉不用的样式

5、利用CSS继承减少代码量

4、提高代码的可维护性

 1、命名与备注

      2、提取重复样式

 3、统一书写顺序

34.浏览器是怎样解析CSS选择器的?

https://segmentfault.com/q/1010000000713509

浏览器先产生一个元素集合,这个集合往往由最后一个部分的索引产生(如果没有索引就是所有元素的集合)。然后向上匹配,如果不符合上一个部分,就把元素从集合中删除,直到真个选择器都匹配完,还在集合中的元素就匹配这个选择器了。(从右往左)

35.**抽离样式模块怎么写,说出思路,有无实践经验?

共用模块的样式都抽离出来,作为单独的模块来处理。

36.元素竖向的百分比设定是相对于容器的高度吗?

height属性取值百分比,是现对于容器高度的;

对于margin-top、margin-bottom、padding-top、padding-bottom这些竖直方向的内外边距属性的百分比取值,参考的其实是容器的宽度而不是高低。

37.解释一下em,rem,px这些尺寸单位的不同。

http://www.jianshu.com/p/60ea15164b82




以上是关于Web前端笔试面试题汇总(转自github)的主要内容,如果未能解决你的问题,请参考以下文章

AJAX笔试面试题汇总

多线程笔试面试题汇总

Python100天学习笔记番外篇 Python面试面经笔试题目汇总

Python100天学习笔记番外篇 Python面试面经笔试题目汇总

BAT及各大互联网公司2014前端笔试面试题:HTML/CSS篇

Web前端面试题目及答案汇总