介绍HTTP协议(特征)
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。
HTTP协议工作于客户端-服务端架构为上。HTTP 的工作方式是客户机与服务器之间的请求-应答协议。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
主要特点
1、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
2、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
3.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
4.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
5、支持B/S及C/S模式。
HTTP中发送请求的两种基本方法:GET和POST有什么区别?
GET - Get:从服务器请求数据,而且请求包含在Url之中。
有长度限制;可以用来作电子书签;敏感数据不应该用Get请求;可以缓存;保存在浏览器历史记录之中;仅仅用来检索数据。
POST - 提交数据到服务器。查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的。
没有长度限制;不可用作电子书签;POST请求相对GET请求更加安全;不可以缓存;不存在浏览历史记录当中。
TCP、IP
osi七层模型与TCP/IP五层模型
TCP三次握手,四次挥手
TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,
简单的描述下这三次对话的简单过程:
1、主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;2、主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;
3、主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。
TCP建立连接要进行3次握手,而断开连接要进行4次
1 当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求
2 主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1
3 由B 端再提出反方向的关闭请求,将FIN置1
4 主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束.
UDP(User Data Protocol,用户数据报协议)和TCP区别
1.基于连接与无连接;
2.对系统资源的要求(TCP较多,UDP少);
3.UDP程序结构较简单;
4.流模式与数据报模式 ;
5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
排序算法
稳定:
冒泡排序、插入排序、归并排序和基数排序。
不稳定:
选择排序、快速排序、希尔排序、堆排序。
冒泡排序O(n^2)
1、相邻的元素。如果第一个比第二个大,就交换它们两个;
2、对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
3、所有的元素重复以上的步骤,除了最后一个;
4、骤1~3,直到排序完成。
快速排序O(nlog2^n)):
快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下:
1、从数列中挑出一个元素,称为 “基准”(pivot);
2、重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
3、递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
堆排序(Heap Sort)O(nlog2^n):
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。
NAS、SAN存储
NAS是标准的文件级存储方法,采用网络技术(TCP/IP、ATM、FDDI),通过网络交换机连接存储系统和服务器主机来建立存储私网。其主要特征是把存储设备、网络接口和以太网技术集成在一起,直接通过以太网网络存取数据。能够快速实现部门级存储容量需求与文件传输需求。
与上面两者相比,NAS网络存储更具有独立性与良好的兼容性。不但拥有自己的操作系统,同时也无需改造即可用于混合Unix/Windows NT局域网内,与各种操作系统兼容,同时具有很好的灵活性。
SAN是一个采用网状通道(简称FC)技术,通过FC交换机连接存储阵列和服务器主机,建立专用于数据存储的区域网络。
从理论上来讲,SAN支持数以百计的磁盘,提供了海量的存储空间,解决了大容量存储问题;从逻辑层面,这个海量空间可以按需要分成不同大小的LUN,再分配给服务器,也解决了只需要小容量存储的问题
SAN需要通过光纤交换机连接存储阵列和服务器,建立专用数据存储的网络。
线程(Process)和进程(Thread)
总结:
进程是对cpu执行一个程序的时间描述,这个时间包括:加载执行程序的上下文(程序信息)、执行程序的时间、切换出任务并保存程序上下文的时间。
线程是共享了进程上下文环境的,更细小的CPU时间段。
综上:进程和线程是CPU工作时间段的描述,只不过是颗粒大小不同而已。
进程是进行资源分配和调度的基本单位。我们仅从最简单的理论上来说,进程包括两个部分,一个是Process Control Block(PCB,程序控制块)和程序块。PCB是系统用来控制一个进程的“工具”,也是进程存在的标志。PCB中包含了进程的一些基本信息,例如,进程的ID,程序运行的堆栈,程序的运行数据等。而程序块则是进程真正执行的代码。
操作系统一般通过时间片算法来管理一个进程。它把CPU分成很多个很小的“片段”,并把它们轮流分配给进程使用。当时间片耗尽后,进程就会被系统“暂停”,将它的数据放入PCB,然后进程就进入了“就绪”队列。因此,从微观角度来讲,单个CPU某一时刻只能执行一个进程。
当进程需要其他外部资源时会怎样呢?例如一个进程需要读写文件,如果缓冲区没有它需要的数据,那么就意味着内核需要去外部储存读取。外部储存的读写对计算机来说是很慢的,CPU资源不应该被白白浪费,于是,内核就会让进程进入阻塞状态。当进程需要的资源准备好的时候,进程就可以继续了吗?答案是否定的,它需要重新“排队”,才能继续运行。
线程的提出,是因为人们觉得进程切换开销太大,因此想要一个更“轻”的进程。线程提出之初,其实用处并不大,直到出现了多核心处理器。
线程是进行资源调度的最小单位。与进程类似,线程也有一个叫做“Thread Control Block”的存在(TCB,线程控制块)。不过,这里需要注意,因为线程拥有的系统数据非常少,因此我们基本上忽略不计。所以说,线程并不能拥有资源,它只能使用进程的资源。线程比起进程更加轻量、灵活。进程的切换涉及到系统资源,而线程则不然。
因为以上特点,我们可以看出:
进程自身的资源不可以被外部进程直接访问。各个进程之间是相互独立的。
一个进程中的多个线程可以共享一部分资源。因此,在多线程环境下,有的操作需要加互斥锁。
在开始介绍线程的时候,我们说到了“多核处理器”。那么,为什么多核处理器能够让线程的能力得以体现?我们先说一下基本概念:处理器(CPU)=运算器+寄存器+控制器。其中,运算器就是我们所说的“核”。多个核心共享寄存器。和进程、线程类比一下是不是很相似?进程独占资源,线程则共享资源。因此,每有一个核心,就可以有一个线程在它上面运行。