面试题总结

说说你对闭包的明白

运用闭包主如果为了设想私有的要领和变量。闭包的长处是能够防备全局变量的污染,瑕玷是闭包会常驻内存,会增大内存运用量,运用不当很轻易形成内存走漏。

闭包有三个特征:

  • 函数嵌套函数

  • 函数内部能够援用外部的参数和变量

  • 参数和变量不会被渣滓接纳机制接纳
    请你谈谈Cookie的弊病

请你谈谈Cookie的弊病

cookie虽然在耐久保存客户端数据供应了轻易,分管了服务器存储的累赘,但照样有许多局限性的。 第一:每一个特定的域名下最多天生20个cookie

1.IE6或更低版本最多20个cookie
2.IE7和以后的版本末了能够有50个cookie。
3.Firefox最多50个cookie
4.chrome和Safari没有做硬性限定

IE和Opera 会清算近期起码运用的cookie,Firefox会随机清算cookie。
cookie的最大大约为4096字节,为了兼容性,平常不能凌驾4095字节。

长处:极高的扩展性和可用性

1.经由历程优越的编程,掌握保存在cookie中的session对象的大小。
2.经由历程加密和平安传输手艺(SSL),削减cookie被破解的可能性。
3.只在cookie中寄存不敏感数据,纵然被盗也不会有重大损失。
4.掌握cookie的性命期,使之不会永久有用。偷窃者极可能拿到一个逾期的cookie。

瑕玷:

    1.`Cookie`数目和长度的限定。每一个domain最多只能有20条cookie,每一个cookie长度不能凌驾4KB,不然会被截掉。
    2.平安性题目。假如cookie被人阻拦了,那人就能够获得一切的session信息。纵然加密也与事无补,由于阻拦者并不须要晓得cookie的意义,他只需原样转发cookie就能够到达目的了。
    3.有些状况不可能保存在客户端。比方,为了防备反复提交表单,我们须要在服务器端保存一个计数器。假如我们把这个计数器保存在客户端,那末它起不到任何作用。
浏览器当地存储在较高版本的浏览器中,js供应了sessionStorage和globalStorage。在HTML5中供应了localStorage来庖代globalStorage。

web storage和cookie的辨别

Web Storage的观点和cookie类似,辨别是它是为了更大容量存储设想的。Cookie的大小是受限的,而且每次你要求一个新的页面的时刻Cookie都邑被发送过去,如许无形中浪费了带宽,别的cookie还须要指定作用域,不能够跨域挪用。

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

然则cookie也是不能够或缺的:cookie的作用是与服务器举行交互,作为HTTP范例的一部份而存在 ,而Web Storage仅仅是为了在当地“存储”数据而生

浏览器的支撑除了IE7及以下不支撑外,其他规范浏览器都完整支撑(ie及FF需在web服务器里运转),值得一提的是IE老是办好事,比方IE7、IE6中的userData实在就是javascript当地存储的处理方案。经由历程简朴的代码封装能够一致到一切的浏览器都支撑web storage

localStorage和sessionStorage都具有雷同的操纵要领,比方setItemgetItemremoveItem

cookie 和session 的辨别:

1、cookie数据寄存在客户的浏览器上,session数据放在服务器上。
2、cookie不是很平安,他人能够剖析寄存在当地的COOKIE并举行COOKIE诳骗考虑到平安应当运用session。
3、session会在肯定时候内保存在服务器上。当接见增添,会比较占用你服务器的机能考虑到减轻服务器机能方面,应当运用COOKIE。
4、单个cookie保存的数据不能凌驾4K,许多浏览器都限定一个站点最多保存20个cookie。
5、所以个人发起:

将上岸信息等主要信息寄存为SESSION
其他信息假如须要保存,能够放在COOKIE中

position:absolute和float属性的异同

  • A:共同点:
    对内联元素设置floatabsolute属性,能够让元素脱离文档流,而且能够设置其宽高。

  • B:差别点:
    float仍会占有位置,position会掩盖文档流中的其他元素。

