300 Multiple Choices:
301 Moved Permanently:
302 Found:
303 See Other:
304 Not Modified:
305 Use Proxy:
306 (unused):
307 Temporary Redirect:
4XX:客户端错误
400 Bad Request:
401 Unauthorized:
402 Payment Required:
403 Forbidden:
404 Not Found:
405 Method Not Allowed:
406 Not Acceptable:
407 Proxy Authentication Required:
408 Request Timeout:
409 Conflict:
410 Gone:
411 Length Required:
412 Precondition Failed:
413 Request Entity Too Large:
414 Request-URI Too Long:
415 Unsupported Media Type:
416 Requested Range Not Satisfiable:
417 Expectation Failed:
5XX: 服务器错误
500 Internal Server Error:
501 Not Implemented:
502 Bad Gateway:
503 Service Unavailable:
504 Gateway Timeout:
505 HTTP Version Not Supported:
什么是Etag?
HTTP
1.有哪些常见的HTTP method?请说出区别?
GET 是最常用的向服务端发送请求资源
HEAD 与GET一样单服务器在响应中值返回首部,不返回实体的主体部分
POST起初是用来向服务器输入数据的。实际上,通常会用它来支持HTML的表单。表单中填好的数据通常会被送给服务器,然后由服务器将其发送到要去的地方。
说说TCP传输的三次握手四次挥手策略
为了准确无误地把数据送达目标处,TCP协议采用了三次握手策略。用TCP协议把数据包送出去后,TCP不会对传送 后的情况置之不理,它一定会向对方确认是否成功送达。握手过程中使用了TCP的标志:SYN和ACK。
发送端首先发送一个带SYN标志的数据包给对方。接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息。 最后,发送端再回传一个带ACK标志的数据包,代表“握手”结束。 若在握手过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包。
2.从浏览器地址栏输入url到显示页面的步骤(以HTTP为例)
浏览器输入url,浏览器查看缓存。
1.如果缓存不存在,且资源允许缓存就向服务器请求资源。
2.如果缓存存在,且在有效期限内,则直接使用该资源。
3.如果缓存存在且已过有效期则向服务器请求资源。
说明有限期限的字段:
HTTP1.0提供Expires,值为一个绝对时间表示缓存新鲜日期 HTTP1.1增加了Cache-Control: max-age=,值为以秒为单位的最大新鲜时间 浏览器解析URL
浏览器组装一个HTTP(GET)请求报文
浏览器获取主机ip地址
浏览器缓存 本机缓存 hosts文件 路由器缓存 ISP DNS缓存 DNS递归查询 打开一个socket与目标IP地址,端口建立TCP链接,三次握手如下:
TCP/IP 核心思想,即保证数据可靠传输,又要提高传输效率。
1.客户端发送一个TCP的SYN=1,Seq=X的包到服务器端口
2.服务器发回SYN=1, ACK=X+1, Seq=Y的响应包
3.客户端发送ACK=Y+1, Seq=Z TCP链接建立后发送HTTP请求
服务器接受请求并解析,服务器检查HTTP请求头是否包含缓存验证信息如果验证缓存新鲜,返回304等对应状态码
处理程序读取完整请求并准备HTTP响应,服务器将响应报文通过TCP连接发送回浏览器
浏览器接收HTTP响应,然后根据情况选择关闭TCP连接或者保留重用,关闭TCP连接的四次握手如下:
1.主动方发送Fin=1, Ack=Z, Seq= X报文
2.被动方发送ACK=X+1, Seq=Z报文
3.被动方发送Fin=1, ACK=X, Seq=Y报文
4.主动方发送ACK=Y, Seq=X报文 浏览器检查响应状态吗:是否为1XX,3XX, 4XX, 5XX,这些情况处理与2XX不同,如果资源可缓存,进行缓存。
对响应进行解码(例如gzip压缩),根据资源类型决定如何处理(假设资源为HTML文档).
解析HTML文档,构件DOM树,下载资源,构造CSSOM树=>renderTREE,执行js脚本,这些操作没有严格的先后顺序,以下分别解释
js解析如下:
1.浏览器创建Document对象并解析HTML,将解析到的元素和文本节点添加到文档中,此时document.readystate为loading
2.HTML解析器遇到没有async和defer的script时,将他们添加到文档中,然后执行行内或外部脚本。这些脚本会同步执行,并且在脚本下载和执行时解析器会暂停。这样就可以用document.write()把文本插入到输入流中。同步脚本经常简单定义函数和注册事件处理程序,他们可以遍历和操作script和他们之前的文档内容
3.当解析器遇到设置了async属性的script时,开始下载脚本并继续解析文档。脚本会在它下载完成后尽快执行,但是解析器不会停下来等它下载。异步脚本禁止使用document.write(),它们可以访问自己script和之前的文档元素
4.当文档完成解析,document.readState变interactive 所有defer脚本会按照在文档出现的顺序执行,延迟脚本能访问完整文档树,禁止使用document.write() 浏览器在Document对象上触发DOMContentLoaded事件 此时文档完全解析完成,浏览器可能还在等待如图片等内容加载,等这些内容完成载入并且所有异步脚本完成载入和执行,document.readState变为complete,window触发load事件
显示页面(HTML解析过程中会逐步显示页面) XML和JSON的区别?
(1).数据体积方面。
JSON相对于XML来讲,数据的体积小,传递的速度更快些。
(2).数据交互方面。
JSON与JavaScript的交互更加方便,更容易解析处理,更好的数据交互。
(3).数据描述方面。
JSON对数据的描述性比XML较差。
(4).传输速度方面。
JSON的速度要远远快于XML
如何进行网站性能优化
content方面
减少HTTP请求:合并文件、CSS精灵、inline Image 避免重定向:多余的中间访问 使Ajax可缓存 非必须组件延迟加载 未来所需组件预加载 减少DOM元素数量 将资源放到不同的域下:浏览器同时从一个域下载资源的数目有限,增加域可以提高并行下载量
Server方面
使用CDN 避免空src的img标签
css方面
将样式表放到页面顶部 不使用CSS表达式 不使用@import
Javascript方面
将脚本放到页面底部 减少DOM访问
图片方面 优化图片:根据实际颜色需要选择色深、压缩
不要在HTML中拉伸图片
Cookie方面
减小cookie大小
HTTP状态码及其含义
1XX:信息状态码
2XX:成功状态码
200 OK:请求成功,请求所希望的响应头或数据体 将随此响应返回 201 Created: 202 Accepted: 203 Non-Authoritative Information: 204 No Content: 205 Reset Content: 206 Partial Content: 3XX:重定向
300 Multiple Choices: 301 Moved Permanently: 302 Found: 303 See Other: 304 Not Modified: 305 Use Proxy: 306 (unused): 307 Temporary Redirect: 4XX:客户端错误
400 Bad Request: 401 Unauthorized: 402 Payment Required: 403 Forbidden: 404 Not Found: 405 Method Not Allowed: 406 Not Acceptable: 407 Proxy Authentication Required: 408 Request Timeout: 409 Conflict: 410 Gone: 411 Length Required: 412 Precondition Failed: 413 Request Entity Too Large: 414 Request-URI Too Long: 415 Unsupported Media Type: 416 Requested Range Not Satisfiable: 417 Expectation Failed: 5XX: 服务器错误
500 Internal Server Error: 501 Not Implemented: 502 Bad Gateway: 503 Service Unavailable: 504 Gateway Timeout: 505 HTTP Version Not Supported: 什么是Etag?
资源过期则向服务器发送Etag, 根据Etag,判断文件内容自上一次请求之后,有没有发生变化;(只有get请求会被缓存,post请求不会)
栈和队列的区别?
栈的插入和删除操作都是在一端进行的,而队列的操作却是在两端进行的。
队列先进先出,栈先进后出。
栈只允许在表尾一端进行插入和删除,而队列只允许在表尾一端进行插入,在表头一端进行删除 栈和堆的区别?
栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。
堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。
堆(数据结构):堆可以被看成是一棵树,如:堆排序;
栈(数据结构):一种先进后出的数据结构。 快速 排序的思想并实现一个快排?
快速排序”的思想很简单,整个排序过程只需要三步: (1)在数据集之中,找一个基准点
(2)建立两个数组,分别存储左边和右边的数组(比基准小的放在左边,大的放在右边)
(3)利用递归进行下次比较
HTML
严格模式与混杂模式 —— 如何触发这两种模式,区分它们有何意义。
当浏览器厂商开始创建与标准兼容的浏览器时,他们希望确保向后兼容性。为了实现这一点,他们创建了两种呈现模式:标准模式和混杂模式 在标准模式中,浏览器以其支持的最高标准呈现页面,; 在混杂模式中,页面以一种比较宽松的向后兼容的方式显示。混杂模式通常模拟老式浏览器的行为以防止老站点无法工作。
DOCTYPE不存在或形式不正确会导致HTML和XHTML文档以混杂模式呈现
html5既然没有DTD,也就没有严格模式与宽松模式的区别,html5有相对宽松的语法,实现时,已经尽可能大的实现了向后兼容。
盒模型 —— 外边距、内边距和边框之间的关系,及IE8以下版本的浏览器中的盒模型
标准下,盒模型只包括content,ie下content+padding+border
块级元素与行内元素 —— 怎么用CSS控制它们、以及如何合理的使用它们
block可设置长宽,在文档流中独占一行从上往下排列。 行内元素不可设置长宽,内容撑开。margin上下无效,padding上下有效但不占空间,其他有效。
浮动元素 ——怎么使用它们、它们有什么问题以及怎么解决这些问题
用于导航条,图片文字围绕效果,或者其他需要浮动的元素, 子元素浮动不会占用正常文本流的位置,所以当子元素全部浮动会导致父元素高度塌陷。
HTML与XHTML ——二者有什么区别,你觉得应该使用哪一个并说出理由。
请解释一下什么是语义化的HTML。语义化HTML的优点
根据内容的结构化(内容语义化),选择合适的标签(代码语义化)便于开发者阅读和写出更优雅的代码的同时让浏览器的爬虫和机器很好地解析。
所有的标记都必须要有一个相应的结束标记
所有标签的元素和属性的名字都必须使用小写
所有的XML标记都必须合理嵌套
所有的属性必须用引号""括起来
把所有<和&特殊符号用编码表示
给所有属性赋一个值
不要在注释内容中使“--”
图片必须有说明文字
行内元素有哪些?块级元素有哪些? 空(void)元素有那些? 首先:CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,如div的display默认值为“block”,则为“块级”元素;span默认display属性值为“inline”,是“行内”元素。
行内元素有:a b span img input select strong(强调的语气)
块级元素有:div ul ol li dl dt dd h1 h2 h3 h4…p
空元素:
常见的:
鲜为人知的是: