计算机基础知识面经

排序法

平均时间 最差情形 稳定度 额外空间 备注
冒泡 O(n2)     O(n2) 稳定 O(1) n小时较好
选择 O(n2) O(n2) 不稳定 O(1) n小时较好
插入 O(n2) O(n2) 稳定 O(1) 大部分已排序时较好
基数 O(logRB) O(logRB) 稳定 O(n)

B是真数(0-9),R是基数(位数)

希尔 O(nlogn) O(ns) 1<s<2 不稳定 O(1) s是所选分组
快速 O(nlogn) O(n2) 不稳定 O(nlogn) n大时较好
归并 O(nlogn) O(nlogn) 稳定 O(1) n大时较好
O(nlogn) O(nlogn) 不稳定 O(1) n大时较好

1、排序的稳定性

(1)不稳定性排序:选择排序、快速排序、希尔排序、堆排序

(2)稳定性排序:冒泡排序,插入排序、归并排序、基数排序

2、快速排序

(1)快速排序基本思想:采用分治法,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

(2)快速排序与冒泡排序的区别:快速排序是由冒泡排序改进的,冒泡排序过程中,只对相邻的两个记录进行比较,因此每次交换两个相邻记录时只能消除一个逆序.快速排序是通过两个不相邻记录的一次交换消除多个逆序,提高排序速度.快速排序不稳定,冒泡排序稳定。

(3)时间复杂度分析:从快速排序算法的递归树可知,快速排序的趟数取决于递归树的深度.最好情况下:每一趟排序后都能将记录序列均匀的分割成两个长度大致相等的子表时间复杂度为O(nlogn).最坏情况下:在待排序序列已经排好序的情况下,其递归树成为单支树.时间复杂度为O(n^2/2)

(4)空间复杂度:快速排序是递归的,执行时需要一个栈来存放相应的数据,最大递归调用次数与递归树的深度一致,故最好情况的空间复杂度为O(logn),最坏情况为O(n);

(5)算法特点

  1)记录的非顺次的移动导致排序方法不稳定.

  2)排序过程中需要定位表的上阶和下界,所以适合用于顺序结构,很难用于链式结构.

  3)适合用于初始记录无序,n较大的情况.

3、归并排序

(1)基本思想:该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

(2)快速排序与归并排序的区别:

  1)快速排序的时间复杂度是O (nlogn),但是快速排序是一种不稳定的排序方法,也就是说当有多个相同的值的时候在排序结束的时候它们的相对位置会发生改变。

  2)归并排序的时间复杂度是O (nlogn),但是归并排序是一种稳定的排序方法,即相等的元素顺序不会改变,但是相比于快速排序来说归并要申请的空间更大,消耗空间更多。

4、动态规划与递归的区别

  从子问题解决原问题, 无非是两种方法,自底向上(Bottom-Up)与自顶向下(Top-Down),形式上前者对应iteration,利用循环将结果存在数组里,从数组起始位置向后计算;后者对应recursion,即利用函数调用自身实现,如果不存储上一个状态的解,则为递归,否则就是DP。

5、计算机网络

(1)层次结构:

