@lovesosoi
2018-08-03T14:14:42.000000Z
字数 4584
阅读 691
Lovesosoi大讲堂
一、计算机网络知识
万维网:World Wide Web
万维网并不等同互联网,万维网只是互联网所能提供的服务其中之一,是靠着互联网运行的一项服务。
万维网联盟(英语:World Wide Web Consortium,简称W3C),又称W3C理事会。1994年10月在麻省理工学院(MIT)计算机科学实验室成立。万维网联盟的创建者是万维网的发明者蒂姆·伯纳斯-李。
Http协议
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准
HTTP是无连接,HTTP是媒体独立的,HTTP是无状态
消息结构
客户端请求消息:
请求行(request line)、请求头部(header)、空行和请求数据四个部分组成
GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
服务器相应消息:
状态行、消息报头、空行和响应正文。
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain
请求方法:
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
响应头的信息:
http://www.runoob.com/http/http-header-fields.html
状态码:
200 - 请求成功
301 - 资源(网页等)被永久转移到其它URL
404 - 请求的资源(网页等)不存在
500 - 内部服务器错误
TCP/UDP
TCP:
TCP -- 传输控制协议,提供的是面向连接,可靠的字节流服务。即客户和服务器交换数据前,必须现在双方之间建立一个TCP连接,之后才能传输数据。并且提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。
UDP:
UDP -- 用户数据报协议,是一个简单的面向数据报的运输层协议。它不提供可靠性,只是把应用程序传给IP层的数据报发送出去,但是不能保证它们能到达目的地。由于UDP在传输数据报前不用再客户和服务器之间建立一个连接,且没有超时重发等机制,所以传输速度很快。
当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。
QQ语音
QQ视频
TFTP
IP地址:
网络上每一个节点都必须有一个独立的Internet地址(也叫做IP地址)。现在,通常使用的IP地址是一个32bit的数字,也就是我们常说的IPv4标准,这32bit的数字分成四组,也就是常见的255.255.255.255的样式。IPv4标准上,地址被分为五类,我们常用的是B类地址。具体的分类请参考其他文档。需要注意的是IP地址是网络号+主机号的组合,这非常重要。
端口号:
注意,这个号码是用在TCP,UDP上的一个逻辑号码,并不是一个硬件端口,我们平时说把某某端口封掉了,也只是在IP层次把带有这个号码的IP包给过滤掉了而已。
子网掩码/地址分类(自己了解,如255.255.255.255,地址分类为abc 三类,自己了解)
面试常见问题
TCP的三次握手与四次挥手(自己了解)
TCP与UDP有什么区别(上边有)
长链接与短链接
在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。
而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:
Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。
http 与 https 的区别
HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
HTTPS和HTTP的区别主要如下:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
Get请求与post 请求的区别
/test/demo_form.asp?name1=value1&name2=value2
GET 请求可被缓存
GET 请求保留在浏览器历史记录中
GET 请求可被收藏为书签
GET 请求不应在处理敏感数据时使用
GET 请求有长度限制
GET 请求只应当用于取回数据
POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2
POST 请求不会被缓存
POST 请求不会保留在浏览器历史记录中
POST 不能被收藏为书签
POST 请求对数据长度没有要求
二、常见算法
一个算法的好坏,不是看代码有几行,而是看效率有多高,衡量一个算法的优劣,主要通过时间复杂度和空间复杂度。这两个值来判断
时间复杂度是算法的所需要消耗的时间,时间越短,算法越好。可以对算法的代码进行估计,而得到算法的时间复杂度。
一般来说,算法代码简短精悍可以用来减少算法的时间复杂度!(但是不绝对)
空间复杂度指的是算法程序在执行时所需要的存储空间。空间复杂度可以分为以下两个方面!
1.程序的保存所需要的存储空间资源。即程序的大小;
2.程序在执行过程中所需要消耗的存储空间资源,如中间变量等;
一般来说,程序的大小越小,执行过程中消耗的资源越少,这个程序就越好!
平均情况,最好情况,最坏情况
计算机的常见算法:递推法,递归法,穷举法,贪心算法,分治法,动态规划法,迭代法,分支界限法,回溯法(自己了解)
https://www.cnblogs.com/MrTao/p/7199961.html
1.排序(快速排序,归并排序,冒泡排序,选择排序,希尔排序,堆排序)
2.查找(二分查找,线性查找,)
三、设计模式
创建型模式:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式
结构型模式:适配器模式、桥接模式、过滤器模式、组合模式、装饰器模式、外观模式、享元模式、代理模式
行为型模式:责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、空对象模式、策略模式、模板模式、访问者模式
学习内容:
算法:
冒泡排序
void bubble_sort(int *a, int size)
{
int i, j, t;
for(i = 1; i < size; ++i){
for(j = 0; j < size -i; ++j){
if(a[j] > a[j+1]){
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
} // end for j
}// end for i
}
时间复杂度分析。其外层循环执行 N - 1次。内层循环最多的时候执行N次,最少的时候执行1次,平均执行 (N+1)/2次。
所以循环体内的比较交换约执行 (N - 1)(N + 1) / 2 = (N^2 - 1)/2(其中N^2是仿照Latex中的记法,表示N的平方)。按照计算复杂度的原则,去掉常数,去掉最高项系数,其复杂度为O(N^2)。
https://blog.csdn.net/bitboss/article/details/51559034
冒泡的优化1
void BubbleSort2(int arr[],int len)
{
int i = 0;
int j = 0;
for(i = 0; i < len - 1; i++)
{
int flag = 1;//假定每次进入都是有序的 flag为1;
for(j = 0; j < len - i - 1; j++)
{
int tmp = 0;
if(arr[j] > arr[j+1])
{
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
flag = 0;//如果发生交换,则flag 置为0;
}
}
if(flag == 1)//如果这趟走完,没有发生交换,则原数组有序;
break;
}
}//加入标志位优化
冒泡排序优化2
void BubbleSort3(int arr[],int len)
{
int i = 0;
int j = 0;
int k = len - 1;//控制内部比较循环
int n = 0;
for(i = 0; i < len -1 ; i++)
{
int flag = 1;
n = 0;
//假定每次进入都是有序的 flag为1;
for(j = 0; j < k; j++)
{
int tmp = 0;
if(arr[j] > arr[j+1])
{
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
flag = 0;//如果发生交换,则flag 置为0;
n = j;//保存最后一次交换的下标;
}
}
if(flag == 1)//如果这趟走完,没有发生交换,则原数组有序;
break;
k = n;//最后一次交换的位置给k,减少比较的次数;
}
}//最终优化
设计模式
单例模式