引见一下box-sizing属性?

  • box-sizing属性主要用来掌握元素的盒模子的剖析形式。默许值是content-box。

  • content-box:让元素保持W3C的规范盒模子。元素的宽度/高度由border + padding + content的宽度/高度决议,设置width/height属性指的是content部份的宽/高

CSS 挑选符有哪些?哪些属机能够继续?优先级算法如何盘算? CSS3新增伪类有那些?

  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)

可继续的款式font-size font-family color, text-indent;
不可继续的款式border padding margin width height ;

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 单选框或复选框被选中。

XML和JSON的辨别?

(1).数据体积方面。
JSON相关于XML来说,数据的体积小,通报的速率更快些。
(2).数据交互方面。
JSON与JavaScript的交互越发轻易,更轻易剖析处置惩罚,更好的数据交互。
(3).数据形貌方面。
JSON对数据的形貌性比XML较差。
(4).传输速率方面。
JSON的速率要远远快于XML。

罕见兼容性题目?

  • png24位的图片在iE6浏览器上涌现背景,处理方案是做成PNG8.也能够援用一段剧本处置惩罚.

  • 浏览器默许的margin和padding差别。处理方案是加一个全局的*{margin:0;padding:0;}来一致。

  • IE6双边距bug:块属性标签float后,又有横行的margin状况下,在ie6显现margin比设置的大。

  • 浮动ie发作的双倍间隔(IE6双边距题目:在IE6下,假如对元素设置了浮动,同时又设置了margin-left或margin-right,margin值会更加。)
    #box{ float:left; width:10px; margin:0 0 0 100px;}

这类状况之下IE会发作20px的间隔,处理方案是在float的标签款式掌握中到场 ——_display:inline;将其转化为行内属性。(_这个标记只要ie6会辨认)

  • 渐进辨认的体式格局,从整体中逐步消除部分。

  css
      .bb{
       background-color:#f1ee18;/*一切辨认*/
      .background-color:#00deff\9; /*IE6、7、8辨认*/
      +background-color:#a200ff;/*IE6、7辨认*/
      _background-color:#1e0bd1;/*IE6辨认*/ 
      } 
  • 超链接接见事后hover款式就不涌现了 被点击接见过的超链接款式不在具有hover和active了处理要领是转变CSS属性的分列递次:

L-V-H-A :  a:link {} a:visited {} a:hover {} a:active {}
  • 高低margin重合题目

    ie和ff都存在,相邻的两个div的margin-left和margin-right不会重合,然则margin-top和margin-bottom却会发作重合。
    处理要领,养成优越的代码编写习气,同时采纳margin-top或许同时采纳margin-bottom。
    

诠释下浮动和它的事情道理?消灭浮动的技能

浮动元素脱离文档流,不占有空间。浮动元素遇到包含它的边框或许浮动元素的边框停止。
1.运用空标签消灭浮动。
这类要领是在一切浮动标签背面增添一个空标签 定义css clear:both. 弊病就是增添了无意义标签。
2.运用overflow。
给包含浮动元素的父标签增添css属性 overflow:auto; zoom:1; zoom:1用于兼容IE6。
3.运用after伪对象消灭浮动。
该要领只适用于非IE浏览器。详细写法可参照以下示例。运用中需注意以下几点。一、该要领中必需为须要消灭浮动元素的伪对象中设置 height:0,不然该元素会比现实凌驾多少像素;
浮动元素激发的题目和处理办法?

浮动元素激发的题目:

(1)父元素的高度没法被撑开,影响与父元素同级的元素
(2)与浮动元素同级的非浮动元素(内联元素)会追随厥后
(3)若非第一个元素浮动,则该元素之前的元素也须要浮动,不然会影响页面显现的组织
处理要领: 运用CSS中的clear:both;属性来消灭元素的浮动可处理2、3题目,关于题目1,增添以下款式,给父元素增添clearfix款式:

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