(2)以五层结构为例:应用层,传输层(运输层),网络层,数据链路层,物理层

  1)物理层:通过光纤和电缆以及双绞线等物体将计算机连接。然后才能进行通信在计算机之间传输0,1这样的电信号.集线器、中继器,网线

  2)数据链路层:工作在物理层之上,负责给这些0,1制定传送的规则,然后另一方再按照相应的规则来进行解读。负责分配MAC地址。二层交换机、网桥

   a、以太网协议:以太网协议规定,一组电信号构成一个数据包,把这个数据包称之为“桢”。每一个桢由标头(Head)和数据(Data)两部分组成,桢的最大长度是1518个字节,最小长度为64字节。假如需要传送的数据很大的话,就分成多个桢来进行传送。

   b、MAC地址:连入网络的每一个计算机都会有网卡接口,每一个网卡都会一个地址,这个地址就叫做MAC地址。计算机之间的数据传送,就是通过MAC地址来唯一寻找、传送的。

  3)网络层:实际上我们所处的网络,是由无数个子网络构成的。广播的时候,也只有同一个子网里面的计算机能够收到。 假如没有子网这种划分的话,计算机A发一个数据包给计算机B,其他所有计算机也都能收到这个数据包,然后进行对比再舍弃。世界上有那么多它计算机,每一台计算机都能收到其他所有计算机的数据包,那就不得了了。如何区分哪些MAC地址是属于同一个子网的呢?假如是同一个子网,那我们就用广播的形式把数据传送给对方,如果不是同一个子网的,我们就会把数据发给网关,让网关进行转发。为了解决这个问题我们引入了一套新的地址协议(IP协议),这个地址协议能够帮助我们区分MAC地址是否处于同一个子网中。这也是网络层负责解决的问题。主要设备为路由器。

  4)传输层:计算机A已经可以发送数据到计算机B中了,但是计算机B里面有多种多样的程序应用,此时通过指定端口Port供特定的应用程序来接受处理.传输层的功能就是建立端口到端口的通信。相比网络层的功能是建立主机到主机的通信。传输层最常见的两大协议是 TCP 协议和 UDP 协议,其中 TCP 协议与 UDP 最大的不同就是 TCP 提供可靠的传输,而 UDP 提供的是不可靠传输。

  5)应用层:传过来的数据格式不同,而应用层的功能,就是用来规定应用程序的数据格式的.

(3)相关协议及其端口号

  1)应用层协议:

   a、Http协议:超文本传输协议,端口:80      连接简单,无状态。应用于浏览器和网站服务器之间传递数据,以明文方式发送内容,不提供密钥方式的加密。

   b、Https协议:安全的超文本传输协议,端口:443    HTTPS协议需要申请CA证书。具有安全性的SSL加密传输协议,由SSL+HTTP协议构成的可进行加密传输,身份认证的网络协议

   c、FTP协议:文件传输协议,端口:21,有效的将文件从一台移到另一台上。

   d、SMTP协议:电子邮件传输协议,端口:25,用于电子邮件的收发

   e、DNS协议:域名解析协议,端口号:53;将域名转化为IP地址(也可以将IP地址转化为相应的域名地址)

  2)传输层

   a、TCP协议:传输控制协议,端口号6 ;

   b、UDP协议:用户数据报协议,端口号17;面向连接不可靠的传输协议,主要用于不需要TCP的排序和流量控制等功能的应用程序。

  3)网络层

   a、IP协议:因特网协议,传输不可靠,IP协议只是尽自己最大的可能进行数据的传输, 可靠性由上层协议TCP负责。

   b、ARP协议:地址解析协议,端口号:0806;将IP地址转化为MAC地址

   c、RARP协议:反向地址转换协议,端口号:8035;允许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP地址。

  4)数据链路层

   a、ARQ协议:自动重传协议。

(4)HTTP的长连接和短短连接:

  HTTP协议是基于请求/响应模式的,因此只要服务端给了响应,本次HTTP连接就结束了,或者更准确的说,是本次HTTP请求就结束了,所谓的HTTP连接本质上是TCP的连接。TCP连接是可以保持一段时间不中断的就是长连接,发起一次请求后就主动断开的就是短连接,所以就有了长连接和短连接一说。若没有长连接TCP连接将会越来越多,直到把服务器的TCP连接数量撑爆到上限为止,长连接为了节省连接而重复利用。

(5)HTTP与HTTPS的区别

  1)端口:HTTP的URL由“http://”起始且默认使用端口80,而HTTPS的URL由“https://”起始且默认使用端口443。

  2)安全性和资源消耗:

   a、HTTP协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。

   b、HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS 运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以,HTTP 安全性没有 HTTPS高,但是 HTTPS 比HTTP耗费更多服务器资源。

   c、对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,对称加密算法DES、AES等;

   d、非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA

(6)HTTP的状态码有哪些:

  1)200 请求成功

  2)4开头表示客户端错误,服务器无法处理请求

   a、400请求有语法错误,不能被服务器所理解;

   b、404请求资源不存在

   3)5开头表示服务器端错误

   a、500服务器发生不可预期的错误;

   b、503服务器不能处理客户请求

