@(汇总)[网络, 汇总]css
1.HTTP是计算机经过网络进行通讯的规则
2.HTTP是一种无状态的协议(不创建持久的链接,服务端不保留链接的相关信息,浏览器发出请求和服务器返回响应是一个没有记忆的过程)html
Allow:服务器支持哪些请求方法(如GET、POST等)。
Content-Encoding:文档的编码(Encode)方法。
Content-Length:表示内容长度。
Content-Type:表示后面的文档属于什么MIME类型。
Date:当前的GMT时间。
Expires:应该在何时认为文档通过期,从而再也不缓存它?
Last-Modified:文档的最后改动时间。
Location:表示客户应当到哪里去提取文档。
Refresh:表示浏览器应该在多少时间以后刷新文档,以秒计。
Server:客户应该在Authorization头中提供什么类型的受权信息?
Set-Cookie:设置和页面关联的Cookie。
WWW-Authenticate:客户应该在Authorization头中提供什么类型的受权信息?mysql
请求头:
Accept: text/html,image/*(浏览器能够接收的类型)
Accept-Charset: ISO-8859-1(浏览器能够接收的编码类型)
Accept-Encoding: gzip,compress(浏览器能够接收压缩编码类型)
Accept-Language: en-us,zh-cn(浏览器能够接收的语言和国家类型)
Host: www.it315.org:80(浏览器请求的主机和端口)
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT(某个页面缓存时间)
Referer: http://www.it315.org/index.jsp(请求来自于哪一个页面)
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)(浏览器相关信息)
Cookie:(浏览器暂存服务器发送的信息)
Connection: close(1.0)/Keep-Alive(1.1)(HTTP请求的版本的特色)
Date: Tue, 11 Jul 2000 18:23:51 GMT(请求网站的时间)linux
响应头:
Location: http://www.it315.org/index.jsp(控制浏览器显示哪一个页面)
Server:apache tomcat(服务器的类型)
Content-Encoding: gzip(服务器发送的压缩编码方式)
Content-Length: 80(服务器发送显示的字节码长度)
Content-Language: zh-cn(服务器发送内容的语言和国家名)
Content-Type: image/jpeg; charset=UTF-8(服务器发送内容的类型和编码类型)
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT(服务器最后一次修改的时间)
Refresh: 1;url=http://www.it315.org(控制浏览器1秒钟后转发URL所指向的页面)
Content-Disposition: attachment; filename=aaa.jpg(服务器控制浏览器发下载方式打开文件)
Transfer-Encoding: chunked(服务器分块传递数据到客户端)
Set-Cookie:SS=Q0=5Lb_nQ; path=/search(服务器发送Cookie相关的信息)
Expires: -1(服务器控制浏览器不要缓存网页,默认是缓存)
Cache-Control: no-cache(服务器控制浏览器不要缓存网页)
Pragma: no-cache(服务器控制浏览器不要缓存网页)
Connection: close/Keep-Alive(HTTP请求的版本的特色)
Date: Tue, 11 Jul 2000 18:23:51 GMT(响应网站的时间)ios
http1.1协议报文首部字段中与缓存相关的字段程序员
1.通用首部字段
Cache-Control:控制缓存的行为
Pragma:值为no-cache时禁用缓存es6
2.请求首部字段
If-Match:比较ETag是否一致
If-None-Match:比较ETag是否不一致
If-Modified-Since:比较资源最后更新的时间是否一致
If-Unmondified-Since:比较资源最后更新的时间是否不一致面试
3.响应首部字段
ETag:资源的匹配信息算法
4.实体首部字段
Expires:实体主体过时的时间
Last-Modified:资源最后一次修改的时间sql
五层协议(5层):
物理层、数据链路层、网络层、应用层、运输层。
TCP/IP分层(4层):
网络接口层、 网际层、运输层、 应用层。
每一层的协议以下:
物理层:RJ4五、CLOCK、IEEE802.3 (中继器,集线器,网关)
数据链路:PPP、FR、HDLC、VLAN、MAC (网桥,交换机)
网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器)
传输层:TCP、UDP、SPX
会话层:NFS、SQL、NETBIOS、RPC
表示层:JPEG、MPEG、ASII
应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS
每一层的做用以下:
物理层:经过媒介传输比特,肯定机械及电气规范(比特Bit)
数据链路层:将比特组装成帧和点到点的传递(帧Frame)
网络层:负责数据包从源到宿的传递和网际互连(包PackeT)
传输层:提供端到端的可靠报文传递和错误恢复(段Segment)
会话层:创建、管理和终止会话(会话协议数据单元SPDU)
表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)
应用层:容许访问OSI环境的手段(应用协议数据单元APDU)
HTTP(超文本传输协议):应用层
TCP(传输控制协议):传输层
UDP(用户数据报协议):传输层
TCP提供面向链接的、可靠的数据流传输;传输单位称为TCP报文段;TCP注重数据安全性
UDP提供的是非面向链接的、不可靠的数据流传输;传输单位称为用户数据报;UDP数据传输快,由于不须要链接等待,少了许多操做,可是其安全性却通常。
TCP对应的协议和UDP对应的协议
TCP对应的协议:
(1) FTP:定义了文件传输协议,使用21端口。
(2) Telnet:一种用于远程登录的端口,使用23端口,用户能够以本身的身份远程链接到计算机上,可提供基于DOS模式下的通讯服务。
(3) SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。
(4) POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。
(5)HTTP:是从Web服务器传输超文本到本地浏览器的传送协议。
UDP对应的协议:
(1) DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
(2) SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。因为网络设备不少,无链接的服务就体现出其优点。
(3) TFTP(Trival File Tran敏感词er Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。
PS:html页面加载和解析的流程
几个重要的概念:
(1)Reflow(回流):浏览器要花时间去渲染,当它发现了某个部分发生了变化影响了布
局,那就须要倒回去从新渲染。
(2)Repaint(重绘):若是只是改变了某个元素的背景颜色,文字颜色等,不影响元素周
围或内部布局的属性,将只会引发浏览器的repaint,重画某一部分。 Reflow要比Repaint更
花费时间,也就更影响性能。因此在写代码的时候,要尽可能避免过多的Reflow。
reflow的缘由:
(1)页面初始化的时候;
(2)操做DOM时;
(3)某些元素的尺寸变了;
(4)若是 CSS 的属性发生变化了。
减小 reflow/repaint:
(1)不要一条一条地修改 DOM 的样式。与其这样,还不如预先定义好 css 的 class,然
后修改 DOM 的 className。
(2)不要把 DOM 结点的属性值放在一个循环里当成循环里的变量。
(3)为动画的 HTML 元件使用 fixed 或 absoult 的 position,那么修改他们的 CSS 是不
会 reflow 的。
(4)千万不要使用 table 布局。由于可能很小的一个小改动会形成整个 table 的从新布
局。
(真懂不了不少,由于没有怎么实践过,我直接说了本身的理解)
HTTP 2.0与HTTP 1.1区别
一、什么是HTTP 2.0
HTTP/2(超文本传输协议第2版,最初命名为HTTP 2.0),是HTTP协议的的第二个主要版本,使用于万维网。HTTP/2是HTTP协议自1999年HTTP 1.1发布后的首个更新,主要基于SPDY协议(是Google开发的基于TCP的应用层协议,用以最小化网络延迟,提高网络速度,优化用户的网络使用体验)。
二、与HTTP 1.1相比,主要区别包括
三、HTTP/2为何是二进制?
比起像HTTP/1.x这样的文本协议,二进制协议解析起来更高效、“线上”更紧凑,更重要的是错误更少。
四、为何 HTTP/2 须要多路传输?
HTTP/1.x 有个问题叫线端阻塞(head-of-line blocking), 它是指一个链接(connection)一次只提交一个请求的效率比较高, 多了就会变慢。 HTTP/1.1 试过用流水线(pipelining)来解决这个问题, 可是效果并不理想(数据量较大或者速度较慢的响应, 会阻碍排在他后面的请求). 此外, 因为网络媒介(intermediary )和服务器不能很好的支持流水线, 致使部署起来困难重重。而多路传输(Multiplexing)能很好的解决这些问题, 由于它能同时处理多个消息的请求和响应; 甚至能够在传输过程当中将一个消息跟另一个掺杂在一块儿。因此客户端只须要一个链接就能加载一个页面。
五、消息头为何须要压缩?
假定一个页面有80个资源须要加载(这个数量对于今天的Web而言仍是挺保守的), 而每一次请求都有1400字节的消息头(着一样也并很多见,由于Cookie和引用等东西的存在), 至少要7到8个来回去“在线”得到这些消息头。这还不包括响应时间——那只是从客户端那里获取到它们所花的时间而已。这全都因为TCP的慢启动机制,它会基于对已知有多少个包,来肯定还要来回去获取哪些包 – 这很明显的限制了最初的几个来回能够发送的数据包的数量。相比之下,即便是头部轻微的压缩也能够是让那些请求只需一个来回就能搞定——有时候甚至一个包就能够了。这种开销是能够被节省下来的,特别是当你考虑移动客户端应用的时候,即便是良好条件下,通常也会看到几百毫秒的来回延迟。
六、服务器推送的好处是什么?
当浏览器请求一个网页时,服务器将会发回HTML,在服务器开始发送JavaScript、图片和CSS前,服务器须要等待浏览器解析HTML和发送全部内嵌资源的请求。服务器推送服务经过“推送”那些它认为客户端将会须要的内容到客户端的缓存中,以此来避免往返的延迟。
三次握手:
第一次握手:客户端发送syn包到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,确认客户的SYN,同时本身也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
四次挥手
与创建链接的“三次握手”相似,断开一个TCP链接则须要“四次挥手”。
第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了。可是,此时主动关闭方还可 以接受数据。
第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1。
第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,个人数据也发送完了,不会再给你发数据了。
第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。
1XX 表示消息 2XX 表示成功 3XX 表示重定向 4XX 表示请求错误 5XX 表示服务器端错误 常见HTTP状态码 200 OK 表示请求成功 一切正常 301 Moved Permanently 永久重定向,客户请求的文档在其余地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL 302 Found 临时重定向,相似于301,但新的URL应该被视为临时性的替代,而不是永久性的。 304 Not Modified 客户端有缓冲的文档并发出了一个条件性的请求。服务器告诉客户,原来缓冲的文档还能够继续使用。 400 Bad Request 请求出现语法错误。 403 Forbidden 资源不可用。 404 Not Found 没法找到指定位置的资源。 405 Method Not Allowed 请求方法对指定的资源不适用(方法:GET、POST、HEAD、Delete、PUT、TRACE等)。 500 Internal Server Error 服务器出现错误,不能完成客户的请求。 501 Not Implemented 服务器不支持实现请求所须要的功能。
2开头 (请求成功)表示成功处理了请求的状态代码。
200 (成功) 服务器已成功处理了请求。 一般,这表示服务器提供了请求的网页。
201 (已建立) 请求成功而且服务器建立了新的资源。
202 (已接受) 服务器已接受请求,但还没有处理。
203 (非受权信息) 服务器已成功处理了请求,但返回的信息可能来自另外一来源。
204 (无内容) 服务器成功处理了请求,但没有返回任何内容。
205 (重置内容) 服务器成功处理了请求,但没有返回任何内容。
206 (部份内容) 服务器成功处理了部分 GET 请求。
3开头 (请求被重定向)表示要完成请求,须要进一步操做。 一般,这些状态代码用来重定向。
300 (多种选择) 针对请求,服务器可执行多种操做。 服务器可根据请求者 (user agent) 选择一项操做,或提供操做列表供请求者选择。
301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302 (临时移动) 服务器目前从不一样位置的网页响应请求,但请求者应继续使用原有位置来进行之后的请求。
303 (查看其余位置) 请求者应当对不一样的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
305 (使用代理) 请求者只能使用代理访问请求的网页。 若是服务器返回此响应,还表示请求者应使用代理。
307 (临时重定向) 服务器目前从不一样位置的网页响应请求,但请求者应继续使用原有位置来进行之后的请求。
4开头 (请求错误)这些状态代码表示请求可能出错,妨碍了服务器的处理。
400 (错误请求) 服务器不理解请求的语法。
401 (未受权) 请求要求身份验证。 对于须要登陆的网页,服务器可能返回此响应。
403 (禁止) 服务器拒绝请求。
404 (未找到) 服务器找不到请求的网页。
405 (方法禁用) 禁用请求中指定的方法。
406 (不接受) 没法使用请求的内容特性响应请求的网页。
407 (须要代理受权) 此状态代码与 401(未受权)相似,但指定请求者应当受权使用代理。
408 (请求超时) 服务器等候请求时发生超时。
409 (冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。
410 (已删除) 若是请求的资源已永久删除,服务器就会返回此响应。
411 (须要有效长度) 服务器不接受不含有效内容长度标头字段的请求。
412 (未知足前提条件) 服务器未知足请求者在请求中设置的其中一个前提条件。
413 (请求实体过大) 服务器没法处理请求,由于请求实体过大,超出服务器的处理能力。
414 (请求的 URI 过长) 请求的 URI(一般为网址)过长,服务器没法处理。
415 (不支持的媒体类型) 请求的格式不受请求页面的支持。
416 (请求范围不符合要求) 若是页面没法提供请求的范围,则服务器会返回此状态代码。
417 (未知足指望值) 服务器未知足"指望"请求标头字段的要求。
5开头(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误多是服务器自己的错误,而不是请求出错。
500 (服务器内部错误) 服务器遇到错误,没法完成请求。
501 (还没有实施) 服务器不具有完成请求的功能。 例如,服务器没法识别请求方法时可能会返回此代码。
502 (错误网关) 服务器做为网关或代理,从上游服务器收到无效响应。
503 (服务不可用) 服务器目前没法使用(因为超载或停机维护)。 一般,这只是暂时状态。
504 (网关超时) 服务器做为网关或代理,可是没有及时从上游服务器收到请求。
505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。
401 (未受权) 请求要求身份验证。 对于须要登陆的网页,服务器可能返回此响应。
403 (禁止) 服务器拒绝请求。
200 (成功) 服务器已成功处理了请求。 一般,这表示服务器提供了请求的网页。
302 (临时移动) 服务器目前从不一样位置的网页响应请求,但请求者应继续使用原有位置来进行之后的请求。
304 Not Modified
客户端有缓冲的文档并发出了一个条件性的请求。服务器告诉客户,原来缓冲的文档还能够继续使用。
304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
(强缓存和协商缓存的命中和管理)
• 304 Not Modified 客户端有缓冲的文档并发出了一个条件性的请求。服务器告诉客户,原来缓冲的文档还能够继续使用。
• 404 找不到页面 404 Not Found没法找到指定位置的资源。
#include <iostream> using namespace std; void Qsort(int a[], int low, int high) { if(low >= high) { return; } int first = low; int last = high; int key = a[first];/*用字表的第一个记录做为枢轴*/ while(first < last) { while(first < last && a[last] >= key) { --last; } a[first] = a[last];/*将比第一个小的移到低端*/ while(first < last && a[first] <= key) { ++first; } a[last] = a[first]; /*将比第一个大的移到高端*/ } a[first] = key;/*枢轴记录到位*/ Qsort(a, low, first-1); Qsort(a, first+1, high); } int main() { int a[] = {57, 68, 59, 52, 72, 28, 96, 33, 24}; Qsort(a, 0, sizeof(a) / sizeof(a[0]) - 1);/*这里原文第三个参数要减1不然内存越界*/ for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++) { cout << a[i] << ""; } return 0; }/*参考数据结构p274(清华大学出版社,严蔚敏)*/
算法是一种稳定的算法吗?
它的最坏复杂度是多少?
平均复杂度呢?
最坏:O(n2) 平均:O(n*log2n) 不稳定 空间复杂度:O(log2n)~O(n)
选择排序
:它的工做原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到所有待排序的数据元素排完。
| 排序方法 | 平均 | 最好 | 最坏 | 辅助存储 | 稳定性 |
| :-------- | -------:| :--: |-------| -------| -------|
| 选择排序 | O(n^2) | O(n^2) | o(n^2) | O(1) | 不稳定 |
function selectSort(arr){ var len=arr.length; var temp; for(var i=0;i<len-1;i++){ for(var j=i+1;j<len;j++){ if(arr[j]<arr[i]){ temp=arr[j]; arr[j]=arr[i]; arr[i]=temp; } } i++; } return arr; }
我一开始先合并再排序,他不乐意,而后我用了相似插入排序的方法。
快速排序(不稳定):
平均:O(nlog2^n)
最好:O(nlog2^n)
最坏:O(n^2)
辅助存储:O(nlog2^n)
var quickSort = function(arr) { if(arr.length <= 1) { return arr; } varpivotIndex = Math.floor(arr.length / 2); var pivot =arr.splice(pivotIndex, 1)[0]; var left =[]; var right =[]; for (var i= 0; i < arr.length; i++){ if(arr[i] < pivot) { left.push(arr[i]); } else { right.push(arr[i]); } } return quickSort(left).concat([pivot], quickSort(right)); };
简单选择排序(不稳定):
平均:O(n^2)
最好:O(n^2)
最坏:O(n^2)
辅助存储:O(1)
原理:它的工做原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,而后,再从剩余未排序元素中继续寻找最小(大)元素,而后放到已排序序列的末尾。以此类推,直到全部元素均排序完毕。
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { if (pListHead == NULL || k <= 0) return NULL; ListNode *p1 = pListHead; ListNode *p2 = pListHead; for (int i=1; i<k; i++) { if (p1->next != NULL) p1 = p1->next; else return NULL; } while(p1->next != NULL) { p1 = p1->next; p2 = p2->next; } return p2; } };
一开始我就是说直接用O(n)复杂度的直接遍历就是,可是不满意,我就说:把这些数字分红N组吗,而后在每组中查找,仍是不满意
[几个经常使用的操做系统进程调度算法](http://blog.csdn.net/luyafei_89430/article/details/12971171
进程是资源分配的最小单位,线程是CPU调度的最小单位
堆和栈的区别:
1、堆栈空间分配区别:
一、栈(操做系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操做方式相似于数据结构中的栈;
二、堆(操做系统): 通常由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式却是相似于链表。
2、堆栈缓存方式区别:
一、栈使用的是一级缓存, 他们一般都是被调用时处于存储空间中,调用完毕当即释放;
二、堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并非一旦成为孤儿对象就能被回收)。因此调用这些对象的速度要相对来得低一些。
3、堆栈数据结构区别:
堆(数据结构):堆能够被当作是一棵树,如:堆排序;
栈(数据结构):一种先进后出的数据结构。