春招复盘-理想汽车
简答题
HTTP 1.0、2.0、3.0区别与改进?
HTTP 1.0
-
无状态,无连接; 短连接:每次发送请求都要重新建立tcp请求,即三次握手,非常浪费性能;
-
无host头域,也就是http请求头里的host;
-
不允许断点续传,而且不能只传输对象的一部分,要求传输整个对象;
-
队头阻塞。
HTTP 2.0
- 二进制分帧;
- 多路复用(或连接共享),使用多个stream,每个stream又分帧传输,使得一个tcp连接能够处理多个http请求;
- 头部压缩,双方各自维护一个header的索引表,使得不需要直接发送值,通过发送key缩减头部大小;
- 服务器推送(Sever push)。
HTTP 3.0
- 基于google的QUIC协议,quic协议使用udp实现,加密后建立链接,此外加密适用所有流过链接的数据,极大提高安全性。
- 减少了tcp三次握手时间,以及tls握手时间;
- 解决了http 2.0中前一个stream丢包导致后一个stream被阻塞的问题;
- 优化了重传策略,重传包和原包的编号不同,降低后续重传计算的消耗;
- 连接迁移,不再用tcp四元组确定一个连接,而是用一个64位随机数来确定这个连接; 更合适的流量控制。
转载自http://events.jianshu.io/p/cd70b8e90d00
第二题忘了
选择题
能够PING通同网段的节点, 但却PING不通其他网段的所有节点的最可能的原因是
A: 本机网关设置错误
B: 本机没有正确设置DNS
C: 对方运行的是不同的操作系统
D: 二层交换机故障
正确选项: A
解析:
A:ping是TCP/IP协议族的一部分,其属于网络层协议。主要是用来检测网络是否通畅。如果要ping其他网段,则需要设置网关。
B:和DNS没有关系, DNS设置错会影响访问公网服务器的域名, 而不会影响内部子设备是否ping通
C:ping命令是跨操作系统的, windows主机能够ping通Linux主机
D:二层交换机如果出现故障那么同网段主机则不会ping通
哪种排序算法最坏情况下是最快的?()
A :冒泡排序
B:希尔排序
C:归并排序
D:快速排序
首先排除怎么都是O(n2)的冒泡排序。
对快速排序,它是每次划分出小于key和大于key的2部分,继续往下排序的。对每种特定的key选择策略,我们都可以构造出一个无序序列,使得快速排序每次划分时有一个区间只有一个值,另一个区间右剩下所有值,最坏复杂度是O(n2)
对希尔排序,他的时间复杂度最坏情况取决于所选取的步长序列(参考:https://en.wikipedia.org/wiki/Shellsort),而最好的也是O(nlog2n)/O(n1.5)的
对归并排序,先往下划分到不可再划分,之后往上合并相邻2个有序序列,层数一定是logn层,每层合并完成代价是n,所以在任何情况下时间复杂度为O(nlogn)
因此选C
-
先序序列为abcd的二叉树有几种?
卡特兰数
链接: link. -
哪种排序方式最坏复杂度为(nlogn)
归并排序
快速排序
冒泡排序
插入排序
堆排序
归并排序和堆排序最坏可以达到O(nlogn)快速排序最坏可以达到O(n2)冒泡排序最坏可以达到O(n2)插入排序最坏可以达到O(n^2)
算法题
最大食物链计数(go)
拓扑排序变种,用邻接表。
// go
package main
import "fmt"
var (
s [5010][5010]int
x [5010]int //出度
y [5010]int //入度
rout [5010]int //路径数
length int
)
func main() {
length = 0
var n, m int
_