http

HTTP 协议有一个缺陷:通信只能由客户端发起 .
http1.1中,Connection默认为Keep-alive参数,用这个来作为长连接。

Keep-alive

Keep-alive的确可以实现长连接,但是这个长连接是有问题的,本质上依然是客户端主动发起-服务端应答的模式,是没法做到服务端主动发送通知给客户端的。也就是说,在一个HTTP连接中,可以发送多个Request,接收多个Response。但是一个request只能有一个response。而且这个response也是被动的,不能主动发起。放上一张图,图左为没开启Keep-alive,图右为开启了Keep-alive,可以看出依然是一问一答的模式,相较左边只是省略了每次的关闭和打开操作。

HTTP 和 HTTPS 的区别?

端口 :HTTP的URL由“http://”起始且默认使用端口80,而HTTPS的URL由“https://”起始且默认使用端口443。
安全性和资源消耗
HTTP协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。
HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS 运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以说,HTTP 安全性没有 HTTPS高,但是 HTTPS 比HTTP耗费更多服务器资源。
对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;
非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSADSA等。

科举

中国科举制度的完善,经历了漫长的过程。萌芽于南北朝时期,兴起于隋唐,鼎盛在明清。唐代的科举每年春天在京师长安举行,简称“省试”。应试者主要由两部分组成:“生徒”和“乡贡”。“生徒”是指官办学校的学生,而“乡贡”则是在家自学或在民间私塾学成,到县、州应试,经地方考试合格,再到京城应试。

因此,“乡贡”一般要在前一年参加地方的“秋闱”,通过后,第二年才能参加京师的“春闱”。乡贡的第一名,被称为“解元”。“春闱”第一名,就是我们熟知的状元。

以科举制度最为成熟和公平的明朝为例,科举分为县试、府试、院试、乡试、会试和殿试

其中县试是由县里举办;
府试是由地方州府举办,县试过关者才能参加;
院试是由省里的提学主持,府试过关者才能参加院试,考中者被授予秀才称号,
县试、府试和院试的第一名都被称为案首。
这三次考试被古代读书人称为小考,属于科举基层考试,一般是每三年举办两次。

乡试

而乡试是由省里举办,拥有秀才资格者方可参与乡试,考中者被称为举人,乡试第一名被称为解元。乡试每三年才举办一次,所有的秀才,无论年龄大小都可参加,所以乡试解元的含金量远超过现在的高考省状元。

查看更多

面试-锁

volatile的作用是什么?(保证内存可见性)
底层怎么实现的?(说了主内存和工作内存,读写内存屏障,happen-before,并在纸上画了线程交互图)

CAS和synchronize有什么区别?都用synchronize不行么?(CAS是乐观锁,不需要阻塞,硬件级别实现的原子性;synchronize会阻塞,JVM级别实现的原子性。使用场景不同,线程冲突严重时CAS会造成CPU压力过大,导致吞吐量下降,synchronize的原理是先自旋然后阻塞,线程冲突严重仍然有较高的吞吐量,因为线程都被阻塞了,不会占用CPU
)

mysql面试相关

(MySQL)使用什么存储引擎,为什么使用InnnoDB?(支持事务、聚簇索引、MVCC)

我们聊聊mysql吧,说下索引结构(说了B+树)
为什么使用B+树?( 说了查询效率高,O(logN),可以充分利用磁盘预读的特性,多叉树,深度小,叶子结点有序且存储数据)

主键索引和普通索引的区别(主键索引的叶子结点存放了整行记录,普通索引的叶子结点存放了主键ID,查询的时候需要做一次回表查询)一定要回表查询么?(不一定,当查询的字段刚好是索引的字段或者索引的一部分,就可以不用回表,这也是索引覆盖的原理)

主从复制的过程
①当Master节点进行insert、update、delete操作时,会按顺序写入到binlog中。
②salve从库连接master主库,Master有多少个slave就会创建多少个binlog dump线程。
③当Master节点的binlog发生变化时,binlog dump 线程会通知所有的salve节点,并将相应的binlog内容推送给slave节点。
④I/O线程接收到 binlog 内容后,将内容写入到本地的 relay-log。
⑤SQL线程读取I/O线程写入的relay-log,并且根据 relay-log 的内容对从数据库做对应的操作。

InnoDB与MyISAM引擎区别

nnoDB存储引擎
InnoDB存储引擎支持事务,其设计目标主要面向在线事务处理(OLTP)的应用。
其特点是行锁设计,支持外键,并支持非锁定锁,即默认读取操作不会产生锁。从Mysql5.5.8版本开始,InnoDB存储引擎是默认的存储引擎。

查看更多

集合

Java中的HashMap、TreeMap解释下?(TreeMap红黑树,有序,HashMap无序,数组+链表)
TreeMap查询写入的时间复杂度多少?(O(logN))
HashMap多线程有什么问题?(线程安全,死锁)怎么解决?( jdk1.8用了synchronize + CAS,扩容的时候通过CAS检查是否有修改,是则重试)重试会有什么问题么?(CAS(Compare And Swap)是比较和交换,不会导致线程阻塞,但是因为重试是通过自旋实现的,所以仍然会占用CPU时间,还有ABA的问题)怎么解决?(超时,限定自旋的次数,ABA可以通过原理变量

list 各操作时间复杂度

集合时间复杂度


总结:
1.ArrayList是线性表(动态数组),LinkedList是链表
2.get,set方法,方法参数有指定位置数值的,ArrayList要优于LinkedList,因为,ArrayList有下标,LinkedList要移动指针。
3.新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList需要移动数据

部署方式

金丝雀部署

先部署单台服务器,金丝雀测试(国内常称灰度测试)通过,则全部部署
简单的金丝雀测试一般通过手工测试验证,复杂的金丝雀测试需要比较完善的监控基础设施配合,通过监控指标反馈,观察金丝雀的健康状况,作为后续发布或回退的依据

优势 : 用户体验影响小,体验较平滑

查看更多

常用dos命令

关闭端口占用进程

1
2
3
4
5
#查询占用pid
netstat -ano | findstr 80

#杀死进程
taskkill -PID 233 -F xxx

window控制台走代理

1
2
set http_proxy=http://127.0.0.1:10809
set https_proxy=http://127.0.0.1:10809

查看更多