zoukankan      html  css  js  c++  java
  • 前端面试知识点

    HTML

    1.Doctype作用?标准模式与兼容模式各有什么区别

    1)<!DOCTYPE>声明位于位于HTML文档中的第一行,处于 <html> 标签之前。告知浏览器的解析器用什么文档标准解析这个文档。DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现。
    (2)标准模式的排版 和JS运作模式都是以该浏览器支持的最高标准运行。在兼容模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为以防止站点无法工作。
    </html>

    2.HTML5 为什么只需要写 <!doctype html>?

    HTML5 不基于 SGML(标准通用标记语言),因此不需要对DTD进行引用,但是需要doctype来规范浏览器的行为(让浏览器按照它们应该的方式来运行);
    而HTML4.01基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型。

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

    首先:CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,如div的display默认值为“block”,则为“块级”元素;span默认display属性值为“inline”,是“行内”元素。
    (1)行内元素有:a b span img input select strong(强调的语气)
    (2)块级元素有:div ul ol li dl dt dd h1 h2 h3 h4…p
    (3)常见的空元素:<br> <hr> <img> <input> <link> <meta>
        鲜为人知的是: <area> <base> <col> <command> <embed> <keygen> <param> <source> <track> <wbr>

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

    1)link属于XHTML标签,除了加载CSS外,还能用于定义RSS, 定义rel连接属性等作用;而@import是CSS提供的,只能用于加载CSS;
    (2)页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;
    (3)import是CSS2.1 提出的,只在IE5以上才能被识别,而link是XHTML标签,无兼容问题;

    5.介绍一下你对浏览器内核的理解?

    主要分成两部分:渲染引擎(layout engineer或Rendering Engine)和JS引擎。
    渲染引擎:负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入CSS等),以及计算网页的显示方式,然后会输出至显示器或打印机。浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的效果也不相同。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络内容的应用程序都需要内核。
    
    JS引擎则:解析和执行javascript来实现网页的动态效果。
    最开始渲染引擎和JS引擎并没有区分的很明确,后来JS引擎越来越独立,内核就倾向于只指渲染引擎。

    6.常见的浏览器内核有哪些?

    Trident内核:IE,MaxThon,TT,The World,360,搜狗浏览器等。[又称MSHTML]
    Gecko内核:Netscape6及以上版本,FF,MozillaSuite/SeaMonkey等
    Presto内核:Opera7及以上。      [Opera内核原为:Presto,现为:Blink;]
    Webkit内核:Safari,Chrome等。   [ Chrome的:Blink(WebKit的分支)]

    http://www.cnblogs.com/fullhouse/archive/2011/12/19/2293455.html

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

    * HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。
          绘画 canvas;
          用于媒介回放的 video 和 audio 元素;
          本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;
          sessionStorage 的数据在浏览器关闭后自动删除;
          语意化更好的内容元素,比如 article、footer、header、nav、section;
          表单控件,calendar、date、time、email、url、search;
          新的技术webworker, websocket, Geolocation;
    
      移除的元素:
          纯表现的元素:basefont,big,center,font, s,strike,tt,u;
          对可用性产生负面影响的元素:frame,frameset,noframes;
    
    * 支持HTML5新标签:
         IE8/IE7/IE6支持通过document.createElement方法产生的标签,
         可以利用这一特性让这些浏览器支持HTML5新标签,
         浏览器支持新标签后,还需要添加标签默认的样式。
    
         当然也可以直接使用成熟的框架、比如html5shim;
         <!--[if lt IE 9]>
            <script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script>
         <![endif]-->
    * 如何区分HTML5: DOCTYPE声明新增的结构元素功能元素

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

    用正确的标签做正确的事情。
    html语义化让页面的内容结构化,结构更清晰,便于对浏览器、搜索引擎解析;
    即使在没有样式CSS情况下也以一种文档格式显示,并且是容易阅读的;
    搜索引擎的爬虫也依赖于HTML标记来确定上下文和各个关键字的权重,利于SEO;
    使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。

    9.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进行需求实现。

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

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

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

    cookie是网站为了标示用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。
    cookie数据始终在同源的http请求中携带(即使不需要),记会在浏览器和服务器间来回传递。
    sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。
    
    存储大小:
        cookie数据大小不能超过4k。
        sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。
    
    有期时间:
        localStorage    存储持久数据,浏览器关闭后数据不丢失除非主动删除数据;
        sessionStorage  数据在当前浏览器窗口关闭后自动删除。
        cookie          设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭


    cookie 和session 的区别:

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

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

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

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

    5、所以个人建议:
       将登陆信息等重要信息存放为SESSION
       其他信息如果需要保留,可以放在COOKIE中

    12.iframe有那些缺点?

    *iframe会阻塞主页面的Onload事件;
    *搜索引擎的检索程序无法解读这种页面,不利于SEO;
    
    *iframe和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载。
    
    使用iframe之前需要考虑这两个缺点。如果需要使用iframe,最好是通过javascript
    动态给iframe添加src属性值,这样可以绕开以上两个问题。

    13.Label的作用是什么?是怎么用的?

    label标签来定义表单控制间的关系,当用户选择该标签时,浏览器会自动将焦点转到和标签相关的表单控件上。
    <label for="male">Male</label>
     <input type="radio" name="sex" id="male" />

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

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

    15.如何实现浏览器内多个标签页之间的通信? (阿里)

    WebSocket、SharedWorker;
    也可以调用localstorge、cookies等本地存储方式;
    
    localstorge另一个浏览上下文里被添加、修改或删除时,它都会触发一个事件,http://blog.csdn.net/nx8823520/article/details/30478859
    我们通过监听事件,控制它的值来进行页面信息通信;

    16.webSocket如何兼容低浏览器?(阿里)

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

    17.页面可见性(Page Visibility API) 可以有哪些用途?

    通过 visibilityState 的值检测页面当前是否可见,以及打开网页的时间等;
    在页面被切换到其他后台进程的时候,自动暂停音乐或视频的播放;
    1.节省服务器资源,Ajax 轮询这类服务器资源占用常常会被忽略,关闭这种请求可以节省资源。
    2.节省内存消耗。
    3.节省带宽消耗。http://www.jb51.net/html5/160924.html

    18.实现不使用 border 画出1px高的线,在不同浏览器的标准模式与怪异模式下都能保持一致的效果。

    <div style="height:1px;overflow:hidden;background:red"></div>

    19.网页验证码是干嘛的,是为了解决什么安全问题。

    区分用户是计算机还是人的公共全自动程序。可以防止恶意破解密码、刷票、论坛灌水;
    有效防止黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试

    20.title与h1的区别、b与strong的区别、i与em的区别?

    title属性没有明确意义只表示是个标题,H1则表示层次明确的标题,对页面信息的抓取也有很大的影响;
    
    strong是标明重点内容,有语气加强的含义,使用阅读设备阅读网络时:<strong>会重读,而<b>是展示强调内容。
    
    i内容展示为斜体,em表示强调的文本;
    
    Physical Style Elements -- 自然样式标签
    b, i, u, s, pre
    Semantic Style Elements -- 语义样式标签
    strong, em, ins, del, code
    应该准确使用语义样式标签, 但不能滥用, 如果不能确定时首选使用自然样式标签。
    </b></strong>

    CSS

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

    1)有两种, IE 盒子模型、W3C 盒子模型;
    (2)盒模型: 内容(content)、填充(padding)、 边框(border)。边界(margin)、;
    (3)区  别: IE的content部分把 border 和 padding计算了进去;

    2.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)
    
    *   可继承的样式: font-size font-family color, UL LI DL DD DT;
    
    *   不可继承的样式:border padding margin width height ;

    3.CSS优先级算法如何计算?

    *   优先级就近原则,同权重情况下样式定义最近者为准;
    *   载入样式以最后载入的定位为准;
    
    优先级为:
       !important >  id > class > tag
        important 比 内联优先级高

    4.CSS3新增伪类有那些?

     举例:
        p:first-of-type 选择属于其父元素的首个 <p> 元素的每个 </p><p> 元素。
        p:last-of-type  选择属于其父元素的最后 </p><p> 元素的每个 </p><p> 元素。
        p:only-of-type  选择属于其父元素唯一的 </p><p> 元素的每个 </p><p> 元素。
        p:only-child        选择属于其父元素的唯一子元素的每个 </p><p> 元素。
        p:nth-child(2)  选择属于其父元素的第二个子元素的每个 </p><p> 元素。
    
        :after          在元素之前添加内容,也可以用来做清除浮动。
        :before         在元素之后添加内容
        :enabled        
        :disabled       控制表单控件的禁用状态。
        :checked        单选框或复选框被选中。

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

    给div设置一个宽度,然后添加margin:0 auto属性
    div{
        200px;
        margin:0 auto;
     }
    居中一个浮动元素

    <div class="box">
        <p>我是浮动的</p>
        <p>我也是居中的</p>
    </div>
    .box{
        float:left;
        position:relative;
        left:50%;
    }
    p{
        float:left;
        position:relative;
        right:50%;
    }

    让绝对定位的div居中 position: absolute; 1200px; background: none; margin:
    0 auto; top: 0; left: 0; bottom: 0; right: 0;

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

    block         象块类型元素一样显示。
      inline          缺省值。象行内元素类型一样显示。
      inline-block  象行内元素一样显示,但其内容象块类型元素一样显示。
      list-item     象块类型元素一样显示,并添加样式列表标记。
      table         此元素会作为块级表格来显示
      inherit       规定应该从父元素继承 display 属性的值

    7.position的值relative和absolute定位原点是?

    absolute
        生成绝对定位的元素,相对于值不为 static的第一个父元素进行定位。
      fixed (老IE不支持)
        生成绝对定位的元素,相对于浏览器窗口进行定位。
      relative
        生成相对定位的元素,相对于其正常位置进行定位。
      static
        默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right z-index 声明)。
      inherit
        规定从父元素继承 position 属性的值。
    
    static(静态) 没有特别的设定,遵循基本的定位规定,不能通过z-index进行层次分级。
        relative(相对定位) 对象不可层叠、不脱离文档流,参考自身静态位置通过 top,bottom,left,right 定位,并且可以通过z-index进行层次分级。
        absolute(绝对定位) 脱离文档流,通过 top,bottom,left,right 定位。选取其最近一个最有定位设置的父级对象进行绝对定位,如果对象的父级没有设置定位属性,absolute元素将以body坐标原点进行定位,可以通过z-index进行层次分级。
        fixed(固定定位) 这里所固定的参照对像是可视窗口而并非是body或是父级元素。可通过z-index进行层次分级。

    http://www.cnblogs.com/jenry/archive/2007/07/15/818660.html

    8.CSS3有哪些新特性?

     新增各种CSS选择器    (: not(.input):所有 class 不是“input”的节点)
      圆角           (border-radius:8px)
      多列布局        (multi-column layout)
      阴影和反射      (ShadowReflect)
      文字特效      (text-shadow、)
      文字渲染      (Text-decoration)
      线性渐变      (gradient)
      旋转          (transform)
      增加了旋转,缩放,定位,倾斜,动画,多背景
      transform:scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg)Animation:

    9.用纯CSS创建一个三角形的原理是什么?

    把上、左、右三条边隐藏掉(颜色设为 transparent)
    #demo {
       0;
      height: 0;
      border- 20px;
      border-style: solid;
      border-color: transparent transparent red transparent;
    }
    

    10.经常遇到的浏览器的兼容性有哪些?原因,解决方法是什么,常用hack的技巧 ?

    * png24位的图片在iE6浏览器上出现背景,解决方案是做成PNG8.
    
    * 浏览器默认的margin和padding不同。解决方案是加一个全局的*{margin:0;padding:0;}来统一。
    
    * IE6双边距bug:块属性标签float后,又有横行的margin情况下,在ie6显示margin比设置的大。
    
      浮动ie产生的双倍距离 #box{ float:left; 10px; margin:0 0 0 100px;}
    
      这种情况之下IE会产生20px的距离,解决方案是在float的标签样式控制中加入 ——_display:inline;将其转化为行内属性。(_这个符号只有ie6会识别)
    
      渐进识别的方式,从总体中逐渐排除局部。
    
      首先,巧妙的使用“9”这一标记,将IE游览器从所有情况中分离出来。
      接着,再次使用“+”将IE8和IE7、IE6分离开来,这样IE8已经独立识别。
    
      css
          .bb{
              background-color:#f1ee18;/*所有识别*/
              .background-color:#00deff9; /*IE6、7、8识别*/
              +background-color:#a200ff;/*IE6、7识别*/
              _background-color:#1e0bd1;/*IE6识别*/
          }
    
    
    *  IE下,even对象有x,y属性,但是没有pageX,pageY属性;
       Firefox下,event对象有pageX,pageY属性,但是没有x,y属性。
    
    
    *  Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示,
       可通过加入 CSS 属性 -webkit-text-size-adjust: none; 解决。
    
    超链接访问过后hover样式就不出现了 被点击访问过的超链接样式不在具有hover和active了解决方法是改变CSS属性的排列顺序:
    L-V-H-A :  a:link {} a:visited {} a:hover {} a:active {}

    11.li与li之间有看不见的空白间隔是什么原因引起的?有什么解决办法?

    行框的排列会受到中间空白(回车空格)等的影响,因为空格也属于字符,这些空白也会被应用样式,占据空间,所以会有间隔,把字符大小设为0,就没有空格了。

     12.absolute的containing block(容器块)计算方式跟正常流有什么不同?

    无论属于哪种,都要先找到其祖先元素中最近的 position 值不为 static 的元素,然后再判断:
    1、若此元素为 inline 元素,则 containing block 为能够包含这个元素生成的第一个和最后一个 inline box 的 padding box (除 margin, border 外的区域) 的最小矩形;
    2、否则,则由这个祖先元素的 padding box 构成。
    如果都找不到,则为 initial containing block。
    
    补充:
    1. static(默认的)/relative:简单说就是它的父元素的内容框(即去掉padding的部分)
    2. absolute: 向上找最近的定位为absolute/relative的元素
    3. fixed: 它的containing block一律为根元素(html/body),根元素也是initial containing block
    

      http://www.caopeng.net/2011/02/what-is-the-css-containing-block-containing-block/

    13.对BFC规范(块级格式化上下文:block formatting context)的理解?

    (W3C CSS 2.1 规范中的一个概念,它是一个独立容器,决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用。)
     一个页面是由很多个 Box 组成的,元素的类型和 display 属性,决定了这个 Box 的类型。
     不同类型的 Box,会参与不同的 Formatting Context(决定如何渲染文档的容器),因此Box内的元素会以不同的方式渲染,也就是说BFC内部的元素和外部的元素不会互相影响。

    http://www.cnblogs.com/vitruvi/p/4303891.html

    14.css定义的权重

    以下是权重的规则:标签的权重为1,class的权重为10,id的权重为100,以下例子是演示各种定义的权重值:
    
    /*权重为1*/
    div{
    }
    /*权重为10*/
    .class1{
    }
    /*权重为100*/
    #id1{
    }
    /*权重为100+1=101*/
    #id1 div{
    }
    /*权重为10+1=11*/
    .class1 div{
    }
    /*权重为10+10+1=21*/
    .class1 .class2 div{
    }
    
    如果权重相同,则最后定义的样式会起作用,但是应该避免这种情况出现

    15.请解释一下为什么会出现浮动和什么时候需要清除浮动?清除浮动的方式

    浮动:浮动的框可以左右移动,直至它的外边缘遇到包含框或者另一个浮动框的边缘。浮动框不属于文档中的普通流,当一个元素浮动之后,不会影响到 块级框的布局而只会影响内联框(通常是文本)的排列,
    文档中的普通流就会表现得和浮动框不存在一样,当浮动框高度超出包含框的时候,也就会出现包含框不会 自动伸高来闭合浮动元素(“高度塌陷”现象)。顾名思义,就是漂浮于普通流之上,像浮云一样
    ,但是只能左右浮动。 正是因为浮动的这种特性,导致本属于普通流中的元素浮动之后,包含框内部由于不存在其他普通流元素了,也就表现出高度为0(高度塌陷)。在实际布局中,往往这并不是我们所希望的,所以需要闭合浮动元素,
    使其包含框表现出正常的高度。
    1)添加额外标签 <div style="clear:both;"></div> 2)父元素设置display:table  3)使用:after 伪元素  .clearfix:after {content:"."; display:block; height:0; visibility:hidden; clear:both; } 
    .clearfix { *zoom:1; } 

     16.png、jpg、gif 这些图片格式解释一下,分别什么时候用。有没有了解过webp?

    GIF格式支持背景透明,GIF格式支持动画,GIF格式支持无损压缩
    Png是完全支持alpha透明的无损数据
    JPG图片使用更有效的有损压缩算法
    GIF 的适用范围是:小图标、平铺背景等色彩比较少的小型图片
    ebp格式:Google开发的一种旨在加快图片加载速度的图片格式。图片压缩体积大约只有JPEG的2/3,
    JPEG/JFIF是最普遍在万维网(World Wide Web)上被用来储存和传输照片的格式

    17.display:inline-block 什么时候会显示间隙

    在编辑器里写代码的时候,同级别的标签不写在同一行以保持代码的整齐可读性,即inline-block布局的元素在编辑器里不在同一行,即存在换行符,因此这就是著名的inline-block“换行符/空格间隙问题”
    移除空格、使用margin负值、使用font-size:0

    18.如果需要手动写动画,你认为最小时间间隔是多久,为什么

    多数显示器默认频率是60Hz,即1秒刷新60次,所以理论上最小间隔为1/60*1000ms = 16.7ms

    19.font-style属性可以让它赋值为“oblique” oblique是什么意思?

    italic    浏览器会显示一个斜体的字体样式。
    oblique    浏览器会显示一个倾斜的字体样式。

    20.让页面里的字体变清晰,变细用CSS怎么做

    -webkit-font-smoothing: antialiased;

    21.怎么让Chrome支持小于12px 的文字

    -webkit-transform:scale(0.8)

    22.设置元素浮动后,该元素的display值是多少

    自动变成display:block

     23.你对line-height是如何理解的

    行高”顾名思意指一行文字的高度。具体来说是指两行文字间基线之间的距离.vertical-align中有top,middle,baseline,bottom与之是由关联的
    如果一个标签没有定义height属性(包括百分比高度),那么其最终表现的高度一定是由line-height起作用
    把line-height值设置为height一样大小的值可以实现单行文字的垂直居中

    line-height代替了height,其原因在于:IE6,IE7下,类似inline-block属性的元素里如果有block属性的元素,如果该block haslayout,则该标签会冲破外部inline-block的显示而宽度100%显示,从使按钮自适应文字大小的效果失效,解决方法就是使用line-height代替height。

    24.如何修改chrome记住密码后自动填充表单的黄色背景

    input : -webkit-autofill {
    -webkit-box-shadow : 0 0 0px 1000px white inset ;
    border : 1px solid #CCC !important ;
    }

    25.::before 和 :after中双冒号和单冒号 有什么区别?解释一下这2个伪元素的作用。

    单冒号(:)用于CSS3伪类,双冒号(::)用于CSS3伪元素。
    对于CSS2之前已有的伪元素,比如:before,单冒号和双冒号的写法::before作用是一样的。
    提醒,如果你的网站只需要兼容webkit、firefox、opera等浏览器,建议对于伪元素采用双冒号的写法,如果不得不兼容IE浏览器,还是用CSS2的单冒号写法比较安全
    
    “伪元素”,顾名思义。它创建了一个虚假的元素,并插入到目标元素内容之前或之后

    26.什么是响应式设计?响应式设计的基本原理是什么?如何兼容低版本的IE?

    响应式网站设计(Responsive Web design)的理念是:集中创建页面的图片排版大小,可以智能地根据用户行为以及使用的设备环境(系统平台、屏幕尺寸、屏幕定向等)进行相对应的布局。
    
    基本原理: 媒体查询 @media
    
    兼容IE可以使用JS辅助一下来解决

    27.全屏滚动的原理是什么?用到了CSS的那些属性?

    全屏滚动的原理
    1.js动态获取屏幕的高度。
    获取屏幕的高度,设置每一屏幕的高度。
    2.监听mousewheel事件。
    监听mousewheel事件,并判断滚轮的方向,向上或向下滚动一屏。

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

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

    29.margin和padding分别适合什么场景使用

    ◆何时应当使用margin
    需要在border外侧添加空白时。
    空白处不需要背景(色)时。
    上下相连的两个盒子之间的空白,需要相互抵消时。如15px+20px的margin,将得到20px的空白。
    ◆何时应当时用padding
    需要在border内测添加空白时。
    空白处需要背景(色)时。
    上下相连的两个盒子之间的空白,希望等于两者之和时。如15px+20px的padding,将得到35px的空白。
    ◆浏览器兼容性问题
    在IE5.x、IE6中,为float的盒子指定margin时,左侧margin可能会变成两倍的宽度。通过改用padding或指定盒子为display:inline可以解决。

    30.在网页中的应该使用奇数还是偶数的字体?为什么呢?

    网页设计中为啥少用奇数字体?
    一、UI设计师的原因
    多数设计师用的设计软件(如:ps)大多数都是偶数,所以前端工程师一般都是用偶数字体
    二、浏览器的原因
    其一是为了迁就ie6,万恶的ie6会把定义为13px的字渲染成14px,你可以写个页面试试
    还有一个原因是,偶数宽的汉字,比如12px宽的汉字,去掉1像素的间距,填充了像素的实际宽是11px,这样汉字的中竖线左右是平分的,以“中”这个字为例,在12像素时,竖线在中间,左右各5像素,显得均衡。
    其二像谷歌一些比较流行的浏览器一般会有个默认的最小字体,而且对奇数字体渲染的不太好看
     
    三、实际应用
    偶数字号相对更容易和 web 设计的其他部分构成比例关系。比如:当我用了 14 px 的正文字号,我可能会在一些地方用 14 × 0.5 = 7 px 的 margin,在另一些地方用 14 × 1.5 = 21 px 的标题字号。
    Windows 自带的点阵宋体(中易宋体)从 Vista 开始只提供 121416 px 这三个大小的点阵,而 131517 px 时用的是小一号的点阵(即每个字占的空间大了 1 px,但点阵没变),于是略显稀疏

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

    浏览器是从右往左匹配css选择器的
    如果你从选择器的最右边开始匹配,有很大的可能不匹配,然后结束。如果匹配就需要做一些更多的工作,但只与选择器的深度成比例,一般不会太多。
    

     

    JavaScript

    1.介绍js的基本数据类型。

     Undefined、Null、Boolean、Number、String

    2.介绍js有哪些内置对象?

    Object 是 JavaScript 中所有对象的父对象
    数据封装类对象:Object、Array、Boolean、Number 和 String
    其他对象:Function、Arguments、Math、Date、RegExp、Error

    3.说几条写JavaScript的基本规范?

    使用规范有意义的变量名
    不要使用全局函数。
    Switch语句必须带有default分支

    4.JavaScript原型,原型链 ?

    每个对象都会在其内部初始化一个属性,就是prototype(原型),当我们访问一个对象的属性时,
    如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,这个prototype又会有自己的prototype,
    于是就这样一直找下去,也就是我们平时所说的原型链的概念。
    关系:instance.constructor.prototype = instance.__proto__

    更多见http://www.cnblogs.com/myzy/p/6083141.html,http://www.cnblogs.com/wangfupeng1988/p/3979533.html

    5.JavaScript有几种类型的值?,你能画一下他们的内存图吗?

    栈:原始数据类型(Undefined,Null,Boolean,Number、String) 
    堆:引用数据类型(对象、数组和函数)
    
    两种类型的区别是:存储位置不同;
    原始数据类型直接存储在栈(stack)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储;
    引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定,如果存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其
    在栈中的地址,取得地址后从堆中获得实体

    6.Javascript如何实现继承

    1、构造继承
    2、原型继承
    3、实例继承
    4、拷贝继承
    原型prototype机制或apply和call方法去实现较简单,建议使用构造函数与原型混合方式。
    
     function Parent(){
            this.name = 'wang';
        }
    
        function Child(){
            this.age = 28;
        }
        Child.prototype = new Parent();//继承了Parent,通过原型
    
        var demo = new Child();
        alert(demo.age);
        alert(demo.name);//得到被继承的属性
      }

    7.javascript创建对象的几种方式?

    javascript创建对象简单的说,无非就是使用内置对象或各种自定义对象,当然还可以用JSON;但写法有很多种,也能混合使用。
    
    1、对象字面量的方式   
    
        person={firstname:"Mark",lastname:"Yun",age:25,eyecolor:"black"};
    
    2、用function来模拟无参的构造函数
    
        function Person(){}
        var person=new Person();//定义一个function,如果使用new"实例化",该function可以看作是一个Class
        person.name="Mark";
        person.age="25";
        person.work=function(){
        alert(person.name+" hello...");
        }
        person.work();
    
    3、用function来模拟参构造函数来实现(用this关键字定义构造的上下文属性)
    
        function Pet(name,age,hobby){
           this.name=name;//this作用域:当前对象
           this.age=age;
           this.hobby=hobby;
           this.eat=function(){
              alert("我叫"+this.name+",我喜欢"+this.hobby+",是个程序员");
           }
        }
        var maidou =new Pet("麦兜",25,"coding");//实例化、创建对象
        maidou.eat();//调用eat方法
    
    4、用工厂方式来创建(内置对象)
    
         var wcDog =new Object();
         wcDog.name="旺财";
         wcDog.age=3;
         wcDog.work=function(){
           alert("我是"+wcDog.name+",汪汪汪......");
         }
         wcDog.work();
    
    5、用原型方式来创建
    
        function Dog(){
    
         }
         Dog.prototype.name="旺财";
         Dog.prototype.eat=function(){
         alert(this.name+"是个吃货");
         }
         var wangcai =new Dog();
         wangcai.eat();
    
    5、用混合方式来创建
    
        function Car(name,price){
          this.name=name;
          this.price=price; 
        }
         Car.prototype.sell=function(){
           alert("我是"+this.name+",我现在卖"+this.price+"万元");
          }
        var camry =new Car("凯美瑞",27);
        camry.sell(); 

    8.Javascript作用链域?

    全局函数无法查看局部函数的内部细节,但局部函数可以查看其上层的函数细节,直至全局细节。
    当需要从局部函数查找某一属性或方法时,如果当前作用域没有找到,就会上溯到上层作用域查找,
    直至全局函数,这种组织形式就是作用域链。

     9.eval是做什么的?

    它的功能是把对应的字符串解析成JS代码并运行;
    应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)。
    由JSON字符串转换为JSON对象的时候可以用eval,var obj =eval('('+ str +')')

    10.什么是window对象? 什么是document对象?

    [window对象]  它是一个顶层对象,即浏览器的窗口。
    Dom,翻译过来就是“文档对象模型”。这种模型是为了方便HTML和XML文档而设计的。Dom这个术语反映3个意思,一是“文档”,也就是说它的表现形式为一份文档(废话^_^)就是网页(可以比较COM(组件对象模型)里的组件);二是“对象”,也就是说,其内部是由一个个可操控的对象构成的;三是“模型”,DOM是一个树形结构,一个可以用脚本灵活操作的模型。我们知道,打开任何一个网页,浏览器会首先创建一个窗口,这个窗口就是一个window对象,也是js运行所依附的全局环境对象和全局作用域对象。为了加载网页文档,当前窗口将为要打开的网页创建一个document对象,然后将网页加载到这个document中。
    window对象是客户端javascript最高层对象之一,只要打开浏览器窗口,不管该窗口中是否有打开的网页,当遇到BODY、FRAMESET或FRAME元素时,都会自动建立window对象的实例。另外,该对象的实例也可由window.open()方法创建。由于window对象是其它大部分对象的共同祖先,在调用window对象的方法和属性时,可以省略window对象的引用。例如:window.document.write()可以简写成: document.write()。  在窗口中觖发本窗口对象的任何方法和属性时可以省去窗口的实例名称。例如给当前的myWin窗口设置status属性时,可以只用status而不用myWin.status。但是,在事件处理中调用location属性、close()方法或open()方法时必须使用实例名称。 
    Document 对象代表整个HTML 文档,可用来访问页面中的所有元素。
    Document 对象是window和frames对象的一个属性,是显示于窗口或框架内的一个文档,可通过 window.document 属性来访问。

     11.null,undefined 的区别?

    null        表示一个对象被定义了,值为“空值”;
    undefined   表示不存在这个值。
    typeof undefined
        //"undefined"
        undefined :是一个表示""的原始值或者说表示"缺少值",就是此处应该有一个值,但是还没有定义。当尝试读取时会返回 undefined; 
        例如变量被声明了,但没有赋值时,就等于undefined
    
    typeof null
        //"object"
        null : 是一个对象(空对象, 没有任何属性和方法);
        例如作为函数的参数,表示该函数的参数不是对象;
    (1)变量被声明了,但没有赋值时,就等于undefined。
    (2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
    (3)对象没有赋值的属性,该属性的值为undefined。
    (4)函数没有返回值时,默认返回undefined。

    12.事件是?IE与火狐的事件机制有什么区别? 如何阻止冒泡?

     1. 我们在网页中的某个操作(有的操作对应多个事件)。例如:当我们点击一个按钮就会产生一个事件。是可以被 JavaScript 侦测到的行为。
     2. 事件处理机制:IE是事件冒泡、Firefox同时支持两种事件模型,也就是:捕获型事件和冒泡型事件;
     3. ev.stopPropagation();(旧ie的方法 ev.cancelBubble = true;)

    详细说明见:http://www.cnblogs.com/myzy/p/5226985.html

    13.什么是闭包(closure),为什么要用它?

    闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用链域,将函数内部的变量和方法传递到外部。
    闭包的特性:
    1.函数内再嵌套函数
    2.内部函数可以引用外层的参数和变量
    3.参数和变量不会被垃圾回收机制回收
    //li节点的onclick事件都能正确的弹出当前被点击的li索引
     <ul>
        <li> index = 0</li>
        <li> index = 1</li>
        <li> index = 2</li>
        <li> index = 3</li>
    </ul>
    <script type="text/javascript">
        var nodes = document.getElementsByTagName("li");
        for(i = 0;i<nodes.length;i+= 1){
            nodes[i].onclick = function(){
                console.log(i+1);//不用闭包的话,值每次都是4
            }(i);
        }
    </script>
    
    执行say667()后,say667()闭包内部变量会存在,而闭包内部函数的内部变量不会存在
    使得Javascript的垃圾回收机制GC不会收回say667()所占用的资源
    因为say667()的内部函数的执行需要依赖say667()中的变量
    这是对闭包作用的非常直白的描述
    
      function say667() {
        // Local variable that ends up within closure
        var num = 666;
        var sayAlert = function() {
            alert(num);
        }
        num++;
        return sayAlert;
    }
    
     var sayAlert = say667();
     sayAlert()//执行结果应该弹出的667

     14.javascript 代码中的"use strict";是什么意思 ? 使用它区别是什么?

    use strict是一种ECMAscript 5 添加的(严格)运行模式,这种模式使得 Javascript 在更严格的条件下运行,
    
    使JS编码更加规范化的模式,消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为。
    默认支持的糟糕特性都会被禁用,比如不能用with,也不能在意外的情况下给全局变量赋值;
    全局变量的显示声明,函数必须声明在顶层,不允许在非函数代码块内声明函数,arguments.callee也不允许使用;
    消除代码运行的一些不安全之处,保证代码运行的安全,限制函数中的arguments修改,严格模式下的eval函数的行为和非严格模式的也不相同;
    
    提高编译器效率,增加运行速度;
    为未来新版本的Javascript标准化做铺垫。

    15.JSON 的了解?

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。
    它是基于JavaScript的一个子集。数据格式简单, 易于读写, 占用带宽小
    如:{"age":"12", "name":"back"}
    
    JSON字符串转换为JSON对象:
    var obj =eval('('+ str +')');
    var obj = str.parseJSON();
    var obj = JSON.parse(str);
    
    JSON对象转换为JSON字符串:
    var last=obj.toJSONString();
    var last=JSON.stringify(obj);

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

    1:也叫Script DOM Element
    2: async="true"
    3:defer
    async属性:Html5新属性。脚本将在下载后尽快执行,作用同defer,但是不能保证脚本按顺序执行。他们将在onload事件之前完成。
    4.onload时的异步加载.
    5.按需异步载入js

    17.Ajax 是什么? 如何创建一个Ajax?

    ajax的全称:Asynchronous Javascript And XML。
    异步传输+js+xml。
    所谓异步,在这里简单地解释就是:向服务器发送请求的时候,我们不必等待结果,而是可以同时做其他的事情,等到有了结果它自己会根据设定进行后续操作,与此同时,页面是不会发生整页刷新的,提高了用户体验。
    
    (1)创建XMLHttpRequest对象,也就是创建一个异步调用对象
    (2)创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息
    (3)设置响应HTTP请求状态变化的函数
    (4)发送HTTP请求
    (5)获取异步调用返回的数据
    (6)使用JavaScript和DOM实现局部刷新

    代码见:http://www.cnblogs.com/myzy/p/5257619.html

    18.如何解决跨域问题?

    1、document.domain+iframe的设置 解决主域相同而二级域名不同的情况
    2.解决主域相同而二级域名不同的情况
    4.window.name实现的跨域数据传输
    3,使用HTML5 postMessage
    5,包含一个Access- Control-Allow-Origin的HTTP响应头
    6.JSONP

    http://www.cnblogs.com/myzy/p/5230326.html

     19.页面编码和被请求的资源编码如果不一致如何处理?

    <script src="http://www.xxx.com/test.js" charset="utf-8"></script>

    20.模块化开发怎么做?

      var module1 = (function(){
            var _count = 0;
            var m1 = function(){
              //...
            };
            var m2 = function(){
              //...
            };
            return {
              m1 : m1,
              m2 : m2
            };
          })();
    立即执行函数,不暴露私有成员

    21.AMD(Modules/Asynchronous-Definition)、CMD(Common Module Definition)规范区别?

    Asynchronous Module Definition,异步模块定义,所有的模块将被异步加载,模块加载不影响后面语句运行。所有依赖某些模块的语句均放置在回调函数中。
    
     区别:
    
        1. 对于依赖的模块,AMD 是提前执行,CMD 是延迟执行。不过 RequireJS 从 2.0 开始,也改成可以延迟执行(根据写法不同,处理方式不同)。CMD 推崇 as lazy as possible.
        2. CMD 推崇依赖就近,AMD 推崇依赖前置。看代码:
    
    // CMD
    define(function(require, exports, module) {
        var a = require('./a')
        a.doSomething()
        // 此处略去 100 行
        var b = require('./b') // 依赖可以就近书写
        b.doSomething()
        // ...
    })
    
    // AMD 默认推荐
    define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好
        a.doSomething()
        // 此处略去 100 行
        b.doSomething()
        // ...
    })

    https://segmentfault.com/a/1190000000733959

    22.documen.write和 innerHTML的区别

    document.write只能重绘整个页面
    innerHTML可以重绘页面的一部分

    23.DOM操作——怎样添加、移除、移动、复制、创建和查找节点?

    1)创建新节点
      createDocumentFragment()    //创建一个DOM片段
      createElement()   //创建一个具体的元素
      createTextNode()   //创建一个文本节点2)添加、移除、替换、插入
      appendChild()
      removeChild()
      replaceChild()
      insertBefore() //在已有的子节点前插入一个新的子节点3)查找
      getElementsByTagName()    //通过标签名称
      getElementsByName()    //通过元素的Name属性的值(IE容错能力较强,会得到一个数组,其中包括id等于name值的)
      getElementById()    //通过元素Id,唯一性

    24..call() 和 .apply() 的区别?

    这两个方法基本上是一个意思,区别在于 call 的第二个参数可以是任意类型,而apply的第二个参数必须是数组,也可以是arguments

    25.那些操作会造成内存泄漏?

    意外的全局变量,被遗忘的定时器或者回调,没有清理的DOM元素引用,闭包引起的内存泄漏

    26.针对 jQuery 的优化方法?

    *基于Class的选择性的性能相对于Id选择器开销很大,因为需遍历所有DOM元素。
    
    *频繁操作的DOM,先缓存起来再操作。用Jquery的链式调用更好。
     比如:var str=$("a").attr("href");

    27.WEB应用从服务器主动推送Data到客户端有那些方式?

    html5提供的Websocket
    不可见的iframe
    WebSocket通过Flash
    XHR长时间连接
    XHR Multipart Streaming
    <script>标签的长时间连接(可跨域)

    28.对Node的优点和缺点提出了自己的看法?

    *(优点)因为Node是基于事件驱动和无阻塞的,所以非常适合处理并发请求,
      因此构建在Node上的代理服务器相比其他技术实现(如Ruby)的服务器表现要好得多。
      此外,与Node代理服务器交互的客户端代码是由javascript语言编写的,
      因此客户端和服务器端都用同一种语言编写,这是非常美妙的事情。
    
    *(缺点)Node是一个相对新的开源项目,所以不太稳定,它总是一直在变,
      而且缺少足够多的第三方库支持。看起来,就像是Ruby/Rails当年的样子。

    29.你有用过哪些前端性能优化的方法?

    1) 减少http请求次数:CSS Sprites, JS、CSS源码压缩、图片大小控制合适;网页Gzip,CDN托管,data缓存 ,图片服务器。
    
      (2) 前端模板 JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数
    
      (3) 用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能。
    
      (4) 当需要设置的样式很多时设置className而不是直接操作style。
    
      (5) 少用全局变量、缓存DOM节点查找的结果。减少IO读取操作。
    
      (6) 避免使用CSS Expression(css表达式)又称Dynamic properties(动态属性)。
    
      (7) 图片预加载,将样式表放在顶部,将脚本放在底部  加上时间戳。
    
      (8) 避免在页面的主体布局中使用table,table要等其中的内容完全下载之后才会显示出来,显示比div+css布局慢。
      对普通的网站有一个统一的思路,就是尽量向前端优化、减少数据库操作、减少磁盘IO。向前端优化指的是,在不影响功能和体验的情况下,能在浏览器执行的不要在服务端执行,能在缓存服务器上直接返回的不要到应用服务器,程序能直接取得的结果不要到外部取得,本机内能取得的数据不要到远程取,内存能取到的不要到磁盘取,缓存中有的不要去数据库查询。减少数据库操作指减少更新次数、缓存结果减少查询次数、将数据库执行的操作尽可能的让你的程序完成(例如join查询),减少磁盘IO指尽量不使用文件系统作为缓存、减少读写文件次数等。程序优化永远要优化慢的部分,换语言是无法“优化”的。

    30.http状态码有那些?分别代表是什么意思?

      简单版
        [
            100  Continue   继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息
            200  OK         正常返回信息
            201  Created    请求成功并且服务器创建了新的资源
            202  Accepted   服务器已接受请求,但尚未处理
            301  Moved Permanently  请求的网页已永久移动到新位置。
            302 Found       临时性重定向。
            303 See Other   临时性重定向,且总是使用 GET 请求新的 URI。
            304  Not Modified 自从上次请求后,请求的网页未修改过。
    
            400 Bad Request  服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。
            401 Unauthorized 请求未授权。
            403 Forbidden   禁止访问。
            404 Not Found   找不到如何与 URI 相匹配的资源。
    
            500 Internal Server Error  最常见的服务器端错误。
            503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)。
        ]
    
      完整版
      1**(信息类):表示接收到请求并且继续处理
        100——客户必须继续发出请求
        101——客户要求服务器根据请求转换HTTP协议版本
    
      2**(响应成功):表示动作被成功接收、理解和接受
        200——表明该请求被成功地完成,所请求的资源发送回客户端
        201——提示知道新文件的URL
        202——接受和处理、但处理未完成
        203——返回信息不确定或不完整
        204——请求收到,但返回信息为空
        205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
        206——服务器已经完成了部分用户的GET请求
    
      3**(重定向类):为了完成指定的动作,必须接受进一步处理
        300——请求的资源可在多处得到
        301——本网页被永久性转移到另一个URL
        302——请求的网页被转移到一个新的地址,但客户访问仍继续通过原始URL地址,重定向,新的URL会在response中的Location中返回,浏览器将会使用新的URL发出新的Request。
        303——建议客户访问其他URL或访问方式
        304——自从上次请求后,请求的网页未修改过,服务器返回此响应时,不会返回网页内容,代表上次的文档已经被缓存了,还可以继续使用
        305——请求的资源必须从服务器指定的地址得到
        306——前一版本HTTP中使用的代码,现行版本中不再使用
        307——申明请求的资源临时性删除
    
      4**(客户端错误类):请求包含错误语法或不能正确执行
        400——客户端请求有语法错误,不能被服务器所理解
        401——请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
        HTTP 401.1 - 未授权:登录失败
          HTTP 401.2 - 未授权:服务器配置问题导致登录失败
          HTTP 401.3 - ACL 禁止访问资源
          HTTP 401.4 - 未授权:授权被筛选器拒绝
        HTTP 401.5 - 未授权:ISAPI 或 CGI 授权失败
        402——保留有效ChargeTo头响应
        403——禁止访问,服务器收到请求,但是拒绝提供服务
        HTTP 403.1 禁止访问:禁止可执行访问
          HTTP 403.2 - 禁止访问:禁止读访问
          HTTP 403.3 - 禁止访问:禁止写访问
          HTTP 403.4 - 禁止访问:要求 SSL
          HTTP 403.5 - 禁止访问:要求 SSL 128
          HTTP 403.6 - 禁止访问:IP 地址被拒绝
          HTTP 403.7 - 禁止访问:要求客户证书
          HTTP 403.8 - 禁止访问:禁止站点访问
          HTTP 403.9 - 禁止访问:连接的用户过多
          HTTP 403.10 - 禁止访问:配置无效
          HTTP 403.11 - 禁止访问:密码更改
          HTTP 403.12 - 禁止访问:映射器拒绝访问
          HTTP 403.13 - 禁止访问:客户证书已被吊销
          HTTP 403.15 - 禁止访问:客户访问许可过多
          HTTP 403.16 - 禁止访问:客户证书不可信或者无效
        HTTP 403.17 - 禁止访问:客户证书已经到期或者尚未生效
        404——一个404错误表明可连接服务器,但服务器无法取得所请求的网页,请求资源不存在。eg:输入了错误的URL
        405——用户在Request-Line字段定义的方法不允许
        406——根据用户发送的Accept拖,请求资源不可访问
        407——类似401,用户必须首先在代理服务器上得到授权
        408——客户端没有在用户指定的饿时间内完成请求
        409——对当前资源状态,请求不能完成
        410——服务器上不再有此资源且无进一步的参考地址
        411——服务器拒绝用户定义的Content-Length属性请求
        412——一个或多个请求头字段在当前请求中错误
        413——请求的资源大于服务器允许的大小
        414——请求的资源URL长于服务器允许的长度
        415——请求资源不支持请求项目格式
        416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段
        417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求长。
    
      5**(服务端错误类):服务器不能正确执行一个正确的请求
        HTTP 500 - 服务器遇到错误,无法完成请求
          HTTP 500.100 - 内部服务器错误 - ASP 错误
          HTTP 500-11 服务器关闭
          HTTP 500-12 应用程序重新启动
          HTTP 500-13 - 服务器太忙
          HTTP 500-14 - 应用程序无效
          HTTP 500-15 - 不允许请求 global.asa
          Error 501 - 未实现
      HTTP 502 - 网关错误
      HTTP 503:由于超载或停机维护,服务器目前无法使用,一段时间后可能恢复正常

    31.一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?(流程说的越详细越好)

    注:这题胜在区分度高,知识点覆盖广,再不懂的人,也能答出几句,
      而高手可以根据自己擅长的领域自由发挥,从URL规范、HTTP协议、DNS、CDN、数据库查询、
      到浏览器流式解析、CSS规则构建、layout、paint、onload/domready、JS执行、JS API绑定等等;
    
      详细版:
        1、浏览器会开启一个线程来处理这个请求,对 URL 分析判断如果是 http 协议就按照 Web 方式来处理;
        2、调用浏览器内核中的对应方法,比如 WebView 中的 loadUrl 方法;
        3、通过DNS解析获取网址的IP地址,设置 UA 等信息发出第二个GET请求;
        4、进行HTTP协议会话,客户端发送报头(请求报头);
        5、进入到web服务器上的 Web Server,如 Apache、Tomcat、Node.JS 等服务器;
        6、进入部署好的后端应用,如 PHP、Java、JavaScript、Python 等,找到对应的请求处理;
        7、处理结束回馈报头,此处如果浏览器访问过,缓存上有对应资源,会与服务器最后修改时间对比,一致则返回304;
        8、浏览器开始下载html文档(响应报头,状态码200),同时使用缓存;
        9、文档树建立,根据标记请求所需指定MIME类型的文件(比如css、js),同时设置了cookie;
        10、页面开始渲染DOM,JS根据DOM API操作DOM,执行事件绑定等,页面显示完成。
    
      简洁版:
        浏览器根据请求的URL交给DNS域名解析,找到真实IP,向服务器发起请求;
        服务器交给后台处理完成后返回数据,浏览器接收文件(HTML、JS、CSS、图象等);
        浏览器对加载到的资源(HTML、JS、CSS等)进行语法解析,建立相应的内部数据结构(如HTML的DOM);
        载入解析到的资源文件,渲染页面,完成。

    32.

    • JavaScript中的作用域与变量声明提升?

    • 如何编写高性能的Javascript?

    • 那些操作会造成内存泄漏?

    • JQuery的源码看过吗?能不能简单概况一下它的实现原理?

    • jQuery.fn的init方法返回的this指的是什么对象?为什么要返回this?

    • jquery中如何将数组转化为json字符串,然后再转化回来?

    • jQuery 的属性拷贝(extend)的实现原理是什么,如何实现深拷贝?

    • jquery.extend 与 jquery.fn.extend的区别?

    • jQuery 的队列是如何实现的?队列可以用在哪些地方?

    • 谈一下Jquery中的bind(),live(),delegate(),on()的区别?

    • JQuery一个对象可以同时绑定多个事件,这是如何实现的?

    • 是否知道自定义事件。jQuery里的fire函数是什么意思,什么时候用?

    • jQuery 是通过哪个方法和 Sizzle 选择器结合的?(jQuery.fn.find()进入Sizzle)

    • 针对 jQuery性能的优化方法?

    • query 中如何将数组转化为json字符串,然后再转化回来?
    • Zepto的点透问题如何解决?
    • jQueryUI如何自定义组件?
    • 需求:实现一个页面操作不会整页刷新的网站,并且能在浏览器前进、后退时正确响应。给出你的技术实现方案?
    • 如何判断当前脚本运行在浏览器还是node环境中?(阿里)
    • jQuery 的 slideUp动画 ,如果目标元素是被外部事件驱动, 当鼠标快速地连续触发外部元素事件, 动画会滞后的反复执行,该如何处理呢?
    • 把 Script 标签 放在页面的最底部的body封闭之前 和封闭之后有什么区别?浏览器会如何解析它们?
      • 移动端的点击事件的有延迟,时间是多久,为什么会有? 怎么解决这个延时?(click 有 300ms 延迟,为了实现safari的双击事件的设计,浏览器要知道你是不是要双击操作。)

      • 知道各种JS框架(Angular, Backbone, Ember, React, Meteor, Knockout...)么? 能讲出他们各自的优点和缺点么?Underscore 对哪些 JS 原生对象进行了扩展以及提供了哪些好用的函数方法?

    • JQuery一个对象可以同时绑定多个事件,这是如何实现的?

    • Node.js的适用场景?

    • (如果会用node)知道route, middleware, cluster, nodemon, pm2, server-side rendering么?

    • 解释一下 Backbone 的 MVC 实现方式?

    • 什么是“前端路由”?什么时候适合使用“前端路由”? “前端路由”有哪些优点和缺点?

    • 知道什么是webkit么? 知道怎么用浏览器的各种工具来调试和debug代码么?

    • 如何测试前端代码么? 知道BDD, TDD, Unit Test么? 知道怎么测试你的前端工程么(mocha, sinon, jasmin, qUnit..)?

    • 前端templating(Mustache, underscore, handlebars)是干嘛的, 怎么用?

    • 简述一下 Handlebars 的基本用法?

    • 简述一下 Handlerbars 的对模板的基本处理流程, 如何编译的?如何缓存的?

    • 用js实现千位分隔符?(来源:前端农民工,提示:正则+replace)

    • 常使用的库有哪些?常用的前端开发工具?开发过什么应用或组件?
    • 知道什么是SEO并且怎么优化么? 知道各种meta data的含义么?

    requireJS的核心原理是什么?(如何动态加载的?如何避免多次加载的?如何缓存的?)

    前端学习网站推荐

    1. 极客标签:     http://www.gbtags.com/
    
    2. 码农周刊:     http://weekly.manong.io/issues/
    
    3. 前端周刊:     http://www.feweekly.com/issues
    
    4. 慕课网:       http://www.imooc.com/
    
    5. div.io:       http://div.io
    
    6. Hacker News: https://news.ycombinator.com/news
    
    7. InfoQ:       http://www.infoq.com/
    
    8. w3cplus:     http://www.w3cplus.com/
    
    9. Stack Overflow: http://stackoverflow.com/
    
    10.w3school:    http://www.w3school.com.cn/
    
    11.mozilla:     https://developer.mozilla.org/zh-CN/docs/Web/JavaScript


    文档推荐

    1. jQuery 基本原理 http://docs.huihoo.com/jquery/jquery-fundamentals/zh-cn/index.html

    2. JavaScript 秘密花园 http://bonsaiden.github.io/JavaScript-Garden/zh/

    3. CSS参考手册

    4. JavaScript 标准参考教程 http://javascript.ruanyifeng.com/

    5. ECMAScript 6入门 http://es6.ruanyifeng.com/

  • 相关阅读:
    Shell脚本:使用rsync备份文件/目录
    如何在 CentOS 中设置 NTP 服务器
    NGINX引入线程池 性能提升9倍
    如何在Quagga BGP路由器中设置IPv6的BGP对等体和过滤
    如何使用Weave以及Docker搭建Nginx反向代理/负载均衡服务器
    在 Ubuntu 上配置高性能的 HHVM 环境
    在 Linux 中怎样将 MySQL 迁移到 MariaDB 上
    如何删除 Ubuntu 上不再使用的旧内核
    如何在 Arch Linux 中安装 DNSCrypt 和 Unbound
    在 CentOS 7 中安装并使用自动化工具 Ansible
  • 原文地址:https://www.cnblogs.com/myzy/p/6057780.html
Copyright © 2011-2022 走看看