消灭浮动的几种要领:

1,分外标签法,<div style=”clear:both;”></div>(瑕玷:不过这个办法会增添分外的标签使HTML组织看起来不够简约。)
2,运用after伪类

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

3,浮动外部元素
4,设置overflowhidden或许auto

IE 8以下版本的浏览器中的盒模子有什么差别

IE8以下浏览器的盒模子中定义的元素的宽高包含内边距和边框

DOM操纵——如何增添、移除、挪动、复制、建立和查找节点。

(1)建立新节点

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

      createElement()   //建立一个详细的元素

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

(2)增添、移除、替代、插进去

      appendChild()

      removeChild()

      replaceChild()

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

(3)查找

      getElementsByTagName()    //经由历程标签称号

      getElementsByName()    //经由历程元素的Name属性的值(IE容错才能较强,会获得一个数组,个中包含id即是name值的)

      getElementById()    //经由历程元素Id,唯一性

html5有哪些新特征、移除了那些元素?如何处置惩罚HTML5新标签的浏览器兼容题目?如何辨别 HTML 和 HTML5?

  • HTML5 如今已不是 SGML 的子集,主如果关于图象,位置,存储,多任务等功能的增添。

  • 拖拽开释(Drag and drop) API
    语义化更好的内容标签(header,nav,footer,aside,article,section)

音频、视频API(audio,video)
画布(Canvas) API
地舆(Geolocation) API
当地离线存储 localStorage 历久存储数据,浏览器封闭后数据不丧失;
sessionStorage 的数据在浏览器封闭后自动删除

表单控件,calendar、date、time、email、url、search
新的手艺webworker, websocket, Geolocation

  • 移除的元素

  • IE8/IE7/IE6支撑经由历程document.createElement要领发作的标签,
    能够运用这一特征让这些浏览器支撑HTML5新标签,

浏览器支撑新标签后,还须要增添标签默许的款式:

  • 固然最好的体式格局是直接运用成熟的框架、运用最多的是html5shim框架

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

iframe的优瑕玷?

1.<iframe>长处:

处理加载迟缓的第三方内容如图标和广告等的加载题目
Security sandbox
并行加载剧本

2.<iframe>的瑕玷:

*iframe会壅塞主页面的Onload事宜;

*立即内容为空,加载也须要时候
*没有语意 

如何完成浏览器内多个标签页之间的通讯?

挪用localstorge、cookies等当地存储体式格局 也能够运用页面传参

null和undefined的辨别?

  • null是一个示意”无”的对象,转为数值时为0;undefined是一个示意”无”的原始值,转为数值时为NaN。
    null示意”没有对象”,即该处不该该有值。典范用法是:

    
    (1) 作为函数的参数,示意该函数的参数不是对象。
    
    (2) 作为对象原型链的尽头。
    
  • undefined示意”缺乏值”,就是此处应当有一个值,然则还没有定义。典范用法是:

    (1)变量被声清楚明了,但没有赋值时,就即是undefined。
    
    (2) 挪用函数时,应当供应的参数没有供应,该参数即是undefined。
    
    (3)对象没有赋值的属性,该属性的值为undefined。
    
    (4)函数没有返回值时,默许返回undefined。

new操纵符详细干了什么呢?

  1、建立一个空对象,而且 this 变量援用该对象,同时还继续了该函数的原型。
  2、属性和要领被到场到 this 援用的对象中。
  3、新建立的对象由 this 所援用,而且末了隐式的返回 this 。

documen.write和 innerHTML的辨别

document.write只能重绘全部页面

.call() 和 .apply() 的辨别和作用?

作用:动态转变某个类的某个要领的运转环境。