(7)TCP与UDP的区别

  1)TCP:面向连接的,每条TCP连接只能由两个端点,一对一通信;提供可靠的交付服务,传输数据无差错,不丢失,不重复,且按时序到达;面向字节流,TCP根据对方给出的窗口和当前的网络拥塞程度决定一个报文应该包含多少个字节

  2)UDP:无连接,UDP使用尽最大努力交付,不保证可靠性UDP是面向报文的;UDP支持一对一,一对多,多对一和多对多的交互通信;应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文;

  3)TCP协议需要三次握手通信成功后进行建立,应用场景:互联网和企业网上客户端应用,数据传输性能让位于数据传输的完整性,可控制性和可靠性;UDP协议是直接发送,不会判断是否接收和发送成功,应用场景:当强调输出性能而非完整性时,如音频和多媒体的应用。

(8)TCP 协议如何保证可靠传输

  1)TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。

  2)校验和: TCP 将保持它首部和数据的检验和。这是端到端的检验和,为了检测数据在传输过程中的任何变化。若收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。

  3)TCP 的接收端会丢弃重复的数据。

  4)流量控制: TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制)

  5)拥塞控制: 当网络拥塞时,减少数据的发送。

  6)超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

(9)URL与URI的区别:

  1)URI:统一资源标志符(Universal Resource Identifier, URI),表示是一个网络资源,如 HTML文档、图像等。

    组成部分:访问资源的命名机制,存放资源的主机名,资源自身的名称

  2)URL:是Uniform Resource Locator,表示是一个地址,可以提供该资源的路径。URL是URI的子集,URI=URL或者URN。

  3)URN:统一资源名称 (Uniform Resource Name, URN),是URI两种形式之一。唯一标识一个实体的标识符,但是不能给出实体的位置

(10)从输入URL到展示网页全过程:

  1)输入网址:缓存解析 浏览器获取了这个url,当然就去解析了,它先去缓存当中看看有没有,从 浏览器缓存-系统缓存-路由器缓存 当中查看,如果有从缓存当中显示页面,否则进行下一步.

  2)DNS解析:在发送http请求前,需要域名解析(DNS解析),解析获取相应的IP地址.

  3)浏览器向服务器发起tcp连接,与浏览器建立tcp三次握手。

  4)握手成功后,浏览器向服务器发送http请求,请求数据包。

  5)服务器处理收到的请求,将数据返回至浏览器

  6)浏览器收到HTTP响应,读取页面内容,浏览器渲染,解析html源码

(11)tcp标志位:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)Sequence number(顺序号码) Acknowledge number(确认号码)

  1)TCP三次握手过程:

   a、起初两端都处于CLOSED关闭状态,Client将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给Server,Client进入SYN-SENT状态,等待Server确认;

   b、Server收到数据包后由标志位SYN=1得知Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN-RCVD状态

   c、Client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并将该数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client和Server就可以开始传输数据。

  2)三次握手的原因

   a、第三次握手是为了防止:如果客户端迟迟没有收到服务器返回确认报文,这时会放弃连接,重新启动一条连接请求,但问题是:服务器不知道客户端没有收到,所以他会收到两个连接,浪费连接开销。如果每次都是这样,就会浪费多个连接开销。

   b、第三次握手是为了防止已经失效的连接请求报文段突然又传到服务端,譬如发起请求遇到类似这样的情况:客户端发出去的第一个连接请求由于某些原因在网络节点中滞留了导致延迟,直到连接释放的某个时间点才到达服务端,这是一个早已失效的报文,但是此时服务端仍然认为这是客户端的建立连接请求第一次握手,于是服务端回应了客户端,第二次握手。如果只有两次握手,那么到这里,连接就建立了,但是此时客户端并没有任何数据要发送,而服务端还在傻傻的等候佳音,造成很大的资源浪费。所以需要第三次握手,只有客户端再次回应一下,就可以避免这种情况。

(12)四次挥手过程:四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。

  由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。

  1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
       2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
       3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
       4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。  

posted on 2019-09-02 16:57  hdc520  阅读(1046)  评论(0)    收藏  举报

导航