前端面试大全(问题+答案)1

2017前端面试集合(面试题加答案)1

1.请你谈谈Cookie的弊端

cookie虽然在持久保存客户端数据提供了方便,分担了服务器存储的负担,但仍是有不少局限性的。javascript

第一:每一个特定的域名下最多生成20cookiecss

 

1.IE6或更低版本最多20cookiehtml

2.IE7和以后的版本最后能够有50cookie前端

3.Firefox最多50cookiehtml5

4.chromeSafari没有作硬性限制java

IEOpera 会清理近期最少使用的cookieFirefox会随机清理cookienode

 

cookie的最大大约为4096字节,为了兼容性,通常不能超过4095字节。web

 

IE 提供了一种存储能够持久化用户数据,叫作uerData,从IE5.0就开始支持。每一个数据最多128K,每一个域名下最多1M。这个持久化数据放在缓存中,若是缓存没有清理,那么会一直存在。面试

 

优势:极高的扩展性和可用性算法

 

1.经过良好的编程,控制保存在cookie中的session对象的大小。

2.经过加密和安全传输技术(SSL),减小cookie被破解的可能性。

3.只在cookie中存放不敏感数据,即便被盗也不会有重大损失。

4.控制cookie的生命期,使之不会永远有效。偷盗者极可能拿到一个过时的cookie

 

缺点:

1.`Cookie`数量和长度的限制。每一个domain最多只能有20cookie,每一个cookie长度不能超过4KB,不然会被截掉。

 

2.安全性问题。若是cookie被人拦截了,那人就能够取得全部的session信息。即便加密也与事无补,由于拦截者并不须要知道cookie的意义,他只要原样转发cookie就能够达到目的了。

 

3.有些状态不可能保存在客户端。例如,为了防止重复提交表单,咱们须要在服务器端保存一个计数器。若是咱们把这个计数器保存在客户端,那么它起不到任何做用。

 

2.简单说一下浏览器本地存储是怎样的

在较高版本的浏览器中,js提供了sessionStorageglobalStorage。在HTML5中提供了localStorage来取代globalStorage

 

html5中的Web Storage包括了两种存储方式:sessionStoragelocalStorage

 

sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问而且当会话结束后数据也随之销毁。所以sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。

 

localStorage用于持久化的本地存储,除非主动删除数据,不然数据是永远不会过时的。

3.web storagecookie的区别

Web Storage的概念和cookie类似,区别是它是为了更大容量存储设计的。Cookie的大小是受限的,而且每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽,另外cookie还须要指定做用域,不能够跨域调用。

 

除此以外,Web Storage拥有setItem,getItem,removeItem,clear等方法,不像cookie须要前端开发者本身封装setCookiegetCookie

 

可是Cookie也是不能够或缺的:Cookie的做用是与服务器进行交互,做为HTTP规范的一部分而存在 ,而Web Storage仅仅是为了在本地存储数据而生

 

浏览器的支持除了IE7及如下不支持外,其余标准浏览器都彻底支持(ieFF需在web服务器里运行),值得一提的是IE老是办好事,例如IE7IE6中的UserData其实就是javascript本地存储的解决方案。经过简单的代码封装能够统一到全部的浏览器都支持web storage

 

localStoragesessionStorage都具备相同的操做方法,例如setItemgetItemremoveItem

4.display:nonevisibility:hidden的区别?

display:none  隐藏对应的元素,在文档布局中再也不给它分配空间,它各边的元素会合拢,

就当他历来不存在。

 

visibility:hidden  隐藏对应的元素,可是在文档布局中仍保留原来的空间。

5.CSSlink @import 的区别是?

(1) link属于HTML标签,而@importCSS提供的

 

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

 

(3) import只在IE5以上才能识别,而linkHTML标签,无兼容问题

 

(4) link方式的样式的权重 高于@import的权重.

6.positionabsolutefixed共同点与不一样点

A:共同点:

1.改变行内元素的呈现方式,display被置为block

2.让元素脱离普通流,不占据空间;

3.默认会覆盖到非定位元素上

 

B不一样点:

absolute根元素是能够设置的,而fixed根元素固定为浏览器窗口。

当你滚动网页,fixed元素与浏览器窗口之间的距离是不变的。  

7.介绍一下CSS的盒子模型?

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

 

2)有两种, IE 盒子模型、标准 W3C 盒子模型;IEcontent部分包含了 border padding;

8.CSS3有哪些新特性?

1. CSS3实现圆角(border-radius),阴影(box-shadow),

