FE-interview个人收集的前端知识点、面试题和答案,参考答案仅代表个人观点,方便复习,目录如下,通过文档内搜索目录可快速定位章节$HTML,HTTP,web综合问题$CSS部分$javascript部分$HTML,HTTP,web综合问题doctype是什么,举例常见doctype及特点!doctype声明必须处于HTML文档的头部,在html标签之前,HTML5中不区分大小写!doctype声明不是一个HTML标签,是一个用于告诉浏览器当前HTMl版本的指令现代浏览器的html布局引擎通过检查doctype决定使用兼容模式还是标准模式对文档进行渲染,一些浏览器有一个接近标准模型。在HTML4.01中!doctype声明指向一个DTD,由于HTML4.01基于SGML,所以DTD指定了标记规则以保证浏览器正确渲染内容HTML5不基于SGML,所以不用指定DTD常见dotype:HTML4.01strict:不允许使用表现性、废弃元素(如font)以及frameset。声明:!DOCTYPEHTMLPUBLIC-//W3C//DTDHTML4.01//EN:允许使用表现性、废弃元素(如font),不允许使用frameset。声明:!DOCTYPEHTMLPUBLIC-//W3C//DTDHTML4.01Transitional//EN:允许表现性元素,废气元素以及frameset。声明:!DOCTYPEHTMLPUBLIC-//W3C//DTDHTML4.01Frameset//EN:不使用允许表现性、废弃元素以及frameset。文档必须是结构良好的XML文档。声明:!DOCTYPEhtmlPUBLIC-//W3C//DTDXHTML1.0Strict//EN:允许使用表现性、废弃元素,不允许frameset,文档必须是结构良好的XMl文档。声明:!DOCTYPEhtmlPUBLIC-//W3C//DTDXHTML1.0Transitional//EN:允许使用表现性、废弃元素以及frameset,文档必须是结构良好的XML文档。声明:!DOCTYPEhtmlPUBLIC-//W3C//DTDXHTML1.0Frameset//EN:!doctypehtmlHTML全局属性(globalattribute)有哪些参考资料:MDN:htmlglobalattribute什么是web语义化,有什么好处web语义化是指通过HTML标记表示页面包含的信息,包含了HTML标签的语义化和css命名的语义化。HTML标签的语义化是指:通过使用包含语义的标签(如h1-h6)恰当地表示文档结构css命名的语义化是指:为html标签添加有意义的class,id补充未表达的语义,如Microformat通过添加符合规则的class描述信息为什么需要语义化:去掉样式后页面呈现清晰的结构盲人使用读屏器更好地阅读搜索引擎更好地理解页面,有利于收录便团队项目的可持续运作及维护HTTPmethod一台服务器要与HTTP1.1兼容,只要为资源实现GET和HEAD方法即可GET是最常用的方法,通常用于请求服务器发送某个资源。HEAD与GET类似,但服务器在响应中值返回首部,不返回实体的主体部分PUT让服务器用请求的主体部分来创建一个由所请求的URL命名的新文档,或者,如果那个URL已经存在的话,就用干这个主体替代它POST起初是用来向服务器输入数据的。实际上,通常会用它来支持HTML的表单。表单中填好的数据通常会被送给服务器,然后由服务器将其发送到要去的地方。TRACE会在目的服务器端发起一个环回诊断,最后一站的服务器会弹回一个TRACE响应并在响应主体中携带它收到的原始请求报文。TRACE方法主要用于诊断,用于验证请求是否如愿穿过了请求/响应链。OPTIONS方法请求web服务器告知其支持的各种功能。可以查询服务器支持哪些方法或者对某些特殊资源支持哪些方法。DELETE请求服务器删除请求URL指定的资源从浏览器地址栏输入url到显示页面的步骤(以HTTP为例)在浏览器地址栏输入URL浏览器查看缓存,如果请求资源在缓存中并且新鲜,跳转到转码步骤浏览器解析URL获取协议,主机,端口,path浏览器组装一个HTTP(GET)请求报文浏览器获取主机ip地址,过程如下:浏览器缓存本机缓存hosts文件路由器缓存ISPDNS缓存DNS递归查询(可能存在负载均衡导致每次IP不一样)打开一个socket与目标IP地址,端口建立TCP链接,三次握手如下:客户端发送一个TCP的SYN=1,Seq=X的包到服务器端口服务器发回SYN=1,ACK=X+1,Seq=Y的响应包客户端发送ACK=Y+1,Seq=ZTCP链接建立后发送HTTP请求服务器接受请求并解析,将请求转发到服务程序,如虚拟主机使用HTTPHost头部判断请求的服务程序服务器检查HTTP请求头是否包含缓存验证信息如果验证缓存新鲜,返回304等对应状态吗处理程序读取完整请求并准备HTTP响应,可能需要查询数据库等操作服务器将响应报文通过TCP连接发送回浏览器浏览器接收HTTP响应,然后根据情况选择关闭TCP连接或者保留重用,关闭TCP连接的四次握手如下:主动方发送Fin=1,Ack=Z,Seq=X报文被动方发送ACK=X+1,Seq=Z报文被动方发送Fin=1,ACK=X,Seq=Y报文主动方发送ACK=Y,Seq=X报文浏览器检查响应状态吗:是否为1XX,3XX,4XX,5XX,这些情况处理与2XX不同如果资源可缓存,进行缓存对响应进行解码(例如gzip压缩)根据资源类型决定如何处理(假设资源为HTML文档)解析HTML文档,构件DOM树,下载资源,构造CSSOM树,执行js脚本,这些操作没有严格的先后顺序,以下分别解释构建DOM树:Tokenizing:根据HTML规范将字符流解析为标记Lexing:词法分析将标记转换为对象并定义属性和规则DOMconstruction:根据HTML标记关系将对象组成DOM树解析过程中遇到图片、样式表、js文件,启动下载构建CSSOM树:Tokenizing:字符流转换为标记流Node:根据标记创建节点CSSOM:节点创建CSSOM树根据DOM树和CSSOM树构建渲染树:从DOM树的根节点遍历所有可见节点,不可见节点包括:1)script,meta这样本身不可见的标签。2)被css隐藏的节点,如display:none对每一个可见节点,找到恰当的CSSOM规则并应用发布可是节点的内容和计算样式js解析如下:浏览器创建Document对象并解析HTML,将解析到的元素和文本节点添加到文档中,此时document.readystate为loadingHTML解析器遇到没有async和defer的script时,将他们添加到文档中,然后执行行内或外部脚本。这些脚本会同步执行,并且在脚本下载和执行时解析器会暂停。这样就可以用document.write()把文本插入到输入流中。同步脚本经常简单定义函数和注册事件处理程序,他们可以遍历和操作script和他们之前的文档内容当解析器遇到设置了async属性的script时,开始下载脚本并继续解析文档。脚本会在它下载完成后尽快执行,但是解析器不会停下来等它下载。异步脚本禁止使用document.write(),它们可以访问自己script和之前的文档元素当文档完成解析,document.readState变成interactive所有difer脚本会按照在文档出现的顺序执行,延迟脚本能访问完整文档树,禁止使用document.write()浏览器在Document对象上触发DOMContentLoaded事件此时文档完全解析完成,浏览器可能还在等待如图片等内容加载,等这些内容完成载入并且所有异步脚本完成载入和执行,document.readState变为complete,window触发load事件显示页面(HTML解析过程中会逐步显示页面)HTTPrequest报文结构是怎样的rfc2616中进行了定义:首行是Request-Line包括:请求方法,请求URI,协议版本,CRLF首行之后是若干行请求头,包括general-header,request-header或者entity-header,每个一行以CRLF结束请求头和消息实体之间有一个CRLF分隔根据实际请求需要可能包含一个消息实体一个请求报文例子如下:GET/Protocols/rfc2616/rfc2616-sec5.htmlHTTP/1.1Host::max-age=0Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8User-Agent:Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/35.0.1916.153Safari/537.36Referer::gzip,deflate,sdchAccept-Language:zh-CN,zh;q=0.8,en;q=0.6Cookie:authorstyle=yesIf-None-Match:2cc8-3e3073913b100If-Modified-Since:Wed,01Sep200413:24:52GMTname=qiu&age=25HTTPresponse报文结构是怎样的rfc2616中进行了定义:首行是状态行包括:HTTP版本,状态码,状态描述,后面跟一个CRLF首行之后是若干行响应头,包括:通用头部,响应头部,实体头部响应头部和响应实体之间用一个CRLF空行分隔最后是一个可能的消息实体响应报文例子如下:HTTP/1.1200OKDate:Tue,08Jul201405:28:43GMTServer:Apache/2Last-Modified:Wed,01Sep200413:24:52GMTETag:40d7-3e3073913b100Accept-Ranges:bytesContent-Length:16599Cache-Control:max-age=21600Expires:Tue,08Jul201411:28:43GMTP3P:policyref=:text/html;charset=iso-8859-1{name:qiu,age:25}如何进行网站性能优化雅虎BestPracticesforSpeedingUpYourWebSite:content方面减少HTTP请求:合并文件、CSS精灵、inlineImage减少DNS查询:DNS查询完成之前浏览器不能从这个主机下载任何任何文件