关于HTTP协议,一篇就够了 http://www.cnblogs.com/ranyonsue/p/5984001.html
html
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。java
HTTP是一个基于TCP/IP通讯协议来传递数据(HTML 文件, 图片文件, 查询结果等)。web
HTTP是一个属于应用层的面向对象的协议。面试
HTTP协议工做于客户端-服务端架构为上。浏览器做为HTTP客户端经过URL向HTTP服务端即WEB服务器发送全部请求。Web服务器根据接收到的请求后,向客户端发送响应信息。算法
HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和创建链接。URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息spring
URL,全称是UniformResourceLocator, 中文叫统一资源定位符,是互联网上用来标识某一处资源的地址。如下面这个URL为例,介绍下普通URL的各部分组成:sql
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name数据库
从上面的URL能够看出,一个完整的URL包括如下几部分:
1.协议部分
2.域名部分
3.端口部分
4.虚拟目录部分
5.文件名部分
6.锚部分
7.参数部分
(原文:http://blog.csdn.net/ergouge/article/details/8185219 )编程
URI和URL的区别
– URI,是uniform resource identifier,统一资源标识符,用来惟一的标识一个资源。
– URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL能够用来标识一个资源,并且还指明了如何locate这个资源。
– URN,uniform resource name,统一资源命名,是经过名字来标识资源,好比:mailto:java-net@java.sun.com。数组
HTTP之请求消息Request
HTTP请求方法
– GET:请求指定的页面信息,并返回实体主体。
– HEAD:相似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
– POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会致使新的资源的创建和/或已有资源的修改。
– PUT :从客户端向服务器传送的数据取代指定的文档的内容。
– DELETE:请求服务器删除指定的页面。
– CONNECT:HTTP/1.1协议中预留给可以将链接改成管道方式的代理服务器。
– OPTIONS:容许客户端查看服务器的性能。
– TRACE:回显服务器收到的请求,主要用于测试或诊断。
HTTP工做原理
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行做为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
如下是 HTTP 请求/响应的步骤:
– 客户端链接到Web服务器
一个HTTP客户端,一般是浏览器,与Web服务器的HTTP端口(默认为80)创建一个TCP套接字链接。例如,http://www.oakcms.cn。
– 发送HTTP请求
经过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
– 服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
– 释放链接TCP链接
若connection 模式为close,则服务器主动关闭TCP链接,客户端被动关闭链接,释放TCP链接;若connection 模式为keepalive,则该链接会保持一段时间,在该时间内能够继续接收请求;
– 客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看代表请求是否成功的状态代码。而后解析每个响应头,响应头告知如下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
HTTP与HTTPS有什么区别?
HTTP协议传输的数据都是未加密的,也就是明文的,所以使用HTTP协议传输隐私信息很是不安全,为了保证这些隐私数据能加密传输,因而网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来讲,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
HTTPS和HTTP的区别主要以下:
– https协议须要到ca申请证书,通常免费证书较少,于是须要必定费用。
– http是超文本传输协议,信息是明文传输,https则是具备安全性的ssl加密传输协议。
– http和https使用的是彻底不一样的链接方式,用的端口也不同,前者是80,后者是443。
– http的链接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
详细引用:OSI七层模型详解 http://blog.csdn.net/yaopeng_2005/article/details/7064869
先上个大图:
物理层
在OSI参考模型中,物理层(Physical Layer)是参考模型的最低层,也是OSI模型的第一层。
物理层的主要功能是:利用传输介质为数据链路层提供物理链接,实现比特流的透明传输。
物理层的做用是实现相邻计算机节点之间比特流的透明传送,尽量屏蔽掉具体传输介质和物理设备的差别。使其上面的数据链路层没必要考虑网络的具体传输介质是什么。“透明传送比特流”表示经实际电路传送后的比特流没有发生变化,对传送的比特流来讲,这个电路好像是看不见的。
数据链路层
数据链路层(Data Link Layer)是OSI模型的第二层,负责创建和管理节点间的链路。该层的主要功能是:经过各类控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。
在计算机网络中因为各类干扰的存在,物理链路是不可靠的。所以,这一层的主要功能是在物理层提供的比特流的基础上,经过差错控制、流量控制方法,使有差错的物理线路变为无差错的数据链路,即提供可靠的经过物理介质传输数据的方法。
该层一般又被分为介质访问控制(MAC)和逻辑链路控制(LLC)两个子层。
– MAC子层的主要任务是解决共享型网络中多用户对信道竞争的问题,完成网络介质的访问控制;
– LLC子层的主要任务是创建和维护网络链接,执行差错校验、流量控制和链路控制。
数据链路层的具体工做是接收来自物理层的位流形式的数据,并封装成帧,传送到上一层;一样,也未来自上层的数据帧,拆装为位流形式的数据转发到物理层;而且,还负责处理接收端发回的确认帧的信息,以便提供可靠的数据传输。
网络层
网络层(Network Layer)是OSI模型的第三层,它是OSI参考模型中最复杂的一层,也是通讯子网的最高一层。它在下两层的基础上向资源子网提供服务。其主要任务是:经过路由选择算法,为报文或分组经过通讯子网选择最适当的路径。该层控制数据链路层与传输层之间的信息转发,创建、维持和终止网络的链接。具体地说,数据链路层的数据在这一层被转换为数据包,而后经过路径选择、分段组合、顺序、进/出路由等控制,将信息从一个网络设备传送到另外一个网络设备。
通常地,数据链路层是解决同一网络内节点之间的通讯,而网络层主要解决不一样子网间的通讯。例如在广域网之间通讯时,必然会遇到路由(即两节点间可能有多条路径)选择问题。
在实现网络层功能时,须要解决的主要问题以下:
寻址:数据链路层中使用的物理地址(如MAC地址)仅解决网络内部的寻址问题。在不一样子网之间通讯时,为了识别和找到网络中的设备,每一子网中的设备都会被分配一个惟一的地址。因为各子网使用的物理技术可能不一样,所以这个地址应当是逻辑地址(如IP地址)。
交换:规定不一样的信息交换方式。常见的交换技术有:线路交换技术和存储转发技术,后者又包括报文交换技术和分组交换技术。
路由算法:当源节点和目的节点之间存在多条路径时,本层能够根据路由算法,经过网络为数据分组选择最佳路径,并将信息从最合适的路径由发送端传送到接收端。
链接服务:与数据链路层流量控制不一样的是,前者控制的是网络相邻节点间的流量,后者控制的是从源节点到目的节点间的流量。其目的在于防止阻塞,并进行差错检测。
传输层
OSI下3层的主要任务是数据通讯,上3层的任务是数据处理。而传输层(Transport Layer)是OSI模型的第4层。所以该层是通讯子网和资源子网的接口和桥梁,起到承上启下的做用。
该层的主要任务是:向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输。传输层的做用是向高层屏蔽下层数据通讯的细节,即向用户透明地传送报文。该层常见的协议:TCP/IP中的TCP协议、Novell网络中的SPX协议和微软的NetBIOS/NetBEUI协议。
传输层提供会话层和网络层之间的传输服务,这种服务从会话层得到数据,并在必要时,对数据进行分割。而后,传输层将数据传递到网络层,并确保数据能正确无误地传送到网络层。所以,传输层负责提供两节点之间数据的可靠传送,当两节点的联系肯定以后,传输层则负责监督工做。综上,传输层的主要功能以下:
传输链接管理:提供创建、维护和拆除传输链接的功能。传输层在网络层的基础上为高层提供“面向链接”和“面向无接连”的两种服务。
处理传输差错:提供可靠的“面向链接”和不太可靠的“面向无链接”的数据传输服务、差错控制和流量控制。在提供“面向链接”服务时,经过这一层传输的数据将由目标设备确认,若是在指定的时间内未收到确认信息,数据将被重发。
监控服务质量。
会话层
会话层(Session Layer)是OSI模型的第5层,是用户应用程序和网络之间的接口,主要任务是:向两个实体的表示层提供创建和使用链接的方法。将不一样实体之间的表示层的链接称为会话。所以会话层的任务就是组织和协调两个会话进程之间的通讯,并对数据交换进行管理。
用户能够按照半双工、单工和全双工的方式创建会话。当创建会话时,用户必须提供他们想要链接的远程地址。而这些地址与MAC(介质访问控制子层)地址或网络层的逻辑地址不一样,它们是为用户专门设计的,更便于用户记忆。域名(DN)就是一种网络上使用的远程地址例如:www.3721.com就是一个域名。会话层的具体功能以下:
会话管理:容许用户在两个实体设备之间创建、维持和终止会话,并支持它们之间的数据交换。例如提供单方向会话或双向同时会话,并管理会话中的发送顺序,以及会话所占用时间的长短。
会话流量控制:提供会话流量控制和交叉会话功能。
寻址:使用远程地址创建会话链接。l
出错控制:从逻辑上讲会话层主要负责数据交换的创建、保持和终止,但实际的工做倒是接收来自传输层的数据,并负责纠正错误。会话控制和远程过程调用均属于这一层的功能。但应注意,此层检查的错误不是通讯介质的错误,而是磁盘空间、打印机缺纸等类型的高级错误。
表示层
表示层(Presentation Layer)是OSI模型的第六层,它对来自应用层的命令和数据进行解释,对各类语法赋予相应的含义,并按照必定的格式传送给会话层。其主要功能是“处理用户信息的表示问题,如编码、数据格式转换和加密解密”等。表示层的具体功能以下:
数据格式处理:协商和创建数据交换的格式,解决各应用程序之间在数据格式表示上的差别。
数据的编码:处理字符集和数字的转换。例如因为用户程序中的数据类型(整型或实型、有符号或无符号等)、用户标识等均可以有不一样的表示方式,所以,在设备之间须要具备在不一样字符集或格式之间转换的功能。
压缩和解压缩:为了减小数据的传输量,这一层还负责数据的压缩与恢复。
数据的加密和解密:能够提升网络的安全性。
应用层
应用层(Application Layer)是OSI参考模型的最高层,它是计算机用户,以及各类应用程序和网络之间的接口,其功能是直接向用户提供服务,完成用户但愿在网络上完成的各类工做。它在其余6层工做的基础上,负责完成网络中应用程序与网络操做系统之间的联系,创建与结束使用者之间的联系,并完成网络用户提出的各类网络服务及应用所需的监督、管理和服务等各类协议。此外,该层还负责协调各个应用程序间的工做。
应用层为用户提供的服务和协议有:文件服务、目录服务、文件传输服务(FTP)、远程登陆服务(Telnet)、电子邮件服务(E-mail)、打印服务、安全服务、网络管理服务、数据库服务等。上述的各类网络服务由该层的不一样应用协议和程序完成,不一样的网络操做系统之间在功能、界面、实现技术、对硬件的支持、安全可靠性以及具备的各类应用程序接口等各个方面的差别是很大的。应用层的主要功能以下:
用户接口:应用层是用户与网络,以及应用程序与网络间的直接接口,使得用户可以与网络进行交互式联系。
实现各类服务:该层具备的各类应用程序能够完成和实现用户请求的各类服务。
OSI7层模型的小结
因为OSI是一个理想的模型,所以通常网络系统只涉及其中的几层,不多有系统可以具备全部的7层,并彻底遵循它的规定。
在7层模型中,每一层都提供一个特殊的网络功能。从网络功能的角度观察:下面4层(物理层、数据链路层、网络层和传输层)主要提供数据传输和交换功能,即以节点到节点之间的通讯为主;第4层做为上下两部分的桥梁,是整个网络体系结构中最关键的部分;而上3层(会话层、表示层和应用层)则以提供用户与应用程序之间的信息和数据处理功能为主。简言之,下4层主要完成通讯子网的功能,上3层主要完成资源子网的功能。
发送窗口的大小取决于接受窗口。
能够有效防止主机性能差距较大时形成的拥塞。
TCP与UDP各自优缺点
TCP的优势: 可靠,稳定
TCP的可靠体如今TCP在传递数据以前,会有三次握手来创建链接,并且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开链接用来节约系统资源。
TCP的缺点: 慢,效率低,占用系统资源高,易被攻击
TCP在传递数据以前,要先建链接,这会消耗时间,并且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,并且要在每台设备上维护全部的传输链接,事实上,每一个链接都会占用系统的CPU、内存等硬件资源。 并且,由于TCP有确认机制、三次握手机制,这些也致使TCP容易被人利用,实现DOS、DDOS、CC等攻击。
UDP的优势: 快
UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,因此它在传递数据时很是快。没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些。但UDP也是没法避免攻击的,好比:UDP Flood攻击……
UDP的缺点: 不可靠,不稳定
由于UDP没有TCP那些可靠的机制,在数据传递时,若是网络质量很差,就会很容易丢包。
基于上面的优缺点,那么:
– 何时应该使用TCP: 当对网络通信质量有要求的时候,好比:整个数据要准确无误的传递给对方,这每每用于一些要求可靠的应用,好比HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。 在平常生活中,常见使用TCP协议的应用以下: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件传输 …………
– 何时应该使用UDP:
当对网络通信质量要求不高的时候,要求网络通信速度能尽可能的快,这时就可使用UDP。 好比,平常生活中,常见使用UDP协议的应用以下: QQ语音 QQ视频 TFTP ……
TCP与UDP区别总结:
一、TCP面向链接(如打电话要先拨号创建链接);UDP是无链接的,即发送数据以前不须要创建链接
二、TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
三、流模式与数据报模式 ;TCP面向字节流,其实是TCP把数据当作一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,所以网络出现拥塞不会使源主机的发送速率下降(对实时应用颇有用,如IP电话,实时视频会议等)
四、每一条TCP链接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通讯
五、TCP首部开销20字节;UDP的首部开销小,只有8个字节
六、TCP的逻辑通讯信道是全双工的可靠信道,UDP则是不可靠信道
进程:分配资源的基本单位
线程:独立运行和独立调度的基本单位
进程和线程的主要差异在于它们是不一样的操做系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不一样执行路径。线程有本身的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,因此多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行而且又要共享某些变量的并发操做,只能用线程,不能用进程。
-
这四个特性简称为 ACID 特性。
1 、原子性。事务是数据库的逻辑工做单位,事务中包含的各操做要么都作,要么都不作 2 、一致性。事 务执行的结果必须是使数据库从一个一致性状态变到另外一个一致性状态。所以当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。若是数据库系统 运行中发生故障,有些事务还没有完成就被迫中断,这些未完成事务对数据库所作的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。 3 、隔离性。一个事务的执行不能其它事务干扰。即一个事务内部的操做及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。 4 、持续性。也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操做或故障不该该对其执行结果有任何影响。
这四种隔离级别采起不一样的锁类型来实现,若读取的是同一个数据的话,就容易发生问题。例如:
脏读(Drity Read):某个事务已更新一份数据,另外一个事务在此时读取了同一份数据,因为某些缘由,前一个RollBack了操做,则后一个事务所读取的数据就会是不正确的。
不可重复读(Non-repeatable read):在一个事务的两次查询之中数据不一致,这多是两次查询过程当中间插入了一个事务更新的原有的数据。
幻读(Phantom Read):在一个事务的两次查询中数据笔数不一致,例若有一个事务查询了几列(Row)数据,而另外一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的。
在MySQL中,实现了这四种隔离级别,分别有可能产生问题以下所示:
原文及测试:https://www.jb51.net/article/96179.htm
这两篇就够了:
https://www.cnblogs.com/chenshengjava/archive/2018/03/21/8619655.html
http://www.cnblogs.com/wmbg/p/6872112.html
哪些须要回收
JVM的内存结构包括五大区域:程序计数器、虚拟机栈、本地方法栈、堆区、方法区。其中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生、随线程而灭,所以这几个区域的内存分配和回收都具有肯定性,就不须要过多考虑回收的问题,由于方法结束或者线程结束时,内存天然就跟随着回收了。而Java堆区和方法区则不同、不同!(怎么不同说的朗朗上口),这部份内存的分配和回收是动态的,正是垃圾收集器所需关注的部分。回收的区域肯定了,那么在回收以前,还要肯定这个区域哪些能够被回收,哪些暂时还不能回收,这就引出下面的算法。
public class ReferenceFindTest { public static void main(String[] args) { MyObject object1 = new MyObject(); MyObject object2 = new MyObject(); object1.object = object2; object2.object = object1; object1 = null; object2 = null; } }
Object obj = new Object()
这类引用,只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象。ClassLoader
已经被回收java.lang.Class
对象没有在任何地方被引用,没法在任何地方经过反射访问该类的方法。怎么回收
复制算法:复制算法的提出是为了克服句柄的开销和解决内存碎片的问题。它开始时把堆分红 一个对象 面和多个空闲面, 程序从对象面为对象分配空间,当对象满了,基于copying算法的垃圾 收集就从根集合(GC Roots)中扫描活动对象,并将每一个 活动对象复制到空闲面(使得活动对象所占的内存之间没有空闲洞),这样空闲面变成了对象面,原来的对象面变成了空闲面,程序会在新的对象面中分配内存。
标记-整理算法:标记-整理算法采用标记-清除算法同样的方式进行对象的标记,但在清除时不一样,在回收不存活的对象占用的空间后,会将全部的存活对象往左端空闲空间移动,并更新对应的指针。标记-整理算法是在标记-清除算法的基础上,又进行了对象的移动,所以成本更高,可是却解决了内存碎片的问题。具体流程见下图
分代收集算法:分代收集算法是目前大部分JVM的垃圾收集器采用的算法。它的核心思想是根据对象存活的生命周期将内存划分为若干个不一样的区域。通常状况下将堆区划分为老年代(Tenured Generation)和新生代(Young Generation),在堆区以外还有一个代就是永久代(Permanet Generation)。老年代的特色是每次垃圾收集时只有少许对象须要被回收,而新生代的特色是每次垃圾回收时都有大量的对象须要被回收,那么就能够根据不一样代的特色采起最适合的收集算法。
常见垃圾收集器
GC触发条件:因为对象进行了分代处理,所以垃圾回收区域、时间也不同。GC有两种类型:Scavenge GC和Full GC。
每个Mybatis的应用程序都以一个SqlSessionFactory对象的实例为核心。首先用字节流经过Resource将配置文件读入,而后经过SqlSessionFactoryBuilder().build方法建立SqlSessionFactory,而后再经过sqlSessionFactory.openSession()方法建立一个sqlSession为每个数据库事务服务。
经历了Mybatis初始化 –>建立SqlSession –>运行SQL语句 返回结果三个过程
http://www.cnblogs.com/kaffeetrinken/articles/8545444.html
基本排序算法O(n^2)
优化的排序算法
再次优化的排序算法