2. 对文字加特效(text-shadow、),线性渐变(gradient),旋转(transform

3. transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);// 旋转,缩放,定位,倾斜

4. 增长了更多的CSS选择器  多背景 rgba 

5. CSS3中惟一引入的伪元素是 ::selection.

6. 媒体查询,多栏布局

7. border-p_w_picpath

9.CSS 选择符有哪些?哪些属性能够继承?优先级算法如何计算? CSS3新增伪类有那些?

CSS 选择符:

1.id选择器(# myid)

2.类选择器(.myclassname)

3.标签选择器(div, h1, p)

4.相邻选择器(h1 + p)

5.子选择器(ul > li)

6.后代选择器(li a)

7.通配符选择器( * )

8.属性选择器(a[rel = "external"])

9.伪类选择器(a: hover, li:nth-child)

 

可继承的样式:

1.font-size

2.font-family

3.color

4.text-indent

 

不可继承的样式:

1.border

2.padding

3.margin

4.width

5.height

 

优先级算法:

1.优先级就近原则,同权重状况下样式定义最近者为准;

2.载入样式以最后载入的定位为准;

3.!important >  id > class > tag  

4.important 比 内联优先级高,但内联比 id 要高

 

CSS3新增伪类举例:

p:first-of-type 选择属于其父元素的首个 <p> 元素的每一个 <p> 元素。

p:last-of-type  选择属于其父元素的最后 <p> 元素的每一个 <p> 元素。

p:only-of-type  选择属于其父元素惟一的 <p> 元素的每一个 <p> 元素。

p:only-child    选择属于其父元素的惟一子元素的每一个 <p> 元素。

p:nth-child(2)  选择属于其父元素的第二个子元素的每一个 <p> 元素。

:enabled :disabled 控制表单控件的禁用状态。

:checked        单选框或复选框被选中。

10.列出display的值,说明他们的做用。position的值, relativeabsolute分别是相对于谁进行定位的?

display 的值的做用: 

1.block 象块类型元素同样显示。

2.inline 缺省值。象行内元素类型同样显示。

3.inline-block 象行内元素同样显示,但其内容象块类型元素同样显示。

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

 

position 的值的定位区别:

1.absolute 生成绝对定位的元素,相对于 static 定位之外的第一个祖先元素进行定位。 

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

3.relative 生成相对定位的元素,相对于其在普通流中的位置进行定位。 

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

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

 

11.为何要初始化CSS样式。

由于浏览器的兼容问题,不一样浏览器对有些标签的默认值是不一样的,若是没对CSS初始化每每会出现浏览器之间的页面显示差别。

 

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

 

*最简单的初始化方法就是(不建议):

{padding: 0; margin: 0;}

淘宝的样式初始化: 

 

body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0; padding:0; }

body, button, input, select, textarea { font:12px/1.5tahoma, arial, \5b8b\4f53; }

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

address, cite, dfn, em, var { font-style:normal; }

code, kbd, pre, samp { font-family:couriernew, courier, monospace; }

small{ font-size:12px; }

ul, ol { list-style:none; }

a { text-decoration:none; }

a:hover { text-decoration:underline; }

sup { vertical-align:text-top; }

sub{ vertical-align:text-bottom; }

