1.数据链路层的可靠传输机制:
通过确认和超时重传来实现可靠传输。确认是指当接收方正确收到来自发送方的数据时,会向发送方返回ACK,告知已经正确收到数据;超时重传是指发送方发送数据后,会启动一个计时器,当计时器溢出还未收到来自接收方的ACK,立即重新发送数据,直到发送成功为止。
2.线索树:
线索树的目的是方便在二叉树的遍历过程中方便找到节点的前驱和后继。具体做法是检查二叉树的某个节点是否有空的左右子树。若存在,将其指向前驱或者后继,并将Ltag和rtag置为1;不存在,表示节点有左右子树,ltag和rtag置为0。二叉树的线索化实质上是树的遍历。
3.什么是存储过程:
存储过程是一种预编译的sql语句,只需要创建一次,便可多次调用,比单纯地使用sql语句执行效率高。
4.什么是触发器:
触发器是与事件相关的特殊存储过程(比如insert,delete,update),由事件触发,不需人工或者程序调用,可以保持数据的完整性。
5.数据完整性:
主要包括实体完整性:即对主键的约束,不能为空或者不能重复;参照完整性:对外键的约束,外键必须是另一个关系中的主键有效值或者为空;域完整性:对字段属性的约束,保证输入数据的有效性;用户自定义完整性。
6.度为2的树和二叉树的区别:
前者至少3个节点,且子树无次序之分;后者可以为空树,且有左右子树之分。
7.最小生成树的方法:
Pirm算法:选点,在边多的时候使用方便。初始化点集和边集都为空,任选一个点u加入点集,在与u相邻的点中,选择边的权值最小那个点v,加入点集,边加入边集;然后在与u、v相邻的所有点中,选择边权值最小的点,加入点集,边入边集。重复该过程,直至加入所有点,此时边集有n-1条边,即为最小生成树的边集。
Kruskal算法:选边,适用于点多的时候。初始化边集为空,将n个节点看成n个独立的树,这些节点构成无边的森林。在边中依次选择权值最小的边,尝试加入森林,若不会形成回路,则可以加入森林,否则,丢弃该边。直至加入n-1条边,即为最小生成树。
8.排序方法
名称 最好时间复杂度 平均 最坏 空间复杂度 稳定否
直插 on on2 on2 o1 稳
希尔------------------------------------o1 不稳
冒泡 on on2 on2 o1 稳
快速 onlong onlogn on2 ologn 不稳
选择 on2 on2 on2 o1 不稳
堆 onlogn onlogn onlogn o1 不稳
归并 onlogn onlogn onlogn on 稳
基数 o1 稳
9.快排的流程:
快速排序是基于分治思想的,在待排序序列中可以任曦选择一个记录作为基准,经过一次排序操作,表被划分成了两个部分,前一部分全小于基准,后一部分全大于基准,基准被放在了正确的位置上。下面对前后两个子表进行同样的划分操作,直到所有的记录有序。快排的效率和划分操作有关,即看是否划分对称。
注:每次冒泡,快排,选择,堆排序,均有一个元素被放在了最终的位置上。
10.C语言,数据结构和算法:
C语言是一种编程语言,编程语言有多种。数据结构,从字面上看是数据见的结构关系,是关于数据的理论知识,所以不论什么样的编程语言都用的到数据结构,数据结构是既基础又核心的知识吧。算法简单的说是解决问题的步骤,为数据结构服务,比如数据结构中常伴有查找算法,各种排序算法等。算法应选择正确的数据结构,比如经常对数据进行增删,可以选择链表方式存储,选择数组则效率低下。
11.图的存储:
邻接矩阵,邻接表。方便有向图计算出度入度,有向图还有十字链表法;方便无向图对边的操作,无向图还有临界多重表法。
12.图的遍历:
BFS;类似树的层序遍历,思想是访问一个初始顶点u,依次访问u的所有未被访问过的邻接顶点,直至访问所有顶点。为了实现逐层访问,用到辅助队列,存储正在访问顶点的下一层顶点。
DFS:类似树的先序遍历,思想是尽可能地深地搜索一张图。从某一结点出发,访问与之相邻地且未被访问过的顶点w1,再访问与w1相邻且未被访问过的顶点w2,直至不能继续访问下去,这时一次回退到最近被访问的顶点,若它还有未被访问过的邻接顶点,访问它,从这点重复上述过程,直到访问所有顶点。递归,用到栈。
注: 时间复杂度 空间复杂度
BFS 矩阵:on2 表:o(n+e) on
DFS 矩阵:on2 表:o(n+e) on
13.树的遍历
先根遍历和后根遍历还有层序遍历。先根遍历对应二叉树,森林的先序遍历,后根遍历对应二叉树,森林的中序遍历。
14.图和树遍历:
图在遍历过程中会有循环遍历的情况,所以需要一个vis辅助数组来标记顶点是否被访问过,而树在遍历过程中,不会用到标记数组;图可能有多个邻接点,而二叉树最多只有左右子树;都是从某一结点出发访问相邻结点,对数来说是孩子节点。
15.线性表的存储结构:
链式存储:节点本身有data域和指针域,存储密度小,利用率不高;逻辑上相邻的元素在物理上不一定相邻,故不支持随机访问,只支持顺序访问;对于经常增删记录的操作,选择链式存储,操作方便,只需要改变指针,不需移动元素。
顺序存储:节点本身只有data域,存储密度大,利用率高逻辑上相邻的元素物理上一定相邻,故可通过地址支持随机访问,也支持顺序访问;增删数据会引起元素的大量移动,不方便。
16.树和图的区别:
从逻辑结构上来看,树属于一对多的逻辑结构,图属于多对多的逻辑结构;从存储结构上来看,树的存储方法主要有双亲表示法,孩子表示法,孩子兄弟法,图的存储结构主要有:邻接表法,邻接矩阵法,十字链表法,邻接多重表法。故由此产生的遍历方法也不相同,树主要有先根后根,层序遍历,图主要有BFS和DFS。
17.计算之间的通信方式:
B/S:浏览器服务器模式,用户只需通过浏览器便可访问服务器,速度较慢,安全性不高,但是维护起来简单。
C/S:客户端服务器模式,用户需要安装客户端软件才能访问服务器,速度快,安全性高,但是维护起来代价高,服务端升级,所有客户端也得升级。
18.5层网络模型:
物理层:透明地传输二进制比特流,为数据链路层提供可靠的物理介质。主要设备:中继器,集线器。单位:二进制比特流
数据链路层:在物理层提供服务的基础上,向网络层提供服务,主要有封装成帧,透明传输,差错检测,流量控制等。设备:交换机,网桥。协议:PPP,CSMA/CD,CSMA/CA。
单位:数据帧
网络层:将数据传送到目的地址,寻址和路由选择。设备:路由器。协议:IP,ARP,ICMP,IGMP。单位:IP数据报
传输层:为端到端提供可靠的通信。设备:网关。协议:TCP,UDP。单位:报文
应用层:为应用程序和操作系统提供访问网络的接口。协议:HTTP,FTP,SMTP,TELNET,DNS,SNMP,TFTP。单位:报文
19.路由器的功能
连接两个不同的网络,确定信息的传送路径。
20…散列查找/哈希查找:
特点:根据关键字的value值来映射到它在哈希表中的具体位置。通过哈希函数可计算出关键字在表中的位置。多用除留余数法。处理冲突的方法,开放定址法,线性探测法,地址增量序列为1,2,3….到表尾时下一个位置时首地址;平方探测法,地址增量序列为0,+1方,-1方,+2方,….还有再散列法,即对同义词根据再散列函数计算散列地址。拉链法,将所有同义词存储再一个链表中,该链表由其散列地址唯一标识,适用于经常插入删除的情况。
注:哈希查找的效率取决于哈希函数,处理冲突的方法和装填因子。
21.TCP与UDP的区别:
TCP面向连接,可靠,传输的数据量大,但是传输速率低。UDP不面向连接,不可靠,传输数据少,速率快。如何选择二者?看对传输的数据实时性要求高还是对传输质量要求高。
22.三次握手(客户端向服务端发出请求)
TCP的建立阶段,客户端向服务端发送syn为1的包,指明客户端想要建立连接;服务端收到客户端的包后,向客户端返回一个ACK,将SYN和ACK都置为1,并为连接分配资源;客户端收到服务端的确认后,再向服务端ACK,将syn置0,ack置1。这样连接就建立了。
23.四次挥手(两者均能发出请求)
TCP的释放阶段,假设客户端向服务端发出释放连接的请求,向服务端发送一个FIN报文,客户端进入fin-wait阶段,半关闭状态,不能再发数据了,等待服务端的FIN报文;服务端收到后,知道客户端没有数据要发送了,服务端先向客户端返回一个ACK,进入close-wait阶段,告知客户端已知到要关闭连接,此时服务端可能还有未发送完的数据;当服务端也发送完数据,会向客户端发送FIN报文;客户端在收到FIN后,会向服务端返回ACK,随后进入time-wait阶段,若在2MSL(报文最大生存时间)服务端没收到ACK,则会重发FIN;当服务端收到ACK后,知道可以关闭连接,服务端正常关闭,客户端也关闭,TCP连接就断了。
注:等2msl是为了是ACK能到达服务端
24.为啥3次握手,2次不行吗?
防止已经失效的请求连接报文发送到了服务器,因而产生错误。客户端发送的请求连接报文没有丢失,而是在某个网络节点中滞留了,直到TCP连接释放后才到达服务端,服务端认为这是客户端在请求连接,服务端返回ACK,同意建立连接,。若不采用3次握手,只要服务端返回了ACK,连接就建立了。但是此时客户端并没有向服务端发出连接请求,不会与服务端通信,白白浪费了资源。若采用3次握手,客户端不会向服务端返回ACK,这样连接建立不起来,不会浪费资源。
25.为啥挥手4次?
当服务端收到FIN报文时,很可能还有没发送完的数据,故只能向返回一个ACK,待所有数据发送完毕,才会向客户端发送FIN,即ACK和FIN不能同时发送,所以需要4次挥手。
26.事务
将一组数据的读写操作组合在一起形成一个逻辑单元,这些操作要么全部完成,要么全部不完成。可以保证数据的一致性和准确性。
27.事务的特点
A:原子性,事务是一个不可分割的整体,要么全做,要么全不做;C:一致性,事务的执行结果使DB从一个一致性状态到另一个一致性状态,一致性状态是指DB中的数据满足完整性约束,还有描述的状态与现实世界一致;I:隔离性,事务之间可以并发操作,且不会相互影响;D:持久性,事务的执行结果对DB的更新使持久的。
28.怎样判断图中有环
DFS,有向图和无向图都能用,思想就是如果一条深度遍历路线上某个点出现了多次,那么肯定有环;拓扑排序,有向图,思想是重复找入度为0的点,存入队列,将点和相邻的边删除,若所有顶点的入度均为0,则为无环图,若找不到入度为0的点,则为有环图。
29.I/O交换信息的方式
程序查询方式,主机与I/O串行,在启动I/O外设后,CPU一直查询I/O的状态,直到I/O准备就绪,CPU再去控制数据的输入输出,效率是很低的;程序中断方式,I/O与CPU并行,是对CPU在启动I/O外设一直到就绪这一阶段原地踏步做的改进,方法是启动I/O外设,CPU仍可执行现行程序,到就绪时,外设发出中断请求,只需CPU响应中断请求,执行中断服务程序,控制数据的I/O即可;DMA方式,I/O与CPU并行,是对CPU响应I/O中断后去控制数据的I/O做的改进,DMA方式中,CPU不会控制数据I/O,交由DMA处理,即在外设和主存之间有一条数据通路,所以成为直接存取访问;通道方式,通道是一种处理器,CPU将部分权力下放给它,控制数据I/O;I/O处理机方式,是通道的进一步发展,这两种方式都是以增加硬件代价来提升I/O效率。
30.中断流程
中断请求,CPU收到请求,考虑是否立刻响应(多个中断源中断判优),中断响应,保存断点(中断隐指令,硬件实现,保存断点,找到中断服务程序入口地址,关中断),执行中断服务程序,断点恢复,返回断点。
31.中断的分类
可分为内中断和外中断,内中断是指中断源在CPU内部或者有指令引起,如指令中断,缺页,整数除0等,外中断是指中断源在CPU外部与指令无关,通常说的I/O中断请求就是外中断,还比如用户终止进程。外中断可分为非屏蔽中断和可屏蔽中断,前者是指,在关中断时仍会被响应。
32.,HTTP怎样实现功能的
首先,根据客户端浏览器中的URL分解出所用协议,主机名,端口号,请求的文件,请求的参数等,然后将信息封装成HTTP请求数据包,下面客户端与服务器建立连接(三次握手),客户端发送请求,服务端收到请求并返回响应,客户端收到响应并通过浏览器显示出来,TCP连接关闭(4次挥手)。
33.HTTP和HTTPS的区别
HTTPS时HTTP的安全版,它需要申请证书;HTTP时明文传输的,HTTPS时安全的加密传输协议;HTTP和HTTPS的连接方式不同,用的端口号不同;HTTP简单无状态,HTTPS是SSL+HTTP构建的加密传输协议,比HTTP安全。
34.表和视图的区别
DB中的数据都是存在表中的,表是实际存在的,占用物理内存;视图是DB中数据在某些条件下的结果集,是虚表,不占用内存;对表可进行insert,delete,update操作,表改变,视图也会变,对视图一般进行select操作;如果删除表,视图不起作用,删除视图,表依然存在。
35.为什么用视图
可以聚焦特定的数据,方便用户操作,还可以屏蔽数据库中表的具体结构,保证数据的安全。
36.进程和线程的关系
进程是系统进行资源调度和分配的基本单位,一个进程中包含多个线程,线程是执行的基本单位,线程共享进程的所有资源。线程的切换是在同一虚拟内存中,而进程切换是不同的虚拟内存,所以使用线程的效率高。但是线程一个死掉,整个进程也就死掉了。
37.编译过程
词法分析,语法分析,语义分析及中间代码生成,中间代码优化,代码生成。
38.接口和抽象类的区别
接口是公开的,接口中不含私有变量和方法,类中可以有私有变量和方法;接口一旦被实现,就要重写接口中的所有方法,而继承一个类,可以选择性的重写,在实际应用中,最高级的是接口,然后是抽象类,下面是具体类;通过实现接口可以实现多重继承,而一个子类只能有一个父类。
39.路由器的工作原理
路由器在收到IP数据报后,分解出目标IP地址和子网掩码,计算出目标网络,根据目标网络,查询路由表,按相应出口转发给下一路由,下一路由同样操作,若在转发过程中找不到目标地址,则根据路由器默认路由转发到下一出口或者向源返回无法传送的信息。
40.软件开发需求分析阶段用到DD,DFD,在详细设计阶段用到PAD图,N-S图,程序流程图。
41.JVM
JVM是指java虚拟机,可以在任何平台安装,作用是将.java文件编译生成.class文件,然后JVM解释执行,也就是JVM将字节码文件翻译成本地计算机的机器码,这样便实现了跨平台。一次编译,多次执行。
42.数据链路层的协议
CSMA/CD,载波监听多路访问碰撞检测,是有线网络中运用的,节点在发送信号前,先听信道是否空闲,若空闲,立即发送信号,并在发送过程中监听信道,若听到了冲突,则立刻停止发送,并告知其他节点已经监听到了冲突,自己则随即等待一段时间再重发,若监听到信道忙碌,等待一段时间,再尝试发送;CSMA/CA,无线网络用到,在发送数据前,监听信道是否空闲,若空闲,还需等待一段很短的时间,这段时间仍在监听,若果信道还是空闲,发送数据,接收方在收到发送方的数据后,等待一段时间,向发送方返回ACK确认,若发送方在重传计时器溢出之前未收到确认,则重发,直到收到确认,知道数据已经正确发送给了对方,再等待一段时间,才可以发送下一帧。在发送真实数据之前,先向接收方发送请求报文,等到收到接受方的响应报文,发送方才会开始发送真正的数据,采用这种机制,可以使数据不被碰撞。
注:等待一段时间是为了避免冲突,IEEE802.3对应CSMA/CDIEEE802.11对应CSMA/CA
先听后发,边发边听,冲突停止,延迟重发。
43.范式
第一范式,指DB表中的每一列都是不可分割的原子数据项,一个字段中只能含有一个记录;第二范式,首先应满足第一范式,要求数据库表中的每条记录都能够被唯一标识,指属性完全依赖主关键字;第三范式,首先应满足第二范式,任何非主属性不依赖其他非主属性
注:范式是指数据库中表结构所符合的某种设计模式的级别,可以消除不合适的关系模式,根据数据依赖,解决插入异常,删除异常,更新异常,数据冗余。
44.delete,truncate, drop的区别
Delete语句可以用来删除表中的某一行数据,并将删除操作作为事务记录在事务日志中,以便回滚;truncate不能删除某一行,它可以删除整张表的记录,且不能回滚,所以truncate的执行速度比delete快;drop会删除整张表的记录还有结构,delete和truncate只会删除表中的数据,drop的执行效率最高。当不需要表了,用drop,想清空表中数据,但保留表,用truncate,当需要删除某行,用delete。
45.数据链路层的流量控制
采用滑动窗口机制,发送窗口用来对发送方进行流量控制,它的大小代表在未收到接收方确认的情况下还能发送多少帧;收到确认后,窗口向前滑动。
46.传输层的流量控制
也采用滑动窗口机制,但二者的协议不同。接收方在接收到数据后返回的ACK包中包含自己接受窗口的大小,以控制发送方的窗口大小。
注:二者区别,数据链路层的滑动窗口大小固定不变,传输层的窗口大小不固定。采用滑动窗口机制比停止等待流量控制方式效率高
47.数据在网络中的传输
A向B发送数据,首先将B的IP地址和子网掩码与运算得出B的网络地址,与自己的比对,若相同,则可通过ARP得到目标主机的MAC地址,将B的mac地址作为目标mac地址,直接发送过去,即可完成通信;若A与B不在同一网络中,则同过相同的方法得到网关的mac地址,将B所在网关的mac地址作为目标mac地址,发送过去,到达之后,网关将数据发给下一跳路由,让路由器传送到目标网络,再发送给目标主机,完成通信。
48.DB事务的并发机制
首先并发会带来的后果有脏读(读取其他事务中的数据)、不可重复读(多次读取的数据不一致)、幻读(数据插入、删除带来的问题),为了实现并发,可以给事务设置隔离级别,如read-committed,还有程序使用的锁,如乐观锁,悲观锁,来解决并发带来的问题。
注:乐观锁,假设不会发生并发冲突,旨在提交事务的时候检查数据的完整性;悲观所,假设会发生并发冲突,屏蔽一切可能违反数据完整性的操作。
49.static的特点
Java中,static关键字修饰的变量或者函数不属于类中的任何一个对象,只是被对象共享,可通过类名直接调用,随着类的加载而加载,先于对象而存在。在C++中,在考虑类的情况下,用法和java的相同,不考虑类时,用static修饰的变量初始值为0,在全局变量前加static,该变量对其他源文件隐藏,这样可以避免变量同名冲突,静态局部变量的生存周期比一般的局部变量的生存周期长,为整个源程序。
50.C++的特点
封装、继承、多态,支持面向对象的编程语言。
51.C和C++区别
C语言时面向过程的编程语言,而C++既支持面向过程编程,也支持面向对象编程,它在C语言的基础之上增加了对象这一概念。但是在纯粹意义上,C++并算不上面向对象的编程语言,java才是。
52.纯虚函数
用virtual关键字修饰的成员函数,作用是实现多态性,把实现和接口分离,在基类中不必实现,在子类中实现。
53.java与C++的内存释放机制
在java中内存可分为栈内存和堆内存,其中,栈内存中存放的时代码块中的变量,当超出变量的作用域后,java自动是释放掉了它所占用的内存;堆内存针对用new创建的对象等,java虚拟机启动垃圾回收机制来清理内存。而C++中,需要程序员自己手动释放内存,比如delete和析构函数,否则会造成内存泄漏。
54.C++与java的区别
C++有内存泄漏的问题,得手动回收内存,Java有自动的内存回收机制;C++既支持面向对象编程,也支持面向过程编程,而java之只支持面向对象编程;C++中有指针,java中没有;java可移植性好,可以做到跨平台,而C++只能在window上使用。
55.C++与C字符串的区别
C++中字符串是类,即string,而在C中字符串是个字符数组;并且C++对一些运算符进行了重载。(对运算符重载是为了解决类对象之间运算需求,通常的运算符只能进行算术运算,而一个类的两个对象之间进行运算就得重新定义,让编译器按照我们的要求进行)
56.友元函数
指某些不是类成员却能够访问类的所有成员的函数,可实现类之间数据共享。
57.OS中怎样实现上下文切换
把当前程序用到的所有现场,比如PC,寄存器地址等,全保存至PCB块中,运行新程序,待运行结束后,将PCB块中的数据填到计算机相应的位置,便可以实现上下文切换。
58.冯诺依曼体系模型
冯诺依曼体系模型的核心是存储程序方式,指令以代码的形式存放在内存中,以其在内存中的首地址开始执行指令,按规定的顺序执行其他程序,直到程序结束。
59.TCP的拥塞控制
慢开始与拥塞避免相结合
慢开始是指发送数据时,先发一个拥塞窗口的试探报文,收到来自接收端的ACK后依次发送2个拥塞窗口,4个拥塞窗口,8个拥塞窗口的报文,数据量呈指数增长;拥塞避免是指当拥塞窗口达到一个门限值时,拥塞窗口缓慢增大,即加1,而不是加倍。当网络出现拥塞时,门限值减为出现拥塞时窗口大小的二分之一,此称为乘法减小,然后把拥塞窗口置为1,重新开始慢开始算法。快重传和快恢复,快重传指当发送方收到3个以上的重复ACK,不用等计时器溢出,就重传报文,而快重传走的是拥塞避免算法,故这叫做快恢复。
60.死锁
死锁是指多个并发进程相互持有对方所需要的资源而相互等待,它们都不能继续往下执行。满足四个条件:互斥,资源被分配给一个进程,其他进程不能使用,直到线程结束;请求和保持:一个进程因请求被占有的资源发生阻塞,对自己占有的资源不释放;不可抢占:资源在被进程释放之前,其他进程不能访问;循环等待:发生死锁时,等待的进程会形成一个环路,类似死循环。
61.final
Final所修饰的函数或者变量有最终态的意思,用fianl修饰的类不能被继承,修饰的方法不能被重写,修饰的变量不能被改变,只能赋值一次,成为常量。
62.this和super
This可理解为指向对象本身的一个指针,指对象本身,当形参和实参名相同,可通过this来区分,通过this来调用同一类的构造方法;super,可理解为指向当前对象直接父类的指针,子类和父类方法名同名,可通过super区分,可通过super来调用直接父类的构造函数。
注:this是个指针,super是个关键字。
63.public private protected
Public:公有的,可被任意实体访;,protected:受保护的,可被自身和子类的成员函数访问,但类的对象不能访问;private:私有的,只能被该类中的成员函数访问,该类的对象不可以访问
64.避免死锁
对进程提出的每一个资源申请进行安全性检查,若分配后可能会发生死锁,则不分配,否则可以分配;银行家算法。
65.死锁的预防
破坏不可抢占,当一个进程不能获得它运行所需所用资源便等待,等待期间将所有保持的资源释放供其他进程使用,等待的进程只有获得全部所需资源才能重启运行;破坏请求和保持,在进程开始运行时,将它所需全部资源都分配给它;破坏循环等待,将资源有序分配,按序号申请资源,一个进程只有获得小编号资源才能获得大编号资源。
66.B树和B+树区别:(假设都是m阶)
关键字的数量不同,B树中结点最多m-1个关键字,m个子节点,而B+树种最多m个关键字,且每个关键字对应一个子节点,关键字起到索引的作用;存储的位置不同,B+树的所有数据存在叶子节点上,B树的数据存在每个节点上;分支节点的构造不同,B+树的非叶节点中只存放关键字信息和指向子树的指针,也就是说非叶节点只包含索引信息;查询不同,B树在查找到要找的数值便结束了,而B+树会从根节点走到叶子节点。
注:阶数指一个节点的最大分支数。
67.图的两种存储比较:
邻接矩阵方便判断两个节点是否存在边,对于无向图,一个点的度等于点所在行或列中不为0的元素的个数,对于有向图,一个点的出度是所在行的不为0的元素个数,入度是所在列的不为0的元素的个数,判断边的数量时需要遍历整个矩阵,代价高,更适合边多的图存储,A的n次方[i][j]代表从i到j路径长度为n的数目;邻接表,容易找出它的所有邻边,只需遍历一个链表,而在邻接矩阵中得遍历一行,但要判断两点是否有边,还是矩阵方便,有向图计算点的出度只要看邻接表中有几个节点,但要求入度得遍历整个链表,此时可弄个逆邻接表;邻接矩阵唯一,邻接表不唯一。
68.
状态码 响应类别 原因短语
1XX 信息性状态码(Informational) 服务器正在处理请求
2XX 成功状态码(Success) 请求已正常处理完毕
3XX 重定向状态码(Redirection) 需要进行额外操作以完成请求
4XX 客户端错误状态码(Client Error) 客户端原因导致服务器无法处理请求
5XX 服务器错误状态码(Server Error) 服务器原因导致处理请求出错
69.并发和并行
并发是指多个事件在同一时间段内发生,并行是指多个时间同一时刻发生。
这两个都比顺序执行的效率高。
70.全双工半双工
全双工,在接受数据的时候也能发送数据,二者同步进行,速度快延迟小;半双工,一段时间只能由一个动作发生。
71.HTTP1.0与HTTP2.0比较
HTTP1.X解析是基于文本的,基于文本的格式解析由天然的缺陷,文本有很多种,要做到健壮性必然要考虑很多,而HTTP2.0是用二进制格式解析的,方便实现且健壮。后者还有头部压缩,避免重复传输。
72.java多线程
两种实现方法,继承thread类,实现runnable接口。