哪些操纵会形成内存走漏?

  • 内存走漏指任何对象在您不再具有或须要它以后依然存在。

  • 渣滓接纳器按期扫描对象,并盘算援用了每一个对象的其他对象的数目。假如一个对象的援用数目为 0(没有其他对
    象援用过该对象),或对该对象的唯一援用是轮回的,那末该对象的内存即可接纳。

  • setTimeout 的第一个参数运用字符串而非函数的话,会激发内存走漏。

  • 闭包、掌握台日记、轮回(在两个对象相互援用且相互保存时,就会发作一个轮回)

ajax历程

(1)建立XMLHttpRequest对象,也就是建立一个异步挪用对象.

(2)建立一个新的HTTP要求,并指定该HTTP要求的要领、URL及考证信息.

(3)设置相应HTTP要求状况变化的函数.

(4)发送HTTP要求.

(5)猎取异步挪用返回的数据.

(6)运用JavaScript和DOM完成部分革新.

前端平安题目?

sql注入道理

就是经由历程把SQL敕令插进去到Web表单递交或输入域名或页面要求的查询字符串,终究到达诳骗服务器实行歹意的SQL敕令。
总的来说有以下几点:

1.永久不要信托用户的输入,要对用户的输入举行校验,能够经由历程正则表达式,或限定长度,对单引号和双”-“举行转换等。
2.永久不要运用动态拼装SQL,能够运用参数化的SQL或许直接运用存储历程举行数据查询存取。
3.永久不要运用管理员权限的数据库衔接,为每一个运用运用零丁的权限有限的数据库衔接。
4.不要把秘要信息明文寄存,请加密或许hash掉暗码和敏感的信息。

XSS道理及提防

Xss(cross-site scripting)进击指的是进击者往Web页面里插进去歹意html标签或许javascript代码。比方:进击者在论坛中放一个 看似平安的链接,欺骗用户点击后,盗取cookie中的用户私密信息;或许进击者在论坛中加一个歹意表单, 当用户提交表单的时刻,却把信息传送到进击者的服务器中,而不是用户底本认为的信托站点。
XSS提防要领
1.代码里对用户输入的处所和变量都须要仔细检查长度和对”<”,”>”,”;”,”’”等字符做过滤;其次任何内容写到页面之前都必需加以encode,防备不小心把html tag 弄出来。这一个层面做好,最少能够堵住凌驾一半的XSS 进击。
2.防备直接在cookie 中走漏用户隐私,比方email、暗码等等。
3.经由历程使cookie 和体系ip 绑定来下降cookie 走漏后的风险。如许进击者获得的cookie 没有现实代价,不可能拿来重放。
4.只管采纳POST 而非GET 提交表单

XSS与CSRF有什么辨别吗?

XSS是猎取信息,不须要提早晓得其他用户页面的代码和数据包。CSRF是替代用户完成指定的行动,须要晓得其他用户页面的代码和数据包

要完成一次CSRF进击,受害者必需顺次完成两个步骤:

  1.登录受信托网站A,并在当地天生Cookie。   2.在不登出A的状况下,接见风险网站B。

javascript内里的继续怎样完成,如何防备原型链上面的对象同享

用组织函数和原型链的夹杂形式去完成继续,防备对象同享能够参考典范的extend()函数,许多前端框架都有封装的,就是用一个空函数当作中心变量
grunt, YUI compressor 和 google clojure用来举行代码紧缩的用法。

Flash、Ajax各自的优瑕玷,在运用中如何弃取?

1、Flash ajax对照
Flash合适处置惩罚多媒体、矢量图形、接见机械;对CSS、处置惩罚文本上不足,不轻易被搜刮。
Ajax对CSS、文本支撑很好,支撑搜刮;多媒体、矢量图形、机械接见不足。
共同点:与服务器的无革新通报音讯、用户离线和在线状况、操纵DOM

GET和POST的辨别,什么时候运用POST?

GET:平常用于信息猎取,运用URL通报参数,对所发送信息的数目也有限定,平常在2000个字符
POST:平常用于修正服务器上的资本,对所发送的信息没有限定。

