@lovesosoi
2018-08-03T14:14:42.000000Z
字数 4584
阅读 822
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.1User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3Host: www.example.comAccept-Language: en, mi服务器相应消息:状态行、消息报头、空行和响应正文。HTTP/1.1 200 OKDate: Mon, 27 Jul 2009 12:28:53 GMTServer: ApacheLast-Modified: Wed, 22 Jul 2009 19:15:56 GMTETag: "34aa387-d-1568eb00"Accept-Ranges: bytesContent-Length: 51Vary: Accept-EncodingContent-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 - 资源(网页等)被永久转移到其它URL404 - 请求的资源(网页等)不存在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,因此加密的详细内容就需要SSLHTTP协议传输的数据都是未加密的,也就是明文的,因此使用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=value2GET 请求可被缓存GET 请求保留在浏览器历史记录中GET 请求可被收藏为书签GET 请求不应在处理敏感数据时使用GET 请求有长度限制GET 请求只应当用于取回数据POST /test/demo_form.asp HTTP/1.1Host: w3schools.comname1=value1&name2=value2POST 请求不会被缓存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,减少比较的次数;}}//最终优化
设计模式
单例模式