legend { color:#000; }

fieldset, img { border:0; }

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

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

12.BFC规范的理解?

BFC,块级格式化上下文,一个建立了新的BFC的盒子是独立布局的,盒子里面的子元素的样式不会影响到外面的元素。在同一个 BFC 中的两个毗邻的块级盒在垂直方向(和布局方向有关系)的 margin 会发生折叠。

 

W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行布局,以及与其余元素的关系和相互做用。

13.解释下 CSS sprites,以及你要如何在页面或网站中使用它。

CSS Sprites 其实就是把网页中一些背景图片整合到一张图片文件中,再利用 CSS "background-p_w_picpath""background-repeat""background-position" 的组合进行背景定位,background-position 能够用数字能精确的定位出背景图片的位置。这样能够减小不少图片请求的开销,由于请求耗时比较长;请求虽然能够并发,可是也有限制,通常浏览器都是6个。对于将来而言,就不须要这样作了,由于有了 http2

14.说说你对语义化的理解?

1. 去掉或者丢失样式的时候可以让页面呈现出清晰的结构

2. 有利于SEO:和搜索引擎创建良好沟通,有助于爬虫抓取更多的有效信息:爬虫依赖于标签来肯定上下文和各个关键字的权重;

3. 方便其余设备解析(如屏幕阅读器、盲人阅读器、移动设备)以意义的方式来渲染网页;

4. 便于团队开发和维护,语义化更具可读性,是下一步吧网页的重要动向,遵循W3C标准的团队都遵循这个标准,能够减小差别化。

 

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

1. <!DOCTYPE> 声明位于文档中的最前面,处于 <html> 标签以前。告知浏览器以何种模式来渲染文档。 

2. 严格模式的排版和 JS 运做模式是  以该浏览器支持的最高标准运行。

3. 在混杂模式中,页面以宽松的向后兼容的方式显示。模拟老式浏览器的行为以防止站点没法工做。

4. DOCTYPE不存在或格式不正确会致使文档以混杂模式呈现。 

 

16.你知道多少种Doctype文档类型?

1. 该标签可声明三种 DTD 类型,分别表示严格版本、过渡版本以及基于框架的 HTML 文档。

2. HTML 4.01 规定了三种文档类型:StrictTransitional 以及 Frameset

3. XHTML 1.0 规定了三种 XML 文档类型:StrictTransitional 以及 Frameset

4. Standards (标准)模式(也就是严格呈现模式)用于呈现遵循最新标准的网页,而 Quirks(包容)模式(也就是松散呈现模式或者兼容模式)用于呈现为传统浏览器而设计的网页。

17.HTMLXHTML——两者有什么区别

1. 全部的标记都必需要有一个相应的结束标记

2. 全部标签的元素和属性的名字都必须使用小写

3. 全部的 XML 标记都必须合理嵌套

4. 全部的属性必须用引号 "" 括起来

5. 把全部 < & 特殊符号用编码表示

6. 给全部属性赋一个值

7. 不要在注释内容中使用 "--"

8. 图片必须有说明文字

18.html常见兼容性问题?

1. png24位的图片在iE6浏览器上出现背景

解决方案:作成PNG8,也能够引用一段脚本处理.

 

2. 浏览器默认的marginpadding不一样

解决方案:加一个全局的 *{margin:0;padding:0;} 来统一。

 

3. IE6双边距bug:在IE6下,若是对元素设置了浮动,同时又设置了margin-leftmargin-rightmargin值会加倍。

1

#box{ float:left; width:10px; margin:0 0 0 10px;}

这种状况之下IE会产生20px的距离

解决方案:在float的标签样式控制中加入 _display:inline; 将其转化为行内属性。( _ 这个符号只有ie6会识别)

 

4. 渐进识别的方式,从整体中逐渐排除局部。

首先,巧妙的使用\9”这一标记,将IE游览器从全部状况中分离出来。

接着,再次使用 "+" IE8IE7IE6分离开来,这样IE8已经独立识别。

.bb{

    background-color:#f1ee18; /*全部识别*/

    .background-color:#00deff\9; /*IE678识别*/

    +background-color:#a200ff; /*IE67识别*/

    _background-color:#1e0bd1; /*IE6识别*/

}

 

5.IE下,可使用获取常规属性的方法来获取自定义属性,也可使用 getAttribute() 获取自定义属性;Firefox,只能使用getAttribute()获取自定义属性

解决方法:统一经过getAttribute()获取自定义属性

 

6. IE下,event对象有 xy 属性,可是没有 pageXpageY属性; Firefox下,event对象有 pageXpageY 属性,可是没有 xy 属性

解决方法:(条件注释)缺点是在IE浏览器下可能会增长额外的HTTP请求数。

 

7. Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示

解决方法:可经过加入 CSS 属性 -webkit-text-size-adjust: none; 解决

 

8. 超连接访问事后 hover 样式就不出现了,被点击访问过的超连接样式不在具备 hover active

解决方法:改变CSS属性的排列顺序 L-V-H-A

a:link {}

a:visited {}

a:hover {}

a:active {}

 

9. 怪异模式问题:漏写 DTD 声明,Firefox 仍然会按照标准模式来解析网页,但在 IE 中会触发怪异模式。为避免怪异模式给咱们带来没必要要的麻烦,最好养成书写 DTD 声明的好习惯。如今可使用[html5](http://www.w3.org/TR/html5/single-page.html) 推荐的写法:<!DOCTYPE html>

 

10. 上下margin重合问题:ieff都存在,相邻的两个divmargin-leftmargin-right不会重合,可是margin-topmargin-bottom却会发生重合。

解决方法:养成良好的代码编写习惯,同时采用margin-top或者同时采用margin-bottom

 

11. ie6png图片格式支持很差

解决方案:引用一段脚本处理

19.解释下浮动和它的工做原理?清除浮动的技巧

浮动元素脱离文档流,不占据空间。浮动元素碰到包含它的边框或者浮动元素的边框停留。

 

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

这种方法是在全部浮动标签后面添加一个空标签 定义css clear:both. 弊端就是增长了无心义标签。

 

2. 使用overflow

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

 

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

该方法只适用于非IE浏览器。具体写法可参照如下示例。使用中需注意如下几点。1、该方法中必须为须要清除浮动元素的伪对象中设置 height:0,不然该元素会比实际高出若干像素;

20.浮动元素引发的问题和解决办法?

浮动元素引发的问题:

1. 父元素的高度没法被撑开,影响与父元素同级的元素

2. 与浮动元素同级的非浮动元素会跟随其后

3. 若非第一个元素浮动,则该元素以前的元素也须要浮动,不然会影响页面显示的结构

 

解决方法:

使用 CSS 中的 clear:both; 属性来清除元素的浮动可解决23问题,对于问题1,添加以下样式,给父元素添加clearfix样式:

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

.clearfix{display: inline-block;} /* for IE/Mac */

 

清除浮动的几种方法:

1. 额外标签法,<div style="clear:both;"></div>(缺点:不过这个办法会增长额外的标签使HTML结构看起来不够简洁。)

2. 使用after伪元素

#parent:after{

    content:".";

    height:0;

    visibility:hidden;

    display:block;

    clear:both;

}

3. 浮动外部元素

4. 设置 overflow hidden 或者 auto

21.IE 8如下版本的浏览器中的盒模型有什么不一样

IE8如下浏览器的盒模型中定义的元素的宽高包括内边距和边框

22.DOM操做——怎样添加、移除、移动、复制、建立和查找节点。

1. 建立新节点

createDocumentFragment() // 建立一个DOM片断

createElement() // 建立一个具体的元素

createTextNode() // 建立一个文本节点

 

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

appendChild()

removeChild()

replaceChild()

insertBefore() // 在已有的子节点前插入一个新的子节点

 

3. 查找

getElementsByTagName() // 经过标签名称

getElementsByName() // 经过元素的Name属性的值(IE容错能力较强,会获得一个数组,其中包括id等于name值的)

getElementById() // 经过元素Id,惟一性

 

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

新特性:

HTML5 如今已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增长。

1. 拖拽释放(Drag and drop) API

2. 语义化更好的内容标签(header,nav,footer,aside,article,section

3. 音频、视频API(audio,video)

4. 画布(Canvas) API

5. 地理(Geolocation) API

6. 本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;

7. sessionStorage 的数据在浏览器关闭后自动删除

8. 表单控件,calendardatetimeemailurlsearch  

9. 新的技术webworker, websocket, Geolocation

 

移除的元素:

1. 纯表现的元素:basefontbigcenterfont, sstrikettu

2. 对可用性产生负面影响的元素:frameframesetnoframes

 

支持HTML5新标签:

1. IE8/IE7/IE6支持经过 document.createElement 方法产生的标签,能够利用这一特性让这些浏览器支持 HTML5 新标签,浏览器支持新标签后,还须要添加标签默认的样式(固然最好的方式是直接使用成熟的框架、使用最多的是html5shiv框架):

<!--[if lt IE 9]>

<script> src="http://html5shiv.googlecode.com/svn/trunk/html5.js"</script>

<![endif]-->

如何区分:

DOCTYPE声明新增的结构元素、功能元素

 

24.iframe的优缺点?

优势:

1. 解决加载缓慢的第三方内容如图标和广告等的加载问题

2. Security sandbox

3. 并行加载脚本

 

缺点:

1. iframe会阻塞主页面的Onload事件

2. 即时内容为空,加载也须要时间

3. 没有语意

 

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

调用 localstorgecookies 等本地存储方式

26.webSocket 如何兼容低浏览器?

Adobe Flash Socket ActiveX HTMLFile (IE) 、 基于 multipart 编码发送 XHR 、 基于长轮询的 XHR

 

 

27.线程与进程的区别

1. 一个程序至少有一个进程,一个进程至少有一个线程

2. 线程的划分尺度小于进程,使得多线程程序的并发性高

3. 另外,进程在执行过程当中拥有独立的内存单元,而多个线程共享内存,从而极大地提升了程序的运行效率

4. 线程在执行过程当中与进程仍是有区别的。每一个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。可是线程不可以独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制 

5. 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分能够同时执行。但操做系统并无将多个线程看作多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别

 

28.你如何对网站的文件和资源进行优化?

期待的解决方案包括:

1. 文件合并

2. 文件最小化/文件压缩

3. 使用 CDN 托管

4. 缓存的使用(多个域名来提供缓存)

5. 其余

29.请说出三种减小页面加载时间的方法

1. 优化图片 

2. 图像格式的选择(GIF:提供的颜色较少,可用在一些对颜色要求不高的地方) 

3. 优化CSS(压缩合并css,如 margin-top, margin-left...) 

4. 网址后加斜杠(如www.campr.com/目录,会判断这个目录是什么文件类型,或者是目录。) 

5. 标明高度和宽度(若是浏览器没有找到这两个参数,它须要一边下载图片一边计算大小,若是图片不少,浏览器须要不断地调整页面。这不但影响速度,也影响浏览体验。 

当浏览器知道了高度和宽度参数后,即便图片暂时没法显示,页面上也会腾出图片的空位,而后继续加载后面的内容。从而加载时间快了,浏览体验也更好了) 

6. 减小http请求(合并文件,合并图片)

 

30.你都使用哪些工具来测试代码的性能?

1. Profiler

2. JSPerfhttp://jsperf.com/nexttick-vs-setzerotimeout-vs-settimeout

3. Dromaeo

 

31.什么是 FOUC(无样式内容闪烁)?你如何来避免 FOUC

FOUC - Flash Of Unstyled Content 文档样式闪烁

<style type="text/css" media="all">@import "../fouc.css";</style> 

而引用CSS文件的@import就是形成这个问题的罪魁祸首。IE会先加载整个HTML文档的DOM,而后再去导入外部的CSS文件,所以,在页面DOM加载完成到CSS导入完成中间会有一段时间页面上的内容是没有样式的,这段时间的长短跟网速,电脑速度都有关系。

解决方法简单的出奇,只要在<head>之间加入一个<link>或者<script>元素就能够了。

 

32.nullundefined的区别?

null是一个表示""的对象,转为数值时为0

undefined是一个表示""的原始值,转为数值时为NaN

 

当声明的变量还未被初始化时,变量的默认值为undefined

null用来表示还没有存在的对象,经常使用来表示函数企图返回一个不存在的对象

 

undefined表示 缺乏值,就是此处应该有一个值,可是尚未定义。典型用法是:

1. 变量被声明了,但没有赋值时,就等于 undefined

2. 调用函数时,应该提供的参数没有提供,该参数等于 undefined

3. 对象没有赋值的属性,该属性的值为 undefined

4. 函数没有返回值时,默认返回 undefined

 

null表示没有对象,即该处不该该有值。典型用法是:

1. 做为函数的参数,表示该函数的参数不是对象

2. 做为对象原型链的终点

 

33.new操做符具体干了什么呢?

1. 建立一个空对象,而且 this 变量引用该对象,同时还继承了该函数的原型

2. 属性和方法被加入到 this 引用的对象中

3. 新建立的对象由 this 所引用,而且最后隐式的返回 this

var obj  = {};

obj.__proto__ = Base.prototype;

Base.call(obj);

 

34.你对JSON 的了解?

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它是基于JavaScript的一个子集。数据格式简单, 易于读写, 占用带宽小。

1

{"age":"12", "name":"back"}

35.js延迟加载的方式有哪些?

 

1. deferasync

2. 动态建立DOM方式(建立script,插入到DOM中,加载完毕后callBack

3. 按需异步载入js

36.如何解决跨域问题?

1. jsonpjsonp 的原理是动态插入 script 标签)

2. document.domain + iframe

3. window.namewindow.postMessage

4. 服务器上设置代理页面

 

37.documen.writeinnerHTML 的区别

document.write 只能重绘整个页面

 

innerHTML 能够重绘页面的一部分

 

38..call() .apply() 的做用?

动态改变某个类的某个方法的运行环境

39.哪些操做会形成内存泄漏?

内存泄漏指任何对象在您再也不拥有或须要它以后仍然存在。

垃圾回收器按期扫描对象,并计算引用了每一个对象的其余对象的数量。若是一个对象的引用数量为 0(没有其余对象引用过该对象),或对该对象的唯一引用是循环的,那么该对象的内存便可回收。

 

1. setTimeout 的第一个参数使用字符串而非函数的话,会引起内存泄漏。

2. 闭包

3. 控制台日志

4. 循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)

 

40.如何判断当前脚本运行在浏览器仍是node环境中?

经过判断 Global 对象是否为window,若是不为window,当前脚本没有运行在浏览器中。即在node中的全局变量是global ,浏览器的全局变量是window。 能够经过该全局变量是否认义来判断宿主环境

相关文章
相关标签/搜索