js对象的深度克隆

function clone(Obj) {   
        var buf;   
        if (Obj instanceof Array) {   
            buf = [];  //建立一个空的数组 
            var i = Obj.length;   
            while (i--) {   
                buf[i] = clone(Obj[i]);   
            }   
            return buf;   
        }else if (Obj instanceof Object){   
            buf = {};  //建立一个空对象 
            for (var k in Obj) {  //为这个对象增添新的属性 
                buf[k] = clone(Obj[k]);   
            }   
            return buf;   
        }else{   
            return Obj;   
        }   
    }  
    

说说TCP传输的三次握手战略

为了准确无误地把数据送达目的处,TCP协定采纳了三次握手战略。用TCP协定把数据包送出去后,TCP不会对传送 后的状况置之度外,它肯定会向对方确认是不是胜利送达。握手历程当中运用了TCP的标志:SYN和ACK。
发送端起首发送一个带SYN标志的数据包给对方。吸收端收到后,回传一个带有SYN/ACK标志的数据包以示转达确认信息。末了,发送端再回传一个带ACK标志的数据包,代表“握手”完毕
若在握手历程当中某个阶段莫名中缀,TCP协定会再次以雷同的递次发送雷同的数据包。

Javascript渣滓接纳要领

标记消灭(mark and sweep)

这是JavaScript最罕见的渣滓接纳体式格局,当变量进入实行环境的时刻,比方函数中声明一个变量,渣滓接纳器将其标记为“进入环境”,当变量脱离环境的时刻(函数实行完毕)将其标记为“脱离环境”。

渣滓接纳器会在运转的时刻给存储在内存中的一切变量加上标记,然后去掉环境中的变量以及被环境中变量所援用的变量(闭包),在这些完成以后仍存在标记的就是要删除的变量了

援用计数(reference counting)

在低版本IE中经常会涌现内存走漏,许多时刻就是由于其采纳援用计数体式格局举行渣滓接纳。援用计数的战略是跟踪纪录每一个值被运用的次数,当声清楚明了一个 变量并将一个援用范例赋值给该变量的时刻这个值的援用次数就加1,假如该变量的值变成了别的一个,则这个值得援用次数减1,当这个值的援用次数变成0的时 候,申明没有变量在运用,这个值没法被接见了,因而能够将其占用的空间接纳,如许渣滓接纳器会在运转的时刻清算掉援用次数为0的值占用的空间。

在IE中虽然JavaScript对象经由历程标记消灭的体式格局举行渣滓接纳,但BOM与DOM对象倒是经由历程援用计数接纳渣滓的,也就是说只需触及BOM及DOM就会涌现轮回援用题目。

谈谈机能优化题目

代码层面:防备运用css表达式,防备运用高等挑选器,通配挑选器。 缓存运用:缓存Ajax,运用CDN,运用外部js和css文件以便缓存,增添Expires头,服务端设置Etag,削减DNS查找等 要求数目:兼并款式和剧本,运用css图片精灵,初始首屏以外的图片资本按需加载,静态资本耽误加载。 要求带宽:紧缩文件,开启GZIP,

挪动端机能优化

只管运用css3动画,开启硬件加速。恰当运用touch事宜替代click事宜。防备运用css3渐变暗影结果。 只管少的运用box-shadow与gradients。box-shadow与gradients每每都是页面的机能杀手
什么是Etag?

页面传参,取值

  1. 当地存储localStorage(长时候存储),sessionStorage(存储时候短,浏览器封闭随之消逝),用法设置loacalStorage.setItem(字段,值),localStorage.getItem(字段,值)

  2. URL传值

function getQueryString(name) {
    var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
    var r = window.location.search.substr(1).match(reg);
    if (r != null) {
        return unescape(r[2]);
    }
    return null;
}

未完待续

    原文作者:steven
    原文地址: https://segmentfault.com/a/1190000009944697
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